强大的数据输入错误

时间:2009-10-21 12:46:13

标签: php type-hinting

对于定义为

的接口中的方法,获取错误“具有类类型提示的参数的默认值只能为NULL ”是否正常
public function nullify(bool $force=FALSE);

我需要它是bool,而不是对象,默认为FALSE。

5 个答案:

答案 0 :(得分:10)

在php(尚未)中没有类型提示布尔参数。您只能指定班级名称或array。 因此function foo(bool $b)表示:“参数$ b必须是类'bool'的实例或null”。

http://docs.php.net/language.oop5.typehinting

函数现在能够强制参数为对象(通过在函数原型中指定类的名称)或数组(从PHP 5.1开始)。

答案 1 :(得分:5)

如前所述,类型提示仅适用于数组和对象。您的功能可以这样写:

public function nullify($force=FALSE){
  $force=(bool)$force;
  //further stuff
}

答案 2 :(得分:3)

PHP 5类型提示仅限于特定类(或其子类之一)或数组。您不能指定任何其他标量类型。

答案 3 :(得分:1)

您不能强制参数为布尔值。

language.oop5.typehinting中找到:

PHP 5引入了类型提示。函数现在能够强制参数为对象,接口,数组(自PHP 5.1起)或可调用(自PHP 5.4起)。

[...]

类型提示不能与标量类型一起使用,例如int或string。 [...]

language.types.intro中所见,PHP标量类型为:

- boolean
- integer
- float (floating-point number, aka double)
- string

答案 4 :(得分:0)

你可以尝试:

public function nullify($force){
  if(is_object($force)) $force = false;
  ...
}

在升级PHP之前,请将其视为临时解决方案。