我最近查看了我的源代码,它非常混乱。
我的 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";
}
我最近查看了我的源代码,它非常混乱。
我的 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";
}
echo
并不是一个函数,而是一种语言声明。它不能被重新定义。如果你想要美化你的输出标记,可以看看Tidy。
你可以使用IDE的搜索/替换方法,将所有的echo
语句替换为echo PHP_EOL,
。这会在任何输出之前追加操作系统特定的换行符。请注意,在PHP_EOL后面加上逗号非常重要。
你可以像这样使用echo输出多个值:
echo 'one', $foo, PHP_EOL,
'two', $bar, PHP_EOL;
因此,每行都不需要写echo
。
然而,我同意任何建议使用更专业的方法来分离内容和布局,例如使用模板视图或HereDoc。
此外,精美的标记几乎没有什么好处。如果您使用类似Firebug的工具检查HTML,则无论标记实际上有多混乱,您都将获得正确格式化的标记。此外,在访问量大的站点上,您经常会发现标记被压缩,这与您所试图做的正好相反,因为所有这些换行符和制表符都会增加页面的大小,从而导致页面加载速度变慢和流量成本增加。
您有多种输出HTML的可能性。
您可以使用heredoc语法:
$html = <<<EOF
<h1>Rar<h1>
<span>Rar</span>
<p>Rar</p>
EOF
echo $hml;
<?php
// all your PHP goes here
$foo = 'bar'
?>
<!-- HTML comes here -->
<html>
<body>
<div>Hello <?php echo $foo; ?> </div>
</body>
</html>
可以像上面展示的那样打印变量。但是这些变量不包含HTML。
当你必须根据条件输出HTML时,可以使用控制语句的替代语法:
<?php if($some_condition): ?>
<h1>Rar<h1>
<span>Rar</span>
<p>Rar</p>
<?php endif ?>
这样做也更容易调试您的HTML,因为它不仅仅是一个PHP字符串。
虽然这个解决方案没有覆盖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";
instead of echo.
您可以通过使用__toString()
魔术方法来间接重载echo()
,示例如下:
<?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;
?>
<?
function clean_up($foo) {
return $foo . '\r\n';
}
ob_start('clean_up');
ob_implicit_flush(true);
echo "Hello world!";
?>
这样做更快,更干净(虽然从技术上讲它并没有“覆盖”echo)。
echo
。每当对象在字符串上下文中使用时,将使用 __toString
。这是 echo
,但也包括 print
或 (string)
或 'foo' . $object
。 - Gordon