2016-07-24 61 views
0

你好我正在使用一箇舊的腳本,並且當我試圖訪問運行該腳本的站點時遇到這個錯誤。PHP致命錯誤:呼叫時傳遞引用已被刪除

Fatal error: Call-time pass-by-reference has been removed in /home/image/public_html/*****/admin/inc/html.inc.php on line 86 

下面是從線83 PHP代碼下降到89我運行PHP版本5.5.20

if ($flag) { 
    $out = ''; 
    $find = '{CONSTVAR:$'; 
    html_replacevar(&$html, $find, $page); 
    if (strpos($html, '{') === FALSE) { 
     $out = $html; 
    } 

能否任何人都知道PHP告訴什麼可能是有問題的IM,以及如何要解決這個問題?我是新來的PHP和編碼,所以這就是爲什麼我需要幫助。非常感謝你。

+0

更改html_replacevar(&$ html,$ find,$ page);到html_replacevar($ html,$ find,$ page); –

+0

@PrafullaKumarSahu看到[這個答案](http://stackoverflow.com/a/38551028/315024)的評論 – Walf

+0

去接受一個答案? – Walf

回答

1

問題是你通過引用傳遞變量。正如錯誤所述。嘗試修改功能html_replacevar以這樣一種方式,它會返回修改後的HTML和使用它像這樣:

$html = html_replacevar($html, $find, $page); 
0

PHP不再允許通過按引用的函數調用,但是它允許這個函數定義。

嘗試

html_replacevar($html, $find, $page); 
+0

他們的函數似乎沒有返回值,所以你的解決方案可能會擺脫錯誤,但也可以抑制'$ html'的預期效果。 – Walf

1

這是爲了瞭解引用替換

html_replacevar(&$html, $find, $page); 

。作爲參考的函數參數傳遞實際變量,因此函數內部的修改將保留在函數之外。默認情況下,傳遞給函數的變量是副本,因此在函數內部更改它並不會影響函數。此規則的例外是參數是對象,因此對它們的更改(不是重新分配變量)始終保持不變。

參考變量前面有一個&。你以前可以選擇是否使用在呼叫時間參考,你可以做以下任一:

$foo = bar($baz); 
$foo = bar(&$baz); 

只有第二個將意味着bar()可以返回一個值更改原來的$baz。現在,爲了使語言更清晰,更高效,只能設置該參數是在函數/方法的簽名引用,如:

function bar(&$qux) { 
    … 
} 

現在大家都知道,功能打算修改其第一個參數,你永遠不將&添加到調用中的引用參數。