强数据类型错误

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 之前将其视为临时解决方案。

【讨论】:

以上是关于强数据类型错误的主要内容,如果未能解决你的问题,请参考以下文章

杂碎小知识——基础阶段

数据类型:整数

sql数据库自增id在强类型数据集中出现溢出

数据类型和运算符

强类型数据集与弱类型数据集

python 语言特性