Как сделать это в php?

Возможный дубликат:
Как построить многопользовательские функции в PHP5

Привет,

Я видел такой код в нескольких системах форумов, но не могу найти таких примеров:

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

Вы можете увидеть похожий пример в PDO:

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

Я не знаю, как этот тип кодирования называется в PHP, и поэтому я не могу искать какие-либо учебники и примеры.

2 ответа

Решение

Это называется метод цепочки. Примером может быть следующее. Обратите внимание, что мы возвращаем текущий объект.

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 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() метод.

Этот метод также может использоваться для свободного интерфейса, особенно при реализации интерфейса для предметно-ориентированного языка. Однако не все цепочки методов являются свободными интерфейсами.

Посмотрите, что Мартин Фаулер написал о беглых интерфейсах в 2005 году. Он цитирует Эрика Эванса из известной доменно-управляемой конструкции, который выдвинул эту идею.

Другие вопросы по тегам