PHP 中的方法重载
本文将结合示例介绍 PHP 中方法重载的概念。
PHP 中的方法重载
方法重载是 OOP 中的一个概念,其中多个同名方法存在于一个接受不同数量的参数或数据类型的类中。例如,方法 add()
可以通过定义两次来重载;第一个接受两个参数,而第二个接受三个参数。
我们甚至可以通过在一种方法中提供整数参数同时在另一种方法中提供浮点参数来重载函数。这种类型的重载在 Java 和 C++ 等语言中很流行。
然而,方法重载的概念在 PHP 中是完全不同的。方法重载是借助魔术方法动态创建方法的过程。
我们可以创建类范围内不存在的方法。它适用于类方法和静态方法。
魔术方法 __call()
和 __callStatic()
用于重载动态方法。从名称中可以清楚地看出,__call()
方法用于类方法,而 callStatic()
方法用于静态方法。
这些方法的语法如下所示。
__call($name, $arguments){
//function body
}
这里,$name
是动态方法的名称,$arguments
是一个包含动态方法参数的数组。在方法内部,我们可以使用 $arguments
数组中的索引来访问参数。
使用 __call()
魔术方法在 PHP 中实现方法重载
我们可以使用 __call()
方法在 PHP 中动态创建一个方法。当我们调用尚未在对象上下文中创建的方法时,该方法将被执行。
该过程在 PHP 中称为方法重载。
例如,在其中创建一个类 University
和方法 __call()
。将此方法中的参数命名为 $name
和 $arguments
。
在方法内部,打印 $name
变量和 $arguments
数组的项目。在课堂之外,创建一个 University
类的对象 $student
。
接下来,使用 $student
对象调用 student_info()
方法。在方法中传递参数 001
和 Biswash
。
示例代码:
<?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');
?>
让我们了解上面示例的流程。
当我们使用参数调用 student_info()
方法时,程序在 University
类中找不到该方法。但是,类中存在方法 __call()
,因此执行该函数。
方法中的 $name
参数包含 student_info()
方法,$arguments
参数将参数 001
和 Biswash
保存为 Array ( [0] => 1 [1] => Biswash )
。参数打印在 __call()
方法中。
输出:
inside the method: student_info
id:1
name:Biswash
这样,我们就可以在 PHP 中使用 __call()
魔术方法来实现对象上下文中的方法重载。
在 PHP 中使用 __callStatic()
魔术方法实现方法重载
我们还可以在 PHP 的静态上下文中使用方法重载功能。我们必须使用 __callStatic()
魔术方法。
该方法的函数定义类似于 __call
方法。但是,当我们在静态上下文中使用它时,该方法应该是静态的。
由于它是一个静态上下文,我们不需要创建该类的实例。我们可以使用类中的::
运算符直接调用要动态创建的方法。
例如,在类 University
中创建一个方法 __callStatic()
,就像我们为 __call()
方法所做的那样。不要忘记在定义方法时编写 static
关键字。
按照上面的方法填写方法的参数和主体。在类之外,使用类中的 ::
运算符调用方法 professor_info
作为 University::professor_info()
。
在方法中提供你选择的参数。
示例代码:
<?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 ');
?>
输出:
inside the method: professor_info
id:8
name:Professor Jack
这样,我们可以使用 PHP 的 __callStatic()
魔术方法重载静态方法。
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