0

次の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を取得するために、オブジェクトの開始プロセスの最後の部分?public 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 public を参照していません$x = 2か? なぜ Public function に依存しているのか、少し混乱していると思いますgetX()。事前にご理解いただきありがとうございます。

4

2 に答える 2

2

fooあなたがそうするときにクラスのインスタンスを返すからですreturn $this;。上記のように動作させたい場合は、$x以下に示すように戻す必要があります。

  public function setX($val) {
    $this->x = $val - $this->x;
    return $this->x;
  } 
于 2012-11-14T14:45:27.867 に答える
2

echo $Xオブジェクトを出力しようとします。しかし、オブジェクトには魔法のメソッド がないため、オブジェクトが文字列コンテキストで使用されたときに何を出力する__toString()を PHP が正確に知る方法はありません。

たとえば、これをオブジェクト定義に追加した場合:

public function __toString() {
   return $this->getX();
}

あなたがするとき、あなたは「適切に」得る18でしょうecho $X

于 2012-11-14T14:46:04.153 に答える