Method Overloading in PHP
- Method Overloading in PHP
-
Use the
__call()
Magic Method to Implement Method Overloading in PHP -
Use the
__callStatic()
Magic Method to Implement Method Overloading in PHP
This article will introduce the concept of method overloading in PHP along with examples.
Method Overloading in PHP
Method overloading is a concept in OOP where multiple methods of the same name exist within a class that accepts a different number of parameters or data types. For example, a method add()
can be overloaded by defining it twice; the first one takes two parameters, while the second one takes three parameters.
We can even overload the function by providing integer arguments in one method while providing floating-point arguments in the other. This type of overloading is popular in the languages like Java and C++.
However, the concept of method overloading is quite different in PHP. Method overloading is the process of dynamically creating a method with the help of magic methods.
We can create methods that do not exist within the scope of a class. It works for both class methods and static methods.
The magic methods __call()
and __callStatic()
are used to overload the dynamic methods. It is clear from the name that the __call()
method is used for class methods, and the callStatic()
method is used for static methods.
The syntax of these methods is shown below.
__call($name, $arguments){
//function body
}
Here, $name
is the name of the dynamic method, and $arguments
is an array that holds the arguments of the dynamic method. Inside the method, we can access the arguments using the indices in the $arguments
array.
Use the __call()
Magic Method to Implement Method Overloading in PHP
We can use the __call()
method to create a method in PHP dynamically. The method will be executed when we invoke a method not yet created in the object context.
The process is called method overloading in PHP.
For example, create a class University
and the method __call()
inside it. Name the parameters $name
and $arguments
in this method.
Inside the method, print the $name
variable and the items of the $arguments
array. Outside the class, create an object $student
of the University
class.
Next, invoke the student_info()
method with the $student
object. Pass the arguments 001
and Biswash
in the method.
Example Code:
<?php
class University{
public function __call($name, $arguments){
echo "inside the method: ".$name."<br>";
echo "id:".$arguments[0]."<br>";
echo "name:".$arguments[1]."<br>";
}
}
$student = new University;
$student->student_info(001,'Biswash');
?>
Let’s understand the flow of the example above.
When we invoke the student_info()
method with the parameters, the program doesn’t find the method in the University
class. But, the method __call()
exists in the class, so this function is executed.
The $name
parameter in the method holds the student_info()
method, and the $arguments
parameter holds the arguments 001
and Biswash
as Array ( [0] => 1 [1] => Biswash )
. The parameters are printed inside the __call()
method.
Output:
inside the method: student_info
id:1
name:Biswash
In this way, we can use the __call()
magic method to achieve method overloading in the object context in PHP.
Use the __callStatic()
Magic Method to Implement Method Overloading in PHP
We can also use the method overloading feature in the static context in PHP. We must use the __callStatic()
magic method.
The function definition of the method is similar to that of the __call
method. However, as we use it in the static context, the method should be static.
Since it is a static context, we need not create an instance of the class. We can directly call the method to be created dynamically using the ::
operator from the class.
For example, create a method __callStatic()
inside the class University
as we did for the __call()
method. Do not forget to write the static
keyword while defining the method.
Fill the parameters and body of the method as in the method above. Outside the class, invoke a method professor_info
using the ::
operator by the class as University::professor_info()
.
Supply the arguments of your choice in the method.
Example Code:
<?php
class University{
public static function __callStatic($name, $arguments){
echo "inside the method: ".$name."<br>";
echo "id:".$arguments[0]."<br>";
echo "name:".$arguments[1]."<br>";
}
}
University::professor_info(0010,'Professor Jack ');
?>
Output:
inside the method: professor_info
id:8
name:Professor Jack
This way, we can overload a static method using PHP’s __callStatic()
magic method.
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn