Php 使用未定义的常量作为变量时的缺点
嗯,不知道要搜索什么,所以不知道这是否是重复的 例如:Php 使用未定义的常量作为变量时的缺点,php,constants,Php,Constants,嗯,不知道要搜索什么,所以不知道这是否是重复的 例如: function foo($bar){ switch($bar) case UNDEFINED: return 'foo'; break; case DEFINED: return 'bar'; break; default: return 'no foo and no bar';
function foo($bar){
switch($bar)
case UNDEFINED:
return 'foo';
break;
case DEFINED:
return 'bar';
break;
default:
return 'no foo and no bar';
}
}
echo foo(DEFINED); # edited: had $ before function call
// bar
echo foo(OUTPUT);
// no foo and no bar
PHP(5.3版)不会抛出任何错误,但这有什么缺点吗?未定义的常量被解释为字符串。在您的情况下,这将是两个字符串“已定义”和“未定义”。从PHP手册: 如果使用未定义的常量,PHP 假设您指的是 常量本身,就像你调用 它是一个字符串(常数vs “常数”)。水平误差 届时将发布E_通知 发生了 编辑忽略
E_通知
被认为是不好的风格,这来自PHP文档:
在开发期间启用E_通知
有一些好处。用于调试
用途:通知消息将发出警告
您需要了解代码中可能存在的错误。
例如,使用未赋值的值
被警告了。这是非常有用的
查找拼写错误并节省时间
调试。注意,消息将发出警告
你喜欢糟糕的风格。例如
$arr[item]最好写为
$arr['item']因为PHP试图处理
“项”作为常量。如果不是
常量,PHP假定它是字符串
数组的索引
这是怎么回事?我不认为这是做什么,你认为它做。定义值和未定义值的设置是什么?@Nathan,好吧,它确实起作用了,它也起作用了。@Tom这是什么?你的问题一点也不清楚。正如@spektom在下面所说的,如果您还没有定义这些常量,它将比较$bar==“未定义”和$bar==“已定义”。如果您已经定义了这些常量,那么它会将它们与您设置的任何值进行比较。它并不是检查它们是定义的还是未定义的,代码暗示了这一点(尽管我不确定您是否定义)。@Nathan,嗯,这些都没有定义(根本没有),因此它将它们转换为字符串,然后进行比较。基本上,临时常量表示不带$的变量。我说清楚了吗?spektom的答案到底描述了什么?你是否在其他地方定义了这些常数?除了注意到错误之外,没有其他缺点,我可以自由使用它?还是不推荐?啊,我明白了。。。基本上
foo(未定义的\u常量)
有点像$array[UNQUOTED\u KEY]
?是的,在这两种情况下,PHP都会自动将未初始化的常量转换为字符串。