2010-10-11 20 views
12

Bir include veya require bildirimini false olarak değerlendiren bir koşul içine koyarsam, PHP yorumlayıcısı içerme dosyasını tamamen atlayacak mı, yoksa tam olarak mı yükleyecektir?PHP davranışı koşullu içeriğe dahil etme/koşullandırma

if ($some_user_var) { 
    require 'this.php'; 
} else { 
    //do stuff 
} 

Ben require bağımsız olarak her zaman koşullu bir yorumlayıcı tarafından dahil edilecektir olduğunu okumuştum, ama include olmaz:

bir örnek olacaktır. Bu durumda, require'dan include'a geçiş yapmak, azaltılmış G/Ç ve ayrıştırma ek yükü nedeniyle ücretsiz bir hız anlamına gelebilir.

EAccelerator gibi bir önişlemci çalıştırıyorsam, büyük olasılıkla bir fark yaratıyor, ancak yapamayacağımı varsayalım.

+0

Sanırım bir yerde okuduğunuz şey şunun gibi bir şeydi: '' gerek '' (başarısızlık durumunda, elbette) değilken '' fail '' ölümcül hatayla uygulamayı durdurur. 'Require' gibi yorumlanabilecek olan her zaman dosyanızı içerir veya komut dosyası ölür. – acm

+0

Bu kitabın size ait herhangi bir şansı var mı? http://www.amazon.co.uk/PHP-World-Wide-Web-Quickstart/dp/0321245652 Ben de bu yalanları öğrettim! – Matthew

cevap

20

Yalnızca durum doğruysa dahil edilecektir. Başka nerede okudun bilmiyorum ama yanılıyorlar.

include ve require arasındaki tek fark başarısız olursa require önemli bir hatayla atmak olacaktır oysa include, bir uyarı atmak olacaktır.

Bunu onaylamak için, bkz. the PHP manual page for require.

-

+1

IIRC, tanımladığı davranış, PHP 4.something'e kadar kullanılan durumdur. –

+0

Oh, aslında require_once kullanıyorum, sadece soru uğruna basitleştirdim. Ama teşekkürler –

+0

El kitabına bağlantı için teşekkürler. Yorumlardan birinden: "Manuel durumların gerektirdiği gibi ve PHP 4.02'deki require_once, artık kod satırının çalıştırılmaması durumunda dosyayı çağırmamalıdır". Mükemmel :) –

1

Bu doğru değil. require, hiçbir zaman çağrılmadığı bloklara sarılmış dosyaları içermez, php yorumlayıcısı bunları görmezden gelmez. include ve require'un performans açısından çok az farkı yoktur (bunun için, _once'dan çok daha fazla farkları olsa da, daha önemlisi).

1

Bir yerde çok okumak (PS koşullu yapıyor reaon ne olduğuna bağlı olarak içerir eğer, bunun yerine include_once() veya require_once() kullanmayı düşünebilirsiniz). Bu argüman şu şekilde gider:

İçerisine bir koşul koyarsanız, PHP'nin kodu yorumlamaya başlayana kadar gerekip gerekmediğini ve kodun alınmasına kadar kodu yorumlayamayacağını unutmayın. tüm değişkenleri ve fonksiyonları ve dolayısıyla dosyaları tutmak. Bu nedenle, koşullardan bağımsız olarak tüm dosyaları YÜKLEYİN ve ardından onları son "derleme" den geri döndürün.

Yine de, bir PHP dosyasındaki bir hatayı bir hatayla sarmanız halinde, yine de kırılmaz. Ve dahil edilen bir dosyada bir değişken bildirirseniz ve sonra da dahil edip etmeyeceğinizi belirlemek için değişken değerini kullanırsanız, bu değeri almaz :)

Eski sürümlerde sorun olabilir. PHP?

Yük hızı ve RAM kullanımı açısından test etmedim - ama buna kesin bir cevap almak isterim. Şartlı koşullara dahil olan HERHANGİ bir ek yük var mı?

+0

Onlarda hata içeren dosyalar hakkında iyi bir gözlem. Önceden yüklenmişse, patlayıcı olarak kötü bir dosya ekleyerek bunu test edebileceksiniz. – Frug