Php 类型转换函数参数

Php 类型转换函数参数,php,function,casting,Php,Function,Casting,在输入函数之前,我想检查参数的类型是否匹配 function ((int) $integer, (string) $string ) { /*...*/ } 相对于 function ( $int, $string ) { $string = (string) $string; $int = (int) $int; } 有办法做到这一点吗?我还想把它当作一个物体来做 function ( Integer $int ) { /*...*/ } 通过这样做,我可以发送一个fun

在输入函数之前,我想检查参数的类型是否匹配

function ((int) $integer, (string) $string ) { /*...*/ }
相对于

function ( $int, $string ) {
    $string = (string) $string;
    $int = (int) $int;
}
有办法做到这一点吗?我还想把它当作一个物体来做

function ( Integer $int ) { /*...*/ }

通过这样做,我可以发送一个
functionName(新的整数($int))但我不希望添加语法。

对于标量可以使用phpis_int()是要检查的字符串()函数

对于可以在函数调用中使用的数组和对象


有传言称,在下一版本的php中,还会有对标量的类型暗示支持

在PHP5.5的函数参数中会有标量类型强制转换类型提示,但目前只有类、
array
&
callable
才可用(从PHP5.4开始)


您不能为INT和STRING设置这样的检查。

您当然可以将所谓的检查用于复杂类型(数组、接口和对象),但不能用于原语(我有点惊讶,还有traits):

类型提示不能与int或string等标量类型一起使用。 特质也是不允许的

虽然在PHP中添加标量类型暗示有很多困难(甚至有非正式的),但这并不容易。我建议你去看看,因为它很好地总结了不同方法的潜在缺陷


顺便说一句,它看起来像PHP5.5中的“check-and-cast”类型暗示。更不用说我感到惊讶了……

从PHP7开始,现在可以在类型暗示时使用标量类型(int、float、string和bool)

function (int $int) { /*...*/ }
function (float $float) { /*...*/ }
function (string $string) { /*...*/ }
function (bool $bool) { /*...*/ }

至于OP的问题,PHP只支持对象、接口和
数组的类型暗示,但现在可以按照问题本身的建议进行操作。

除非在5.4中添加了它,否则除了类/接口和数组之外,没有任何类型暗示。你能不能简单地使用
is.*()
(即
is.\u int())
是字符串()
)?但我想它在函数中不起作用:
函数(是int($int))
?它会起作用,但不会给你期望的整数,而是一个布尔值作为参数。@raina77ow或者你似乎误解了这个问题。如果类型不匹配,我希望它失败。与
函数(array$array){}
@Kao一样,我很抱歉,但是从您的声明来看,您更关心的是转换而不是检查类型。当然,使用类型提示进行检查是可以的;但是PHP并不是那么简单(正如我在回答中提到的),为什么会被否决?我想知道他是因为“错误”的信息而被否决,还是仅仅因为那个人不同意?我的问题也是一样,顺便说一句。)这个链接是关于OOP类上下文中的函数的。在过程编程中,它只对PHP7有效。@Cazumanicavalcanti>在12年10月22日回答说,8年后情况发生了变化:),但我写道他不能这样做。所以这是一个正确的答案。