我似乎对上述方法有问题:
public function __toString()
{
?>
Some html code
Some more html code
<?=echo $this->content?>
Last of the html code
<?
return '';
}
我需要它在这个方法中我可以破解PHP代码,所以我可以更好地格式化并查看HTML代码。但如果我省略了返回,我会得到例外:
__ toString()必须返回一个字符串值。
我可以在没有回报的情况下管理任何方式吗?
答案 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;
}