我最近查看了我的源代码,这真是一团糟。
我的php来源:
echo '<h1>Rar<h1>';
echo '<span>Rar</span>';
echo '<p>Rar</p>';
当我查看呈现页面的浏览器源时:
<h1>Rar</h1><span>Rar</span><p>Rar</p>
有没有办法让我覆盖echo,这样每个输出都会以换行符结束,比如
function echo($string)
{
echo $string . "\r\n";
}
答案 0 :(得分:10)
echo
不是函数,而是语言语句。它无法重新定义。如果您希望美化输出标记,请查看Tidy。
> 这将在任何输出之前附加操作系统特定的换行符。请注意PHP_EOL之后的逗号,因为它很重要。
您可以使用echo输出多个值:
echo
因此无需在每一行上写echo PHP_EOL,
。
但是,我同意任何建议使用更专用的方法来分隔内容和布局的人,例如使用模板视图或HereDoc。
另外,拥有漂亮的标记几乎没有收获。如果您使用Firebug之类的工具来检查HTML,那么无论标记确实是多么混乱,您都将拥有格式正确的标记。此外,在拥有大量访问者的网站上,您经常会发现标记缩小,这与您尝试执行的操作相反,只是因为所有这些换行符和标签都会增加页面的重量,从而导致速度变慢页面加载和流量成本增加。
答案 1 :(得分:3)
您可以输出各种HTML。
您可以使用heredoc语法:
$html = <<<EOF
<h1>Rar<h1>
<span>Rar</span>
<p>Rar</p>
EOF
echo $hml;
或者(我认为哪种方式更好),将PHP与PHP分开。例如。将所有PHP逻辑放在文件的顶部,并在PHP块之后放置HTML:
<?php
// all your PHP goes here
$foo = 'bar'
?>
<!-- HTML comes here -->
<html>
<body>
<div>Hello <?php echo $foo; ?> </div>
</body>
</html>
可以如上所示打印变量。但是这些变量不包含HTML。
如果必须根据条件输出HTML,可以使用alternative syntax for control statements:
<?php if($some_condition): ?>
<h1>Rar<h1>
<span>Rar</span>
<p>Rar</p>
<?php endif ?>
这样,调试HTML也更容易,因为它不仅仅是一个PHP字符串。
答案 2 :(得分:2)
您可以设置并输出缓冲区,然后通过htmltidy运行缓冲区。整洁的扩展甚至有a specific function用于此目的。只需在开始输出html之前调用它:
ob_start('ob_tidyhandler');
答案 3 :(得分:1)
虽然此解决方案不会覆盖echo,但您可以使用换行符接近echo。添加:
function e() {
return o::singleton();
}
class o {
private static $instance;
public static function singleton()
{
if (!isset(self::$instance)) {
$className = __CLASS__;
self::$instance = new $className;
}
return self::$instance;
}
public function __set($prop, $txt) {
echo $txt . PHP_EOL;
}
}
到您的文件,然后您可以使用:
e()->o = "Line which ends in newline";
而不是回声。
答案 4 :(得分:0)
您可以使用echo()
magic method来间接超载__toString()
,如下所示:
<?php
class CleanOutput
{
public $content;
public function __construct($c) {
$this->content= $c;
}
public function __toString() {
return $this->content . '\r\n';
}
}
$text= new CleanOutput('Hello world!');
echo $text;
?>
上面会输出“Hello world!”最后附加换行符和回车符。有进一步封装的方法,但它们超出了我的答案范围。
修改强>:
如上所述,上述解决方案缓慢/笨拙。这是使用output buffering:
<?
function clean_up($foo) {
return $foo . '\r\n';
}
ob_start('clean_up');
ob_implicit_flush(true);
echo "Hello world!";
?>
这更快更干净(虽然它在技术上不会“覆盖”回声)。
答案 5 :(得分:0)
另一种解决方案是使用适当的模板引擎将代码与布局分开。