Как я связываю методы в PHP? [дубликат]

этот вопрос уже есть ответ здесь:

jQuery позволяет мне цепные методы. Я также помню, что видел то же самое в PHP, поэтому я написал следующее:

class cat {
 function meow() {
 echo "meow!";
 }

function purr() {
 echo "purr!";
 }
}

$kitty = new cat;

$kitty->meow()->purr();

Я не могу заставить цепь работать. Он генерирует фатальную ошибку сразу после мяу.

4 ответов


чтобы ответить на ваш пример кошки, методы вашей кошки должны вернуться $this, который является текущим экземпляром объекта. Затем вы можете связать свои методы:

class cat {
 function meow() {
  echo "meow!";
  return $this;
 }

 function purr() {
  echo "purr!";
  return $this;
 }
}

Теперь вы можете сделать:

$kitty = new cat;
$kitty->meow()->purr();

для действительно полезной статьи по этой теме см. здесь: http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html


место в конце каждого метода, который вы хотите сделать "змеевидных":

return $this;

просто вернуть из вашего метода, т. е. (ссылка) объекта:

class Foo()
{
  function f()
  {
    // ...
    return $this;
  }
}

Теперь вы можете цепь на содержание сердца:

$x = new Foo;
$x->f()->f()->f();

yes используя php 5, Вы можете вернуть объект из метода. Итак, возвращаясь $this (который указывает на текущий объект), вы можете достичь цепочкой