PHP - 理解基本的类功能

时间:2012-11-14 14:41:54

标签: php class

如果我有以下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()。在此先感谢帮助理解!

2 个答案:

答案 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