调用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的回答。是的,我知道如何将数组作为引用传递。但我不明白为什么对象总是通过引用传递?