PHP içinde tanımsız değişkenler için ne kadar önemli?

4 Cevap php

Ben PHP için biraz yeni duyuyorum ve ben merak ediyorum: PHP içinde tanımsız değişkenler için ne kadar önemli? Ben bu önemli benim uygulamaların performansını artıracak, biz onlarla işim bitti zaman değişkenler üzerinde tanımsız kullanarak vb sızıntılarını önlemek için ayrılan belleği serbest C gibi dillerde biliyor musun?

Ayrıca unset kullanarak ve unset kullanmayan arasındaki farkı karşılaştıran bir kriter yerde var mı?

4 Cevap

Bkz this example (ve article Ben sorunun altına bağlı):

$x = str_repeat('x', 80000);
echo memory_get_usage() . "<br>\n";      // 120172
echo memory_get_peak_usage() . "<br>\n"; // 121248

$x = str_repeat('x', 80000);
echo memory_get_usage() . "<br>\n";      // 120172
echo memory_get_peak_usage() . "<br>\n"; // 201284

Gördüğünüz gibi, bir noktada PHP neredeyse çift bellek kullanmıştı. De, bellekte önceki değişken tutarak $x için 'X'-dize atamadan önce, PHP, bellekte yeni bir dize oluşturur çünkü bu. Bu unset tınlı önlenebileceğini $x.

Başka bir örnek:

for ($i=0; $i<3; $i++) {
    $str = str_repeat("Hello", 10000);
    echo memory_get_peak_usage(), PHP_EOL;
}

Gibi bu irade çıktı üretir

375696
425824
425824

İlk tekrarda $str atama önce hala boş. İkinci tekrarında $str olsa oluşturulan dize yapacak. str_repeat ardından ikinci kez çağrıldığında, hemen $str üzerine yazmak, ama önce bellekte tahsis edilecek dize oluşturmak değildir. Yani $str ile sonuna kadar ve değer, atanmalıdır. Çift bellek. Eğer unset $str, bu olmayacak eğer:

for($i=0;$i<3;$i++) {
    $str = str_repeat("Hello", 10000);
    echo memory_get_peak_usage(), PHP_EOL;
    unset($str);
}

// outputs something like
375904
376016
376016

Bu önemli mi? Peki, bağlantılı yazı ile oldukça iyi özetliyor

İşte bu dışında, kritik değildir.

Bu, artık onlara ihtiyacınız olduğunda değişkenleri unset zarar vermez. Belki paylaşılan bir bilgisayar üzerinde ve büyük veri setleri üzerinde bazı yineleme yapmak istiyorum. Unsetting Allowed memory size of XXXX bytes exhausted ile biten PHP engellemek istiyorsanız, o küçücük çaba değer.

Ne de dikkate alınmalıdır isteği ömrü sadece bir saniye bile, bellek kullanımını iki katına etkili servis edilebilir eşzamanlı istekleri azami miktarını yarıya olmasıdır. Yine hiçbir sunucunun sınırına yakın iseniz eğer, o zaman umurunda, ama kim, ardından basit bir unset daha RAM veya ek bir sunucu için size para kazandırabilir.

Orada unset aslında çok şey ayırması hangi birçok durum vardır, bu nedenle kod mantıksal akış onun non-varlığını gerektirmektedir sürece kullanımı genellikle oldukça anlamsızdır.

C gibi dillerde yazılmış olan uygulamalar genellikle birçok saat çalıştırabilirsiniz. Ama her zamanki php uygulamanın zamanı yaklaşık 0.05 sn. Yani, daha az önemli tanımsız kullanmaktır.

Bu emin olmalısınız, bağlıdır (örneğin bir db seçilen bir blog yazının içeriği gibi) unset ted çok uzun dizeleri.

<?php
$post = get_blog_post();
echo $post;
unset($post);
?>