3

只是一个关于 PHP 如何处理 switch 语句的快速问题。

如果我有以下代码

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

如果 APPLICATION_ENVIRONMENT 没有在任何地方定义,这仍然会评估为默认值吗?还是会抛出错误?查看正在运行的应用程序中的现有源代码,之前做过此操作的人首先对常量执行了 if(defined()) 以检查它是否存在,如果 switch 可以为我正确评估它,这是一种浪费

谢谢 DJ

4

3 回答 3

3

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

试试这个:

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

switch($env) {
  ..
}
于 2012-06-27T02:47:07.843 回答
1

如果未定义,APPLICATION_ENVIRONMENTPHP 会将其解释为 string "APPLICATION_ENVIRONMENT",因此将采用默认值,因为 string"APPLICATION_ENVIRONMENT"不是您定义的 switch 案例之一。

echo APPLICATION_ENVIRONMENT;

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

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

于 2012-06-27T02:45:34.417 回答
0

如果APPLICATION_ENVIRONMENT在代码中未定义,它将简单地充当字符串并打印默认开关值。

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

于 2012-06-27T04:22:23.567 回答