9

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

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

相对于

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

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

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

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

4

5 回答 5

16

从 PHP 7 开始,您现在可以在类型提示时使用标量类型(int、float、string 和 bool)。

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

至于 OP 的问题,PHP 仅支持对象、接口和类型的类型提示array,但现在可以按照本机提出的问题来做。

于 2018-07-13T10:05:19.297 回答
7

你当然可以对复杂类型(数组、接口和对象)使用所谓的类型提示——但不能使用原语(令我有点惊讶的是,还有特征):

类型提示不能用于标量类型,例如 int 或 string。特征也是不允许的。

虽然有很多建议将标量类型提示添加到 PHP(甚至还有一个非正式的补丁),但这并不容易。我建议查看这篇文章,因为它很好地总结了不同方法的潜在缺陷。

PS BTW,看起来 PHP 5.5可能会使用“检查和转换”类型提示。不是说我很惊讶...

于 2012-10-22T13:15:03.540 回答
0

对于标量,您可以使用 php is_int() .. is_string()函数进行检查。

对于数组和对象,您可以在函数调用中使用类型提示。

有传言说在下一个版本的 php 中还会有对标量的类型提示支持。

于 2012-10-22T13:13:20.063 回答
0

在 php 5.5 的函数参数中会有标量类型转换的类型提示,但目前只有类,array&callable仅可用(从 php 5.4 开始)

于 2012-10-22T13:14:04.903 回答
0

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

您不能为 INT 和 STRING 设置此类检查。

于 2012-10-22T13:14:46.697 回答