【问题标题】:php formatting string EODphp格式化字符串EOD
【发布时间】:2011-08-29 14:51:06
【问题描述】:

我得到了代码

$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;

有什么想法吗?

【问题讨论】:

标签: php


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我读过它,但看不到它如何帮助我运行功能。只有变量
    【解决方案3】:

    来自 PHP 文档中的这一点:

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

    它表示标识符可能不缩进。我喜欢保持我的缩进干净,你可以像往常一样继续,但你唯一需要注意的是结束 EOD; 在该行之前有 no 其他字符(即,它必须有一个前面的换行符)。除此之外,一切都会按照您的预期进行。

    以你的代码为例:

    $js_approve =

    可以正常使用

    【讨论】:

    • 抱歉。从经验来看,这种东西对我有用,虽然我从来没有用对象尝试过。也许尝试用{Module::t("Approve")} 替换".Module::t("Approve") . ",尽管这未经测试。
    【解决方案4】:

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

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

    在heredoc里面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      相关资源
      最近更新 更多