Я пытался использовать подсказки типа больше в PHP. Сегодня я писал функцию, которая принимает логическое значение с параметром по умолчанию, и я заметил, что функция вида
function foo(boolean $bar = false) {
var_dump($bar);
}
на самом деле выдает фатальную ошибку:
Значение по умолчанию для параметров с подсказкой типа класса может быть только NULL
Пока функция аналогичной формы
function foo(bool $bar = false) {
var_dump($bar);
}
не. Тем не менее, оба
var_dump((bool) $bar);
var_dump((boolean) $bar);
дать точно такой же вывод
: boolean false
Почему это? Это похоже на классы-обертки в Java?
http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration
Предупреждение
Псевдонимы для указанных выше скалярных типов не поддерживаются. Вместо этого они рассматриваются как имена классов или интерфейсов. Например, для использования логического значения в качестве параметра или возвращаемого типа потребуется аргумент или возвращаемое значение, которое является экземпляром класса или интерфейса логического типа, а не типа bool:<?php function test(boolean $param) {} test(true); ?>
Приведенный выше пример выведет:
Неустранимая ошибка: Uncaught TypeError: Аргумент 1, переданный в test (), должен быть экземпляром boolean, учитывая boolean
Итак, в двух словах, boolean
это псевдоним для bool
и псевдонимы не работают в подсказках типа.
Используйте «настоящее» имя: BOOL
Там нет сходства между Type Hinting
а также Type Casting
.
Тип подсказки это то, что вы говорите своей функции, какой тип должен быть принят.
Тип литья заключается в «переключении» между типами.
Разрешенные броски:
(int), (integer) - cast to integer (bool), (boolean) - cast to boolean (float), (double), (real) - cast to float (string) - cast to string (array) - cast to array (object) - cast to object (unset) - cast to NULL (PHP 5)
В php тип литья оба (bool) и (булево) одинаковы.
Других решений пока нет …