为什么PHP中的引用函数调用已弃用?

时间:2013-08-04 19:38:54

标签: php pass-by-reference

我写了以下代码:

<?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中,这已被弃用?

3 个答案:

答案 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);