>  기사  >  백엔드 개발  >  아직도 PHP의 include와 require에 대해 모르시나요? 이 글을 살펴보세요!

아직도 PHP의 include와 require에 대해 모르시나요? 이 글을 살펴보세요!

青灯夜游
青灯夜游앞으로
2021-07-30 17:57:092396검색

이 글에서는 PHP의 include와 require에 대해 자세히 소개하여 모든 사람이 include와 require를 완전히 이해할 수 있도록 하겠습니다.

아직도 PHP의 include와 require에 대해 모르시나요? 이 글을 살펴보세요!

PHP에는 외부 파일을 포함하는 두 가지 방법, 즉 include와 require가 있습니다. 그들 사이의 차이점은 무엇입니까?

파일이 없거나 오류가 발생하면 require는 E_COMPILE_ERROR 수준 오류를 생성하고 프로그램 실행을 중지합니다. 포함하면 경고만 생성되며 스크립트는 계속 실행됩니다.

이것이 둘 사이의 주요 차이점입니다. 다른 측면에서는 require는 기본적으로 include와 동일합니다.

  • 포함된 파일은 먼저 매개변수에 지정된 경로에 따라 검색됩니다. 디렉터리가 지정되지 않은 경우(파일 이름만) include_path에 지정된 디렉터리에 따라 검색됩니다. include_path 아래에 파일이 없으면 include는 호출 스크립트 파일이 있는 디렉터리와 현재 작업 디렉터리에서 최종적으로 검색합니다. 경로가 정의되어 있으면 현재 디렉터리에 대한 절대 경로인지 상대 경로인지 확인합니다. include_path는 완전히 무시됩니다. php.ini
  • 에 정의되어 있습니다. 파일이 포함되면 그 안에 포함된 코드는 포함 행의 변수 범위를 상속합니다. 그 시점부터 해당 줄의 호출 파일에서 사용할 수 있는 모든 변수는 호출된 파일에서도 사용할 수 있습니다. 그러나 포함 파일에 정의된 모든 함수와 클래스에는 일반 require 및 include 외에 require_once 및 include_once도 있습니다. 해당 기능은 다음과 같습니다.
  • 파일이 이미 포함된 경우 다시 포함되지 않습니다. . 이 명령문의 이름에서 알 수 있듯이, only include Once
  • 는 스크립트 실행 중에 동일한 파일이 두 번 이상 포함될 수 있고 함수 재정의 및 변수 재할당을 피하기 위해 한 번만 포함되도록 하려는 경우에 사용할 수 있습니다. 질문

몇 가지 예를 살펴보겠습니다.
    // a.php 不存在
    include "a.php"; // warning
    // require "a.php"; // error
    
    echo 111; // 使用include时111会输出
    
    // file1.php 中只有一行代码echo 'file1';
    require_once 'includeandrequire/file1.php'; // file1
    require_once 'includeandrequire/file1.php'; // noting
    
    include_once 'includeandrequire/file1.php'; // noting
    include_once 'includeandrequire/file1.php'; // noting
    
    require 'includeandrequire/file1.php'; // file1
    require 'includeandrequire/file1.php'; // file1
    
    require 'includeandrequire/file1.php'; // file1
    require 'includeandrequire/file1.php'; // file1
  • 첫 번째 _once가 성공적으로 로드된 후에는 require_once 또는 include_once에 관계없이 이 파일이 다시 로드되지 않음을 알 수 있습니다. _once가 없으면 파일이 반복적으로 로드됩니다.
  • file2.php
    
    <?php
    
    echo &#39;file2:&#39; . $a, PHP_EOL;
    echo &#39;file2:&#39; . $b, PHP_EOL;
    $b = "file2";
    
    myFile.php
    
    <?php
    
    $a = &#39;myFile&#39;;
    $b = &#39;youFile&#39;;
    require_once &#39;includeandrequire/file2.php&#39;;
    echo $a, PHP_EOL;
    echo $b, PHP_EOL;
    
    // 输出结果
    // file2:myFile
    // file2:youFile
    // myFile
    // file2
    
    file3.php
    <?php
    
    $c = &#39;file3&#39;;
    
    myFile.php
    <?php
    function test(){
        require_once &#39;includeandrequire/file3.php&#39;;
        echo $c, PHP_EOL; // file3
    }
    test();
    echo $c, PHP_EOL; // empty
  • 포함된 파일은 상위 파일의 변수를 가져올 수 있고, 상위 파일도 포함된 파일의 변수를 가져올 수 있습니다. 하지만 _once의 특별한 경우에 주의해야 합니다.
  • function foo(){
        require_once &#39;includeandrequire/file3.php&#39;;
        return $c;
    }
    
    for($a=1;$a<=5;$a++){
        echo foo(), PHP_EOL;
    }
    
    // file3
    // empty
    // empty
    // empty
    // empty
_once를 사용하고 루프에서 로드하면 처음으로 file3.php의 내용만 출력됩니다. 이유는 무엇입니까? 현재 변수 범위가 메서드에 있기 때문에 첫 번째 로드가 완료된 후에는 후속 파일이 다시 로드되지 않습니다. 이때 다음 4개 루프에는

c 기본값이 비어 있습니다.

두 가지 방법으로 동시에 _once를 사용하여 파일을 로드하는 경우 두 번째 방법으로도 파일을 로드할 수 있나요?

function test1(){
    require_once &#39;includeandrequire/file1.php&#39;;
}
function test2(){
    require_once &#39;includeandrequire/file1.php&#39;;
}
test1(); // file1
test2(); // empty

죄송합니다. 첫 번째 방법만 성공적으로 로드되며 두 번째 방법은 다시 로드되지 않습니다.

그렇다면 일상적인 개발에 어떤 것이 더 좋을까요? 아직도 PHP의 include와 require에 대해 모르시나요? 이 글을 살펴보세요!

효율성 측면에서 _once는 파일이 로드되었는지 확인해야 합니다. 효율성은 떨어지겠지만, 눈에 보이지 않는 정도의 감소이므로 효율성 문제가 발생할 수 있습니다. 무시되었습니다. 그리고 _once가 없는 것보다 훨씬 더 많은 이점을 제공합니다

미리 오류의 원칙을 바탕으로 require_once를 사용하는 것이 좋습니다. 경고를 표시하지 않도록 PHP 오류 수준을 조정한 후에는 포함에 대한 경고 정보가 표시되지 않아 예측할 수 없는 오류가 발생하기 때문입니다

메서드에서 사용할 때 _once를 사용하여 파일을 로드해서는 안 됩니다. 여러 클래스나 메소드에서 사용할 때 _once를 사용하면 후속 메소드에서 동일한 파일을 로드하지 못할 수 있습니다

    require 또는 include를 사용할 때 include와 같이 실제로 사용할 수는 있지만 괄호를 사용하지 않는 것이 가장 좋습니다. ('xxx.php'); 시스템 메소드가 아닌 표현식 키워드이므로 그냥 include 'xxx.php'를 사용하세요.
  • include 및 require 파일에 반환이 있는 경우 변수를 사용하여 반환된 데이터를 받을 수 있습니다. 또한 다음과 같이 PHP가 아닌 파일과 원격 파일을 로드할 수도 있습니다(원격 로딩을 위해서는 php.ini의 허용_url_include가 켜져 있는지 확인해야 함).
  • file4.php
    <?php
    
    return &#39;file4&#39;;
    
    file4.txt
    可以吧
    
    myFile.php
    <?php
    $v = require &#39;includeandrequire/file4.php&#39;;
    echo $v, PHP_EOL; // file4
    
    include &#39;includeandrequire/file4.txt&#39;;
    // 可以吧
    
    include &#39;https://www.baidu.com/index.html&#39;;
    // 百度首页的html代码
  • 이제 우리는 include에 대해 매우 깊이 있게 이해했습니다. 파일을 로드하는 이 두 가지 방법은 복잡하지는 않지만 몇 가지 함정이 있기 쉽습니다. 특히 _once를 메서드에 사용할 때는 특별한 주의가 필요합니다. 마지막으로 디렉터리의 모든 파일을 한 번에 로드하는 방법을 캡슐화하는 작은 보너스가 있습니다:
  • function include_all_once ($pattern) {
        foreach (glob($pattern) as $file) { 
            require $file;
        }
    }
    
    include_all_once(&#39;includeandrequire/*&#39;);
    测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/%E5%BD%BB%E5%BA%95%E6%90%9E%E6%98%8E%E7%99%BDPHP%E4%B8%AD%E7%9A%84include%E5%92%8Crequire.php
  • 권장 학습: "
  • PHP 비디오 튜토리얼
"

위 내용은 아직도 PHP의 include와 require에 대해 모르시나요? 이 글을 살펴보세요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제