如何在PHP中指定参数的类型

如何在PHP中指定参数的类型,php,casting,Php,Casting,可能重复: 比如说,我创建了一个名为 retrieveCount($count){ return ++$count; } 这只是一个简单的例子。如何将函数设置为仅接受整数类型? 在Java或其他语言中,我们有: public int retrieveCount(int count){ return ++count; } 有没有一种方法可以在PHP中处理同样的事情?我在文档中读到,对于OOP,PHP对复杂结构(如对象、数组、接口等)有类型暗示,但对标量类型(int、string)

可能重复:

比如说,我创建了一个名为

retrieveCount($count){
   return ++$count;
}
这只是一个简单的例子。如何将函数设置为仅接受整数类型? 在Java或其他语言中,我们有:

public int retrieveCount(int count){
   return ++count;
}
有没有一种方法可以在PHP中处理同样的事情?我在文档中读到,对于OOP,PHP对复杂结构(如对象、数组、接口等)有类型暗示,但对标量类型(int、string)没有

是否确实如此,并且我们无法指定类型


谢谢

没有直接的方法,但是您可以在函数中强制输入,如下所示:

function retrieveCount($count) {
    $count = intval($count);
    return ++$count;
};

请参阅类似的函数
strval
floatval

PHP中没有直接的标量类型提示。但您可以通过检查函数内的类型并触发适当的错误来模拟它:

function retrieveCount( $count )
{
    if( !is_int( $count ) )
    {
        // I believe E_USER_WARNING is the appropriate error level
        // equivalent to what PHP issues itself on type hint errors
        trigger_error(
            'Argument 1 passed to retrieveCount() must be an integer',
            E_USER_WARNING
        );
    }

    return ++$count;
}

要确保函数接收整数类型,您需要这样调用:

或者,如果您希望能够处理由数字组成的字符串,而这些字符串不一定是数字,则可以执行以下操作:

function retriveCount( $count ){
  if( (int)$count != $count )
    return 0; // or err value

  return ++$count; // will be integer type
}

阅读为什么返回值将是一个不带任何强制转换的整数。

请参阅:@johncode“类型提示不能与int或string等标量类型一起使用。”那么它们如何键入预定义函数的提示?但这不会返回2,也会引起E_注意,但这真的是解决问题的好方法吗?也就是说,如果您碰巧传递了一个对象……那么,您可以使用
is_int()
并在类型错误时自己抛出一个错误。
function retriveCount( $count ){
  if( (int)$count != $count )
    return 0; // or err value

  return ++$count; // will be integer type
}