8

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

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

在内部获取定义的“测试”的适当方法是<<<HTML什么?

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

希望这对其他人有帮助:)


你可以使用任何一个。
如果你在 mysql 中使用非规范化表(即没有连接),它类似于 mongoDB 中的对象,尽管更难查询。
因此,如果可以以合理的方式对数据进行反规范化,请使用 Mongo 否则,RDBMS。

4

5 回答 5

12

恐怕不漂亮,但是...

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

var $defined = TEST;

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

至少据我所知,没有一种直接在该上下文中使用定义值的方法,您需要使用变量。

于 2011-03-09T14:02:55.390 回答
7

这是我在 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,这比手动将大量变量分配给常量的值要好。

于 2011-03-09T14:07:00.773 回答
4

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

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

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

$defines = new DefineAccessor;

然后像这样使用它:

echo <<<HTML
Defined: $defines->TEST
HTML;
于 2011-03-09T14:15:39.467 回答
3

你不能。将其值赋给一个实变量。

于 2011-03-09T14:03:03.723 回答
2

只有这样 http://ru2.php.net/manual/en/language.types.string.php#74744

于 2011-03-09T14:06:00.147 回答