我写了以下代码:
<?php
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
echo $a1." ".$a2." ".$a3. "<br />";
fix_names($a1, $a2, $a3);
echo $a1." ".$a2." ".$a3;
function fix_names(&$n1, &$n2, &$n3)
{
$a1 = ucfirst(strtolower(&$n1));
$a2 = ucfirst(strtolower(&$n2));
$a3 = ucfirst(strtolower(&$n3));
}
?>
我收到此通知:已弃用:已弃用呼叫时传递引用
我需要解释为什么我会收到此通知?为什么在PHP版本5.3.13中,这已被弃用?
答案 0 :(得分:10)
这些都记录在PHP Passing by Reference手册页上。具体来说(加重我的意见):
注意:函数调用上没有引用符号 - 仅在函数上 定义即可。单独的函数定义足以正确传递 参考的论点。从PHP 5.3.0开始,您将收到警告 说&#34;电话时间传递参考&#34;使用&amp;时已弃用 在foo(&amp; $ a);.从PHP 5.4.0开始,调用时传递引用 删除,因此使用它会引发致命错误。
因此,它在PHP 5.3.x中被弃用(并将发出警告),并且在PHP 5.4中将失败。
那就是说,这是一个微不足道的修复。只需更新您的fix_names函数,如下所示:
function fix_names(&$n1, &$n2, &$n3)
{
$a1 = ucfirst(strtolower($n1));
$a2 = ucfirst(strtolower($n2));
$a3 = ucfirst(strtolower($n3));
}
顺便说一下,5.3.x系列的版本已经很长了,所以如果可能的话,更新到更新的版本(在进行必要的测试之后)是明智的。
答案 1 :(得分:0)
从您的喜欢中删除&
符号:&$n1
,&$n2
,...
答案 2 :(得分:0)
使用这个......
fix_names(&amp; $ a1,&amp; $ a2,&amp; $ a3);