嘿,
我見過這種代碼在幾個論壇系統,但我找不到任何像這樣的例子:
$this->function()->anotherfunction();
你可以在P中看到一個類似的例子DO:
$pdo->query($sqlQuery)->fetch();
我不知道如何在PHP中調用這種類型的編碼,因此我無法繼續尋找任何教程和示例。
嘿,
我見過這種代碼在幾個論壇系統,但我找不到任何像這樣的例子:
$this->function()->anotherfunction();
你可以在P中看到一個類似的例子DO:
$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);
您只要確保可鏈式方法返回對象引用,並且可以將另一個方法調用鏈接到結果上。
您可以return $this
作爲@Tim庫珀表示,也可以返回一個引用到另一個不同的對象:
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例子使用了兩個不同的對象類型。 PDO::query()
實例化並返回一個PDOStatement
對象,該對象又具有fetch()
方法。
該技術也可以用於fluent interface,特別是在實現域特定語言的接口時。不過,並非所有的方法鏈都是流暢的界面。
請參閱2005年的Martin Fowler wrote about fluent interfaces。他引用了Eric Evans的Domain-Driven Design名氣,因爲他提出了這個想法。
感謝您分享這些寶貴的信息:) – tftd 2010-09-14 23:27:11