我想在输入函数之前检查参数匹配的类型。
function ((int) $integer, (string) $string ) { /*...*/ }
与
相反function ( $int, $string ) {
$string = (string) $string;
$int = (int) $int;
}
有办法做到这一点吗?我还推测将其作为对象
function ( Integer $int ) { /*...*/ }
通过这样做,我可以发送一个functionName ( new Integer ( $int ));
但我希望没有添加语法。
答案 0 :(得分:3)
你当然可以使用复杂类型(数组,接口和对象)的所谓type hinting - 但不能使用原语(而且,令我感到意外的是,还有特征):
类型提示不能与标量类型(如int或string)一起使用。 也不允许特征。
虽然有a lot of proposals添加标量类型提示给PHP(甚至还有一个非正式的patch for that),但这并不容易。我建议查看this article,因为它很好地总结了不同方法的潜在缺陷。
P.S。顺便说一下,它看起来像PHP 5.5 might use那样的“检查和转换”类型提示。不是说我很惊讶......
答案 1 :(得分:3)
从PHP 7开始,现在可以在类型提示时使用标量类型(int,float,string和bool)。
function (int $int) { /*...*/ }
function (float $float) { /*...*/ }
function (string $string) { /*...*/ }
function (bool $bool) { /*...*/ }
至于OP的问题,PHP仅支持对象,接口和array
类型的类型提示,但现在可以执行本机提出的问题。
答案 2 :(得分:0)
对于标量,您可以使用php is_int() .. is_string()函数进行检查。
对于数组和对象,您可以在函数调用中使用type hinting。
有传言称,在下一版本的php中,还会为标量提供类型提示支持。
答案 3 :(得分:0)
在PHP 5.5中的函数参数中会有标量类型转换类型提示,但是现在只有类array
& callable
仅可用(从PHP 5.4开始)
答案 4 :(得分:0)
http://php.net/manual/en/language.oop5.typehinting.php
您无法为INT和STRING设置此类检查。