• 首先定义一个类

<?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. 深度图转伪彩色图(python)

    kinect得到的深度图灰不拉几,人眼很难识别出其中的物体,感知深度的变化. 在做展示的时候,我们往往需要可视化,使用OpenCV的预定义的颜色映射来将灰度图像伪彩色化,在OpenCV中使用apply ...

  2. vue-cli webpack打包后加载资源的路径问题

    vue项目,访问打包后的项目,输入路径后,页面加载空白.这时会有两类问题,都是路径问题. 1.一个是css,js,ico等文件加载不到,是目录里少了dist 打开页面时一片空白 解决办法: confi ...

  3. Navicat通过跳板机连接MySQL(2层跳转)

      情景描述,公司开发数据库部署在内网,而且这个开发数据库有连接需要有IP验证,就是只能在内网的某个IP才能连接,所以每次连接都会先连接外网能访问的跳板机,在从跳板机上ssh到内网上的A机器,在从A机 ...

  4. QLineEdit的信号函数

    QLineEdit一共有6个信号函数,并不多,很好理解. ·void cursorPositionChanged( intold, intnew ) 当鼠标移动时发出此信号,old为先前的位置,new ...

  5. ASP.NET Core分布式项目-1.IdentityServer4登录中心

    源码下载 一.添加服务端的api 1.添加NUGet包 IdentityServer4 点击下载,重新生成 2.添加Startup配置 打开Startup文件 public class Startup ...

  6. Redis键的序列化和反序列化

    序列化 命令名称:DUMP 语法:DUMP key 功能:序列化给定key,并返回被序列化的值.序列化的值不包括任何生存时间信息. 返回值:如果key不存在,那么返回nil.否则返回序列化之后的值 反 ...

  7. Mysql高可用集群环境介绍

    MySQL高可用集群环境搭建 01.MySQL高可用环境方案 02.MySQL主从复制原理 03.MySQL主从复制作用 04.在Linux环境上安装MySQL 05.在MySQL集群环境上配置主从复 ...

  8. hdu 6180贪心

    题意:有m个工程,一台机器在同一时间只能运行一个工程,告诉你每个工程的起始时间和结束时间,求出最少要多少个机器以及最小的机器总运行时间(机器开始了就不能停了,直到用完该台机器才停止). 题解:由于这里 ...

  9. poj 2915

    #include <iostream> #include <algorithm> #include <cstdio> #include <cmath> ...

  10. 【爬虫集合】抖音API分析

    1. 分析接口 Charles注册码 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4 抖音API分析 抖音.猫眼网页 ...