在 PHP 中具有多个参数的相同命名函数

2022-08-30 13:45:56

我从Java开始OOP,现在我对PHP非常投入。是否可以像在Java中那样创建具有不同参数的函数的倍数?还是语言的解释/非类型化性质会阻止这种情况并引起冲突?


答案 1

其他人都有答案和好的代码解释。这里有一个更高级的术语解释:Java支持方法重载,当你谈论名称相同但参数不同的函数时,你所指的是方法重载。由于PHP是一种动态类型语言,这是不可能的。相反,PHP支持默认参数,您可以使用这些参数来获得大致相同的效果。


答案 2

如果您正在处理类,则可以重载方法(请参阅重载),例如:__call()

class Foo {
    public function doSomethingWith2Parameters($a, $b) {

    }

    public function doSomethingWith3Parameters($a, $b, $c) {

    }

    public function __call($method, $arguments) {
      if($method == 'doSomething') {
          if(count($arguments) == 2) {
             return call_user_func_array(array($this,'doSomethingWith2Parameters'), $arguments);
          }
          else if(count($arguments) == 3) {
             return call_user_func_array(array($this,'doSomethingWith3Parameters'), $arguments);
          }
      }
   }    
}

然后你可以做:

$foo = new Foo();
$foo->doSomething(1,2); // calls $foo->doSomethingWith2Parameters(1,2)
$foo->doSomething(1,2,3); // calls $foo->doSomethingWith3Parameters(1,2,3)

这可能不是最好的例子,但有时可能非常方便。基本上,您可以使用它来捕获不存在此方法的对象上的方法调用。__call

但它与Java不同或容易。


推荐