• 首先定义一个类

<?php
Interface trainning
{
public function exec();
}
class mma implements trainning
{
public function exec()
{
return "我是徐晓冬~练MMA找我就对了,北京著名的疯子教练就是我!";
}
}
class muay_thai implements trainning
{
public function exec()
{
return "雅木萨,练泰拳找我就对了,走吧普及岛海滩走一道";
}
}
class sd implements trainning
{
public function exec()
{
return "卧操~还找他妈的隋炀帝吗?要不到樊荣那里去看看";
}
} class mycoach
{
protected $name;
protected $age;
protected $expertise=array();
public function __construct($name,$age,trainning $martial)
{
$this->name=$name;
$this->age=$age;
$this->type = $martial;
}
public function setskill(Array $skill)
{
$this->skill = $skill;
var_dump($this->skill);
return (Array) $this->skill;
}
public function curriculum()
{
echo $this->type->exec();
}
}
$coach = new ReflectionClass('mycoach');
if ($coach->isInstantiable())
{
echo "可以实例化".PHP_EOL;
}
$myinit = $coach->getConstructor();

  • 通过反射获取类的构造函数的入参(或者说依赖)
$dependencies=$myinit->getParameters();
var_dump($dependencies);
foreach($dependencies as $dp)
{
if (is_null($dp->getclass()))
{
echo "只是个普通参数".PHP_EOL;
}
else{
echo "类的名字".$dp->getClass()->name.PHP_EOL;
}
}
 

输出结果:

array(3) {
  [0]=>
  object(ReflectionParameter)#3 (1) {
    ["name"]=>
    string(4) "name"
  }
  [1]=>
  object(ReflectionParameter)#4 (1) {
    ["name"]=>
    string(3) "age"
  }
  [2]=>
  object(ReflectionParameter)#5 (1) {
    ["name"]=>
    string(7) "martial"
  }
} array(3) {
  [0]=>
  object(ReflectionParameter)#3 (1) {
    ["name"]=>
    string(4) "name"
  }
  [1]=>
  object(ReflectionParameter)#4 (1) {
    ["name"]=>
    string(3) "age"
  }
  [2]=>
  object(ReflectionParameter)#5 (1) {
    ["name"]=>
    string(7) "martial"
  }
}
只是个普通参数
只是个普通参数
类的名字trainning
  • getName getFileName
var_dump("获取列的名字: ".$coach->getName());
var_dump("获取类文件的路径: ".$myinit->getFileName());

输出结果:

string() "获取列的名字: mycoach"
string() "获取类文件的路径: /home/cpc/PhpstormProjects/untitled/duwa.php"

PHP---反射--继续剖析的更多相关文章

  1. Java反射机制剖析(四)-深度剖析动态代理原理及总结

    动态代理类原理(示例代码参见java反射机制剖析(三)) a)  理解上面的动态代理示例流程 a)  理解上面的动态代理示例流程 b)  代理接口实现类源代码剖析 咱们一起来剖析一下代理实现类($Pr ...

  2. Java反射机制剖析(三)-简单谈谈动态代理

    通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1.     代理模式 代理模式就是为其他对象提供一种代理来 ...

  3. Java反射机制剖析(二)-功能以及举例

    从<java反射机制剖析(一)>的API我们看到了许多接口和类,我们能够通过这些接口做些什么呢? 从上篇API中我们能看到它能够完成下面的这些功能: 1)     获得类 A.     运 ...

  4. Java反射机制剖析(一)-定义和API

    1.     什么是Java反射机制 Java的反射机制是在程序运行时,能够完全知道任何一个类,及其它的属性和方法,并且能够任意调用一个对象的属性和方法.这种运行时的动态获取就是Java的反射机制.其 ...

  5. 【54】Java反射机制剖析

    java反射机制: 1.指的是可以于运行时加载,探知和使用编译期间完全未知的类. 2.程序在运行状态中, 可以动态加载一个只有名称的类, 对于任意一个已经加载的类,都能够知道这个类的所有属性和方法; ...

  6. java反射机制剖析(二)— Class Loader

    上一篇博客简要的提了一下java反射机制中涉及到的一些相关知识,那么ClassLoader就是当中之中的一个.本篇博客就具体的对ClassLoader做一个相对深入的了解. 作为了解须要知道的是.事实 ...

  7. 深入浅出学习Spring框架(三):AOP 详解

    AOP的英文解释——AOPAspect Oriented Programming面向切面编程.主要目的是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 在反 ...

  8. 五、Java基础加强

    Java基础加强 1.MyEclipse的使用工作空间(workspace).工程(project)在eclipse下Java程序的编写和运行,及java运行环境的配置.快捷键的配置,常用快捷键:内容 ...

  9. 【Struts2】剖析Struts2中的反射技术 ValueStack(值栈)

    1,Struts2框架主要组件的处理流程 在说ValueStack之前,笔者先说一说Struts2中常用的组件,struts2中常用组件有strutsPrepareAndExecuteExceptio ...

  10. Java反射机制深度剖析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制.我们知道Java是一门静态 ...

随机推荐

  1. 处理人际关系的5大原则zz

    人际关系题是结构化面试当中重要的题型之一,人们常用两个“70%”来形容人际关系的重要性: 人际关系题主要考察考生不同人际关系间的适应性.人际合作的主动性.处理人际关系的原则性和灵活性以及对组织中权属关 ...

  2. Servlet 响应及请求信息

    // 文件路径 D:\ApacheServer\web_java\HelloWorld\src\com\test\TestServletRequestrResponse.java package co ...

  3. JVM —— 类文件结构(下)

    简介 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的操作码(opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(operand)所构成 虚拟机中许多指令并不包含操作数.只有 ...

  4. 自定义 Win10 系统鼠标右键发送到的选项

    系统默认的右键「发送到」菜单只有几个特定的项目,如果要想发送到其他目标,可通过在资源管理器地址栏中访问 C:\Users\用户名\AppData\Roaming\Microsoft\Windows\S ...

  5. Ubuntu将自带的python3升级

    一.这里演示的是将python3.5升级到python3.6 1.添加安装源,在命令行输入如下命令: sudo add-apt-repository ppa:jonathonf/python-3.6 ...

  6. Django 1.8.2 admin 数据库操作按下保存按钮出错

    Django报错:Runtimeerror: generator raised StopIteration python版本太新不兼容照成,下载python3.6就行了

  7. pandas之分组计算笔记

    分组计算三部曲:拆分-->应用-->合并 分组:就是按照行或列把相同索引的部分分到一起 分组的关键词为groupby,分组后我们就可以对每组数据进行同一操作,返回的是每组数据分别计算后的结 ...

  8. c++学习(三)------static数据与成员函数

    疑惑: static类型成员是类的全局变量,所有类的实例都享有这个变量,或者说这个变量不属于任何一个类的实例. static类型变量可以为private,或public或其他(static数据可以被继 ...

  9. Java 中的锁原理、锁优化、CAS、AQS 详解!

    来源:jianshu.com/p/e674ee68fd3f 1.为什么要用锁? 锁-是为了解决并发操作引起的脏读.数据不一致的问题. 2.锁实现的基本原理 2.1.volatile Java编程语言允 ...

  10. (一)JMS简介

    一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进 ...