Использование константы в PHP-переключателе в PHP 5.5.9

После установки PHP 5.5.9 на Ubuntu 14.04 (Trusty Tahr ), я обнаружил это странное поведение с оператором switch и константой PHP_OS.

Я предполагаю, что в PHP 5.5.9 оператор switch также проверяет тот же тип (===)?

Или это ошибка PHP?

echo PHP_OS; // Linux
$os = PHP_OS;

switch (PHP_OS) {
    case "WINNT":
        echo 'Windows';
        break;
    case "Linux":
        echo 'Linux';
        break;
    default:
        echo 'Default';
        break;
}
// Default

switch ((string) PHP_OS) {
    case "WINNT":
        echo 'Windows';
        break;
    case "Linux":
        echo 'Linux';
        break;
    default:
        echo 'Default';
        break;
}
// Default

switch ($os) {
    case "WINNT":
        echo 'Windows';
        break;
    case "Linux":
        echo 'Linux';
        break;
    default:
        echo 'Default';
        break;
}
// Linux

person Asa Carter    schedule 03.09.2014    source источник
comment
Что за странное поведение?   -  person John Conde    schedule 03.09.2014
comment
В предыдущих версиях php switch (PHP_OS) возвращал выбор Linux   -  person Asa Carter    schedule 03.09.2014
comment
@AsaCarter Что произойдет, если вы замените switch (PHP_OS) на switch ((string) PHP_OS)?   -  person ClmentM    schedule 03.09.2014
comment
какое сейчас содержание PHP_OS?   -  person Marcin Orlowski    schedule 03.09.2014
comment
@ClémentMalet, я обновил вопрос с помощью этого кода. Удивительно, но до сих пор не работает.   -  person Asa Carter    schedule 03.09.2014
comment
@MarcinOrlowski, значение PHP_OS - Linux   -  person Asa Carter    schedule 03.09.2014
comment
Я запустил этот код на PHP 5.5.9 с Ubuntu, я получаю вывод Linux.   -  person N.B.    schedule 03.09.2014
comment
Я протестировал его с PHP 5.5.15, и он отлично работает в Windows.   -  person AbcAeffchen    schedule 03.09.2014
comment
Моя версия PHP — версия PHP 5.5.9-1ubuntu4.3.   -  person Asa Carter    schedule 03.09.2014


Ответы (2)


Переключатели PHP используют свободное сравнение, например ==, поэтому оно должно совпадать .

Пытаться:

switch (constant("PHP_OS"))
person matwr    schedule 03.09.2014

для тех, кто хочет иметь решение для констант класса, мы можем использовать этот метод:

switch($var){
        case get_class_vars('CLASSNAME')['CONST_CLASS']:
break;
person Snoozer    schedule 29.09.2020