PHP dilinde:
- Ne zaman kullanmalıyım
require
VS.include
? - Ne zaman kullanmalıyım
require_once
VS.include_once
?
PHP dilinde:
require
VS. include
?require_once
VS. include_once
?Yanıtlar:
Orada require
ve include_once
de.
Yani sorunuz şu olmalı ...
require
VS. include
?require_once
VS.require
1'in yanıtı burada açıklanmaktadır .
Requir () işlevi, hataları farklı şekilde işlemesi dışında include () işleviyle aynıdır. Bir hata oluşursa, include () işlevi bir uyarı oluşturur, ancak komut dosyası yürütmeye devam eder. Requir () önemli bir hata oluşturur ve komut dosyası durur.
2'nin cevabı burada bulunabilir .
PHP'nin dosyanın önceden dahil edilip edilmediğini kontrol edeceği ve eğer öyleyse, tekrar içermediğini (gerektirmediği) hariç, requir_once () ifadesi requir () ile aynıdır.
require_once()
zaman ikisi arasında daha hızlı olacaktır
kullanım
gerektiren
dosya olduğunda gerekli uygulamanız tarafından önemli bir mesaj şablonu veya uygulama kıracak onsuz bir dosya içeren yapılandırma değişkenleri örneğin,.
Require_oncenin
dosya örneğin müteakip içerme üzerinde bir hatanın oluşmasına neden olur içeriğe sahip olduğunda
function important() { /* important code */}
kesinlikle uygulamanızda gereklidir ancak fonksiyonları tekrar dahil edilmemelidir redeclared beri.
dosya gerekli olmadığında dahil et ve uygulama akışı bulunamadığında devam etmelidir, örn
. geçerli kapsamdaki değişkenlere referans veren şablonlar için harika
include_once
nedeniyle HTTP yükü sonraki yükleme veya iki kez gerçekleşmesi istemiyorum belki uzak dosya dahil hataları üretecektir opsiyonel bağımlılıkları
Ama temel olarak, hangisini kullanacağınız size kalmış.
include
? include_once
? require
? require_once
?
Benim önerim sadece require_once
% 99,9'unu kullanmak .
Kullanılması require
veya include
yerine kod içinde çekiyoruz komut aslında yeniden kullanılabilir başka bir yerde, yani olmadığını ima yürütmek yapmak yerine kod kullanılabilir bir sınıf ya da bazı fonksiyon kütüphaneleri.
Yerinde çalışan bir kod gerekiyorsa / dahil ediyorsanız, bu yordamsal koddur ve yeni bir paradigmayı tanımanız gerekir . Nesne yönelimli programlama, fonksiyon tabanlı programlama veya fonksiyonel programlama gibi.
Zaten OO veya fonksiyonel programlama yapıyorsanız, kullanmak include_once
çoğunlukla hata / hata bulduğunuz yerde geciktirir . Daha do_cool_stuff()
sonra çağırmaya gittiğinizde veya kitaplığı zorunlu kılarak kullanılabilir olmasını beklediğiniz anda işlevin kullanılamadığını bilmek ister misiniz ? Genellikle, ihtiyacınız olan ve beklediğiniz bir şeyin mevcut olmadığını hemen bilmek en iyisidir, bu yüzden sadece kullanın require_once
.
Alternatif olarak, modern OOP'ta, kullanım sırasında sınıflarınızı otomatik olarak yükleyebilirsiniz.
include
(mevcut değil herhangi olanağına sahip dosyaları dahil olmak oldukça nadir olduğu için) ve bu dışarı Aile, genellikle salt kötü bir fikir require_once
ve require
kullanmak gerekir require_once
dosyaları dahil edilirken tanımlamak olmaya işlevleri veya sınıfları başka bir yerde kullanılabilir veya veritabanı bağlantı nesneleri gibi tekil anahtarları örnekleyebilir ve require
dahil olduklarında hemen şeyler yapan dosyaları dahil etmek için kullanabilirsiniz . Herhangi bir büyük web uygulamasında, ikinci tür alıştırma olağandışıdır.
require_once
Neredeyse her zaman kullanılacak büyük olasılıkla aday olduğunu kabul edin. Seçenekler arasındaki küçük genel farklar göz önüne alındığında, require
komut dosyası durmalarını sağlar, bir dosyanın dahil edilmeden bir uygulamanın hayatta kalabileceği birçok senaryo düşünemiyorum. Ve _once
dupe sorunlarından korur. Muhtemelen katılmadıklarını bilen herkes, uygulama veya senaryoya uygun olanı seçebilir.
_Once fonksiyonları ile _once fonksiyonları olmadan arasındaki fark: _once kodu olmadan tekrar dahil edilirken, _once fonksiyonları ile PHP dahil edilen dosyaları izler ve sadece bir kez içerir.
Required ve include arasındaki fark: Gerekli bir dosya bulunmazsa PHP önemli bir hata verirken, içerme için yalnızca bir uyarı gönderilir.
include()
dosyayı içeremezse bir uyarı atar, ancak komut dosyasının geri kalanı çalışır.
require()
E_COMPILE_ERROR
dosyayı ekleyemezse bir komut dosyası atar ve komut dosyasını durdurur.
include_once()
Ve require_once()
zaten dahil edilmişse fonksiyonları ikinci kez dosyasını içermez.
Aşağıdaki dokümantasyon sayfalarına bakın:
Ne zaman require_once()
kullandığınızda bir dosyada kullanılabilir dosyada sadece bir kez çağrılan dosyaya ihtiyacınız olduğunda başka bir dosya eklemek için kullanabilirsiniz. Burada örnekte bir test1.php var.
<?php
echo "today is:".date("Y-m-d");
?>
ve test2.php olarak adlandırdığım başka bir dosyada
<?php
require_once('test1.php');
require_once('test1.php');
?>
test1 dosyasını iki kez gerektiren m'yi izlediğinizde, ancak dosya bir kez test1'i içerecektir ve ikinci kez çağırmak için bu dikkate alınmayacaktır. Ve durmadan çıkışı tek bir kez gösterecektir.
'İnclude_once () `komutunu her kullandığınızda, çağrılan dosyaya geçerli dosyada birden çok kez ihtiyacınız olduğunda başka bir dosya eklemek için bir dosyada kullanılabilir. Burada örnekte test3.php adlı bir dosyam var.
<?php
echo "today is:".date("Y-m-d");
?>
Ve test4.php adını verdiğim başka bir dosyada
<?php
include_once('test3.php');
include_once('test3.php');
?>
test3 dosyası da dahil olmak üzere m izliyorsanız, dosyayı tek bir kez içerir, ancak daha fazla yürütmeyi durdurur.
Sınıf ve işlev tanımlarını dosyalarda düzenli tutmalısınız.
Bağımlılıklarırequire_once()
yüklemek için kullanın (sınıflar, fonksiyonlar, sabitler).
Şablon benzeri dosyalarırequire()
yüklemek için kullanın .
İsteğe bağlı bağımlılıkları (sınıflar, işlevler, sabitler) include_once()
yüklemek için kullanın .
İsteğe bağlı şablon benzeri dosyalarıinclude()
yüklemek için kullanın .
Bu soru yedi yıl önce soruldu ve cevapların hiçbiri soru için pratik yardım sağlamaz. Modern PHP programlamada required_once
, otomatik yükleyici sınıfınızı (genellikle besteci otomatik yükleyici) dahil etmek için yalnızca bir kez kullanırsınız ve tüm sınıflarınızı ve işlevlerinizi yükler (işlev dosyaları composer.json
, diğer tüm dosyalarda kullanılabilmesi için dosyaya açıkça eklenmelidir ). Herhangi bir nedenle sınıfınız otomatik yükleyiciden require_once
yüklenemezse, onu yüklemek için kullanırsınız.
Kullanmamız gereken bazı durumlar var require
. Örneğin, gerçekten büyük bir dizi tanımınız varsa ve bunu sınıf tanımı kaynak kodunuza eklemek istemiyorsanız şunları yapabilirsiniz:
<?php
// arr.php
return ['x'=>'y'];
<?php
//main.php
$arr= require 'arry.php'
Eklemek istediğiniz dosya yürütülebilir bir şey içeriyorsa veya neredeyse her zaman kullanmanız gereken bazı değişkenler bildiriyorsa require
, çünkü require_once
ilk etaptan ayrı kullanırsanız , kodunuz yürütülmez ve / veya değişkenleriniz sessizce başlatılmaz ve hatalara neden olur. kesin olarak belirlemek zordur.
Gerçekten include
ve pratik bir kullanım durumu yoktur include_once
.
include()
, şablonlama motorunuzu uygulamak için bir çıkış arabelleğine sarılmış bir kullanırsınız .
require()
büyük dosyaları bölmek için kullanmaz .
require_once
PHPMailer için bir işlev içinde kullanırken aynı sorunla karşı karşıya kaldım ve otomatik yükleyicim $mail
daha sonra kodda gerekli olan değişkeni tanımlar , böylece bir sonraki require_once
yoksayılır, $mail
başlatılmamış bırakılır ! çözüm, require
işlev çağrısından sonra kullanmaktı .
require
Bu durumlarda kullanmamanın bir nedeni var mı ?
Fark, komutların oluşturduğu hatadadır. İle require
kullanmak istediğiniz dosya gerçekten gereklidir ve bu nedenle E_ERROR
bulunamazsa bir üretir .
require()
include()
hata dışında aynıdır, ölümcülE_ERROR
seviye hatası da üretecektir .
include
sadece E_WARNING
başarısız olursa az ya da çok sessiz bir hata üretir .
Bu nedenle, kalan kodun çalışması için dosya gerekiyorsa ve komut dosyasının dosyayı kullanamamasını istiyorsanız kullanın.
Şunun için *_once()
:
include_once()
bir komut dosyasının belirli bir yürütülmesi sırasında aynı dosyanın dahil edilebileceği ve birden fazla değerlendirilebileceği durumlarda kullanılabilir, bu durumda işlev yeniden tanımlamaları, değişken değer atamaları vb. gibi sorunlardan kaçınmaya yardımcı olabilir.
Aynı şey require_once()
elbette geçerlidir .
Referans: require()
,include_once()
require
E_ERROR değil E_COMPILE_ERROR verir.
Yetkilendirme gibi kritik bölümler isteyin ve diğerlerini ekleyin.
Birden fazla içerik sadece çok kötü bir tasarıma sahiptir ve bundan kaçınılmalıdır. Yani, * _once gerçekten önemli değil.
Ekle / İste aynı dosyayı birden fazla kez ekleyebilirsiniz:
requir (), () ile aynıdır, ancak hata durumunda ölümcül bir E_COMPILE_ERROR düzey hatası üretecektir. Diğer bir deyişle, komut dosyası durdurulurken include () yalnızca komut dosyasının devam etmesine izin veren bir uyarı (E_WARNING) gönderir.
gerektirir_once / include_once
PHP'nin dosyanın önceden dahil edilip edilmediğini kontrol etmesi dışında, ekleme / gerektirme ile aynıdır ve varsa tekrar eklemeyi (gerektirmez) kontrol eder.
include()
dosya bulamadığında bir uyarı oluşturur, ancak require_once()
önemli bir hata oluşturur.
Başka bir şey, dosya daha önce dahil edilmişse. Sonra require_once()
tekrar içermez.
Aşağıdaki gibi fonksiyon kullanıyordum:
function doSomething() {
require_once(xyz.php);
....
}
Xyz.php'de sabit değerler bildirildi.
Başka bir PHP komut dosyasından bu doSomething () işlevini çağırmak zorunda.
Ancak bu işlevi bir döngüde çağırırken davranış gözlemledim, ilk yineleme için doSomething () içinde sabit değerler alıyordu xyz.php
, ancak daha sonra her yineleme doSomething()
bildirilen sabit değerleri alamadı xyz.php
.
Ben geçiş yaparak sorunu da hallettim require_once()
için include()
, güncellenmiş doSomething()
kod aşağıda gibidir:
function doSomething() {
include(xyz.php);
....
}
Şimdi her yineleme çağrısında doSomething()
tanımlanan sabit değerleri alır xyz.php
.
Gönderen manuel :
require()
include()
hata dışında aynıdır, ölümcülE_COMPILE_ERROR
seviye hatası da üretecektir . Başka bir deyişle, komut dosyasını durdurur, ancakinclude()
yalnızcaE_WARNING
komut dosyasının devam etmesine izin veren bir uyarı ( ) yayar .
Aynı şey _once()
varyantlar için de geçerlidir .
Otomatik PSR-0 / PSR-4
yükleyiciler çağında, ihtiyacınız olan tek şey bazı işlevleri / sınıfları kodunuz için kullanılabilir hale getirmekse, ifadelerden herhangi birini kullanmak tamamen gereksiz olabilir (elbette, eğer require_once
bootstrap dosyanızda ve include
şablonlarınızda otomatik yükleyicinin kendisini hala kullanmanız gerekir. hala PHP'yi şablon motoru olarak kullanır).
Ne zaman kullanılmalı require
veya include
?
require
Ve include
işlevleri yani içerir ve belirtilen dosyayı değerlendirir, ancak fark, aynı görevi yapmak require
oysa belirtilen dosya konumu geçersiz veya herhangi bir hata için zaman ölümcül hataya neden olur include
bir uyarı oluşturmak ve kod yürütülmesine devam edecektir.
Bu nedenle require
, eklemeye çalıştığınız dosyanın sistemin kalbi olduğu ve kodun geri kalanında büyük bir etkiye neden olabileceği durumlarda include
işlevi kullanabilirsiniz ve dahil etmeye çalıştığınız dosya bir daha az önemli kod içeren basit bir dosya.
Ve benim kişisel tavsiyem (daha az önemli kod için) require
geliştirme aşamasındayken kodunuzdaki her yere gitmek için kod hata ayıklamak ve daha sonra tüm require
fonksiyonları include
üretime geçmeden önce işlevle değiştirerek herhangi bir hata son kullanıcıyı etkilemez ve kodun geri kalanı düzgün çalışır ...
Ne zaman kullanılmalı require_once
veya require
?
Arasındaki temel fark require
ve require_once
bir require_once
dosya zaten dahil olup olmadığını zaten o dahildir eğer oysa dosyayı içermez kontrol edecek require
bakılmaksızın dosya zaten dahil olup olmadığını veya değil dosyası içerir fonksiyonu.
Bu nedenle, bir kod parçasını tekrar tekrar eklemek istediğiniz durumlarda require
işlevi kullanırken, bazı kodları kodunuza yalnızca bir kez dahil etmek istiyorsanız kullanın require_once
.
Herhangi bir sınıf, işlev veya bağımlılık yüklemeniz gerektiğinde zorunlu işlevi kullanın .
Şablon stili dosya yüklemek istediğinizde include işlevini kullanın
Hala kafanız karıştıysa , her zaman için requir_once kullanın .
Hepsi dosyaları dahil etmenin yollarıdır.
İhtiyaç duyduğu anlamına gelir. Require_once buna ihtiyaç duyacağı anlamına gelir, ancak sadece bir kez gerektirir. Ekle, bir dosyayı içereceği, ancak devam etmesi gerekmediği anlamına gelir.
Örnekler:
Require 'filename'
Require_once 'filename'
Include 'filename'
Bir kez bir dosya içeren bir include_once işlevi de vardır.
Include_once 'filename'
Telefonumdan yazarken olduğu gibi büyük harfler kullanmayın.
bir şey fark ettim, dahil kullanırken sadece içerdiği dosyadan dahil edilen dosya işlevlerine erişebilirim. Requir_once ile, bu işlevi ikinci bir required_once dosyasında çalıştırabilirsiniz.
ayrıca: eklemeyi tavsiye ederim
if(file_exists($RequiredFile)){
require_once($RequiredFile);
}else{
die('Error: File Does Not Exist');
}
Require_once sayfayı öldürdüğünde, bazen web sitesi dosyalarınızın dizinini yankılayabilir
İşte dosyaları istemek için yaptığım özel bir işlev:
function addFile($file, $type = 'php', $important=false){
//site-content is a directory where I store all the files that I plan to require_once
//the site-content directory has "deny from all" in its .htaccess file to block direct connections
if($type && file_exists('site-content/'.$file.'.'.$type) && !is_dir('site-content/'.$file.'.'.$type)){
//!is_dir checks that the file is not a folder
require_once('site-content/'.$file.'.'.$type);
return 'site-content/'.$file.'.'.$type;
}else if(!$type && file_exists('site-content/'.$file) && !is_dir('site-content/'.$file)){
//if you set "$type=false" you can add the file type (.php, .ect) to the end of the "$file" (useful for requiring files named after changing vars)
require_once('site-content/'.$file);
return 'site-content/'.$file;
}else if($important){
//if you set $important to true, the function will kill the page (which also prevents accidentally echoing the main directory path of the server)
die('Server Error: Files Missing');
return false;
}else{
//the function returns false if the file does not exist, so you can check if your functions were successfully added
return false;
}
}
kullanım örneği:
$success = addFile('functions/common');
if($success){
commonFunction();
}else{
fallbackFunction();
}
Temel olarak, yanlış bir yola ihtiyaç duyarsanız, PHP önemli bir hata atar ve kapatma işlevi çağrılır, ancak yanlış bir yol eklediğinizde PHP yürütmeye devam eder, ancak dosyanın bulunmadığına dair bir uyarı görüntüler.
İngilizce sözcük gerektiren PHP, sayfanın veya dosyanın yürütülmesini gerekli dosyaya bağlı olduğu söylenir.
Deneyimlerime göre, yapılandırma dosyaları, veritabanı sınıfları ve diğer önemli yardımcı programlar gibi önemli dosyalar gerektirmek normdur.
Bu genellikle bir istemci kitaplığını koşullu olarak yüklemek mi yoksa kullanmaya devam edip etmediğinizi yüklemek isteyip istemediğinizle ilgilidir.
İşte somut örnek; pcj ne dediğini detaylandırıyor.
Veritabanı kullanıcı adınızı ve şifrenizi (conf.php) saklayan bir yapılandırma dosyanız olduğunu varsayalım:
<?php
//my site configuration file
//For Database
$location='localhost';
$dbuser='yourname';
$userpw='yourpassword';
$database='nameofdatabase';
?>
Ve veritabanını kullanan statik işlevli bir sınıf:
<?php
class UsedInLoop {
public static function databaseQuery(){
require(/path/to/conf.php); //require_once will not work here
$db = new mysqli($location, $dbuser, $userpw, $database);
//yada yada yada
}
}
?>
Ve bu statik işlev, bir döngü içinde yinelemeli olarak adlandırılan başka bir işlevin içinde kullanılır:
<?php
require_once('path/to/arbitraryObject.php'); //either will likely be OK at this level
$obj = new arbitraryObject();
foreach($array as $element){
$obj->myFunction();
}
?>
Sınıfa yalnızca bir kez girebilir / dahil edebilirsiniz. Döngünüzün her yinelemesine gereksinim duyarsanız / dahil ederseniz bir hata alırsınız. Ancak, statik işlev her çağrıldığında conf dosyanızı eklemeniz gerekir.
<?php
class arbitraryObject {
public function myFunction(){
require_once(/path/to/UsedInLoop.php); //This must be require_once. require() will not work
UsedInLoop::databaseQuery();
}
}
?>
Tabii ki, işlevi dışına taşımak bu soruna bir çözüm olabilir:
<?php
require(/path/to/UsedInLoop.php); //now require() is fine
class arbitraryObject {
public function myFunction(){
UsedInLoop::databaseQuery();
}
}
?>
Yalnızca belirli koşullarda kullanılabilecek ve yüklenmediğinde yüklemek istemeyen bir sınıfı yüklemekle ilgilenmiyorsanız.
require
include
önce dosyayı ayrıştırması gerektiğinden daha büyük bir ek yüke sahiptir. Değiştirme requires
ile includes
genellikle iyi bir optimizasyon tekniğidir.
require
dosyayı daha fazla ayrıştırmaz include
. Bu _once
işlevlerin sürümlerinin her biri biraz ek yüke sahiptir, ancak diğerlerinin söylediği gibi, çoğu uygulamada ihmal edilebilir.
Sadece gerektirir ve dahil kullanın.
Çünkü include_once veya requir_once ile nasıl çalışacağınızı düşünün. Bu, içerilen veya gereken PHP dosyalarını kaydeden günlük verilerini arar. Yani içermek ve gerekenden daha yavaştır.
if (!defined(php)) {
include 'php';
define(php, 1);
}
Sadece böyle kullanmak ...