在PHP中定义多个函数参数类型


Defining multiple function argument types in PHP

是否可以将函数参数定义为多种可能的类型?例如,函数可以接受字符串或整数来完成某些操作。有没有可能这样定义它?

    function something(int|string $token) {}

还是每个参数只支持一种类型?

(注意,我知道我可以稍后过滤输入,我只是喜欢键入我的参数)

2020更新:

Union类型终于在PHP 8.0中实现了,该版本将于2020年底发布。

它们可以这样使用:

class Number {
    private int|float $number;
    public function setNumber(int|float $number): void {
        $this->number = $number;
    }
    public function getNumber(): int|float {
        return $this->number;
    }
}

不可能。

另外,PHP 5中的类型提示现在只适用于类和数组。http://php.net/manual/en/language.oop5.typehinting.php

class Foo
{
}
function something(Foo $Object){}

你所能做的最好的就是所谓的类型提示,在这里解释:

http://php.net/manual/en/language.oop5.typehinting.php

特别地,您可以提示类类型或数组类型,但是(正如手册所说)不支持使用int和string的传统类型提示。所以我猜你想要完成的事情在这个层次上是不可能完成的。

但是,您可以创建自己的包装器等。可能有一千种方法来处理这个

PHP是动态类型的-但是类型提示已经添加到语言中-所以如果你没有提示参数,你可以传递任何你喜欢的类型:

function something($token) 
{
   if (is_numeric($token)) {
     // its a float, double, integer
   } else {
     // its a string, array, object
   }
}

(我不确定资源是如何处理的)。

然而,如果你想用强类型语言编程,那么(恕我直言)你应该使用PHP以外的东西