Php 相同的函数名不同的参数类型

Php 相同的函数名不同的参数类型,php,Php,我可以有这样一个函数吗: public function user_to(String $user = null){ $this->user = $user; return $this; } 还有一个像这样的 public function user_to(Array $user = null){ $this->user = $user; return $this; } 没有任何问题吗?我的意思是,我只想在参数是字符串时调用第一个,在参数是数组时调

我可以有这样一个函数吗:

public function user_to(String $user = null){
    $this->user = $user;
    return $this;
}
还有一个像这样的

public function user_to(Array $user = null){
    $this->user = $user;
    return $this;
}
没有任何问题吗?我的意思是,我只想在参数是字符串时调用第一个,在参数是数组时调用第二个


我知道我可以只使用一个函数,然后使用gettype来确定它是数组还是字符串,但我希望使用不同的函数。PHP不允许使用相同名称的多个函数。因此,您不应该定义一个名称相同但变量类型不同的单独函数,您可以在函数内部检查它

public function user_to($user = null){
    if (is_array($user) || is_string($user)) {
        $this->user = $user;
        return $this;
    } else {
        /* Do whatever; for example throw an exception or return false */
    }
}
试图重新声明PHP中已经存在的函数会出现致命错误。根据手册

PHP不支持函数重载,也不可能取消定义或重新定义以前声明的函数

在即将发布的PHP8中,您可以在类型提示或联合类型中定义多个类型

因此,可以要求参数为数组或字符串,也可以为null,因为这是默认值

公共函数user_toarray | string | null$user=null{ $this->user=$user; 退还$this; } 但是,如果插入不同类型的内容,则会引发致命错误

致命错误:未捕获的TypeError:传递给用户_to的参数1必须是给定对象的字符串类型


你试过了吗?这似乎是一件你可以在几分钟内自己测试的事情。我做得很好,只需要你的意见,当我在做的时候。也许看一看可能会有所帮助