访问<<<<<<

时间:2011-03-09 14:00:12

标签: php constants heredoc

我正在尝试弄清楚在php中使用<<<HTML时如何使用已定义的变量。 这是我想要实现的一个例子:

<?php
define('TEST','This is a test');
echo <<<HTML
Defined: {TEST}
HTML;
?>

<<<HTML

中获取定义的“TEST”的适当方法是什么?

编辑:
我做了一个小测试来检查哪种方法最快。 对于我的测试,我在heredoc中使用了20个变量。以下是不同方法(以秒为单位)发生的事情:
Accessing defined variable inside <<<HTML in php似乎是最慢的方式 - 0.00216103 Accessing defined variable inside <<<HTML in php更快 - 0.00073290 Accessing defined variable inside <<<HTML in php更快 - 0.00052595 Accessing defined variable inside <<<HTML in php是最快的 - 0.00011110。

希望这有助于其他人:)

5 个答案:

答案 0 :(得分:11)

我不害怕,但是......

define('TEST','This is a test');

var $defined = TEST;

echo <<<HTML
Defined: {$defined}
HTML;

至少我知道一种直接在该上下文中使用定义值的方法,你需要使用一个变量。

答案 1 :(得分:5)

这是我在php手册的注释中找到的方法:http://www.php.net/manual/en/function.define.php#100449

这有点令人费解,但应该有效。

<?php
define('TEST','This is a test');

$cst = 'cst';
function cst($constant){
    return $constant;
}

echo <<<HTML
Defined: {$cst(TEST)}
HTML;

如果要包含多个已定义的CONSTANTS,这比手动将大量变量分配给常量值更好。

答案 2 :(得分:4)

您可以创建一个类似于常量访问器的类:

class DefineAccessor {
    function __get($name) {
        if (defined($name))
            return eval('return ' . $name . ';');
    }
}

创建一个实例,以便能够在heredoc中使用它:

$defines = new DefineAccessor;

然后像这样使用它:

echo <<<HTML
Defined: $defines->TEST
HTML;

答案 3 :(得分:3)

你做不到。将其值分配给实变量。

答案 4 :(得分:3)