Typecast函数参数

时间:2012-10-22 13:10:00

标签: php function casting

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

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

相反
function ( $int, $string ) {
    $string = (string) $string;
    $int = (int) $int;
}

有办法做到这一点吗?我还推测将其作为对象

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

通过这样做,我可以发送一个functionName ( new Integer ( $int ));但我希望没有添加语法。

5 个答案:

答案 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设置此类检查。