Geçen değişkenler yöntemi arasındaki PHP performans farkı

4 Cevap php

PHP referans olarak yerine değerler gibi verileri geçerken herhangi ölçülebilir performans farkı olacak mı?

Birkaç kişi değişken değerleri yerine referans olarak kabul edilebilir farkında gibi görünüyor. Bu sağduyu mi değil mi?

4 Cevap

Eğer değer (PHP5 + nesneler dışında her şey için varsayılan olan) tarafından büyük bir değişken geçiyoruz, o zaman evet, bir performans isabet alabilir.

Kullanıcı POST veri büyük miktarda gönderdiğinde eğer normal bir işleve o geçmek olsaydı Örneğin, performansını etkileyecek olan, bütün dizi kopyalanmış olması gerekir, (aka değer geçmek). Ancak, çok büyük ölçekli sitede değilseniz, muhtemelen isabet fark etmez.

PHP mümkündür referans olarak geçmek, ama kesinlikle varsayılan (bir nesne olmadığı sürece): Eklemek gereken bir & değişken yapmak için önce aksi takdirde değerine göre sadece (ve kopyalar), referans olarak geçmektedir. PHP5 gibi, nesneleri otomatik olarak başvuruya göre iletilir, ancak PHP5 açıkça referans olarak geçmek gerekiyor önce (yani eklemek &)

Benim anlayış, PHP 5 değerine göre basit veri türleri ve dizileri geçer, ancak bu nesneler söz konusu olduğunda referans olarak geçer. Bu farkında olması gereken bir davranıştır görünüyor - Ben diziler değer geçirilir varsayalım ve yapılacak bir kopyasını gerekmez, bu nedenle büyük olanları iyi bir performans isabet tabi olabilir.

Ben açıkça referans olarak geçen ve PHP onun şey icar karşı argümanlar bol gördüm.

Ayrıca, değer tarafından bir nesne geçmek istiyorsanız o zaman ideal, klonlamak gerekir.

Bir performans farkı varsa, bu ihmal edilebilir bulunuyor. (Ben bu doğru bir durum düşünemiyorum hariç) referans know o geçici bir performans isabet neden sürece mikro optimizasyonlar bu tür endişe etmeyin.

Kötü tasarım teşvik çünkü bir yan not olarak, insanlar genellikle çok küresel değişkenleri yok gibi kullanarak, başvuruya göre argümanları iletme karşı uyarıyor.

Ben bile, son bölümde ne demek emin değilim. PHP varsayılan değere göre argümanları geçer.

Objects are always passed by reference if you use a recent version of PHP. As of the other type, the main concern are the strings / array. For those it depends. PHP's implementation of strings makes that if you don't modify the string you are passing to the function's argument (you only read it / scan it), it never will be copied. The implementation is called "copy-on-write". I'm not sure about array, I'll need some test to answer this.

Eğer değeri tarafından iletilen string argüman değiştirmek sürece, başvuru tarafından geçirilen hiçbir fark olmayacaktır.