我很惊讶地看到以下内容无法正常工作。
define('CONST_TEST','Some string');
echo "What is the value of {CONST_TEST} going to be?";
输出:{CONST_TEST}的价值是什么?
有没有办法解决大括号内的常量?
是的,我知道我可以做到
echo "What is the value of ".CONST_TEST." going to be?";
但是我不想连字符串,不是为了提高性能,而是为了提高可读性。
答案 0 :(得分:4)
不,这是不可能的,因为php会将CONST_TEST
视为单/双引号内的字符串。您必须使用连接。
echo "What is the value of ".CONST_TEST." going to be?";
答案 1 :(得分:2)
我不明白你为什么要大惊小怪,但你总能做到:
define('CONST_TEST','Some string');
$def=CONST_TEST;
echo "What is the value of $def going to be?";
答案 2 :(得分:1)
如果您非常想要该功能,可以使用relfection编写一些代码来查找所有常量及其值。然后将它们设置在一个变量中,如$ CONSTANTS ['CONSTANT_NAME'] ......这就意味着如果你想在一个字符串中放一个常量就可以使用{}。此外,不是将它们添加到$ CONSTANTS,而是使其成为实现arrayaccess的类,因此您可以强制执行其中的值不能以任何方式更改(仅添加到可以作为数组访问的对象中的新元素)。
所以使用它看起来像:
$CONSTANTS = new constant_collection();
//this bit would normally be automatically populate using reflection to find all the constants... but just for demo purposes, here is what would and wouldn't be allowed.
$CONSTANTS['PI'] = 3.14;
$CONSTANTS['PI'] = 4.34; //triggers an error
unset($CONSTANTS['PI']); //triggers an error
foreach ($CONSTANTS as $name=>$value) {
.... only if the correct interface methods are implemented to allow this
}
print count($CONSTANTS); //only if the countable interface is implemented to allow this
print "PI is {$CONSTANTS['PI']}"; //works fine :D
为了使你只需要输入一些额外的字符,你可以使用$ C而不是$ CONSTANTS;)
希望有所帮助,Scott
答案 3 :(得分:0)
可能无法实现,但由于您的目标是可读性,因此您可以使用sprintf / printf来实现比通过字符串连接更好的可读性。
define('CONST_TEST','Some string');
printf("What is the value of %s going to be?", CONST_TEST);