繁体   English   中英

PHP通过引用传递?

[英]PHP pass by reference?

不久前,我用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";
?>

问题在于对end的调用,该调用将其参数作为参考。 但是在此代码段中,实际参数不是变量,因此无法通过引用传递。 严格的标准警告对此有所抱怨。

此警告是非常良性的,尽管在任何情况下都不应该让生产代码生成警告,但实际上您可以忽略它(代码仍按预期运行)。

但是通过手动引入变量来关闭它也非常容易:

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

在这种特殊情况下,最好使用除end以外的方法来解决该问题-语义上也更准确的方法,例如

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM