PHP 5 Type Hinting
PHP 5 引入了类型提示。函数现在可以强制参数为对象(通过在函数中指定类的名称原型(prototype))或数组
(自 PHP 5.1 起)。但是,如果将 NULL
用作默认参数值,则允许将其作为以后任何调用的参数。
以上摘录如下:
如果 NULL
被用作默认参数值,它将被允许作为任何后续调用的参数。
上面的意思是:
如果默认参数与类型提示一起使用,它只能有 NULL
作为默认值。
即 code1 中的代码错误并导致:
fatal error :具有类类型提示的参数的默认值只能是 NULL
代码1:
function setName ( string $name = "happ") {
...
}
代码 2 中的代码是正确的:
代码2:
function setName ( string $name = NULL) {
...
}
为什么在php中赋值这个约束?
最佳答案
你不能输入提示字符串,你只能输入提示对象和数组,所以这是不正确的:
function setName ( string $name = "happ") {
(这里没有出现编译时错误的原因是 PHP 将“字符串”解释为类名。)
文档中的措辞意味着如果您这样做:
function foo(Foo $arg) {
那么传递给 foo() 的参数必须是对象 Foo 的一个实例。但如果你这样做:
function foo(Foo $arg = null) {
那么传递给 foo() 的参数可以是对象 Foo 的实例,也可以是 null。另请注意,如果您这样做:
function foo(array $foo = array(1, 2, 3))
那么你不能调用 foo(null)。如果你想要这个功能,你可以这样做:
function foo(array $foo = null) {
if ($foo === null) {
$foo = array(1, 2, 3);
}
[Edit 1]
从 PHP 5.4 开始,您可以键入提示 callable
:
function foo(callable $callback) {
call_user_func($callback);
}
[Edit 2]
从 PHP 7.0 开始,您可以键入提示 bool
、float
、 int
和 string
。这使得问题中的代码有效语法。从 PHP 7.1 开始,您可以键入提示 iterable
。
关于php - 类型提示 : Default Parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522984/