7

有没有办法评估双引号内的常量以避免使用连接.

例如,我可以执行以下操作:

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}";但如果可能的话,我想直接用常量来做这件事。

4

2 回答 2

2

不,这根本不可能。

但是,对于您的特定示例,有两个很好的解决方法:

sprintf('SELECT ... %s ...', MY_CONSTANT);

join(DIRECTORY_SEPARATOR, array('foo', 'bar', 'baz'));
于 2013-04-13T00:29:25.993 回答
2

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

一个工作示例:

<?php
$constant = function($cons){
   return constant($cons);
};

define('FOO', 'Hello World!');
echo "The string says {$constant('FOO')}";
于 2013-04-13T00:45:08.597 回答