【问题标题】:PHP pass array by referencePHP 通过引用传递数组
【发布时间】:2011-05-24 06:41:15
【问题描述】:
  1. 在 PHP 中使用array_splice 的正确方法是什么?函数头清楚地写着:

    array_splice ( array &$input , int $offset... 所以它应该接受引用作为第一个参数。

    但是,一行

    array_push(&$this->contextsIds, $contextId);

    触发错误已弃用:调用时传递引用已在 ... 第 132 行中弃用

  2. 如何返回对数组的引用?我有:

    public function &getContextsIds() {
        return is_array($this->contextsIds) ? $this->contextsIds : array();    
    }
    

    但它说注意:只有变量引用应该通过引用返回

【问题讨论】:

    标签: php arrays reference


    【解决方案1】:
    1. 该函数已被声明为引用(array &$input);调用该函数时,您不再需要&。就这样称呼它:

      array_push($this->contextsIds, $contextId);
      
    2. 正如消息所说,您应该只通过引用返回实际变量,而不仅仅是值。在您的示例中,有两个这样的实例:? : 运算符评估为一个值,并且 array() 本身只是一个未绑定到任何变量的值。您可能应该只返回您的班级成员,无论它是否为空:

      return $this->contextIds;
      

    【讨论】:

    • 谢谢!你能帮我完成我添加的第二个吗?
    • "不管是否为空" 他在测试is_array()
    • @BoltClock:我注意到了,但我猜他可能会测试它是否为空。我会等待 OP 的回复。
    【解决方案2】:

    为什么要返回对数组的引用,尤其是在您提供的代码中:

    public function &getContextsIds() {
        return is_array($this->contextsIds) ? $this->contextsIds : array();    
    }
    

    当该函数起作用时,它可以返回对空数组的引用,我可以对它做任何我想做的事情并尽可能多地更改它,但它不会有任何效果,因为它只是一个空数组,根本没有任何进一步的参考。

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 2012-05-16
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      相关资源
      最近更新 更多