【发布时间】:2010-05-30 01:25:22
【问题描述】:
这会打印苹果:
define("CONSTANT","apple");
echo CONSTANT;
但这不是:
echo "This is a constant: CONSTANT";
为什么?
【问题讨论】:
-
我不明白。第二种情况的预期输出是什么?
This is a apple: A? -
想想如果解析器必须检查是否有任何子字符串与定义的常量匹配,那么解析双引号字符串会做多少工作......并且当您定义更多常量时它会变慢。并且,在定义该常量之后,您必须在所有字符串中转义大写字母 A!
-
不打印的原因是因为它被视为字符串文字。 PHP 不知道在第二个示例中替换
apple,您必须像 Artefacto 演示的那样手动定义它。 -
因为 PHP 设计不佳。许多其他语言都可以很好地处理这个问题。
-
@BlaineLafreniere 抱歉,我并不是要暗示 一般 仅在 PHP 中使用原始问题中的语法会很困难。在您的 Ruby 示例(以及许多其他字符串模板系统)中,开发人员有一种方法可以指示将字符串的 哪一部分 视为代码。这是这里的关键区别
标签: php