baskı verilerin en iyi yolu

8 Cevap

for example i want to generate html code, using some data from database. here is two ways of printing data


<? echo '<li><img src="'.$row['image'].'" /></li>';?>
or
<? echo "<li><img src='$row[image]' /></li>";?>

Bunların her ikisi de çalışmaktadır. ve eğer öyleyse tarafından satır çatlıyor olmadan . çok iyi çalışıyor, neden insanlar, ilk yöntemini kullanın.


teşekkürler

8 Cevap

Ben bile kullanmak istiyorum <?php echo '<li><img src="' . $row['image'] . '" /></li>'; ?>

Orada bir hız farkı var, ama bu ancak ölçülebilir ve genellikle hiç de farkedilir olacaktır. Çift tırnak Her dizenin ilk ayrıştırılır. O tüm dizeleri için çift tırnak kullanmak daha iyi bu yüzden. Bunu değişkenler ile extremely birçok dizeleri kullanırsanız, ölçülebilir bir fark haline gelebilir - ama bunu yaparken ilk etapta oldukça kötü bir tasarım olacaktır.

Btw:. Aynı sıklıkla <?php ve ?> ile açık ve kapalı ayrıştırıcı geçiş için de geçerlidir.

Above yapmak için ana nedeni iyi kodlama uygulamadır.

Others may need to understand your script too. And maybe yourself too some years later. Vars in strings can be easier overlooked than vars included like this. Even more so on IDEs with syntax highlighting.

Hatta insanlar bu şekilde eklediğiniz her var önce yeni satır koymak gördüm. Ama IMHO bu biraz çok fazla. ;)


Daha fazla veya daha az offtopic: Hayır ben diğer yanıtlar oluyor savaşmayı okumadım, ama bildiğim eski 'Evet öyle' ezbere anaokulu vs "hayır o yavaş değil". ;)

Christs aşkına, sen lanet olsun, kodlayıcılar demektir. Sadece test:

<?php
$startt = microtime(true);

for ($i = 0; $i <= 10000000; $i++) {
    $test = 'This is test number ' . $i;
//  $test = "This is test number " . $i;
//  $test = "This is test number $i";
}

$endt = microtime(true);
echo 'Used time: ' . ($endt - $startt);
?>

Benim için ilk 5,1321198940277 verdi, ikinci bir 5,2075009346008 ve üçüncü 6,4821639060974 (fazla 1.2 saniye fark). Q.E.D. şimdiye kadar.

İlginç bir şey, farklı sistemlerde denemek olacaktır. Belki bu benim kendi soru yapmak gerekir.

En iyi yolu sadece bir yöntemi kullanmak olacaktır.

echo sprintf('<li><img src="%s" /></li>', $row['image']);

Okumak çok daha kolay ve az hata eğilimli getirsek değişti / daha sonra genişletilmiş.

Başka bir yöntem:

<li><img src="<?php echo($row['image']); ?>" /></li>
<? echo '<li><img src="'.$row['image'].'" /></li>';?>

Bir makul bir strateji çıkışına düz PHP çiftleşmiş tüm statik içeriğidir. Bu şekilde statik içerik PHP string literal kaçan konusunda endişelenmenize gerek yok:

<li><img src="<? echo $row['image']; ?>"/></li>

Ancak, (a) HTML içine tüm ham metin dizeleri çıkışında htmlspecialchars() kullanmanız gerekir, yoksa olası çapraz site betik sorunları var. Onlar tüm sunucularda açık olmayabilir olarak da, <?, kısa etiketler genellikle kaçınılmalıdır.

Şablonlar "htmlspecialchars" yazarak miktarını azaltmak için, bir kısayol işlevini tanımlamak:

<?php
    function h($s) {
        echo htmlspecialchars($s, ENT_QUOTES);
    }
?>

<li><img src="<?php h($row['image']); ?>"/></li>

İkinci yöntemde:

<? echo "<li><img src='$row[image]' /></li>";?>

Bu fonksiyonları kullanamazsınız, sadece değişkenleri kullanabilirsiniz. Eğer değişkenleri yazdırırken ise hangi yöntemi kullandığınız önemli değildir.

hızlı şekilde yerine Zincirleme parametreleri içeren bir dize birden parametreleri ile echo işlevini çağırmak için:

echo '<li><img src="',$row['image'],'" /></li>';

eşdeğerdir

echo '<li><img src="';
echo $row['image'];
echo '" /></li>'

'den daha hızlı olan

echo '<li><img src=";'.$row['image'].'" /></li>';

Eğer nitelik değerlerinizi belirterek için html etiketleri ' kullanıyorsanız o " PHP ve kullanmak {[(0 ardından html " kullanıyorsanız kullanın )]}. Her iki şekilde \ tarafından html alıntı kaçmak gerekmez