返回__toString()并转义为HTML

时间:2013-07-03 16:17:37

标签: php escaping tostring

我似乎对上述方法有问题:

    public function __toString()
    {
        ?>
        Some html code
        Some more html code
        <?=echo $this->content?>
        Last of the html code
        <?
        return '';
    }

我需要它在这个方法中我可以破解PHP代码,所以我可以更好地格式化并查看HTML代码。但如果我省略了返回,我会得到例外:

  

__ toString()必须返回一个字符串值。

我可以在没有回报的情况下管理任何方式吗?

3 个答案:

答案 0 :(得分:1)

您可以使用output buffer执行以下操作:

public function __toString()
{
  ob_start() ;
    ?>

    Some html code
    Some more html code
    <?=echo $this->content?>
    Last of the html code

    <?php
   $content = ob_get_content() ;
   ob_end_clean() ;
    return $content ;
}

因此,实际上您将输出存储在缓冲区中,将内容放入变量中,清理缓冲区。

之后,您可以成功返回字符串并使您的功能正常工作。

您无法绕过return,它是magic method,您必须实施它。

答案 1 :(得分:1)

虽然其他答案在技术上可行,但它们都滥用__toString()方法,该方法用于返回对象的字符串表示。

听起来你需要一种新的方法,例如

public function outputHTML()
{
    ?>
    Some html code
    Some more html code
    <?=echo $this->content?>
    Last of the html code
    <?
}

然后您可以通过致电$object->outputHTML()而不是仅仅致电$object

在适当的时间拨打电话

这更容易理解,并且将来会使代码维护变得更加简单,因为没有人会真实地期望__toString()打印出大量标记,文本然后不返回任何内容。

答案 2 :(得分:0)

可能是heredoc syntax的用途。

public function __toString() {
    $contents = <<<EOT

    <p>This is some text and you can still use $variables</p>

EOT;

    return $contents;
}