Как сделать это в 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 году. Он цитирует Эрика Эванса из известной доменно-управляемой конструкции, который выдвинул эту идею.