【问题标题】:PHP Pass by Reference to Function for Same Object in ClassPHP通过引用传递类中相同对象的函数
【发布时间】:2020-10-09 04:25:27
【问题描述】:

我正在尝试修改已创建的对象,方法是将其从类传递到另一个函数。在我下面的场景中,我希望结果为 2,但我得到一个“未捕获的错误”。

------------------------------
Index.php
------------------------------
include "class.php";
include "function.php";

$number = new a();

$number->add(1);
echo $number->display();

$number->add_helper();
echo $number->display();

------------------------------
function.php
------------------------------
function get_help(&$numb) {
    $numb->add(1);
}

------------------------------
class.php
------------------------------

class a {

    protected $var;

    public function add($numb) {
        $this->var .= $numb;
    }

    public function display() {
        return $this->var;
    }

    public function add_helper() {
        get_help($this->var);
    }
}

------------------------------

当我运行 add_helper 函数时,就会发生错误。我期望结果为 2。

提前感谢您的帮助。

【问题讨论】:

  • add_helper() 不是全局命名空间中的函数,它是一个类方法,不能像这样在它自己的方法中调用。它需要在该类的实例上调用。 $a->add_helper();
  • 另外,这永远不会给你2,它会给你11,因为你只是将数字连接为字符串。如果要添加号码,应该是$this->var += $numb:。您还应该设置一个默认值:protected $var = 0;(即使不这样做也可以工作,这是一种很好的做法)。
  • 您的get_help() 期望参数是一个对象(因为您将它用作函数中的对象),但您传递的是var 的值(这是一个字符串)。如果你想做你正在做的事情,那么你应该把它改成:get_help($this);。然后,您还可以从 get_help() 签名中删除 &,因为对象默认作为引用传递。
  • 您还应该发布 full 错误消息,因为它包含有关出错的位置和原因的更多信息。

标签: php pass-by-reference


【解决方案1】:

感谢 Magnus Eriksson 的回复...

当我需要传递对象时,我正在传递字符串。

我的类中的 add_helper 函数实际上应该是:

    get_help($this);

而不是 $this->var.

谢谢马格努斯。

【讨论】:

    猜你喜欢
    • 2012-02-03
    • 2013-07-05
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多