2014-07-17 259 views
0

後來,我用php寫了一個網站,現在在我的網絡服務器上設置它。回來的時候我寫了,一切都很好,但現在,它正在產生這些錯誤:PHP通過引用傳遞?

Strict Standards: Only variables should be passed by reference in /home/dragonto/public_html/source/navbar.php on line 4 
class="current">Home Strict Standards: Only variables should be passed by reference in /home/dragonto/public_html/source/navbar.php on line 4 
>About Strict Standards: Only variables should be passed by reference in /home/dragonto/public_html/source/navbar.php on line 4 
>Contact Us Strict Standards: Only variables should be passed by reference in /home/dragonto/public_html/source/navbar.php on line 4 
>Projects Strict Standards: Only variables should be passed by reference in /home/dragonto/public_html/source/navbar.php on line 4 
>Tutorials 

我不知道這些是什麼意思。我研究了在PHP中通過ref傳遞,並且它看起來並不違反我的規定。這是有問題的腳本:

<?php 
    function GetScriptName() 
    { 
     return end(explode("/", $_SERVER['SCRIPT_FILENAME'])); 
    } 

    $Links = array(
       1 => array(1 => "Home",  2 =>  "index.php"), 
       2 => array(1 => "About",  2 =>  "about.php"), 
       3 => array(1 => "Contact Us", 2 => "contact.php"), 
       4 => array(1 => "Projects", 2 => "projects.php"), 
       5 => array(1 => "Tutorials", 2 => "tutorials.php") 
      ); 

    echo "<nav>\n<ul>\n"; 

    foreach($Links as &$Link) 
    { 
     echo "<li"; 

     if($Link[2] == GetScriptName()) 
      echo " class=\"current\""; 

     echo "><a href=\"" . $Link[2] . "\">" . $Link[1] . "</a></li>\n"; 
    } 

    echo "</ul>\n</nav>\n"; 
?> 
+0

'返回端(爆炸(...))'被passsing創建到end()函數作爲參考的是爆炸陣列()。 –

+0

好的...爲什麼不起作用? – DTSCode

+0

它的工作原理,但在較新的PHP版本,你會得到警告,因爲你不應該這樣做。 –

回答

7

問題是與調用end,引用其接受其參數。但是在這個片段中,實際的參數不是一個變量,所以它不能被引用傳遞。嚴格的標準警告對此抱怨。

這個警告是非常溫和的,雖然在任何情況下你都不應該有產生代碼產生警告,但實際上你可以忽略它(代碼仍然按預期工作)。

但它也是非常非常容易關起來,通過手動引入變量:

$arr = explode("/", $_SERVER['SCRIPT_FILENAME']); 
return end($arr); 

在這種特殊情況下,可以更好地使用其他的東西比end來解決問題 - 這也更準確語義諸如

return basename($_SERVER['SCRIPT_FILENAME']);