PHP---反射--继续剖析
- 首先定义一个类
<?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---反射--继续剖析的更多相关文章
- Java反射机制剖析(四)-深度剖析动态代理原理及总结
动态代理类原理(示例代码参见java反射机制剖析(三)) a) 理解上面的动态代理示例流程 a) 理解上面的动态代理示例流程 b) 代理接口实现类源代码剖析 咱们一起来剖析一下代理实现类($Pr ...
- Java反射机制剖析(三)-简单谈谈动态代理
通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1. 代理模式 代理模式就是为其他对象提供一种代理来 ...
- Java反射机制剖析(二)-功能以及举例
从<java反射机制剖析(一)>的API我们看到了许多接口和类,我们能够通过这些接口做些什么呢? 从上篇API中我们能看到它能够完成下面的这些功能: 1) 获得类 A. 运 ...
- Java反射机制剖析(一)-定义和API
1. 什么是Java反射机制 Java的反射机制是在程序运行时,能够完全知道任何一个类,及其它的属性和方法,并且能够任意调用一个对象的属性和方法.这种运行时的动态获取就是Java的反射机制.其 ...
- 【54】Java反射机制剖析
java反射机制: 1.指的是可以于运行时加载,探知和使用编译期间完全未知的类. 2.程序在运行状态中, 可以动态加载一个只有名称的类, 对于任意一个已经加载的类,都能够知道这个类的所有属性和方法; ...
- java反射机制剖析(二)— Class Loader
上一篇博客简要的提了一下java反射机制中涉及到的一些相关知识,那么ClassLoader就是当中之中的一个.本篇博客就具体的对ClassLoader做一个相对深入的了解. 作为了解须要知道的是.事实 ...
- 深入浅出学习Spring框架(三):AOP 详解
AOP的英文解释——AOPAspect Oriented Programming面向切面编程.主要目的是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. 在反 ...
- 五、Java基础加强
Java基础加强 1.MyEclipse的使用工作空间(workspace).工程(project)在eclipse下Java程序的编写和运行,及java运行环境的配置.快捷键的配置,常用快捷键:内容 ...
- 【Struts2】剖析Struts2中的反射技术 ValueStack(值栈)
1,Struts2框架主要组件的处理流程 在说ValueStack之前,笔者先说一说Struts2中常用的组件,struts2中常用组件有strutsPrepareAndExecuteExceptio ...
- Java反射机制深度剖析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java反射机制是Java语言中一种很重要的机制,可能在工作中用到的机会不多,但是在很多框架中都有用到这种机制.我们知道Java是一门静态 ...
随机推荐
- [知乎]鲲鹏920对比intel8180
作者:韩朴宇链接:https://www.zhihu.com/question/308298687/answer/568737742来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- Java基础---Java方法的重载Overload
对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦. 方法的重载(Overload):多个方法的名称一样,但是参数列表不一样.好处:只需要记住唯一一个方法名称,就可以实 ...
- 2,electron 打包
1,全局安装electron-packager npm install electron-packager -g 2,打包,进入要打包的文件夹 electron-packager . app --pl ...
- Http中的同步请求和异步请求
最近在上springmvc的JSON数据交换的时候,老师下课提了一个课后问题:什么是异步请求?什么是同步请求?我想大部分同学听到这个问题的时候应该和我一样不知所云.现在,给大家分享一篇关于同步请求和异 ...
- JS 长按 移动端
实质上,长按的时间不应该过长,因为这有可能与手机系统的部分长按手势产生冲突,但也不宜过短,因为长按时间过短与点击没有任何区别, 理论上,判断长按结束,在手机端上仅设置mouseup动作就可以, < ...
- Apache Flink 任意jar包上传漏洞
目前受影响版本:version 1.9.1(最新),官方未发布补丁. Apache Flink仪表板- >上传恶意的JAR- >提交新工作- >getshell 生成jar包,用nc ...
- GIL锁、进程池与线程池、同步异步
GIL锁定义 GIL锁:Global Interpreter Lock 全局解释器 本质上是一把互斥锁 官方解释: 在CPython中,这个全局解释器锁,也称为GIL,是一个互斥锁,防止多个线程在同 ...
- nginx加入开机自启动
1.首先,在linux系统的/etc/init.d/目录下创建nginx文件,使用如下命令:(vim /etc/init.d/nginx) 2.在/etc/init.d/nginx中写入以下脚本代码 ...
- 【leetcode】566. Reshape the Matrix
原题 In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a ne ...
- coding++ :MySQL函数——FIND_IN_SET()
语法:FIND_IN_SET(str,strlist) 定义: 1). 假如字符串 str 在由N子链组成的字符串列表 strlist 中,则返回值的范围在1到N之间. 2). 一个字符串列表就是一个 ...