На PHP:
- Коли я повинен використовувати
require
VS.include
? - Коли я повинен використовувати
require_once
VS.include_once
?
На PHP:
require
VS. include
?require_once
VS. include_once
?Відповіді:
Є require
і include_once
так само.
Тож ваше запитання має бути ...
require
VS. include
?require_once
vs.require
Відповідь на 1 описана тут .
Функція reque () є ідентичною для include (), за винятком того, що вона обробляє помилки по-різному. Якщо виникла помилка, функція include () генерує попередження, але сценарій продовжить виконання. Потрібно () генерує фатальну помилку, і сценарій зупиниться.
Відповідь на 2 можна знайти тут .
Оператор Requ_once () є ідентичним, що вимагає (), за винятком PHP перевірить, чи файл уже включений, і якщо так, не додавати (вимагати) його знову.
require_once()
швидше буде двоє
Використовуйте
вимагати,
коли файл вимагає ваша програма, наприклад важливий шаблон повідомлення або файл, що містить змінні конфігурації, без яких додаток не працює.
Requ_once,
коли файл містить вміст, який би спричинив помилку при наступному включенні, наприклад
function important() { /* important code */}
, безумовно, потрібен у вашій програмі, але оскільки функції неможливо повторно декларувати, не слід знову включати.
включати,
коли файл не потрібен і потік додатків слід продовжувати, коли його не знайдено, наприклад,
відмінно підходить для шаблонів, що посилаються на змінні з поточної області чи щось
включити
необов'язкові залежності, які можуть спричинити помилки при наступному завантаженні або, можливо, віддаленому включенні файлів, які ви не хочете статися двічі через накладні витрати HTTP
Але в основному, саме ви вирішувати, яким користуватися.
include
? include_once
? require
? require_once
?
Моя пропозиція - просто використовувати require_once
99,9% часу.
Використання require
або include
замість цього означає, що ваш код не можна повторно використовувати в іншому місці, тобто сценарії, які ви втягуєте, насправді виконують код замість надання доступних класів або деяких бібліотек функцій.
Якщо вам потрібен / включаючи код, який виконується на місці, це процедурний код, і вам потрібно ознайомитися з новою парадигмою . Як об'єктно-орієнтоване програмування, функціональне програмування або функціональне програмування.
Якщо ви вже займаєтесь OO або функціональним програмуванням, використання include_once
в основному буде затримуватися там, де в стеці ви знайдете помилки / помилки. Ви хочете знати, що функція do_cool_stuff()
недоступна, коли ви підете на її дзвінок пізніше, або момент, коли ви очікуєте, що вона буде доступною , вимагаючи бібліотеку? Як правило, найкраще негайно дізнатися, чи є щось, що потрібно і очікується, недоступне, тому просто використовуйте require_once
.
Крім того, в сучасному OOP просто завантажте свої класи під час використання.
include
сім'я зазвичай є відвертою поганою ідеєю (тому що досить рідко можна включати файли, у яких є будь-які можливості не існувати), і що поза, require_once
і require
вам слід використовувати, require_once
включаючи файли, які визначають функції або класи які використовуються в іншому місці, або інстанціювати одиночні елементи, як об'єкти підключення до бази даних, і використовувати require
для включення файлів, які негайно роблять речі, коли вони включаються. У будь-якому великому веб-додатку останній тип включення є незвичним.
require_once
найімовірніше, що кандидат може використовуватися майже весь час. З огляду на невеликі накладні відмінності між варіантами, які require
забезпечують зупинку сценарію, я не можу придумати багато сценаріїв, де програма може вижити без включення файлу. І _once
захищає від дурних питань. Той, хто не погоджується, швидше за все, знає, що робить, може вибрати, що підходить для програми чи сценарію.
Різниця між функціями _once і без функцій _once: без коду _once буде включено знову, тоді як з функціями _once PHP відстежує включені файли та включить їх лише один раз.
Різниця між вимагають і включають: Якщо потрібний файл не знайдений, PHP призведе до фатальної помилки, тоді як для включення буде видано лише попередження.
include()
накине попередження, якщо воно не може містити файл, але решта скрипту буде запущена.
require()
кине E_COMPILE_ERROR
і зупинить сценарій, якщо він не може включати файл.
Функції include_once()
та require_once()
функції не включатимуть файл вдруге, якщо він уже включений.
Дивіться наступні сторінки документації:
Кожен раз, коли ви використовуєте, ви require_once()
можете використовувати у файлі, щоб включити інший файл, коли вам потрібен викликаний файл лише один раз у поточний файл. Ось у прикладі у мене є test1.php.
<?php
echo "today is:".date("Y-m-d");
?>
і в іншому файлі, який я назвав test2.php
<?php
require_once('test1.php');
require_once('test1.php');
?>
оскільки ви переглядаєте m, який вимагає файлу test1 двічі, але цей файл буде включати test1 один раз, а для виклику вдруге це буде проігноровано. І без зупинки покаже вихід одноразово.
Кожного разу, коли ви використовуєте 'include_once () `, ви можете використовувати у файлі, щоб включити інший файл, коли вам потрібен файл, що викликається, більше одного разу у поточному файлі. Тут у прикладі я маю файл на ім'я test3.php.
<?php
echo "today is:".date("Y-m-d");
?>
І в іншому файлі, який я назвав test4.php
<?php
include_once('test3.php');
include_once('test3.php');
?>
як ви переглядаєте m, включаючи файл test3, він буде містити файл одноразово, але зупинить подальше виконання.
Ви повинні зберігати визначення класів та функцій, організованих у файлах.
Використовувати require_once()
для завантаження залежностей (класи, функції, константи).
Використовуйте require()
для завантаження файлів, що нагадують шаблони .
Використовувати include_once()
для завантаження необов'язкових залежностей (класи, функції, константи).
Використовуйте include()
для завантаження додаткових файлів, що нагадують шаблони .
Це питання було задано сім років тому, і жодна з відповідей не дає практичної допомоги. У сучасному програмуванні PHP ви в основному використовуєте required_once
лише один раз для включення вашого класу автозавантажувачів (композиційний автозавантажувач часто), і він завантажує всі ваші класи та функції (файли функцій повинні бути явно додані, щоб composer.json
файл був доступний у всіх інших файлах). Якщо з будь-якої причини ваш клас не завантажується з автозавантажувача, ви використовуєте його require_once
для завантаження.
Є деякі випадки, які нам потрібно використовувати require
. Наприклад, якщо у вас дійсно велике визначення масиву, і ви не хочете додавати це до вихідного коду визначення вашого класу, ви можете:
<?php
// arr.php
return ['x'=>'y'];
<?php
//main.php
$arr= require 'arry.php'
Якщо файл, який ви маєте намір включити, містить щось виконуване або оголошує деякі змінні, які вам майже завжди потрібно використовувати require
, тому що якщо ви використовуєте require_once
крім першого місця, ваш код не буде виконуватися і / або ваші змінні не ініціюватимуть мовчки, викликаючи помилки, абсолютно важко визначити.
Там немає ніякого практичного застосування для випадку include
і на include_once
самому справі.
include()
, загорнутий у вихідний буфер, щоб реалізувати двигун шаблонів.
require()
для розділення великих файлів.
require_once
для PHPMailer всередині функції, і мій автозавантажувач визначає $mail
змінну, необхідну пізніше в коді, тому наступна require_once
ігнорується, яка $mail
не залишається ініціалізованою! рішення було просто використовувати require
після виклику функції.
require
в цих випадках?
Різниця полягає в помилці, яку створюють команди. З require
, файл, який ви хочете використовувати, дійсно необхідний і, таким чином, генерує, E_ERROR
якщо його не знайти.
require()
є ідентичним, заinclude()
винятком випадків відмови, він також призведе до фатальноїE_ERROR
помилки рівня.
include
E_WARNING
помилка створюється лише в тому випадку, коли вона не працює, яка є більш-менш безшумною.
Тому використовуйте його, якщо файл вимагає, щоб залишився код працював, і ви хочете, щоб сценарій вийшов з ладу, файл недоступний.
Для *_once()
:
include_once()
може використовуватися в тих випадках, коли один і той же файл може бути включений та оцінений не один раз під час певного виконання сценарію, тому в цьому випадку це може допомогти уникнути проблем, таких як перевизначення функції, переназначення змінних значень тощо.
Це ж стосується і require_once()
звичайно.
Посилання: require()
,include_once()
require
дає E_COMPILE_ERROR, а не E_ERROR.
Потрібні критичні частини, як-от авторизація та включають усі інші
Кілька комплектуючих - це дуже поганий дизайн, і цього потрібно уникати взагалі. Отже, * _once насправді не має значення.
Включити / вимагати, ви можете включати один і той самий файл також не один раз:
вимагати () ідентично включати (), за винятком помилки, це також призведе до фатальної помилки рівня E_COMPILE_ERROR. Іншими словами, він зупинить сценарій, тоді як include () видає лише попередження (E_WARNING), яке дозволяє продовжувати сценарій.
є ідентичним, щоб включити / вимагати, за винятком того, що PHP перевірить, чи файл уже включений, і якщо так, не включити (вимагати) його ще раз.
include()
генерує попередження, коли не знайде файл, але require_once()
створить фатальну помилку.
Інша справа, якщо файл включений раніше. Потім require_once()
знову не включатимуть його.
Я використовував функцію, як показано нижче:
function doSomething() {
require_once(xyz.php);
....
}
Були постійні значення, оголошені в xyz.php.
Я повинен викликати цю функцію doSomething () з іншого файлу скриптів PHP.
Але я спостерігав поведінку під час виклику цієї функції в циклі, для першої ітерації doSomething () отримував постійні значення всередині xyz.php
, але пізніше кожна ітерація doSomething()
не могла отримати постійні значення, оголошені вxyz.php
.
Я вирішив свою проблему, перейшовши require_once()
на include()
оновлений doSomething()
код, як показано нижче:
function doSomething() {
include(xyz.php);
....
}
Тепер кожен виклик ітерації doSomething()
отримує постійні значення, визначені в xyz.php
.
З посібника :
require()
є ідентичним, заinclude()
винятком випадків відмови, він також призведе до фатальноїE_COMPILE_ERROR
помилки рівня. Іншими словами, він зупинить сценарій, тоді якinclude()
видає лише попередження (E_WARNING
), яке дозволяє продовжувати сценарій.
Те саме стосується _once()
варіантів.
У епоху PSR-0 / PSR-4
автозавантажувачів використання будь-яких висловлювань може бути абсолютно непотрібним, якщо все, що вам потрібно, - це зробити деякі функції / класи доступними для вашого коду (звичайно, вам все одно потрібно require_once
автозавантажувати себе у вашому завантажувальному файлі та include
шаблонах, якщо ви як і раніше використовувати PHP як шаблон двигуна).
Коли слід використовувати require
або include
?
Функції require
та include
функції виконують те саме завдання, тобто включають та оцінюють вказаний файл, але різниця require
викликає фатальну помилку, коли вказане розташування файлу недійсне або за будь-яку помилку, тоді як include
генерує попередження та продовжує виконання коду.
Таким чином, ви можете використовувати цю require
функцію в тому випадку, коли файл, який ви намагаєтеся включити, є серцем системи і може спричинити величезний вплив на решту коду, і ви можете використовувати цю include
функцію, коли файл, який ви намагаєтеся включити, це простий файл, що містить якийсь менш важливий код.
І моя особиста рекомендація (для менш важливого коду) полягає в тому, щоб виконувати require
функцію скрізь у своєму коді, поки вона знаходиться у фазі розробки, щоб ви могли налагодити код і пізніше замінити всі require
функції include
функцією, перш ніж перенести його на виробництво таким чином, що якщо ви пропустите будь-які помилки це не вплине на кінцевого користувача, а решта коду належним чином виконується ...
Коли слід використовувати require_once
або require
?
Основна різниця між require
і require_once
полягає в тому, require_once
щоб перевірити, включений чи ні файл, якщо він вже включений, він не буде включати файл, тоді як require
функція буде включати файл незалежно від того, включений він чи ні.
Тож у випадках, коли ви хочете знову і знову включити якийсь фрагмент коду, використовуйте require
функцію, тоді як якщо ви хочете включити якийсь код лише один раз у свій код, використовуйте require_once
.
Використовуйте функцію вимагати, коли вам потрібно завантажити будь-який клас, функцію чи залежність.
Використовуйте функцію " включити", коли потрібно завантажити файл у стилі шаблону
Якщо ви все ще плутаєтеся, просто використовуйте Requ_once на весь час.
Вони всі способи включення файлів.
Вимагати - значить, вона цього потребує. Require_once означає, що він знадобиться йому, але вимагає лише одного разу. Включити означає, що він буде містити файл, але його не потрібно продовжувати.
Приклади:
Require 'filename'
Require_once 'filename'
Include 'filename'
Існує також функція include_once, яка включає файл один раз.
Include_once 'filename'
Не використовуйте великі літери там, де я є, коли я друкую з телефону.
одне, що я помітив, при використанні include я можу отримати доступ до функцій, що входять до файлів, лише з файлу, що входить до нього. За допомогою Requ_once я можу запустити цю функцію у другому файлі Requir_once.
також: рекомендую додати
if(file_exists($RequiredFile)){
require_once($RequiredFile);
}else{
die('Error: File Does Not Exist');
}
Оскільки, коли Requ_once вбиває сторінку, вона іноді може перегукуватися з каталогом файлів вашого веб-сайту
Ось спеціальна функція, яку я зробив, щоб вимагати файлів:
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;
}
}
приклад використання:
$success = addFile('functions/common');
if($success){
commonFunction();
}else{
fallbackFunction();
}
В основному, якщо вам потрібен неправильний шлях, PHP видає фатальну помилку і викликається функція відключення, але коли ви включите неправильний шлях, PHP продовжить виконання, але він просто відображатиме попередження про те, що файл не існує.
З англійського слова need , PHP сказано, що виконання сторінки або файлу залежить від необхідного файлу.
З мого досвіду, нормально вимагати важливих файлів, таких як файли конфігурації, класи баз даних та інші важливі утиліти.
Часто питання полягає в тому, чи хочете ви умовно завантажувати клієнтську бібліотеку, чи продовжуєте завантажувати її, чи не збираєтесь ви її використовувати.
Ось конкретний приклад; детальніше про те, що сказав pcj.
Скажімо, у вас є файл конфігурації, який зберігає ім’я користувача та пароль вашої бази даних (conf.php):
<?php
//my site configuration file
//For Database
$location='localhost';
$dbuser='yourname';
$userpw='yourpassword';
$database='nameofdatabase';
?>
І клас зі статичною функцією, яка використовує базу даних:
<?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
}
}
?>
І ця статична функція використовується всередині іншої функції, яка називається ітеративно всередині циклу:
<?php
require_once('path/to/arbitraryObject.php'); //either will likely be OK at this level
$obj = new arbitraryObject();
foreach($array as $element){
$obj->myFunction();
}
?>
Ви можете вимагати / включати клас лише один раз. Якщо вам потрібно / включити її до кожної ітерації циклу, ви отримаєте помилку. Однак вам потрібно включати конф-файл щоразу, коли викликається статична функція.
<?php
class arbitraryObject {
public function myFunction(){
require_once(/path/to/UsedInLoop.php); //This must be require_once. require() will not work
UsedInLoop::databaseQuery();
}
}
?>
Звичайно, переміщення його поза функцією може бути вирішенням цієї проблеми:
<?php
require(/path/to/UsedInLoop.php); //now require() is fine
class arbitraryObject {
public function myFunction(){
UsedInLoop::databaseQuery();
}
}
?>
Якщо ви не переймаєтеся накладними витратами на завантаження класу, який може використовуватися лише в певних умовах, і не хочете завантажувати його, коли його немає.
require
має великі накладні витрати, ніж include
, оскільки він повинен спочатку розібрати файл. Заміна requires
на includes
часто є хорошою технікою оптимізації.
require
більше не аналізує файл include
. У _once
версії цих функцій кожен має трохи накладних витрат, але , як і інші говорили, що це близько до незначним в більшості додатків.
Просто використовуйте вимагають і включайте.
Тому що подумайте, як працювати з include_once або Requ_once. Це шукає дані журналу, які зберігають включені або потрібні файли PHP. Так що це повільніше, ніж включати та вимагати.
if (!defined(php)) {
include 'php';
define(php, 1);
}
Просто використовуючи так ...