函数名称相同,参数类型不同

路易斯·费利佩·德·耶稣·穆诺兹

我可以有这样的功能:

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不支持函数重载,也无法取消定义或重新定义先前声明的函数。

在即将发布的PHP 8中,您可以在typehinting或“ union types”(参考)中定义多种类型

因此,您可以要求参数为数组或字符串,或者为可空值(因为这是默认值)。

public function user_to(array|string|null $user = null) {
    $this->user = $user;
    return $this;
}

但是,如果您插入其他类型,则这将引发致命错误。

致命错误:未捕获的TypeError:传递给user_to()的参数1必须为字符串类型,给定对象

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

名称相同但参数类型与模板参数不同的多个函数

名称不同但参数相同的函数

Swift 1.2无法使用相同的函数名称和不同的参数

不同名称空间中的函数名称相同

应用函数名称和参数的函数类型

无法使用let定义与函数参数名称相同的变量

使用与传递的变量相同的函数参数名称

根据条件将不同的参数名称传递给函数

c可以声明两个具有相同名称,返回类型但参数不同的函数

具有相同名称但参数和返回类型不同的虚函数

具有相同名称和参数,不同返回类型的C ++成员函数

在C中实现2个具有相同类型和名称但参数不同的函数

创建两个具有相同名称但参数类型不同的R函数

如何避免函数名称中的参数类型?

在TypeScript中获取函数参数名称和类型

为什么Typescript函数类型签名包含参数名称

当名称与JavaScript中的参数名称相同时,如何从函数访问全局变量?

函数名称为什么不能与返回名称类型相同?

为另一个函数内定义的函数使用相同的参数名称

在POST请求中为相同参数名称传递不同v模型值的正确方法

C ++ Koenig(依赖于参数)查找:如果不同名称空间中的两个名称空间函数具有相同的参数类型怎么办?

如何在TypeScript中为函数参数设置参数名称和类型?

从多个类继承相同的函数名称

如何在不同的堆栈中创建相同的Lambda函数名称

在void函数和主程序中使用相同的参数名称

elisp:具有相同参数名称问题的两个函数

在嵌套函数中使用相同的参数名称会导致意外输出

相同的函数名,不同的 C 文件

在 Go 中打印类型参数名称