2012-06-27 30 views
3

只是一个关于PHP如何处理开关语句的简短问题。PHP:使用未定义常量的开关语句

如果我有下面的代码

switch (APPLICATION_ENVIRONMENT) { 
    case 'production': 
     echo 'production'; 
     break; 
    case 'stage': 
     echo 'stage'; 
     break; 
    default: //dev 
     echo 'dev'; 
} 

将这个评价还是默认如果APPLICATION_ENVIRONMENT没有在任何地方定义?或者它会抛出一个错误?查看应用程序运行中的现有源代码,以前完成此操作的任何人先在常量上做了if(defined())以检查它是否存在,如果开关可以正确评估它,这是浪费

由于 DJ

回答

1

如果不确定,APPLICATION_ENVIRONMENT将由PHP解释为字符串"APPLICATION_ENVIRONMENT",因此将通过降低到默认,因为该字符串"APPLICATION_ENVIRONMENT"是不是你定义的交换机的案件之一。

echo APPLICATION_ENVIRONMENT; 

PHP公告:未定义的常量应用程序的使用 - 假设 'APPLICATION_ENVIRONMENT' 在PHP shell代码第1行

PHP当它遇到一个未定义的常量,并且,会发出通知更好或更坏,将在假设你打算引用它作为字符串的前提下处理它。

3

它会评估开关,但它会引发错误。

试试这个:

$env = defined('APPLICATION_ENVIRONMENT') ? APPLICATION_ENVIRONMENT : null; 

switch($env) { 
    .. 
} 
0

如果APPLICATION_ENVIRONMENT在代码中未定义的,它只会作为一个字符串,并打印默认切换值。

Switch语句需要一个变量。因此,即使您在代码的某处定义了APPLICATION_ENVIRONMENT,也可以将其用作switch($APPLICATION_ENVIRONMENT){..cases}而不是switch(APPLICATION_ENVIRONMENT){..cases}