これは、メソッドの連鎖中に見つけた興味深い癖であり、バイパスするのに苦労しています。解決策または別の方法があると確信しています。説明するのは難しいですが、最善を尽くします。
例:
クラスの一部である 3 つの関数と、次の 2 つの保護されたプロパティがあります。
class Chain {
protected $_str = '';
protected $_part = 0;
public function __toString() {
return implode(' ', $this->_str);
}
public function AAA () {
$this->_str[$this->_part] = 'AAA';
$this->_part++;
return $this;
}
public function BBB () {
$this->_str[$this->_part] = 'BBB';
$this->_part++;
return $this;
}
public function wrap ($str) {
$part = $this->_part - 1;
$this->_str[$part] = "({$str})";
return $this;
}
}
これらのメソッドをチェーンし、特に wrap メソッドを使用すると、以前のチェーンの文字列が意図せず追加されます。例:
$chain = new Chain();
$chain->AAA()->BBB()->wrap($chain->AAA());
echo $chain;
文字列が次のようになると予想されるのはAAA BBB (AAA)
.
ただし、実際に返されるのはAAA BBB (AAA BBB AAA)
.
wrap()
実際にチェーンによってラップされたメソッドだけではなく、チェーン内で呼び出された以前のすべてのメソッドを取得するのはなぜですか? あると仮定すると、これを回避する最良の方法は何ですか?