2010-09-14 55 views
0

可能重複:
How to build multi oop functions in PHP5如何在PHP中做到這一點?

嘿,

我見過這種代碼在幾個論壇系統,但我找不到任何像這樣的例子:

$this->function()->anotherfunction(); 

你可以在P中看到一個類似的例子DO:

$pdo->query($sqlQuery)->fetch(); 

我不知道如何在PHP中調用這種類型的編碼,因此我無法繼續尋找任何教程和示例。

回答

7

這叫做方法鏈接。一個例子如下。注意我們正在返回當前對象。

class Example 
{ 
    function test1($var) 
    { 
     return $this; 
    } 
    function test2($var) 
    { 
     return $this; 
    } 
} 

$obj = new Example(); 
$obj->test1('Var')->test2(543)->test1(true); 
+0

感謝您分享這些寶貴的信息:) – tftd 2010-09-14 23:27:11

3

您只要確保可鏈式方法返回對象引用,並且可以將另一個方法調用鏈接到結果上。

您可以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名氣,因爲他提出了這個想法。

+0

...作爲一名程序員,保護您的手指對您的生計非常重要;) – Wrikken 2010-09-14 23:21:24

+0

這解釋了我必須知道的幾乎所有事情。謝謝 :) – tftd 2010-09-14 23:25:58