【问题标题】:Manipulate parameter in php在php中操作参数
【发布时间】:2013-04-07 02:26:44
【问题描述】:

我对 PHP 相对缺乏经验,我正在尝试对现有代码库进行一些更改。我有一个将数组作为参数的方法:

public function get_ids(array $order)
{
    ...
    return $ret_val;
}

我想向这个数组添加一个额外的元素,与键 count 配对。我知道那把钥匙不存在。我对 PHP 文档的理解是所有变量都是通过引用传递的:

仅函数定义就足以正确传递参数 引用。从 PHP 5.3.0 开始,您将收到一条警告说 当您使用 & in 时,不推荐使用“call-time pass-by-reference” 富(&$a);。从 PHP 5.4.0 开始,调用时传递引用是 已删除,因此使用它会引发致命错误。

但是,当我这样做时:

public function get_ids(array $order)
{
    ...
    $order['count'] = 5;
    return $ret_val;
}

然后在调用此方法的方法中执行var_dump,没有“count”键。但是,如果我在get_ids 方法返回之前执行var_dumpright,那么显然是一个count 的键。

怎么了?我显然不了解 PHP 的原理,但我通常的谷歌搜索技能完全让我失望。

【问题讨论】:

  • 那句话是你调用函数的时候,而不是你定义函数的时候。如果这是预期的行为,您仍然应该将函数定义为通过引用接受其参数。
  • @nickb OHHHHHH。是的。现在完全理解上下文。我认为他们的意思是“简单地定义函数意味着它将通过引用传递。”显然不是。谢谢!

标签: php arrays pass-by-reference


【解决方案1】:

就像在已弃用功能的描述中所说的那样:

Function definitions alone are enough to correctly pass the argument by reference

因此,请在函数定义中指定您希望通过引用传递参数。

public function get_ids(array &$order)
{
...
}

【讨论】:

    【解决方案2】:

    我的 PHP 文档是所有变量都是 引用传递:

    所有参数如果不带&,则按值传递,如果带&,则按引用传递。

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 2010-11-01
      • 2023-03-31
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      相关资源
      最近更新 更多