namespace / use / require / include

require

  • 해당 php파일을 불러온다

  • 불러올 파일이 없으면 fatal error를 발생시킨다 (엄격한 로드방법)

include

  • 해당 php파일을 불러온다

  • 불러올 파일이 없으면 warning을 발생시킨다

require_once / include_once

_once를 사용하는 이유

require나 include를 사용하다보면 해당 php파일들 간에 중복으로 inlcide와 require를 중복호출하는 경우가 있다.

이러한 경우 기존에 사용되던 변수가 초기화 되며 성능상 이슈가 생긴다

그리나 _once를 사용하면 기존에 어디에선가 require이 된 적이있으면 다시 로드하지않고 기존에 로드된 내용을 사용한다

그러므로 안전성과 성능을 위해서 _once를 사용하는게 좋은것 같다

namespace

  • JAVA의 패키지와 비슷한 개념

  • 디렉토리의 개념

  • 클래스와 함수 그리고 변수에 대해 namespace를 사용가능

  • namespace A\B { } 등의 괄호로 감쌀수있다

use

  • namespace에 등록된 클래스나 함수를 사용할수 있게 함

  • 사용전 require/include필요

    /* index1.php */
    <?php
    // 클래스1
    namespace A\CLASS2;
    class TestClass{
        function test(){
            return "class1_test <br>";
        }
        // 1.정적 함수이며 클래스명::함수명() 으로 사용가능하다
        // 2.public을 사용하여 어느 파일에서든 사용가능하도록 하였다
        public static function testStatic(){
            return "class1_test_static <br>";
        }
    }
    
    // 함수1 
    // 3. 아래의 함수 test와 동일한 함수명이지만 namespace를 사용하므로써 사용가능
    namespace A\FUNCTION1;
        function test(){
            return "function_test_1 <br>";
        }
    
        // 함수2
    namespace A\FUNCTION2;
        function test(){
            return "function_test_2 <br>";
        }
    
    // 변수1
    namespace A\VALUE1;
        $test ="value_test_1";
    
    
    /* index2.php */
    <?php
    // 0.맨 처음에 해당파일을 불러와야한다
    // 0.해당 require없이 사용하고 싶을땐 '오토로드'를 사용한다
    require_once 'index1.php';
    
    // 1.클래스 사용시
    use A\CLASS2\TestClass;
    $testClassObj1 = new TestClass();
    echo $testClassObj1->test(); // class1_test
    
    // 2.클래스 사용시 (use 사용안함)
    $testClassObj2=new A\CLASS2\TestClass();
    echo $testClassObj2->test(); // class1_test
    
    // 3.클래스 사용시 (정적함수사용)
    echo TestClass::testStatic(); // class1_test_static
    
    // 4.함수 사용시 (네임스페이스를 그대로 사용하는 경우)
    echo A\FUNCTION1\test(); // function_test_1
    
    // 5.함수 사용시 (네임스페이스를 별칭으로 사용하는 경우)
    use A\FUNCTION2 as function2;
    echo function2\test(); // function_test_2
    
    // 6.변수에 사용시
    use A\VALUE1;
    echo $test; // value_test_1
    
Feb 25, 2023 Views 113