问题
jQuery lets me chain methods. I also remember seeing the same in PHP so I wrote this:
class cat {
function meow() {
echo "meow!";
}
function purr() {
echo "purr!";
}
}
$kitty = new cat;
$kitty->meow()->purr();
I cannot get the chain to work. It generates a fatal error right after the meow.
回答1:
To answer your cat example, your cat's methods need to return $this
, which is the current object instance. Then you can chain your methods:
class cat {
function meow() {
echo "meow!";
return $this;
}
function purr() {
echo "purr!";
return $this;
}
}
Now you can do:
$kitty = new cat;
$kitty->meow()->purr();
For a really helpful article on the topic, see here: http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html
回答2:
Place the following at the end of each method you wish to make "chainable":
return $this;
回答3:
Just return $this
from your method, i.e. (a reference to) the object itself:
class Foo()
{
function f()
{
// ...
return $this;
}
}
Now you can chain at heart's content:
$x = new Foo;
$x->f()->f()->f();
回答4:
yes using php 5 you can return object from a method. So by returning $this
(which points to the current object), you can achieve method chaining
来源:https://stackoverflow.com/questions/7549423/how-do-i-chain-methods-in-php