2016-04-09 12 views
1

ではありません。カスタムイベント管理を構築しようとしています。 しかし、何か助けが必要です。私は次のコードを確認してください。PHPオブジェクトがcall_user_func_arrayを呼び出した後に変更されましたが、変数が

class A 
{ 
    public $a = array(); 

    public function setA($value) 
    { 
     $this->a[] = $value; 
    } 
} 

class B 
{ 
    public function hook($arg) 
    { 
     $arg->setA('5'); 
    } 

    public function hook2($arg) 
    { 
     $arg[] = 'my name'; 
    } 
} 
$a = new A(); 

call_user_func_array(array(new B, 'hook'), array($a)); 

var_dump($a->a); 

$name = array(); 
call_user_func_array(array(new B, 'hook2'), array($name)); 


var_dump($name); 

をここに私は私のsceeenに表示されるものです。

array (size=1) 
    0 => string '5' (length=1) 

array (size=0) 
    empty 

あなたが変更されますが、配列$名ではありませんされたオブジェクトを見ることができます。私はcall_user_func_arrayに値を渡しました。

私はそれによって混乱しています。それはどのように動作するのですか?

はそんなに

答えて

0

オブジェクトをありがとうござい常にpassed by referenceある - ない配列、のような他のタイプとは異なり、(ちょっと、それはより多くのオブジェクトの識別子のコピーのようなものです)。パラメータby referenceを渡すには、&を使用します。

public function hook2(&$arg) 
{ 
    $arg[] = 'my name'; 
} 

その後、あなたのanswers.Yesため

call_user_func_array(array(new B, 'hook2'), array(&$name)); 
+0

おかげフェデリコでそれを呼び出す私はリファレンスとして配列を渡す方法を知っています。しかし、私はなぜオブジェクトは常に参照渡しを理解していないのですか? – Thelearning

関連する問題