关于PHP如何处理switch语句的一个简单问题。
如果我有以下代码
switch (APPLICATION_ENVIRONMENT) {
case 'production':
echo 'production';
break;
case 'stage':
echo 'stage';
break;
default: //dev
echo 'dev';
}
如果在任何地方都没有定义APPLICATION_ENVIRONMENT,那么这仍然会评估为默认值吗?还是会抛出错误?查看正在运行的应用程序中的现有源代码,之前已经完成此操作的人首先在常量上执行了if(defined())以检查它是否存在,如果交换机可以正确地为我评估
,那将是一种浪费由于 DJ
答案 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}