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