3

Ubuntu 14.04 (Trusty Tahr) 上安装 PHP 5.5.9 后,我发现这个奇怪的行为带有一个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
4

2 回答 2

2

PHP 开关使用松散比较 like ==,所以它应该匹配。

尝试:

switch (constant("PHP_OS"))
于 2014-09-03T13:44:32.193 回答
0

对于那些想要为类常量提供解决方案的人,我们可以使用这种方法:

switch($var){
        case get_class_vars('CLASSNAME')['CONST_CLASS']:
break;
于 2020-09-29T08:48:56.657 回答