PHP: bool против булева типа

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

36

Решение

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) и (булево) одинаковы.

46

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector