2010-09-03 50 views

回答

39

call_user_func可以通過值與調用函數的參數僅傳遞參數,而不是參考。如果你想通過引用傳遞,你需要直接調用函數,或者使用call_user_func_array,它接受引用(但是這可能無法在PHP 5.3及更高版本中使用,具體取決於手冊的哪一部分)。

+0

@Artefacto我最初沒有這樣做,因爲該手冊指出它不是5.3中的情況,但我更新了我的答案。 – 2010-09-03 19:41:23

+0

我會直接調用它,因爲我剛纔有一個腳本在我的服務器上用「call_user_func_array」正常工作的情況,但是對於我的客戶端它會引發錯誤(我使用5.3.x,他也一定是)。所以它似乎有點觸摸和去。 – 2012-04-12 10:00:58

16

從手冊call_user_func()

注意,對於call_user_func()的參數不被引用傳遞。

所以,你有答案。然而,在它周圍有一個方式,通過manual

call_user_func_array('test', array(&$b)); 

再次閱讀應該可以通過引用傳遞它。

+0

但是,根據手冊,該解決方法只能在PHP 5.3之前運行。 – 2010-09-03 15:31:13

+0

是的,這是真的,所以它可能是最好的避免使用該方法,因爲它不會向前兼容。 – 2010-09-03 15:35:16

+1

>注意這對於PHP> 5.3.0不起作用,所以請謹慎使用它。 但是我只是嘗試了PHP 5.3.3,它沒有任何警告/通知。 其似乎call_user_func_array隱藏錯誤。 – noxvile 2010-09-03 15:39:04

4

我剛剛有同樣的問題,改變(對我來說):

$result = call_user_func($this->_eventHandler[$handlerName][$i], $this, $event); 

$result = call_user_func($this->_eventHandler[$handlerName][$i], &$this, &$event); 

似乎工作在PHP 5.3就好了。

它甚至不是一種解決方法,我認爲,它只是做的是告訴:-)

+0

不贊成使用的方法。 – 2018-03-08 09:52:31

4

您需要設置變量等於函數的結果,像這樣......

$b = call_user_func('test', $b); 

和功能應該寫入如下...

function test($a) { 
    ... 
    return $a 
} 

其他通過引用傳遞工作一回合已被棄用。

相關問題