A method overload in a generic object-oriented design language (such as C++,java) is to define the same method name, and to access our different methods of the same method name, depending on the number of arguments or the type of the parameter. However, in PHP, the method is not overloaded, because PHP is a weak type of language, so in the parameters of the method itself can receive different types of data, and because the PHP method can receive an indefinite number of parameters, so by passing different number of parameters to call the different methods of the method is not valid. So there is no traditional overloaded (overload) method in PHP, but due to PHP's flexibility, it is possible to emulate overloaded methods in general object-oriented languages.
Simulating method overloads in general object-oriented languages in PHP (overload)
Let's start with an example:
<?php /* rewrite/overwrite override means: The subclass overrides the method overload of the parent class with the same name: overload refers to: There are multiple methods with the same name, but different parameter types/numbers. Different arguments are passed, and different methods are called. However, in PHP, multiple methods with the same name are not allowed. Therefore, it is not possible to complete this overload in the java,c++. However, PHP is flexible enough to achieve a similar effect * ///////////////////To simulate overloading in PHP class Calc {public function area () { /// /// Determine the number of parameters that are obtained when an area is called $args = Func_get_args (); if (count ($args) = = 1) { //Only one parameter return 3.14 * $args [0] * $args [0] ; Calculate the area of the circle } else if (count ($args) = = 2) { //have 2 parameters return $args [0] * $args [1]; Find the area of the rectangle } else { return ' unknown graph '; }} } $calc = new Calc (); Calculate the area of the Circle Echo $calc->area (Ten), ' <br/> '; Calculates the area of the rectangle echo $calc->area (5,8); ? >
Using PHP's overloaded (overloading) technology to implement method overloading in general object-oriented languages (overload)
The following example uses the overloaded (overloading) technique of PHP to implement the traditional method overloading (overload) using the Magic method.
For overloaded technologies in PHP, refer to: PHP Object-oriented overloading (overloading)
Example:
<?php/* Target: Design A class, this class instance, can realize the following requirements: Call method F1: Pass in 1 parameters, return its own, passed 2 parameters, the sum of squares, passed 3 parameters, the cubic and other parameters, the form, will be error! */class a{//This is a magic method that when an object of a does not invoke a method that does not exist//is automatically called to respond to this situation function call ($Func _name, $argument) {//Use F1 does not exist if ($Func _name = = = ' F1 ') {$len = count ($argument) and//number of arguments obtained if ($len <1 | | $len ; 3) {Trigger_error ("The number of parameters is incorrect! ", E_user_error); }else if ($len = = 1) {return $argument [0]; }else if ($len = = 2) {return $argument [0]* $argument [0] + $argument [1]* $argument [1]; }else if ($len = = 3) {$v 1 = $argument [0]; $v 2 = $argument [1]; $v 3 = $argument [2]; return $v 1* $v 1* $v 1 + POW ($v 2, 3) + POW ($v 3, 3); }}else if ($Func _name = = = ' F2 ') {//Another non-existent method}else if ($Func _name = = = ' F3 ') {//...} }} $a = new A (); $v 1 = $a->F1 (1); $v 2 = $a->f1 (2,3); $v 3 = $a->f1 (4,5,6); echo "v1= $v 1, v2 = $v 2, v3 = $v 3";? >
The result of the operation is:
v1= 1, v2 = V3 = 405