【发布时间】: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