Могу ли я переопределить встроенную функцию PHP echo()?
Недавно я посмотрел на свой исходный код, и это был настоящий беспорядок.
my php source:
echo '<h1>Rar<h1>';
echo '<span>Rar</span>';
echo '<p>Rar</p>';
и когда я просматриваю источник браузера для отображаемой страницы:
<h1>Rar</h1><span>Rar</span><p>Rar</p>
есть ли способ переопределить эхо, чтобы каждый вывод заканчивался символом новой строки, что-то вроде
function echo($string)
{
echo $string . "\r\n";
}
Ответы
Ответ 1
echo
- не функция, а инструкция языка. Он не может быть переопределен. Если вы хотите улучшить свою разметку вывода, посмотрите Tidy.
Что вы можете сделать, это использовать метод поиска/замены IDE и заменить все операторы echo
на echo PHP_EOL,
. Это приведет к добавлению конкретной строки ОС char (s) перед любым выходом. Обратите внимание на запятую после PHP_EOL, поскольку это важно.
Вы можете вывести несколько значений с помощью echo следующим образом:
echo 'one', $foo, PHP_EOL,
'two', $bar, PHP_EOL;
поэтому нет необходимости писать echo
в каждой строке.
Однако, я согласен с тем, кто предложил использовать более специализированный подход к раздельному контенту и макету, например. используя шаблонные представления или HereDoc.
В дополнение, очень мало выигрыша в том, что у вас довольно разметка. Если вы используете такие инструменты, как Firebug для проверки HTML, у вас будет правильно отформатированная разметка, независимо от беспорядка, который действительно имеет разметка. Более того, на сайтах с большим количеством посетителей вы часто обнаружите, что разметка была уменьшена, что противоположно тому, что вы пытаетесь сделать, просто потому, что все эти новые строки и вкладки добавляют к весу страницы, что приводит к более медленному загрузки страниц и увеличения стоимости трафика.
Ответ 2
У вас есть различные возможности для вывода HTML.
Вы можете использовать синтаксис heredoc:
$html = <<<EOF
<h1>Rar<h1>
<span>Rar</span>
<p>Rar</p>
EOF
echo $hml;
Или (что лучше, на мой взгляд), отдельный HTML из PHP. Например. поместите всю логику PHP в верхнюю часть файла и HTML после блока PHP:
<?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.
Ответ 3
Вы можете настроить и вывести буфер, а затем запустить буфер через htmltidy. Уверенное расширение даже имеет конкретную функцию для этой цели. Просто позвоните, прежде чем вы начнете выводить свой html:
ob_start('ob_tidyhandler');
Ответ 4
Хотя это решение не отменяет эхо, вы можете получить что-то близкое к эху с новой линией. Добавить:
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";
вместо эха.
Ответ 5
Вы можете косвенно перегрузить echo()
с помощью __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!". с добавлением новой строки и возврата каретки в конце. Там способы дальнейшего инкапсулировать это, но они не входят в сферу моего ответа.
Edit:
Как было отмечено, вышеупомянутое решение является медленным/неуклюжим. Здесь более элегантное решение, использующее выходную буферизацию:
<?
function clean_up($foo) {
return $foo . '\r\n';
}
ob_start('clean_up');
ob_implicit_flush(true);
echo "Hello world!";
?>
Это быстрее и чище (хотя технически он не отменяет "эхо" ).
Ответ 6
Другим решением будет отделить ваш код от ваших макетов, используя подходящий механизм шаблонов.