I) (PHP yerleşik işlev yankı kılabilirsiniz?

6 Cevap

Geçenlerde benim kaynak kodu baktı ve gerçek bir karışıklık oldu.

Benim php kaynak:

echo '<h1>Rar<h1>';
echo '<span>Rar</span>';
echo '<p>Rar</p>';

ve ben render sayfa için tarayıcı kaynağını görüntülemek zaman:

<h1>Rar</h1><span>Rar</span><p>Rar</p>

her çıktı, bir satır ile gibi bir şey biteceğini Beni böylece yankı geçersiz kılmak için bir yol var

function echo($string)
{
 echo $string . "\r\n";
}

6 Cevap

echo is not a function, but a language statement. It cannot be redefined. If you are looking to prettify your output markup, have look at Tidy.


Eğer could, yöntem yerine ve echo PHP_EOL, tüm echo ifadeleri değiştirmek / senin IDE arama kullanmak nedir yok. Bu, herhangi bir çıkıştan önce OS belirli satır karakter (ler) append olacaktır. Önemli olduğu gibi PHP_EOL sonra virgül unutmayın.

Bu gibi yankı ile çıkışı birkaç değerlerini yapabilirsiniz:

echo 'one', $foo, PHP_EOL,
     'two', $bar, PHP_EOL;

böylece her satırda echo yazmaya gerek yoktur.

However, ben ayrı içerik ve mizanpaj örneğin bir daha özel bir yaklaşım kullanarak önerilen herkesle katılıyorum şablon görüşlerini veya yorumlu metin kullanımı.

Bunun dışında ilave, güzel biçimlendirme sahip çok az kazanç yoktur. Eğer HTML incelemek için Firebug gibi araçlar kullanıyorsanız, düzgün olursa biçimlendirme gerçekten karışıklık biçimlendirme biçimlendirilmiş olacaktır. Tüm bu newlines ve sekmeler yavaş yol açan sayfanın ağırlığı eklemek çünkü Ayrıca, ziyaretçilerin bir çok sitelerde, genellikle, yapmaya çalıştığınız şeyin tersidir minified biçimlendirme bulacaksınız sayfa yükler ve artan trafik maliyeti.

HTML çıktı için çeşitli olanaklar var.

Sen heredoc sözdizimi kullanabilirsiniz:

$html = <<<EOF
<h1>Rar<h1>
<span>Rar</span>
<p>Rar</p>
EOF
echo $hml;

Ya da (ne Bence yol daha iyidir), separate HTML from PHP. Örneğin PHP bloğunun sonra dosya ve HTML üst tüm PHP mantığı koydu:

<?php
   // all your PHP goes here
   $foo = 'bar'
?>
<!-- HTML comes here -->
<html>
  <body>
    <div>Hello <?php echo $foo; ?> </div>
  </body>
</html>

Yukarıda gösterildiği gibi değişkenler basılabilir. Ancak bu değişkenler don't HTML içerir.

Eğer bir koşula göre çıkış HTML varsa, kullanabilirsiniz alternative syntax for control statements:

<?php if($some_condition): ?>
    <h1>Rar<h1>
    <span>Rar</span>
    <p>Rar</p>
<?php endif ?>

Bu şekilde, bir PHP string değil sadece olarak HTML hatalarını ayıklamak için de daha kolaydır.

Sen kurmak ve çıkış tamponu ve ardından htmltidy ile tampon çalıştırabilirsiniz. Düzenli uzantı bile amacıyla a specific function vardır. Eğer html çıktısı başlamadan önce sadece bu çağırır:

ob_start('ob_tidyhandler');

Başka bir çözüm, uygun bir çiftleşmiş motoru kullanarak düzenleri kodunuzu ayırmak olacaktır.

Bu çözüm yankı geçersiz kılmaz da, bir satır ile yankı yakın bir şey alabilirsiniz. Ekle:

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;
    }
}

dosyanıza, ve daha sonra da kullanabilirsiniz:

e()->o = "Line which ends in newline";

yerine eko.

You can dolaylı aşırı echo() __toString() magic method gibi pek kullanılarak:

<?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;
?>

Yukarıdaki olur çıktı "Merhaba dünya!" sonuna eklenecek bir satır ve satır ile. Orada daha bu saklanması yolları var, ama onlar benim cevap kapsamı dışındadır.

Edit:
As was noted, the above solution is slow/clumsy. Here's a more elegant solution using output buffering:

<?
function clean_up($foo) {
   return $foo . '\r\n';
}
ob_start('clean_up');
ob_implicit_flush(true);
echo "Hello world!";
?>

(Teknik olarak 'override' echo değil rağmen) bu daha hızlı ve daha temizdir.