How to build multi oop functions in PHP5 – Here in this article, we will share some of the most common and frequently asked about PHP problem in programming with detailed answers and code samples. There’s nothing quite so frustrating as being faced with PHP errors and being unable to figure out what is preventing your website from functioning as it should like php and oop . If you have an existing PHP-based website or application that is experiencing performance issues, let’s get thinking about How to build multi oop functions in PHP5.
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.
Solution :
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