0

可能重复:
如何在 PHP5 中构建多 oop 函数

嘿,

我在几个论坛系统中看到过这种代码,但我找不到任何这样的例子:

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

您可以在 PDO 中看到类似的示例:

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

我不知道如何在 PHP 中调用这种类型的编码,因此我无法继续寻找任何教程和示例。

4

2 回答 2

7

这称为方法链。一个例子如下。请注意,我们正在返回当前对象。

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

$obj = new Example();
$obj->test1('Var')->test2(543)->test1(true);
于 2010-09-14T23:11:47.320 回答
3

您只需确保可链接的方法返回一个对象引用,并且您可以将另一个方法调用链接到结果上。

您可以return $this如@Tim Cooper 所示,也可以返回对另一个不同对象的引用:

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()方法。

这种技术也可以用于流畅的接口,特别是在为特定领域的语言实现接口时。不过,并非所有方法链都是流畅的接口。

看看 Martin Fowler在 2005 年写的关于流畅界面的文章。他引用了以领域驱动设计闻名的 Eric Evans 提出了这个想法。

于 2010-09-14T23:18:41.553 回答