Dalam PHP:
- Ketika saya harus menggunakan
require
vsinclude
? - Ketika saya harus menggunakan
require_once
vsinclude_once
?
php
include
require
require-once
Scott B
sumber
sumber
Jawaban:
Ada
require
daninclude_once
juga.Jadi pertanyaan Anda seharusnya ...
require
vsinclude
?require_once
vs.require
Jawaban ke 1 dijelaskan di sini .
Jawaban ke 2 dapat ditemukan di sini .
sumber
require_once()
akan menjadi yang lebih cepat dari keduanyaMenggunakan
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.
sumber
include
?include_once
?require
?require_once
?Saran saya adalah gunakan hanya
require_once
99,9% dari waktu.Menggunakan
require
atauinclude
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 fungsido_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 sajarequire_once
.Atau, dalam OOP modern, hanya autoload kelas Anda pada saat pemakaian.
sumber
include
keluarga biasanya merupakan ide buruk (karena sangat jarang untuk menyertakan file yang kemungkinan tidak ada), dan bahwa darirequire_once
danrequire
, Anda harus menggunakanrequire_once
saat memasukkan file yang menentukan fungsi atau kelas yang akan digunakan di tempat lain, atau instantiate lajang seperti objek koneksi database, dan gunakanrequire
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.
sumber
include()
akan memberikan peringatan jika tidak dapat memasukkan file, tetapi sisa skrip akan berjalan.require()
akan membuangE_COMPILE_ERROR
dan menghentikan skrip jika tidak dapat menyertakan file.Fungsi
include_once()
danrequire_once()
tidak akan menyertakan file untuk kedua kalinya jika sudah disertakan.Lihat halaman dokumentasi berikut:
sumber
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.dan di file lain yang saya beri nama test2.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.
Dan di file lain yang saya beri nama test4.php
saat Anda menonton m termasuk file test3 akan menyertakan file satu kali tetapi menghentikan eksekusi lebih lanjut.
sumber
Gunakan "termasuk" untuk templat PHP yang dapat digunakan kembali . Gunakan "wajib" untuk perpustakaan yang dibutuhkan.
"* _once" bagus, karena memeriksa apakah file sudah dimuat atau tidak, tetapi hanya masuk akal bagi saya di "require_once".
sumber
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 .sumber
Sebuah jawaban setelah 7 tahun untuk 2018
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 kecomposer.json
file agar tersedia di semua file lain). Jika karena alasan apa pun kelas Anda tidak dapat dimuat dari autoloader yang Anda gunakanrequire_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: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
daninclude_once
sungguh.sumber
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 selanjutnyarequire_once
diabaikan, yang tersisa$mail
tidak diinisialisasi! solusinya adalah dengan hanya menggunakanrequire
setelah pemanggilan fungsi.require
?Perbedaannya terletak pada kesalahan yang dihasilkan perintah. Dengan
require
, file yang ingin Anda gunakan benar-benar diperlukan dan dengan demikian menghasilkanE_ERROR
jika tidak ditemukan.include
hanya menghasilkanE_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()
:Hal yang sama berlaku
require_once()
tentu saja.Referensi:
require()
,include_once()
sumber
require
memberi E_COMPILE_ERROR, bukan E_ERROR.Dengan mengharuskan file harus ada, jika tidak maka kesalahan akan ditampilkan; sedangkan dengan menyertakan - jika file tidak ada maka halaman akan terus memuat.
sumber
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.
sumber
Sertakan / Wajibkan Anda dapat memasukkan file yang sama lebih dari sekali juga:
require_once / include_once
sumber
include()
akan menghasilkan peringatan ketika tidak menemukan file, tetapirequire_once()
akan menghasilkan kesalahan fatal.Hal lain adalah jika file disertakan sebelumnya. Maka
require_once()
tidak akan memasukkannya lagi.sumber
Saya menggunakan fungsi seperti di bawah ini:
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 iterasidoSomething()
tidak bisa mendapatkan nilai-nilai konstan yang dinyatakan dalamxyz.php
.Saya memecahkan masalah saya dengan beralih dari
require_once()
keinclude()
,doSomething()
kode yang diperbarui adalah seperti di bawah ini:Sekarang setiap panggilan iterasi untuk
doSomething()
mendapatkan nilai konstan didefinisikan dalamxyz.php
.sumber
Dari manual :
Hal yang sama berlaku untuk
_once()
varian.sumber
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 perlurequire_once
autoloader sendiri dalam file bootstrap Anda daninclude
templat jika Anda masih menggunakan PHP sebagai mesin templat).sumber
Kapan seseorang harus menggunakan
require
atauinclude
?Fungsi
require
daninclude
melakukan tugas yang sama, yaitu termasuk dan mengevaluasi file yang ditentukan, tetapi perbedaannyarequire
akan menyebabkan kesalahan fatal ketika lokasi file yang ditentukan tidak valid atau untuk kesalahan apa pun sedangkaninclude
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 semuarequire
fungsi denganinclude
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
danrequire_once
adalahrequire_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, gunakanrequire_once
.sumber
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.
sumber
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:
Ada juga fungsi include_once yang mencakup file sekali.
Jangan gunakan huruf kapital di tempat saya miliki karena saya mengetik dari ponsel saya.
sumber
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
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:
contoh penggunaan:
sumber
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.
sumber
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):
Dan kelas dengan fungsi statis yang menggunakan database:
Dan fungsi statis itu digunakan di dalam fungsi lain yang disebut iteratif di dalam loop:
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.
Tentu saja, memindahkannya di luar fungsi bisa menjadi solusi untuk masalah itu:
Kecuali jika Anda khawatir dengan overhead memuat kelas yang mungkin hanya digunakan dalam kondisi tertentu dan tidak ingin memuatnya saat tidak.
sumber
require
memiliki overhead yang lebih besar daripadainclude
, karena harus mem-parsing file terlebih dahulu. Menggantirequires
denganincludes
sering merupakan teknik optimasi yang baik.sumber
require
tidak mem-parsing file lebih dariinclude
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.
Hanya menggunakan seperti ini ...
sumber