Dalam PHP:
- Ketika saya harus menggunakan
require
vsinclude
? - Ketika saya harus menggunakan
require_once
vsinclude_once
?
Dalam PHP:
require
vs include
?require_once
vs include_once
?Jawaban:
Ada require
dan include_once
juga.
Jadi pertanyaan Anda seharusnya ...
require
vs include
?require_once
vs.require
Jawaban ke 1 dijelaskan di sini .
Fungsi memerlukan () identik dengan menyertakan (), kecuali bahwa ia menangani kesalahan secara berbeda. Jika kesalahan terjadi, fungsi include () menghasilkan peringatan, tetapi skrip akan melanjutkan eksekusi. Wajib () menghasilkan kesalahan fatal, dan skrip akan berhenti.
Jawaban ke 2 dapat ditemukan di sini .
Pernyataan require_once () identik dengan mengharuskan () kecuali PHP akan memeriksa apakah file tersebut telah disertakan, dan jika demikian, tidak termasuk (perlu) lagi.
require_once()
akan menjadi yang lebih cepat dari keduanya
Menggunakan
mengharuskan
ketika file diperlukan oleh aplikasi Anda, misalnya templat pesan penting atau file yang mengandung variabel konfigurasi yang tanpanya aplikasi akan rusak.
require_once
ketika file berisi konten yang akan menghasilkan kesalahan pada inklusi berikutnya, misalnya
function important() { /* important code */}
pasti diperlukan dalam aplikasi Anda tetapi karena fungsi tidak dapat dideklarasikan ulang tidak boleh dimasukkan lagi.
termasuk
ketika file tidak diperlukan dan aliran aplikasi harus dilanjutkan ketika tidak ditemukan, misalnya
bagus untuk template yang mereferensikan variabel dari lingkup saat ini atau sesuatu
include_once
dependensi opsional yang akan menghasilkan kesalahan pada pemuatan berikutnya atau mungkin penyertaan file jarak jauh yang Anda tidak ingin terjadi dua kali karena overhead HTTP
Namun pada dasarnya, terserah Anda kapan harus menggunakan yang mana.
include
? include_once
? require
? require_once
?
Saran saya adalah gunakan hanya require_once
99,9% dari waktu.
Menggunakan require
atau include
sebaliknya menyiratkan bahwa kode Anda tidak dapat digunakan kembali di tempat lain, yaitu bahwa skrip yang Anda tarik benar - benar menjalankan kode alih-alih menyediakan kelas atau beberapa pustaka fungsi.
Jika Anda memerlukan / menyertakan kode yang dijalankan saat itu juga, itu adalah kode prosedural, dan Anda perlu mengenal paradigma baru . Seperti pemrograman berorientasi objek, pemrograman berbasis fungsi, atau pemrograman fungsional.
Jika Anda sudah melakukan OO atau pemrograman fungsional, include_once
sebagian besar menggunakan akan menunda di mana dalam tumpukan Anda menemukan bug / kesalahan. Apakah Anda ingin tahu bahwa fungsi do_cool_stuff()
tersebut tidak tersedia ketika Anda memanggilnya nanti, atau saat Anda mengharapkannya tersedia dengan meminta perpustakaan? Secara umum, yang terbaik adalah segera mengetahui jika sesuatu yang Anda butuhkan dan harapkan tidak tersedia, jadi gunakan saja require_once
.
Atau, dalam OOP modern, hanya autoload kelas Anda pada saat pemakaian.
include
keluarga biasanya merupakan ide buruk (karena sangat jarang untuk menyertakan file yang kemungkinan tidak ada), dan bahwa dari require_once
dan require
, Anda harus menggunakan require_once
saat memasukkan file yang menentukan fungsi atau kelas yang akan digunakan di tempat lain, atau instantiate lajang seperti objek koneksi database, dan gunakan require
untuk memasukkan file yang segera melakukan hal-hal ketika mereka dimasukkan. Dalam aplikasi web besar apa pun, jenis yang terakhir termasuk tidak biasa.
require_once
kemungkinan besar akan digunakan hampir sepanjang waktu. Mengingat perbedaan kecil di antara pilihan, require
memastikan skrip berhenti, saya tidak bisa memikirkan banyak skenario di mana aplikasi dapat bertahan tanpa file dimasukkan. Dan _once
melindungi dari masalah penipuan. Siapa pun yang tidak setuju kemungkinan tahu apa yang mereka lakukan sehingga dapat memilih mana yang sesuai dengan aplikasi atau skenario.
Perbedaan antara fungsi _once dan tanpa fungsi _once: tanpa kode _once akan dimasukkan lagi sedangkan dengan fungsi _once, PHP melacak file-file yang disertakan dan hanya akan memasukkannya sekali saja.
Perbedaan antara keharusan dan termasuk: Jika file yang diperlukan tidak ditemukan, PHP akan memunculkan kesalahan fatal sedangkan untuk menyertakan hanya peringatan yang akan dipancarkan.
include()
akan memberikan peringatan jika tidak dapat memasukkan file, tetapi sisa skrip akan berjalan.
require()
akan membuang E_COMPILE_ERROR
dan menghentikan skrip jika tidak dapat menyertakan file.
Fungsi include_once()
dan require_once()
tidak akan menyertakan file untuk kedua kalinya jika sudah disertakan.
Lihat halaman dokumentasi berikut:
Setiap kali Anda menggunakan require_once()
dapat digunakan dalam file untuk memasukkan file lain ketika Anda membutuhkan file yang dipanggil hanya satu kali dalam file saat ini. Di sini, dalam contoh ini saya memiliki test1.php.
<?php
echo "today is:".date("Y-m-d");
?>
dan di file lain yang saya beri nama test2.php
<?php
require_once('test1.php');
require_once('test1.php');
?>
saat Anda menonton m yang membutuhkan file test1 dua kali tetapi file akan menyertakan test1 satu kali dan untuk panggilan pada saat kedua ini akan diabaikan. Dan tanpa henti akan menampilkan output satu kali.
Setiap kali Anda menggunakan 'include_once () `dapat digunakan dalam file untuk memasukkan file lain saat Anda membutuhkan file yang dipanggil lebih dari sekali dalam file saat ini. Di sini, dalam contoh saya memiliki file bernama test3.php.
<?php
echo "today is:".date("Y-m-d");
?>
Dan di file lain yang saya beri nama test4.php
<?php
include_once('test3.php');
include_once('test3.php');
?>
saat Anda menonton m termasuk file test3 akan menyertakan file satu kali tetapi menghentikan eksekusi lebih lanjut.
Anda harus menyimpan definisi kelas dan fungsi dalam file.
Gunakan require_once()
untuk memuat dependensi (kelas, fungsi, konstanta).
Gunakan require()
untuk memuat file seperti template .
Gunakan include_once()
untuk memuat dependensi opsional (kelas, fungsi, konstanta).
Gunakan include()
untuk memuat file seperti templat opsional .
Pertanyaan ini diajukan tujuh tahun lalu, dan tidak ada jawaban yang memberikan bantuan praktis untuk pertanyaan itu. Dalam pemrograman PHP modern Anda terutama menggunakan required_once
hanya sekali untuk memasukkan kelas autoloader Anda (sering komposer autoloader), dan itu akan memuat semua kelas dan fungsi Anda (file fungsi harus secara eksplisit ditambahkan ke composer.json
file agar tersedia di semua file lain). Jika karena alasan apa pun kelas Anda tidak dapat dimuat dari autoloader yang Anda gunakan require_once
untuk memuatnya.
Ada beberapa kesempatan yang perlu kita gunakan require
. Misalnya, jika Anda memiliki definisi array yang sangat besar dan Anda tidak ingin menambahkan ini ke kode sumber definisi kelas Anda, Anda dapat:
<?php
// arr.php
return ['x'=>'y'];
<?php
//main.php
$arr= require 'arry.php'
Jika file yang ingin Anda sertakan berisi sesuatu yang dapat dieksekusi atau mendeklarasikan beberapa variabel, Anda hampir selalu perlu menggunakannya require
, karena jika Anda menggunakanrequire_once
selain dari tempat pertama kode Anda tidak akan dieksekusi dan / atau variabel Anda tidak akan dijalankan secara diam-diam, menyebabkan bug yang benar-benar sulit untuk ditentukan.
Tidak ada kasus penggunaan praktis untuk include
dan include_once
sungguh.
include()
, dibungkus dengan buffer output untuk mengimplementasikan mesin templating Anda.
require()
untuk membagi file besar.
require_once
untuk PHPMailer di dalam suatu fungsi, dan autoloader saya mendefinisikan $mail
variabel yang diperlukan kemudian dalam kode, sehingga selanjutnya require_once
diabaikan, yang tersisa $mail
tidak diinisialisasi! solusinya adalah dengan hanya menggunakan require
setelah pemanggilan fungsi.
require
?
Perbedaannya terletak pada kesalahan yang dihasilkan perintah. Dengan require
, file yang ingin Anda gunakan benar-benar diperlukan dan dengan demikian menghasilkan E_ERROR
jika tidak ditemukan.
require()
identik denganinclude()
kecuali pada kegagalan itu juga akan menghasilkanE_ERROR
kesalahan tingkat fatal .
include
hanya menghasilkan E_WARNING
kesalahan jika gagal yang lebih atau kurang diam.
Jadi gunakan itu jika file diperlukan untuk membuat kode yang tersisa berfungsi dan Anda ingin skrip gagal file tidak tersedia.
Untuk *_once()
:
include_once()
dapat digunakan dalam kasus-kasus di mana file yang sama dapat dimasukkan dan dievaluasi lebih dari satu kali selama eksekusi skrip tertentu, jadi dalam kasus ini dapat membantu menghindari masalah seperti redefinisi fungsi, penugasan kembali nilai variabel, dll.
Hal yang sama berlaku require_once()
tentu saja.
Referensi: require()
,include_once()
require
memberi E_COMPILE_ERROR, bukan E_ERROR.
Membutuhkan bagian-bagian penting, seperti otorisasi dan menyertakan semua yang lain.
Beragam adalah desain yang sangat buruk dan harus dihindari sama sekali. Jadi, * _cece tidak terlalu penting.
Sertakan / Wajibkan Anda dapat memasukkan file yang sama lebih dari sekali juga:
membutuhkan () identik dengan menyertakan () kecuali pada kegagalan itu juga akan menghasilkan kesalahan tingkat E_COMPILE_ERROR fatal. Dengan kata lain, itu akan menghentikan skrip sedangkan include () hanya mengeluarkan peringatan (E_WARNING) yang memungkinkan skrip untuk melanjutkan.
identik dengan menyertakan / mengharuskan kecuali PHP akan memeriksa apakah file tersebut telah disertakan, dan jika demikian, tidak termasuk (memerlukan) lagi.
include()
akan menghasilkan peringatan ketika tidak menemukan file, tetapi require_once()
akan menghasilkan kesalahan fatal.
Hal lain adalah jika file disertakan sebelumnya. Maka require_once()
tidak akan memasukkannya lagi.
Saya menggunakan fungsi seperti di bawah ini:
function doSomething() {
require_once(xyz.php);
....
}
Ada nilai konstan yang dideklarasikan di xyz.php.
Saya harus memanggil fungsi doSomething () ini dari file skrip PHP lain.
Tapi saya mengamati perilaku saat memanggil fungsi ini dalam satu lingkaran, untuk iterasi pertama doSomething () mendapatkan nilai-nilai konstan xyz.php
, tetapi kemudian setiap iterasi doSomething()
tidak bisa mendapatkan nilai-nilai konstan yang dinyatakan dalamxyz.php
.
Saya memecahkan masalah saya dengan beralih dari require_once()
ke include()
, doSomething()
kode yang diperbarui adalah seperti di bawah ini:
function doSomething() {
include(xyz.php);
....
}
Sekarang setiap panggilan iterasi untuk doSomething()
mendapatkan nilai konstan didefinisikan dalam xyz.php
.
Dari manual :
require()
identik denganinclude()
kecuali pada kegagalan itu juga akan menghasilkanE_COMPILE_ERROR
kesalahan tingkat fatal . Dengan kata lain, itu akan menghentikan skrip sedangkaninclude()
hanya memancarkan peringatan (E_WARNING
) yang memungkinkan skrip untuk melanjutkan.
Hal yang sama berlaku untuk _once()
varian.
Di zaman PSR-0 / PSR-4
autoloaders, mungkin sama sekali tidak perlu menggunakan pernyataan apa pun jika semua yang Anda butuhkan adalah membuat beberapa fungsi / kelas tersedia untuk kode Anda (tentu saja, Anda masih perlu require_once
autoloader sendiri dalam file bootstrap Anda dan include
templat jika Anda masih menggunakan PHP sebagai mesin templat).
Kapan seseorang harus menggunakan require
atau include
?
Fungsi require
dan include
melakukan tugas yang sama, yaitu termasuk dan mengevaluasi file yang ditentukan, tetapi perbedaannya require
akan menyebabkan kesalahan fatal ketika lokasi file yang ditentukan tidak valid atau untuk kesalahan apa pun sedangkan include
akan menghasilkan peringatan dan melanjutkan eksekusi kode.
Jadi Anda dapat menggunakan require
fungsi dalam kasus di mana file yang Anda coba sertakan adalah jantung dari sistem dan dapat menyebabkan dampak besar pada sisa kode dan Anda dapat menggunakaninclude
fungsi ketika file yang Anda coba sertakan adalah file sederhana yang mengandung beberapa kode yang kurang penting.
Dan rekomendasi pribadi saya (untuk kode yang kurang penting) adalah untuk pergi ke require
fungsi di mana-mana dalam kode Anda saat sedang dalam tahap pengembangan sehingga Anda dapat men-debug kode dan kemudian mengganti semua require
fungsi dengan include
fungsi sebelum memindahkannya ke produksi sehingga jika Anda melewatkan bug apa pun yang tidak akan memengaruhi pengguna akhir dan sisa kode dijalankan dengan benar ...
Kapan harus menggunakan require_once
ataurequire
?
Perbedaan mendasar antara require
dan require_once
adalah require_once
akan memeriksa apakah file tersebut sudah termasuk atau tidak jika itu sudah termasuk maka tidak akan menyertakan file sedangkanrequire
fungsi akan mencakup file terlepas dari apakah file sudah termasuk atau tidak.
Jadi dalam kasus di mana Anda ingin memasukkan beberapa kode lagi dan lagi menggunakan require
fungsi sedangkan jika Anda ingin memasukkan beberapa kode hanya sekali dalam kode Anda, gunakan require_once
.
Gunakan fungsi yang diperlukan saat Anda perlu memuat kelas, fungsi, atau ketergantungan apa pun.
Gunakan fungsi sertakan saat Anda ingin memuat file bergaya template
Jika Anda masih bingung, cukup gunakan require_once untuk selamanya.
Itu semua cara memasukkan file.
Membutuhkan berarti membutuhkannya. Require_once berarti akan membutuhkannya tetapi hanya membutuhkannya satu kali. Include berarti akan menyertakan file tetapi tidak perlu melanjutkan.
Contoh:
Require 'filename'
Require_once 'filename'
Include 'filename'
Ada juga fungsi include_once yang mencakup file sekali.
Include_once 'filename'
Jangan gunakan huruf kapital di tempat saya miliki karena saya mengetik dari ponsel saya.
satu hal yang saya perhatikan, ketika menggunakan include saya hanya dapat mengakses fungsi file yang disertakan dari file yang memasukkannya. Dengan require_once, saya bisa menjalankan fungsi itu dalam file required_once kedua.
juga: Saya sarankan menambahkan
if(file_exists($RequiredFile)){
require_once($RequiredFile);
}else{
die('Error: File Does Not Exist');
}
Karena ketika require_once membunuh halaman, kadang-kadang dapat menggemakan direktori file situs web Anda
Berikut adalah fungsi khusus yang saya buat untuk meminta file:
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;
}
}
contoh penggunaan:
$success = addFile('functions/common');
if($success){
commonFunction();
}else{
fallbackFunction();
}
Pada dasarnya, jika Anda memerlukan jalur yang salah, PHP melempar kesalahan fatal dan fungsi shutdown dipanggil, tetapi ketika Anda memasukkan jalur yang salah, PHP akan melanjutkan eksekusi, tetapi itu hanya akan menampilkan peringatan bahwa file tersebut tidak ada.
Dari kata bahasa Inggris yang diperlukan , PHP diberitahu bahwa pelaksanaan halaman atau file tergantung pada file yang diperlukan.
Dari pengalaman saya, itu normal untuk memerlukan file penting seperti file konfigurasi, kelas basis data dan utilitas penting lainnya.
Sering kali masalah apakah Anda ingin memuat pustaka klien secara kondisional, atau teruskan dan muat apakah Anda akan menggunakannya atau tidak.
Inilah contoh nyata; menguraikan apa kata PCJ.
Katakanlah Anda memiliki file konfigurasi yang menyimpan nama pengguna dan kata sandi basis data Anda (conf.php):
<?php
//my site configuration file
//For Database
$location='localhost';
$dbuser='yourname';
$userpw='yourpassword';
$database='nameofdatabase';
?>
Dan kelas dengan fungsi statis yang menggunakan database:
<?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
}
}
?>
Dan fungsi statis itu digunakan di dalam fungsi lain yang disebut iteratif di dalam loop:
<?php
require_once('path/to/arbitraryObject.php'); //either will likely be OK at this level
$obj = new arbitraryObject();
foreach($array as $element){
$obj->myFunction();
}
?>
Anda hanya dapat meminta / memasukkan kelas satu kali. Jika Anda memerlukan / memasukkannya pada setiap iterasi dari loop Anda, Anda akan mendapatkan kesalahan. Namun, Anda harus memasukkan file conf Anda setiap kali fungsi statis dipanggil.
<?php
class arbitraryObject {
public function myFunction(){
require_once(/path/to/UsedInLoop.php); //This must be require_once. require() will not work
UsedInLoop::databaseQuery();
}
}
?>
Tentu saja, memindahkannya di luar fungsi bisa menjadi solusi untuk masalah itu:
<?php
require(/path/to/UsedInLoop.php); //now require() is fine
class arbitraryObject {
public function myFunction(){
UsedInLoop::databaseQuery();
}
}
?>
Kecuali jika Anda khawatir dengan overhead memuat kelas yang mungkin hanya digunakan dalam kondisi tertentu dan tidak ingin memuatnya saat tidak.
require
memiliki overhead yang lebih besar daripada include
, karena harus mem-parsing file terlebih dahulu. Mengganti requires
dengan includes
sering merupakan teknik optimasi yang baik.
require
tidak mem-parsing file lebih dari include
tidak. The _once
versi fungsi-fungsi masing-masing memiliki sedikit overhead, tapi seperti orang lain berkata, dekat dengan diabaikan dalam sebagian besar aplikasi.
Cukup gunakan wajib dan sertakan.
Karena pikirkan bagaimana cara kerjanya dengan include_once atau require_once. Itu mencari data log yang menyimpan file PHP yang disertakan atau diperlukan. Jadi itu lebih lambat daripada memasukkan dan membutuhkan.
if (!defined(php)) {
include 'php';
define(php, 1);
}
Hanya menggunakan seperti ini ...