如果我有以下PHP类示例设置...
class foo {
public $x = 2;
public function getX() {
return $this->x;
}
public function setX($val) {
$this->x = $val - $this->x;
return $this;
}
}
$X = (new foo)->setX(20)->getX();
为什么我需要 - > getX();部分在对象启动过程结束时才能获得18?为什么我根本无法隐藏公共getX()函数并写...
$X = (new foo)->setX(20);
echo $X; // and show 18 without errors.
相反,它会抛出错误并说......
Catchable fatal error: Object of class foo could not be converted to string in C:\...
$this->x
不是指公开$x = 2
吗?我想我有点困惑为什么我们依赖公共函数getX()
。在此先感谢帮助理解!
答案 0 :(得分:2)
因为您在执行foo
时返回了班级return $this;
的实例。如果您希望它按上述方式工作,则需要返回$x
,如下所示:
public function setX($val) {
$this->x = $val - $this->x;
return $this->x;
}
答案 1 :(得分:2)
echo $X
尝试输出对象。但是您的对象没有magic method __toString()
,因此当在字符串上下文中使用对象时,PHP无法确切地知道输出 WHAT 。
e.g。如果您将其添加到对象定义中:
public function __toString() {
return $this->getX();
}
当你18
时,你“正确地”得到echo $X
。