代码之家  ›  专栏  ›  技术社区  ›  tftd

如何用php制作?[副本]

  •  0
  • tftd  · 技术社区  · 14 年前

    可能重复:
    How to build multi oop functions in PHP5

    嘿,

    我在几个论坛系统中见过这种代码,但我找不到类似的例子:

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

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

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

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

    2 回复  |  直到 12 年前
        1
  •  7
  •   Tim Cooper    14 年前

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

    class Example
    {
       function test1($var)
       {
          return $this;
       }
       function test2($var)
       {
          return $this;
       }
    }
    
    $obj = new Example();
    $obj->test1('Var')->test2(543)->test1(true);
    
        2
  •  3
  •   Bill Karwin    14 年前

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

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

    此技术也可用于 fluent interface 尤其是在为特定于域的语言实现接口时。不过,并不是所有的方法链都是流畅的接口。

    看看马丁·福勒 wrote about fluent interfaces 2005年。他引用埃里克·埃文斯的话 Domain-Driven Design 因为想出了这个主意而出名。