2014-09-03 40 views
4

在Ubuntu 14上安裝PHP 5.5.9後,我發現了一個奇怪的行爲,使用switch語句和PHP_OS常量。在php開關中使用常量php 5.5.9

我認爲在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 
+1

什麼是 「怪異行爲」? – 2014-09-03 13:22:58

+0

在以前版本的php'switch(PHP_OS)'中會返回「選擇Linux」 – 2014-09-03 13:23:58

+2

@AsaCarter如果用'switch((string)PHP_OS)'替換'switch(PHP_OS)',會發生什麼? – Sugar 2014-09-03 13:30:04

回答

2

PHP交換機使用寬鬆比較像==所以它應該匹配。

可以嘗試:

switch (constant("PHP_OS")) 
+0

這樣的工作,它匹配Linux – 2014-09-03 13:46:50

+0

偉大的,很高興爲您解決。 – matwr 2014-09-04 09:25:19