PHP: bool vs boolean type hinting

Я пытаюсь использовать тип hinting больше в 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?

Ответы

Ответ 1

http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

Внимание
Псевдонимы для указанных выше скалярных типов не поддерживаются. Вместо этого они рассматриваются как имена классов или интерфейсов. Например, использование boolean как параметра или возвращаемого типа потребует аргумента или возвращаемого значения, которое является экземпляром класса или интерфейса логическим, а не типа bool:

<?php
function test(boolean $param) {}
test(true);
?>

Вышеприведенный пример выводит:

Fatal error: Uncaught TypeError: аргумент 1, переданный в test(), должен быть экземпляром логических, булевых данных

Итак, boolean является псевдонимом для bool, а псевдонимы не работают в типах. Используйте "настоящее" имя.


Нет никакого сходства между Type Hinting и Type Casting

Подсказка типа

- это что-то вроде того, что вы говорите своей функции, тип которой должен быть принят.

в то время как литье типов равно switching между типами,

Разрешенные броски:

(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-type литье (bool) и (boolean) одинаковы.