call_user_func 反射 new区别
来源:互联网 发布:linux node.js 安装xz 编辑:程序博客网 时间:2024/05/01 23:14
使用call_user_func函数,通过传入字符串函数,可以调用自定义函数,并且支持引用。
1.mixed call_user_func ( callable
调用第一个参数提供的自定义函数,后面的参数为自定义函数的参数,返回自定义函数的结果
function say($word)
{
echo $word;
}
call_user_func(‘say’, ‘hello world’); //hello world
使用call_user_func可以执行一个类的某个方法,而且可以给方法传参数,它跟实例化一个类再调用方法有什么区别呢?看下面的例子。
class A
{
public function __Construct($a,$b,$c)
{
echo ‘Construct’.
}
public function test($a,$b,$c){ echo ' test'.$a.$b.$c;}
}
$a = new A(1,2,3);
$a->test(1,2,3);
call_user_func([‘A’,’test’],1,2,3);
类A有一个构造方法,如果用实例化的方式new A,会执行构造函数,而使用call_user_func的方式调用test方法,并没有出发构造函数,虽然都可以执行到方法,这就是两者的区别。
那么在有的情况下,并不能直接实例化一个类,希望通过其他方式去得到一个类,而且能够执行类的构造方法怎么办?
此时可以使用类的反射类和newInstanceArgs来创建一个新的类的实例,代码如下:
$reflection = new ReflectionClass(‘A’);
$newclass = $reflection->newInstanceArgs([1,2,3]);
$newclass->test(1,2,3);
它的效果等同于:
$a = new A(1,2,3);
$a->test(1,2,3);
具体可以参见
首先定义一个类A,用ReflectionClass得到A的反射类对象,通过ReflectionClass对象可以得到类的各种属性,包括命名空间,父类,类名等,使用newInstanceArgs可以传入构造函数的参数创建一个新的类的实例。
class A
{
public $name;
public function __Construct($name,$des){ $this->name = $name.','.$des;}public function aa(){ echo $this->name;}
}
$class = new ReflectionClass(‘A’);
$aaa = $class->newInstanceArgs([‘www.111cn.net’,’blog’]);
$aaa->aa();
输出结果:www.111cn.net,blog
以上示例中的$aaa即是通过newInstanceArgs创建的一个新的A类的实例,因此它可以调用A类的方法aa(),值得注意的是newInstanceArgs创建新类必须传参,也就是要求这个类要有构造方法。
- call_user_func 反射 new区别
- call_user_func_array与call_user_func区别
- call_user_func()
- call_user_func
- call_user_func
- call_user_func
- call_user_func
- call_user_func
- call_user_func
- call_user_func
- call_user_func()
- java 反射和new的区别!
- new和java反射的区别
- java中new和反射的区别
- java 反射和new的区别
- php call_user_func(),call_user_func_array()使用和区别
- 反射机制知识点(new和newInstance之区别)
- call_user_func 使用方法
- 笔记
- IOS的国际化(一)APP名称和启动页
- 【注解】@Autowired 与 @Resource 的区别
- 161222随记
- 运输层
- call_user_func 反射 new区别
- 算法 图的M着色问题
- java高级-枚举类型
- spring4+hibernate4+jotm 分布式事务
- iOS UITextField的使用详解
- 2016.12.22:for SQL初学
- 内存碎片产生的原因
- C++ 日志
- Sensor系列四 Framework层分析_Service端