这个问题让我想到了裸字符串。
当 PHP 看到一个没有用引号括起来的字符串时,它首先检查它是否是一个常量。如果不是,它只是假设它是一个字符串并继续。所以例如,如果我有
echo $foo[bar];
如果有一个名为 bar 的常量,它会将其用作数组键,但如果没有,则它将 bar 视为裸字符串,因此它的行为就像
echo $foo["bar"];
如果在将来的某个日期添加具有相同名称的常量,这可能会导致各种问题。
我的问题是,在任何情况下使用裸字符串实际上是有意义的吗?
不,我看不到一个有意义的实例,而且它总是很危险。绝对应该保留使用不带引号的字符串来寻址常量。我完全不明白 PHP 的发明者是如何决定引入这种荒谬的行为的——它使得正确使用常量几乎是不可能的(因为如果你试图访问一个尚未定义的常量,PHP 会默默地、愚蠢地生成一个字符串)没有任何好处。
这可能不算是合法的,但是我朋友的可推文概念验证 MVC 框架TweetMVC在一些地方避开了引号以挤入更多字符,例如:
foreach(c('mod')as$f)require"t/$f.php";@list($c,$m,$a)=explode('/',@$_GET[r],3);$c=$c?:c('dc');$o=(@include"c/$c.php")?@new$c($m,$a):e(1)
唯一一次使用裸字符串作为键是如果它以前被define()
用于常量。