I have a question about OOP in PHP5. I have seen more and more code written like this:
$object->function()->first(array('str','str','str'))->second(array(1,2,3,4,5));
But I don't know how to create this method. I hope somebody can help me here, :0) thanks a lot.
The key to chaining methods like that within your own classes is to return an object (almost always $this
), which then gets used as the object for the next method call.
Like so:
class example
{
public function a_function()
{
return $this;
}
public function first($some_array)
{
// do some stuff with $some_array, then...
return $this;
}
public function second($some_other_array)
{
// do some stuff
return $this;
}
}
$obj = new example();
$obj->a_function()->first(array('str', 'str', 'str'))->second(array(1, 2, 3, 4, 5));
Note, it's possible to return an object other than $this
, and the chaining stuff above is really just a shorter way to say $a = $obj->first(...); $b = $a->second(...);
, minus the ugliness of setting variables you'll never use again after the call.
$object->function()->first(array('str','str','str'))->secound(array(1,2,3,4,5));
This isn't strictly valid PHP, but what this is saying is... You are calling a method on the $object class that itself returns an object in which you are calling a method called first()
which also returns an object in which you are calling a method called second()
.
So, this isn't necessarily just one class (although it could be) with one method, this is a whole series of possibly different classes.
Something like:
class AnotherClass {
public function AnotherClassMethod() {
return 'Hello World';
}
}
class MyClass {
public function MyClassMethod() {
return new AnotherClass();
}
}
$object = new MyClass();
echo $object->MyClassMethod()->AnotherClassMethod(); // Hello World