PHP: o 1 hat veya birden fazla satır birleştirmek için daha iyi mi?

8 Cevap php

Bir fark var mı ya da bir aşağıdaki diğerinden daha iyidir:

$var = '';
...
$var .= 'blah blah';
$var .= $var2;
$var .= 'blah blah';

Veya

$var = '';
...
$var .= 'blah blah' . $var2 . 'blah blah';

Bir hız farkı var mı yoksa diğeri üzerinde birini seçmek istiyorum bir nedeni var mı?

8 Cevap

Eğer dize echo eğer küçük bir fark var.

echo $var1,$var2,$var3 // comma (echo with multiple arguments)

biraz daha hızlıdır

echo $var1.$var2.$var3 // dot   (concat and echo)

Pez ve Topbit her ikisi de doğru. Ben sadece burada görülmüştür daha iyi görünüyor düşünüyorum bir şey işaret etmek istiyorum:

$var  = "line 1 \n";
$var .= "line 2 \n";

karşı

$var = "line 1 \n"
     . "line 2 \n";

Ben çok görsel olarak bu sonuç bir string $ var olduğu açıktır ilkine ikinci bir tercih. Ayrıca böyle aptalca hataları önler:

$var  = "line 1 \n";
$var .= "line 2 \n";
$vat .= "line 3 \n";
$var .= "line 4 \n";

EDIT: Evet, yarı-kolon bir yazım hatası oldu.

Bu, birkaç kısa dizeler için farketmez. Okumak için net ne olursa olsun kullanın.

Ama onlardan çok varsa o kadar kısa değil olanlar, muhtemelen bir dizide tutmak ve onları bir araya isteyeceksiniz (bin) söylüyor. (Böyle kod sık sık kullanarak dizeleri bitiştirmek olarak okumak kadar kolay olur gibi. "=", Performansın sunak üzerinde netlik ödün değil yani.)

EDIT: I don't think my above thinking is valid. PHP's strings are mutable, right?

Bir fark olmaz. Her iki birleştirme, yani okumak için kolay olursa olsun kullanmanız gereken budur.

Eğer sonra iyi performans iseniz, bir dizi kullanarak deneyin ve sonra bitirdiğinizde ne zaman patlar.

$var = array();
$var[] = "line 1\n";
$var[] = "line 2\n";
$var[] = "line 3";
$var = implode('', $var);

Eğer büyük dizeleri binlerce çalışan sürece bunu hız farkı yapmak herhangi bir şekilde önemsiz olacaktır.

Elle kod birleştirerek konum şey için, performans muhtemelen önemli değildir, bu yüzden okunabilirliği kraldır. Benim için, bu genellikle heredoc sözdizimi kullanarak anlamına gelir. Ben benim girinti yapısını kırar beğenmiyorum, ama satır sonları ve / veya dizeleri içine doğru takılı sekmeleri istediğiniz zaman özellikle güzel.

Ben böyle kısa bir durum için fark sanmıyorum. Ben genellikle ben kullanmak için gidiyorum okunabilirliği nedenlerle karar. Ben sadece aksi bir satırda, iki durumlara bölünmüş:

kod biraz kullanıcı görmek ne taklit böylece) bir çok satır yanıt oluşturma. Ben onu daha kolay bu şekilde yazım hataları ve hataları yakalamak için yapar bulduk.

$var  = "line 1 \n";
$var .= "line 2 \n";

b) hat uzunluğu. Hat benim pencere taşma olursa ben genelde bu yüzden sonunu okumak için satır sonuna gitmek zorunda değilsiniz onu kırarım. En diller yüzden gerçekten kodu fiziksel olarak kırmaya gerek yok, ama bunu yok bazı dillerde çalışmak yok çünkü sadece bir alışkanlık i var bir satır devam karakteri destekler.

Tek bir dize içine veri büyük miktarda almak için en hızlı yolu, çıkış echo'd yakalamak için çıktı tamponlama olduğunu.

ob_start();
/* many echos. For example, in a loop */
$outString = ob_get_contents(); // get the complete string
ob_end_clean();

Daha sonra nasıl olsa / güncelleyin bunu düzeltmek için geri gelmek zorunda çünkü genel olarak, bu programın hızına önemli bir fark yaratabilir, bu yüzden ne yapıyorsun belirgin görünmesi için düşüktür. Okunabilirliği kraldır.

Anlamlı bir fark yoktur. Bu sadece tercih kodlama meselesi.