如何使用复杂(卷曲)语法的常量?

时间:2010-09-04 12:02:55

标签: php const curly-braces

我很惊讶地看到以下内容无法正常工作。

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?";

但是我不想连字符串,不是为了提高性能,而是为了提高可读性。

4 个答案:

答案 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);