【问题标题】:Accessing defined variable inside <<<HTML in php在 php 中访问 <<<HTML 中定义的变量
【发布时间】:2011-03-09 14:00:12
【问题描述】:

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

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

&lt;&lt;&lt;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。

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

【问题讨论】:

  • 我希望为这个 10 倍的测试投票,但我只能做一个。谢谢这位兄弟!
  • 不客气!请记住,这是 2011 年对旧 PHP 版本的测试。从那时起,特别是 php >= 7,情况可能发生了变化。:)

标签: php constants heredoc


【解决方案1】:

恐怕不漂亮,但是……

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

var $defined = TEST;

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

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

【讨论】:

  • 我也是这么想的。我只是好奇是否还有其他方法。
  • 获得投票 - 纯粹是因为它是正确的。 heredoc 语法只能评估变量 - 您必须为变量分配一个常量才能将其插入到您的字符串中。也许看看另一种字符串构建技术?
  • 我使用普通变量而不是定义的。我只是想知道事情是否在 php 中评估得更好,但显然我将不得不长时间使用这些变量:)
【解决方案2】:

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

【讨论】:

  • 哇,伙计……这个代码太棒了!从来没有想过你可以这样使用heredoc中的函数!感谢分享!
  • 就像我说的,这有点令人费解。必须归功于 PHP 手册上的代码创建者。那里有一些来自严肃专家的宝石。
  • @Martin:这不是不真实的。我不会争论。
  • @Martin:基本上,它是一个匿名函数。 php.net/manual/en/functions.anonymous.php
  • 我看到了匿名函数的美妙之处,我只是担心我不小心将$cst 设置为其他值,例如$cst='runkit_constant_remove'.
【解决方案3】:

您可以创建一个类来充当常量的访问器:

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

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

$defines = new DefineAccessor;

然后像这样使用它:

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

【讨论】:

  • 这是一个漂亮且可重复使用的解决方案,但它是必要的。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    【讨论】:

    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多