是否可以将函数参数定义为多种可能的类型?例如,函数可以接受字符串或整数来完成某些操作。有没有可能这样定义它?
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以外的东西