PHP에서:
- 언제
require
대include
사용해야 합니까? - 언제
require_once
대include_once
사용해야 합니까?
질문자 :Scott B
PHP에서:
require
대 include
사용해야 합니까?require_once
대 include_once
사용해야 합니까?require
및 include_once
도 있습니다.
따라서 귀하의 질문은 ...
require
대 include
사용해야 합니까?require_once
와 require
사용해야 하나요?1에 대한 답은 여기 에 설명되어 있습니다.
require() 함수는 오류를 다르게 처리한다는 점을 제외하면 include()와 동일합니다. 오류가 발생하면 include() 함수가 경고를 생성하지만 스크립트는 계속 실행됩니다. require()는 치명적인 오류를 생성하고 스크립트는 중지됩니다.
2에 대한 답은 여기 에서 찾을 수 있습니다.
require_once() 문은 PHP가 파일이 이미 포함되어 있는지 확인하고 포함되어 있으면 다시 포함(요구)하지 않는다는 점을 제외하고 require()와 동일합니다.
사용하다
필요하다
파일이 애플리케이션에 필요한 경우(예: 중요한 메시지 템플릿 또는 앱이 중단될 구성 변수가 포함된 파일).
require_once
파일에 후속 포함 시 오류를 생성하는 콘텐츠가 포함된 경우, 예를 들어 function important() { /* important code */}
는 애플리케이션에 반드시 필요하지만 함수를 다시 선언할 수 없기 때문에 다시 포함해서는 안 됩니다.
포함 파일이 필요하지 않으며 응용 프로그램의 흐름이 계속되어야 할 때 찾을 수없는 경우, 예를 들어,
현재 범위 또는 무언가의 변수를 참조하는 템플릿에 적합
include_once
HTTP 오버헤드로 인해 두 번 발생하고 싶지 않은 후속 로드 또는 원격 파일 포함 시 오류를 생성하는 선택적 종속성
그러나 기본적으로 언제 어느 것을 사용할지는 귀하에게 달려 있습니다.
내 제안은 99.9%의 시간에 require_once
require
또는 include
사용하는 것은 코드를 다른 곳에서 재사용할 수 없다는 것을 의미합니다. 즉, 가져오는 스크립트가 클래스나 일부 함수 라이브러리를 사용 가능 하게 만드는 대신 실제로 코드를 실행한다는 의미입니다.
그 자리에서 실행되는 코드를 요구/포함한다면 그것은 절차적 코드이며 새로운 패러다임을 알아야 합니다 . 객체 지향 프로그래밍, 함수 기반 프로그래밍 또는 함수형 프로그래밍과 같습니다.
이미 객체지향 프로그래밍이나 함수형 프로그래밍을 하고 있다면 include_once
사용하면 스택에서 버그/오류가 발견되는 위치가 대부분 지연될 것입니다. 나중에 호출하려고 할 때 do_cool_stuff()
함수를 사용할 수 없다는 것을 알고 싶습니까, 아니면 라이브러리를 요구하여 사용할 수 있을 것으로 예상되는 순간에 사용할 수 있습니까? 일반적으로 필요하고 기대하는 것이 없으면 즉시 아는 것이 가장 좋으므로 require_once
사용하십시오.
또는 최신 OOP에서는 사용 시 클래스를 자동 로드하기만 하면 됩니다.
_once 함수와 _once 함수가 없는 차이점: _once가 없으면 코드가 다시 포함되는 반면 _once 함수가 있으면 PHP는 포함된 파일을 추적하고 한 번만 포함합니다.
필수와 포함의 차이점: 필수 파일을 찾을 수 없으면 PHP는 치명적인 오류를 발생시키는 반면 포함의 경우 경고만 내보냅니다.
include()
는 파일을 포함할 수 없는 경우 경고를 표시하지만 나머지 스크립트는 실행됩니다.
require()
는 E_COMPILE_ERROR
를 발생시키고 파일을 포함할 수 없는 경우 스크립트를 중지합니다.
include_once()
및 require_once()
함수는 이미 포함된 파일을 두 번째로 포함하지 않습니다.
다음 문서 페이지를 참조하십시오.
require_once()
사용할 때마다 현재 파일에서 호출된 파일이 한 번만 필요할 때 다른 파일을 포함하기 위해 파일에서 사용할 수 있습니다. 여기 예제에는 test1.php가 있습니다.
<?php echo "today is:".date("Ymd"); ?>
그리고 test2.php라는 이름의 다른 파일에서
<?php require_once('test1.php'); require_once('test1.php'); ?>
test1 파일이 두 번 필요한 m을보고 있지만 파일에는 test1이 한 번 포함되고 두 번째 호출에 대해서는 무시됩니다. 그리고 정지하지 않고 출력을 한 번만 표시합니다.
'include_once()'를 사용할 때마다 현재 파일에서 호출된 파일이 두 번 이상 필요할 때 다른 파일을 포함하도록 파일에 사용할 수 있습니다. 여기 예제에서 test3.php라는 파일이 있습니다.
<?php echo "today is:".date("Ymd"); ?>
그리고 test4.php라는 다른 파일에서
<?php include_once('test3.php'); include_once('test3.php'); ?>
당신이 보고 있을 때 test3 파일을 포함하는 m은 파일을 한 번만 포함하지만 더 이상의 실행을 중지합니다.
클래스 및 함수 정의를 파일로 정리해야 합니다.
require_once()
를 사용 하여 종속성 (클래스, 함수, 상수)을 로드합니다.
템플릿과 같은 파일 을 로드 require()
를 사용하세요.
include_once()
를 사용 하여 선택적 종속성 (클래스, 함수, 상수)을 로드합니다.
include()
를 사용 하여 템플릿과 같은 선택적 파일 을 로드합니다.
이 질문은 7년 전에 제기되었으며 어떤 답변도 질문에 대한 실질적인 도움을 제공하지 못했습니다. 최신 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
실제 사용 사례는 없습니다.
재사용 가능한 PHP 템플릿에는 "포함"을 사용하십시오. 필수 라이브러리에는 "require"를 사용하십시오.
"*_once"는 파일이 이미 로드되었는지 여부를 확인하기 때문에 좋지만 "require_once"에서만 의미가 있습니다.
차이점은 명령이 생성하는 오류에 있습니다. require
를 사용하면 사용하려는 파일이 실제로 필요하므로 찾지 못하면 E_ERROR
require()
는E_ERROR
레벨 오류를 생성한다는 점을 제외하고include()
include
E_WARNING
오류를 생성하며 이는 다소 조용합니다.
따라서 나머지 코드가 작동하도록 파일이 필요하고 파일을 사용할 수 없는 경우 스크립트가 실패하도록 하려는 경우 사용하십시오.
*_once()
:
include_once()
는 스크립트의 특정 실행 중에 동일한 파일이 두 번 이상 포함되고 평가될 수 있는 경우에 사용될 수 있으므로 이 경우 함수 재정의, 변수 값 재할당 등과 같은 문제를 피하는 데 도움이 될 수 있습니다.
물론 require_once()
에도 동일하게 적용됩니다.
참조: require()
, include_once()
require 파일이 존재해야 합니다. 존재하지 않으면 오류가 표시됩니다. 반면 포함을 사용하면 파일이 존재하지 않으면 페이지가 계속 로드됩니다.
승인과 같은 중요한 부분을 요구하고 다른 모든 부분을 포함합니다.
다중 포함은 매우 나쁜 디자인일 뿐이므로 전혀 피해야 합니다. 따라서 *_once는 별로 중요하지 않습니다.
Include / Require 같은 파일을 두 번 이상 포함할 수도 있습니다.
require()는 실패 시 치명적인 E_COMPILE_ERROR 레벨 오류를 생성한다는 점을 제외하고는 include()와 동일합니다. 즉, 스크립트를 중지하는 반면 include()는 스크립트를 계속할 수 있도록 하는 경고(E_WARNING)만 내보냅니다.
PHP가 파일이 이미 포함되어 있는지 확인하고 포함되어 있으면 다시 포함(요구)하지 않는다는 점을 제외하고는 포함/요구와 동일합니다.
나는 아래와 같이 기능을 사용하고 있었다.
function doSomething() { require_once(xyz.php); .... }
xyz.php에 상수 값이 선언되었습니다.
다른 PHP 스크립트 파일에서 이 doSomething() 함수를 호출해야 합니다.
그러나 루프에서 이 함수를 호출하는 동안 동작을 관찰했습니다. 첫 번째 반복에서 doSomething() 은 xyz.php
내에서 상수 값을 얻었지만 나중에 모든 반복 doSomething()
xyz.php
선언된 상수 값을 가져올 수 없었습니다.
require_once()
에서 include()
로 전환하여 문제를 해결했습니다. 업데이트된 doSomething()
코드는 다음과 같습니다.
function doSomething() { include(xyz.php); .... }
doSomething()
에 대한 모든 반복 호출 xyz.php
정의된 상수 값을 가져옵니다.
언제 require
하거나 include
해야 합니까?
require
및 include
함수는 동일한 작업을 수행합니다. 즉, 지정된 파일을 포함하고 평가하지만 차이점은 require
는 지정된 파일 위치가 유효하지 않거나 오류가 발생한 경우 치명적인 오류를 일으키는 반면 include
는 경고를 생성하고 코드 실행을 계속한다는 점입니다. .
따라서 포함하려는 파일이 시스템의 핵심이고 나머지 코드에 큰 영향을 미칠 수 require
함수를 사용할 수 있으며 파일을 포함하려고 할 때 include
덜 중요한 코드가 포함된 간단한 파일입니다.
그리고 (덜 중요한 코드의 경우) 내 개인 추천은가 이동하는 것입니다 require
코드 어디에서나 기능은 개발 단계에있는 동안 당신이 코드를 디버깅하고 나중에 모두 대체 할 수 있도록 require
에 의해 기능이 include
생산으로 이동하기 전에 기능을 그러한 버그를 놓치면 최종 사용자에게 영향을 미치지 않으며 나머지 코드는 제대로 실행됩니다...
언제 require_once
또는 require
합니까?
require
와 require_once
의 기본적인 차이점은 require_once
는 파일이 이미 포함되어 있는지 여부를 확인하고 이미 포함된 경우 파일을 포함하지 않는 반면 require
함수는 파일이 이미 포함되었는지 여부에 관계없이 파일을 포함합니다.
require
함수를 사용하고 일부 코드를 코드에 한 번만 포함하려면 require_once
사용하십시오.
설명서에서 :
require()
는E_COMPILE_ERROR
레벨 오류를 생성한다는 점을 제외하고include()
즉, 스크립트를 중지하는 반면include()
는 스크립트를 계속할 수 있도록 하는 경고(E_WARNING
_once()
변형의 경우에도 마찬가지입니다.
include()
는 파일을 찾지 못하면 경고를 생성하지만 require_once()
는 치명적인 오류를 생성합니다.
또 다른 것은 파일이 이전에 포함되었는지 여부입니다. 그러면 require_once()
는 그것을 다시 포함하지 않을 것입니다.
PSR-0 / PSR-4
자동 로더의 시대에는 코드에서 일부 기능/클래스를 사용할 수 있도록 하는 것이 필요하다면 명령문을 사용하는 것이 완전히 불필요할 수 있습니다(물론 여전히 require_once
자동 로더 자체가 필요합니다. 여전히 PHP를 템플릿 엔진으로 사용하는 경우 부트스트랩 파일에 include
클래스, 함수 또는 종속성을 로드해야 할 때 require 함수를 사용하십시오.
템플릿 스타일의 파일을 불러오고 싶을 때 include 기능을 사용하세요.
여전히 혼란스럽다면 항상 require_once 를 사용하십시오.
기본적으로 잘못된 경로가 필요한 경우 PHP에서 치명적인 오류가 발생하고 종료 기능이 호출되지만 잘못된 경로를 포함하면 PHP는 계속 실행되지만 파일이 존재하지 않는다는 경고만 표시됩니다.
영어 단어 require 에서 PHP는 페이지 또는 파일의 실행이 필요한 파일에 따라 달라집니다.
내 경험에 따르면 구성 파일, 데이터베이스 클래스 및 기타 중요한 유틸리티와 같은 중요한 파일이 필요한 것이 일반적입니다.
그것들은 모두 파일을 포함하는 방법입니다.
Require는 필요하다는 뜻입니다. Require_once는 필요하지만 한 번만 필요함을 의미합니다. 포함은 파일을 포함하지만 계속할 필요는 없음을 의미합니다.
예:
Require 'filename' Require_once 'filename' Include 'filename'
파일을 한 번 포함하는 include_once 함수도 있습니다.
Include_once 'filename'
휴대전화로 입력할 때 대문자를 사용하지 마세요.
한 가지 알아차린 것은 포함을 사용할 때 포함된 파일에서 포함된 파일 기능에만 액세스할 수 있다는 것입니다. require_once를 사용하면 두 번째 required_once 파일에서 해당 기능을 실행할 수 있습니다.
또한 : 나는 추가하는 것이 좋습니다
if(file_exists($RequiredFile)){ require_once($RequiredFile); }else{ die('Error: File Does Not Exist'); }
require_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(); }
1 - 파일이 존재하지 않으면 "require" 및 "require_once"가 치명적인 오류를 발생시키고 스크립트 실행을 중지합니다.
2 - "include" 및 "include_once"가 경고를 표시하고 실행이 계속됩니다.
3 - "require_once" 및 "include_once" 이름에서 알 수 있듯이 파일이 이미 "require", "require_once", "include" 또는 "include_once"로 포함된 경우 파일을 포함하지 않습니다.
클라이언트 라이브러리를 조건부로 로드할 것인지 아니면 계속해서 로드할 것인지 여부가 중요한 경우가 많습니다.
다음은 구체적인 예입니다. 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(); } ?>
클래스는 한 번만 요구/포함할 수 있습니다. 루프의 모든 반복에 필요/포함하면 오류가 발생합니다. 그러나 정적 함수가 호출될 때마다 conf 파일을 포함해야 합니다.
<?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
으로 바꾸는 것은 종종 좋은 최적화 기술입니다.
필요 및 포함을 사용하십시오.
include_once 또는 require_once로 작업하는 방법을 생각하기 때문입니다. 그것은 포함되거나 필요한 PHP 파일을 저장하는 로그 데이터를 찾고 있습니다. 따라서 포함 및 요구보다 느립니다.
if (!defined(php)) { include 'php'; define(php, 1); }
그냥 이렇게 사용...
출처 : http:www.stackoverflow.com/questions/2418473/difference-between-require-include-require-once-and-include-once
Access-Control-Allow-Origin 헤더는 어떻게 작동합니까? (2) | 2023.04.15 |
---|---|
Javascript의 배열에서 빈 요소 제거 (0) | 2023.04.15 |
C에서 함수 포인터는 어떻게 작동합니까? (0) | 2023.04.15 |
고정 헤더를 조정하기 위해 html 앵커 오프셋 [중복] (0) | 2023.04.15 |
jQuery로 확인란이 선택되어 있는지 확인하십시오. (0) | 2023.04.15 |