PHP’de require, require_once, include, include_once Karşılaştırması

Oğuzhan Selçuk Bülbül
Türkçe Yayın
Published in
3 min readJul 8, 2017

PHP yazarken mutlaka bunların hepsine denk gelmişsinizdir. Ama hangisinin nerede kullanılması gerektiğini gerçekten biliyor musunuz? Bugün bu kavramları her yönüyle inceleyip, anlayalım.

Require vs Include

Require’ın (rikuayır) türkçe anlamını gereklilik olarak düşünebiliriz. Yani bir şeyin require olması demek gerekli olması demektir. Include’un (inklud) türkçe anlamı ise dahil etmek demektir. Yani include etmek demek, dahil etmek anlamına gelir.

Aslında sadece kelime anlamlarından bile bu ikisi arasındaki farkı anlayabiliriz. Bir dosyayı require ediyorsak yazdığımız kodların çalışması için mutlaka ama mutlaka çağırdığımız dosyaya ihtiyacımız var demek. Ancak dosyayı include edersek, herhangi bir nedenle PHP dosyayı çağıramasa bile kodlarımız çalışmaya devam edebilir demektir. Bu iki fonksiyon temelde çalışma şekli olarak bir fark içermez, ancak hata durumundaki davranışları farklıdır.

Her iki fonksiyonda kodları kopyala-yapıştır yapar gibi çalışmazlar. PHP derleyicisi kodları derlerken bu fonksiyonlara geldiğinde dosyaların var olup olmadığını bile denetlemez. Sadece bu kodlar ‘verilen dosyanın içerisindeki kodlar yüklenip çalıştırılacak’ şeklinde anlamlandırılır. Runtime sırasında PHP bu fonksiyonlara ulaşırsa dosyaları çağırmaya çalışacaktır. Örneğin aşağıdaki gibi bir kod ‘gerekli_dosya.php’ dosyasını hiç koymasanız bile hiç bir zaman hata vermeyecektir.

if(false){require_once('gerekli_dosya.php');
}

Çünkü PHP runtime da hiç bir zaman require fonksiyonuna ulaşamayacaktır. Gelelim hata kısmına. Include fonksiyonu dosyayı bulamaz ise bir Warning fırlatır. Ancak PHP kodları yorumlamaya sonraki satırdan devam eder. Çünkü include ettiğiniz dosyanın hayati bir öneme sahip olmadığını varsayar. Require fonksiyonu ise dosyayı bulamadığı zaman bir Fatal Error fırlatır ve PHP çalışmayı durdurur. Sonraki kodların ne olduğuyla ilgilenmez, çünkü hayati öneme sahip bir konuda hatayla karşılaştığını varsayar.

Once vs Multiple Times

Peki bu fonksiyonları once olarak mı çalıştırmalıyız yoksa normal şekilde mi çalıştırmalıyız? Once’ın türkçe karşılığına ‘bir kere’ diyebiliriz. Yani require_once() veya include_once() dediğinizde PHP bu dosyanın daha önce çağırılıp çağırılmadığına bakacaktır. Eğer çağırılmış ise tekrar çağırmayacaktır.

Burada once olan ve olmayan fonksiyonlarda hız değişikliği olacaktır. Çünkü neticede işin içine ekstra bir kontrol mekanizması giriyor. Normal olarak baktığımızda require, require_once dan daha hızlı çalışır. Ancak dosya bir kez include edildiğinde if sorgusu bir dosyayı yüklemekten daha hızlı çalışacağından require_once daha hızlı cevap döndürmeye başlayacaktır. Yinede hız farkını aynı anda sitenize yüz milyonlarca kişi girmeye çalışana kadar farkedeceğinizi sanmıyorum :). Ama yinede bu şekilde dört tane fonksiyonun çıkmasının temelinde performans düşüncesi vardır.

Çok büyük projelerde çalışmadığınız sürece bu fonksiyonların kullanılacakları yerleri kesin çizgilerle anlamlandırmak oldukça zor. Zaten bir çok projede kodları bölerek daha düzenli çalışmak için dosyaları bir biri içine dahil ediyoruz. E böyle oluncada zaten kodların çalışması için dosyalar sürekli gerekli oluyor. Sonuç olarak da tüm çağırmalar require_once olarak gerçekleşmeye başlıyor.

Bunu yapmakta herhangi bir hata yok, ama dört fonksiyonun asıl amaçlarının ne olduğunu da bilmenin PHP biliyorum demek için gerekli olduğunu düşünüyorum…

Yazıyı paylaşmayı unutmayın…

--

--

Oğuzhan Selçuk Bülbül
Türkçe Yayın

traveling around the world, QA engineer, writing code, drawing digital | medium@osbulbul.com