PHP:具有未定义常量的switch语句

时间:2012-06-27 02:43:43

标签: php constants switch-statement

关于PHP如何处理switch语句的一个简单问题。

如果我有以下代码

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

如果在任何地方都没有定义APPLICATION_ENVIRONMENT,那么这仍然会评估为默认值吗?还是会抛出错误?查看正在运行的应用程序中的现有源代码,之前已经完成此操作的人首先在常量上执行了if(defined())以检查它是否存在,如果交换机可以正确地为我评估

,那将是一种浪费

由于 DJ

3 个答案:

答案 0 :(得分:3)

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

请改为尝试:

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

switch($env) {
  ..
}

答案 1 :(得分:1)

如果未定义,则APPLICATION_ENVIRONMENT将被PHP解释为字符串"APPLICATION_ENVIRONMENT",因此字符串"APPLICATION_ENVIRONMENT"不是您定义的切换案例之一,因此会降至默认值。

echo APPLICATION_ENVIRONMENT;
  

PHP注意:使用未定义的常量APPLICATION - 假设' APPLICATION_ENVIRONMENT'在第1行的php shell代码中

PHP会在遇到未定义的常量时发出通知,并且无论好坏,都会在假设您打算将其作为字符串引用的情况下处理它。

答案 2 :(得分:0)

如果代码中未定义APPLICATION_ENVIRONMENT,它将仅作为字符串并打印默认开关值。

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