重複の可能性:
PHP5 でマルチ oop 関数を構築する方法
おい、
いくつかのフォーラム システムでこの種のコードを見たことがありますが、次のような例は見つかりません。
$this->function()->anotherfunction();
PDO で同様の例を見ることができます。
$pdo->query($sqlQuery)->fetch();
このタイプのコーディングが PHP でどのように呼び出されるのかがわからないため、チュートリアルや例を探すことができません。
重複の可能性:
PHP5 でマルチ oop 関数を構築する方法
おい、
いくつかのフォーラム システムでこの種のコードを見たことがありますが、次のような例は見つかりません。
$this->function()->anotherfunction();
PDO で同様の例を見ることができます。
$pdo->query($sqlQuery)->fetch();
このタイプのコーディングが PHP でどのように呼び出されるのかがわからないため、チュートリアルや例を探すことができません。
これをメソッドチェーンと呼びます。例は次のとおりです。現在のオブジェクトを返していることに注意してください。
class Example
{
function test1($var)
{
return $this;
}
function test2($var)
{
return $this;
}
}
$obj = new Example();
$obj->test1('Var')->test2(543)->test1(true);
連鎖可能なメソッドがオブジェクト参照を返すことを確認するだけで、別のメソッド呼び出しを結果に連鎖させることができます。
@Tim return $thisCooper が示すように、または別の異なるオブジェクトへの参照を返すことができます。
class Hand
{
protected $numFingers = 5;
public function countFingers() { return $this->numFingers; }
}
class Arm
{
protected $hand;
public function getHand() { return $this->hand; }
}
$n = $body->getLeftArm() // returns object of type Arm
->getHand() // returns object of type Hand
->countFingers(); // returns integer
表示する PDO の例では、2 つの異なるオブジェクト タイプを使用しています。 メソッドを持つオブジェクトをPDO::query()インスタンス化して返します。PDOStatementfetch()
この手法は、流暢なインターフェース、特にドメイン固有言語のインターフェースを実装する場合にも使用できます。ただし、すべてのメソッド チェーンが流暢なインターフェイスであるとは限りません。
Martin Fowlerが 2005 年に流暢なインターフェイスについて書いたものを参照してください。彼は、このアイデアを思いついたとして、ドメイン駆動設計で有名なEric Evans を引用しています。