Home  >  Article  >  Backend Development  >  PHP 里面call_user_func和$class->$func()的区别

PHP 里面call_user_func和$class->$func()的区别

WBOY
WBOYOriginal
2016-06-06 20:51:591052browse

RT

一种是

$class->$func()

另外一种是

//Simple callback
call_user_func($func)
//Static class method call
call_user_func(array($class,$func))
//Object method call
$class = new MyClass();
call_user_func(array($class, $func));

这两种有何种区别?如果我想看源码实现应该如何做?回答这道题目的大大求方法!

回复内容:

RT

一种是

$class->$func()

另外一种是

//Simple callback
call_user_func($func)
//Static class method call
call_user_func(array($class,$func))
//Object method call
$class = new MyClass();
call_user_func(array($class, $func));

这两种有何种区别?如果我想看源码实现应该如何做?回答这道题目的大大求方法!

我建议先安装一个查看opcode的扩展,比较一下生成的opcode。这应该是最快的了解代码之间有何不同的方案。很多你想知道的不同都可以用这个方法,比如print和echo有何不同等等。

题外话,就像很多c/c++程序员优化代码时经常要观察编译器生成的汇编代码一样,php的某些书写风格是否会对性能有影响也可以通过查看opcode得到答案。

没多大区别,都是从符号表里头找出对应的函数然后进行调用。

可以参考php源码 php-5.xxxxx/Zend/zend_execute_API.c 中的 call_user_function 这个函数的实现。

不多说什么
$class->$func(),如果$func不存在,是报fatal Error
而call_user_func(array("class","func"))是报Warning
就可以知道在项目中该如何选择应用的场景了

call_user_func()使用的情况不多,call_user_func_array()使用的情况比较多,通常用于函数参数不定时函数的调用

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn