是否有可能在双引号内评估常量?

时间:2013-04-13 00:25:16

标签: php

有没有办法在双引号内部计算常量,以避免使用.进行连接?

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

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

2 个答案:

答案 0 :(得分:2)

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

一个工作示例:

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

define('FOO', 'Hello World!');
echo "The string says {$constant('FOO')}";

答案 1 :(得分:1)

不,这根本不可能。

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

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

join(DIRECTORY_SEPARATOR, array('foo', 'bar', 'baz'));