2012-09-07 22 views
49

可能重複:
Call-time pass-by-reference has been deprecated通話時傳遞的引用已被刪除

雖然可以在互聯網上的某個地方記錄,我無法找到一個解決我的問題。自PHP 5.4更新以來,傳遞引用已被刪除。

現在我遇到了這部分代碼的問題,我希望有人可以看到我正在嘗試使用它,以便他們可以幫助我解決通過引用問題的解決方案。

下面是有問題的代碼:

public function trigger_hooks($command, &$client, $input) { 
    if(isset($this->hooks[$command])) { 
     foreach($this->hooks[$command] as $func) { 
      PS3socket::debug('Triggering Hook \'' . $func . '\' for \'' . $command . '\''); 
      $continue = call_user_func($func, &$this, &$client, $input); 
      if($continue === FALSE) { 
       break; 
      } 
     } 
    } 
} 

+0

會發生什麼,如果你只是刪除&符號? –

+0

我在125行獲得以下內容;它是'if(socket_select($ read,$ write = NULL,$ except = NULL,$ tv_sec = 5)<1) **嚴格標準:只有變量應該通過引用傳遞** -Nick –

+0

@xNickD:這似乎完全不相關 – newacct

回答

91

只有通話時間傳遞參考被刪除。所以改變:

call_user_func($func, &$this, &$client ... 

要這樣:

call_user_func($func, $this, $client ... 

&$this不應該PHP4反正時間後需要。

如果您確實需要$客戶端按引用傳遞,更新功能($ FUNC)簽名代替(function func(&$client) {

+0

你好,爆炸藥丸 - 奇怪的是,如果我這樣做,我會得到更多的錯誤。 **嚴格的標準:只有變量應通過參考傳遞** 我不知道該怎麼辦。這讓我很困惑。 :\ –

+0

嗨,感謝您的帖子,我不是一個PHP的人,但工作的WordPress主題顯示錯誤,我修復使用你的技術。什麼是'&$ this'我知道$ this,但是'&this這個後面會發生什麼' – Nofel

+0

除非您使用的是可疑的PHP 4,否則不需要'&$ this'。即使你使用的是PHP 5,你也不需要它。這只是一種確保對象自引用'$ this'通過引用傳遞的舊方法,但由於它已經是對象引用,所以不需要它。 –