PHP - Bir Fonksiyon içinde fonksiyon.

4 Cevap php

Ben PHP başka bir işlev içinde bir işlev tanımlamak için iyi bir şey olup olmadığını bilmek istiyorum. Bu performansları açısından (içinde değil ve) işlevi önce onu tanımlamak için daha iyi değil mi.

4 Cevap

Ben maintenability farkı önemli görünüyor ederken, özellikle performansları fark muhtemelen iki çözümler arasında büyük değildir Bu tür durumlar içinde, performansı hakkında maintenability hakkında daha fazla ve daha az bakım gerektiğini düşünüyorum.

Gibi Donald Knuth dedi:

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

Bu, bu durumda, oldukça doğrudur ;-)

Bu kötü bir uygulamadır. Tüm garip şeyler olabilir ve bunu ayıklamak için çalışırken çok fazla zaman kaybedersiniz, hem de kod daha da kafa karıştırıcı hale sadece.

Performans açısından ben bu konuda tam emin değilim. Tüm bildiğim içerisinde başka bir işlev tanımlamak eğer dış bir denir eğer, bu son işlev sadece var olmasıdır. Yani mayıs kabartma bazı bellek. Ama ödeme anlamlı olmadığına inanıyorum.

Bir çok yaygın bir şekilde bu işlevi dışında işlevini tanımlamak ve içine aramak.

Buna karşı birden çok nedeni vardır:

  • İç fonksiyonunun belgeler ayrıştırılması olmayacaktır.
  • Dış işlev çağrıldıktan sonra iç işlevi yalnızca var (ama daha sonra dış işlevinin kapsamı dışında)
  • (Yaygın görmedim çünkü) okumak zor
  • ) Aklıma tek avantajı bir geri tanımlayan, ama bu daha iyi create_function() (<PHP 5.3) veya closures (>=PHP5.3 ile yapılır
  • Bu seviyede performans konusunda endişeleriniz varsa, gerçekten başka bir dil kullanıyor olmalıdır

O create_function() kullanmaktan daha tercih edilebilir gibi, duruma bağlıdır. Ancak işlev içinde oluşturulan fonksiyon kapsamında küresel olduğunu bilmeli.

function creator() {

    function inside() {

        echo "hi.";
    }
}

creator();
inside();

Bu "merhaba." Yazdıracak inside() function yaratıcısı işlevi "içeriden" oluşturulmuş olsa bile. Eğer bir işlev oluştururken bir döngü içinde bir işlevi var ise, aksi takdirde ilk döngü sonra function exists hataya neden olur, fonksiyon olup olmadığını görmek için kontrol etmeniz gerekir.