【发布时间】:2014-07-17 20:32:44
【问题描述】:
不久前,我用 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";
?>
【问题讨论】:
-
return end(explode(...))将explode() 创建的数组作为引用传递给end() 函数。 -
好的...为什么不起作用?
-
它有效,但在较新的 php 版本中,您会收到警告,因为您不应该这样做。
-
哦...好的。所以我只是暂时关闭警告并稍后修复它
-
为什么在for循环中使用引用?我认为
&$Link可以是$Link。为什么这会突然变成一个问题,很难说。可能服务器的 PHP 版本不同(引用变量的行为偶尔被修改过),或者配置不同,导致警告显得更冗长。
标签: php pass-by-reference