是否可以在双引号内计算常量


Is it possible to evaluate constants inside double quotes?

有没有一种方法可以计算双引号内的常量,以避免使用.进行串联?

例如,我可以做以下事情:

echo "$variable";
echo "{$array["index"]}";
echo "{$this->myProperty}";

不幸的是,回声"{MY_CONSTANT}"不起作用。

那么,有没有一种方法可以像上面的例子一样评估常数,避免串联?

我知道是否有代码的替代方案,并得到相同的结果,但我的目标只是常量。

我这样做的动机是编写sql语句,例如:

$sql = "SELECT * FROM {MY_JOIN} WHERE id > 100";

其中MY_JOIN常数可能类似

"
orders
INNER JOIN
users
    ON (orders.user_id = users.id)
"

或者避免类似的东西

$dir = DIRECTORY_SEPARATOR."folder1".DIRECTORY_SEPARATOR."folder2".DIRECTORY_SEPARATOR;

我知道我可以写$separator = DIRECTORY_SEPARATOR之类的东西和代码$dir = "{$separator}folder1{$separator}folder2{$separator}";,但如果可能的话,我想直接用常数来做。

不,这根本不可能。

然而,对于您的特定示例,有两个很好的解决方案:

sprintf('SELECT ... %s ...', MY_CONSTANT);
join(DIRECTORY_SEPARATOR, array('foo', 'bar', 'baz'));

有趣的是,正如链接所建议的,我们可以用lambda函数来实现这一点,非常有趣。

一个工作示例:

<?php
$constant = function($cons){
   return constant($cons);
};
define('FOO', 'Hello World!');
echo "The string says {$constant('FOO')}";