php:声明Function的参数类型

osc*_*ago 25 php arguments function

我正在尝试使用声明的参数类型创建一个函数,以快速检查它们是否采用正确的格式,但是当它返回一个字符串时我发生了以下错误:

Catchable fatal error: Argument 2 passed to myfunction() must be an instance of string, string given, called in path_to_file on line 69 and defined in path_to_file on line 49

function myfunction( array $ARRAY, string $STRING, int $INTEGER ) { 
    return "Args format correct"; 
}
myfunction(array("1",'2','3','4'), "test" , 1234);
Run Code Online (Sandbox Code Playgroud)

哪里出错了?

ldi*_*ual 44

根据PHP5文档:

类型提示只能是对象和数组(自PHP 5.1以来)类型.不支持使用int和string的传统类型提示.

由于stringint不是类,您不能在函数中"键入"它们.

从PHP 7.0开始,将参数类型声明为字符串,支持int,float,bool.

  • 这个答案已经过时,请参阅http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration (8认同)

小智 13

这对于自PHP 7可用性以来看过这篇文章的人来说可能很有用

使用PHP 7,现在可以声明类型.您可以参考以下链接以获取更多信息.

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

function(string $name, boolean $is_admin) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

  • `boolean` 作为类型声明将检查 `instanceof boolean` 而不是检查布尔值。正确的类型声明是 `bool`。例如`function a(value: boolean); a(true)` 将失败。 (5认同)

Smi*_*ith 7

你可以做这样一直对我有用的事情

对于字符串

function setData($Name=""){ }
Run Code Online (Sandbox Code Playgroud)

这会强制名称为字符串,但不会检查其是否为字符串

对于数值

function setData($age=0){ }
Run Code Online (Sandbox Code Playgroud)

这会强制年龄为数字,如果传递一个字符串,则该值将为0

对于数组值,有两种变化

function setData(array $data){ } 
Run Code Online (Sandbox Code Playgroud)

如果没有传递数组,则会抛出错误

function setData($data=array()){ } 
Run Code Online (Sandbox Code Playgroud)

这将传递一个没有值的空数组 $data

  • 为参数指定默认值是一项重要技术,但不应与类型提示等同.例如,指定`func($ x = 0)`强制`$ x`的值为数字并不完全正确.相反,如果你的函数总是将`$ x`的值作为一个数字处理,那么巧合就可以了.实际上,如果你传入一个恰好可以解析为数字的字符串,那么它将以这种方式处理.`func('5')`会愉快地使用5作为整数值.不可解析的字符串被解释为零,因此您的默认值为0. (5认同)

Mac*_*ado 5

根据PHP Manual,您可以arrayPHP 5.1及更高版本以及PHP 7及更高版本上为stringint类型执行此操作。看一看:

  • Class/interface name 参数必须是给定类或接口名称的实例。 PHP 5.0.0
  • self 参数必须是与定义方法的类相同的类的实例。这只能用于类和实例方法。 PHP 5.0.0
  • array参数必须是一个数组。PHP 5.1.0

  • callable 该参数必须是有效的可调用对象。PHP 5.4.0
  • bool 参数必须是布尔值。 PHP 7.0.0
  • float 参数必须是浮点数。 PHP 7.0.0
  • int 参数必须是整数。 PHP 7.0.0

  • string 参数必须是字符串。PHP 7.0.0

  • iterable 参数必须是数组或 Traversable 的实例。PHP 7.1.0