【问题标题】:Returning from a function by reference (PHP5)通过引用从函数返回 (PHP5)
【发布时间】:2015-05-31 02:23:01
【问题描述】:

为什么这个程序没有按预期工作?我读了一本 PHP5 的书,它写道,下面的程序应该导致25;我得到15

function numberPlus($number){
    $number += 5;
    return $number;
}

$oldNumber = 10;
$returnNumber = &numberPlus($oldNumber);
$oldNumber += 10;
echo $returnNumber;

【问题讨论】:

  • 改进的格式 + 适当的可见性标签

标签: php pass-by-reference


【解决方案1】:

PHP 中的函数可以通过在其名称中添加& 来返回引用:

function &function_name($params)
{
    ...
}

您还必须使用& 调用此函数:

$var = &function_name(...);

但是,请注意引用必须在函数结束后有效,否则它将不起作用。如果函数返回对其局部变量之一的引用,则该变量将在函数终止时销毁,$var 将变为null

为了工作,此函数必须返回全局变量、同一对象的属性(如果它们是类的方法)或同时也是引用的参数。

在您的情况下,您必须执行以下操作:

function &numberPlus(&$number) // param is reference
{
    $number += 5;
    return $number;
}

$a = 10; // 10
$b = &numberPlus($a); // $a == $b == 15
$b += 10; // $a == $b == 25

【讨论】:

  • 是的,我想得到这个结果。非常感谢! :)
【解决方案2】:

'因为您正在打印该函数返回的数字。这可能是你想要的:

function numberPlus(&$number){
    $number += 5;
}

$oldNumber = 10;
numberPlus($oldNumber);
$oldNumber += 10;
echo $oldNumber; // 25

【讨论】:

  • 嗯,不完全是。您的模式有效,因为您正在引用一个变量,但我想引用一个函数。所以我想调用这个函数,然后我改变变量的值(没有&$number)。全都一样。我想这本书太旧了(2005 年)。不过,感谢您的帮助! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多