Сильная ошибка ввода данных - PullRequest
6 голосов
/ 21 октября 2009

Нормально ли получить ошибку " Значение по умолчанию для параметров с подсказкой типа класса может быть только NULL " для метода в интерфейсе, определенном как

public function nullify(bool $force=FALSE);

Мне нужно, чтобы это был bool, а не объект, и FALSE по умолчанию.

Ответы [ 5 ]

10 голосов
/ 21 октября 2009

В php нет подсказок типа для логических параметров (пока). Вы можете указать только имя класса или array. Поэтому function foo(bool $b) означает: «параметр $ b должен быть экземпляром класса 'bool' или null".

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

Функции теперь могут заставить параметры быть объектами (указав имя класса в прототипе функции) или массивами (начиная с PHP 5.1).
5 голосов
/ 21 октября 2009

Как уже говорилось, подсказка типа работает только для массивов и объектов. Ваша функция может быть написана так:

public function nullify($force=FALSE){
  $force=(bool)$force;
  //further stuff
}
3 голосов
/ 21 октября 2009

Подсказка типа PHP 5 ограничена конкретным классом (или одним из его подклассов) или массивом. Вы не можете указать другие скалярные типы.

1 голос
/ 10 июня 2013

Нельзя заставить параметр быть логическим.

Как указано в 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
0 голосов
/ 11 июля 2013

Вы можете попробовать:

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

Рассматривайте это как временное решение, пока не обновите PHP.

...