php格式化字符串EOD

时间:2011-05-20 11:59:09

标签: php

我得到了代码

$confirm = "if (!confirm('".Module::t("Approve") . "?')) return false;";

$js_approve =<<< EOD
function() {
    $confirm
    var url = $(this).attr('href');
    $.post(url, function(response) {
        alert(response);
    });
    return false;
}
EOD;

是否可以转换为像这样的代码

    $js_approve =<<< EOD
    function() {
        "if (!confirm('".Module::t("Approve") . "?')) return false;";
        var url = $(this).attr('href');
        $.post(url, function(response) {
            alert(response);
        });
        return false;
    }
    EOD;

任何想法?

4 个答案:

答案 0 :(得分:2)

不,不是。您不能对heredoc字符串使用缩进。

您应该阅读此页面上的警告: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

答案 1 :(得分:2)

除了你不能缩进,你也不能写这一行

"if (!confirm('".Module::t("Approve") . "?')) return false;";

在heredoc内部。

答案 2 :(得分:0)

为防止PHP使用nowdoc语法解析文本(自PHP 5.3.0起)

答案 3 :(得分:0)

从PHP文档中的这一位:

  

非常重要的是要注意,带有结束标识符的行必须不包含其他字符,除了可能是分号(;)。这尤其意味着标识符可能没有缩进,并且在分号之前或之后可能没有任何空格或制表符。同样重要的是要认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符。这是在UNIX系统上的\ n,包括Mac OS X.结束分隔符(可能后面跟一个分号)后面也必须跟一个换行符。

它表示标识符可能没有缩进。我喜欢保持我的缩进清洁,你可以像往常一样继续,但你必须注意的唯一事情就是结束EOD;之前有其他字符那一行(即它必须有一个前面的换行符)。除此之外,一切都会按照你期望的方式运作。

以您的代码为例:

    $js_approve =<<< EOD
    function() {
        "if (!confirm('".Module::t("Approve") . "?')) return false;";
        var url = $(this).attr('href');
        $.post(url, function(response) {
            alert(response);
        });
        return false;
    }
EOD;

工作正常