2010-09-14 58 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