11

我写了以下代码:

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

4

3 回答 3

11

这些都记录在 PHP Passing by Reference手册页上。具体来说(补充强调我的):

注意:函数调用上没有参考符号 - 仅在函数定义上。仅函数定义就足以通过引用正确传递参数。从 PHP 5.3.0 开始,当您在 foo(&$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 系列已经很长了,所以如果可能的话,最好更新到更新的版本(在进行必要的测试之后)。

于 2013-08-04T19:43:11.200 回答
0

删除&您喜欢的符号:&$n1, &$n2, ...

于 2013-08-04T19:43:01.923 回答
0

用这个....

fix_names(&$a1, &$a2, &$a3);

于 2014-02-15T04:58:38.647 回答