【发布时间】:2010-12-08 16:55:56
【问题描述】:
对于定义为的接口中的方法,得到错误“具有类类型提示的参数的默认值只能为 NULL”是否正常
public function nullify(bool $force=FALSE);
?
我需要它是 bool,而不是对象,并且默认为 FALSE。
【问题讨论】:
-
它应该适用于 php7
标签: php type-hinting
对于定义为的接口中的方法,得到错误“具有类类型提示的参数的默认值只能为 NULL”是否正常
public function nullify(bool $force=FALSE);
?
我需要它是 bool,而不是对象,并且默认为 FALSE。
【问题讨论】:
标签: php type-hinting
php 中没有布尔参数的类型提示(目前)。您只能指定类名或array。
因此function foo(bool $b) 的意思是:“参数$b 必须是'bool' 类的实例或null”。
http://docs.php.net/language.oop5.typehinting:
函数现在可以将参数强制为对象(通过在函数原型中指定类的名称)或数组(自 PHP 5.1 起)。
【讨论】:
如前所述,类型提示仅适用于数组和对象。你的函数可以这样写:
public function nullify($force=FALSE){
$force=(bool)$force;
//further stuff
}
【讨论】:
PHP 5 类型提示仅限于特定类(或其子类之一)或数组。您不能指定任何其他标量类型。
【讨论】:
您不能强制参数为布尔值。
在language.oop5.typehinting 中找到:
PHP 5 引入了类型提示。函数现在能够强制参数为对象 [...]、接口、数组(自 PHP 5.1 起)或可调用(自 PHP 5.4 起)。[...]
类型提示不能用于标量类型,例如 int 或 string。 [...]
在language.types.intro 中发现,PHP 标量类型是:
- 布尔值 - 整数 - float(浮点数,又名双精度) - 细绳
【讨论】:
你可以试试:
public function nullify($force){
if(is_object($force)) $force = false;
...
}
在升级 PHP 之前将其视为临时解决方案。
【讨论】: