ホームページ > バックエンド開発 > PHPチュートリアル > 关于call_user_func_array 跟 引用 的一段代码 不懂求解释

关于call_user_func_array 跟 引用 的一段代码 不懂求解释

WBOY
リリース: 2016-06-13 11:17:31
オリジナル
949 人が閲覧しました

关于call_user_func_array 和 引用 的一段代码 不懂求解释

class PbObject{<br />	<br />	var $params;<br />	var $fontFace = 'incite.ttf';<br /><br />	function Object() {<br />		$args = func_get_args();<br />		if (method_exists($this, '__destruct')) {<br />			register_shutdown_function (array(&$this, '__destruct'));<br />		}<br />		call_user_func_array(array(&$this, '__construct'), $args);<br />	}<br />	<br />	function __construct(){}	<br />	<br />	function toString() {<br />		$class = get_class($this);<br />		return $class;<br />	}<br />}
ログイン後にコピー



请问这段代码中的  call_user_func_array(array(&$this, '__construct'), $args);  为什么$this前面加引用符&?  这样的代码我一直没有搞懂过。  不加&不也是一样能调用本身的 __construct 方法?  加了有什么作用? 

引用符?类对象 引用符 对象
------解决方案--------------------
当 call_user_func_array 调用的函数是类的方法时,需要用数组同时传递 类(对象)和 方法名
你的 $this 就是对象了
在 php4 中,对象默认以值传递,如果没有引用声明(&),那么实际上是在另一个对象上执行的,如果方法中修改了类属性,那么这一修改将不能作用到调用者本身
在 php5 中,对象都是以引用传递,所以就没有必要冠以 & 了

你的代码中用 var 声明类属性,这显然是 php4 风格的
php4 的类没有析构函数,所以代码用 register_shutdown_function 注册了一个
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート