Как это сделать на пхп?

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

Привет,

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

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

Вы можете увидеть аналогичный пример в PDO:

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

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


person tftd    schedule 14.09.2010    source источник


Ответы (2)


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

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

$obj = new Example();
$obj->test1('Var')->test2(543)->test1(true);
person Tim Cooper    schedule 14.09.2010
comment
Спасибо, что поделились этой ценной информацией :) - person tftd; 15.09.2010

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

Вы можете 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 году. Он цитирует Эрика Эванса из Domain-Driven Design славится своей идеей.

person Bill Karwin    schedule 14.09.2010
comment
... и, будучи программистом, защита ваших пальцев важна для ваших средств к существованию;) - person Wrikken; 15.09.2010
comment
Это объясняет практически все, что мне нужно было знать. Спасибо :) - person tftd; 15.09.2010