Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用call\u user\u func\u数组后PHP对象发生更改,但变量不是_Php_Variables_Reference - Fatal编程技术网

调用call\u user\u func\u数组后PHP对象发生更改,但变量不是

调用call\u user\u func\u数组后PHP对象发生更改,但变量不是,php,variables,reference,Php,Variables,Reference,我正在尝试构建一个自定义事件管理。 然而,我有一些事情需要帮助。请检查我所做的以下代码: class A { public $a = array(); public function setA($value) { $this->a[] = $value; } } class B { public function hook($arg) { $arg->setA('5'); } pub

我正在尝试构建一个自定义事件管理。 然而,我有一些事情需要帮助。请检查我所做的以下代码:

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);
以下是我在屏幕上看到的内容:

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

array (size=0)
  empty
您可以看到对象a已更改,但数组$name未更改。我将值传递给调用_user_func_数组,而不是引用

我对此有点困惑。有人能解释一下它是怎么工作的吗

非常感谢

对象始终是(有点像-它更像是对象标识符的一个副本),而不像其他类型,比如数组,它不是。要传递参数,请使用

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

call_user_func_array(array(new B, 'hook2'), array(&$name));
对象总是(有点像-它更像是对象标识符的副本),不像其他类型,比如数组,它不是。要传递参数,请使用

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

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

谢谢你的回答。是的,我知道如何传递数组作为参考。但我不明白为什么对象总是通过引用传递?谢谢Federico的回答。是的,我知道如何将数组作为引用传递。但我不明白为什么对象总是通过引用传递?