PHP 函数重载
2022-08-30 06:19:13
来自C++后台;)
如何重载PHP函数?
一个函数定义(如果有任何参数)和另一个函数定义(如果没有任何参数)?在 PHP 中可能吗?或者我应该使用if来检查是否有任何参数从$ _GET和POST传递??并将它们联系起来?
来自C++后台;)
如何重载PHP函数?
一个函数定义(如果有任何参数)和另一个函数定义(如果没有任何参数)?在 PHP 中可能吗?或者我应该使用if来检查是否有任何参数从$ _GET和POST传递??并将它们联系起来?
不能重载 PHP 函数。函数签名仅基于其名称,不包含参数列表,因此不能有两个同名的函数。PHP 中的类方法重载与许多其他语言中的类方法重载不同。PHP使用相同的单词,但它描述了不同的模式。
但是,您可以声明一个接受可变数量参数的可变参数函数。您可以使用 func_num_args()
和 func_get_arg()
来传递参数,并正常使用它们。
例如:
function myFunc() {
for ($i = 0; $i < func_num_args(); $i++) {
printf("Argument %d: %s\n", $i, func_get_arg($i));
}
}
/*
Argument 0: a
Argument 1: 2
Argument 2: 3.5
*/
myFunc('a', 2, 3.5);
PHP不支持传统的方法重载,但是你可以实现你想要的一种方法,就是利用神奇的方法:__call
class MyClass {
public function __call($name, $args) {
switch ($name) {
case 'funcOne':
switch (count($args)) {
case 1:
return call_user_func_array(array($this, 'funcOneWithOneArg'), $args);
case 3:
return call_user_func_array(array($this, 'funcOneWithThreeArgs'), $args);
}
case 'anotherFunc':
switch (count($args)) {
case 0:
return $this->anotherFuncWithNoArgs();
case 5:
return call_user_func_array(array($this, 'anotherFuncWithMoreArgs'), $args);
}
}
}
protected function funcOneWithOneArg($a) {
}
protected function funcOneWithThreeArgs($a, $b, $c) {
}
protected function anotherFuncWithNoArgs() {
}
protected function anotherFuncWithMoreArgs($a, $b, $c, $d, $e) {
}
}