코딩동강

[PHP-생코] PHP 10강 - 클래스로딩과 네임스페이스 (namespace) ※ require, include 응용.

1,435

※ 학습 내용: 

  1. 클래스 정의와 사용 부분을 분리하기.
  2. 클래스 정의 부분 누락 시 자동으로 클래스 정의 파일 로드시키기. 


  • namespace : 분류의 끝판왕.
  • 배경지식 : class 정의 부분이 다른 파일에 있는 경우, require_once 이용해 삽입 가능.

 

greeting.php

 

<?php

class Hi {

    function __construct() {

        echo "<h1>Hi</ht>";

    }

}

 


main.php

 

require_once 'greeting.php';

new Hi();

 

 


(예제1) - 배경지식: spl_autoload_register() 함수의 보충적 성격 확인.

greeting.php

 

<?php

class Hi {

    function __construct() {

        echo "<h1>Hi</ht>";

    }

}

 


main.php (빨간색 함수 부분이 실행 X)

 

require_once 'greeting.php';

function autoloader() {

    var_dump('here');

}

spl_autoload_register('autoloader');

new Hi();

 


main.php (파란색 함수 부분이 실행 O)

 

1라인을 아래 코드 사용 시, 빨간색 코드 실행 됨.

//require_once 'greeting.php';

function autoloader() {

    var_dump('here');

    require_once 'greeting.php';

}

spl_autoload_register('autoloader');

new Hi();

 

 

예제2 - 배경지식: spl_autoload_register()는 인스턴스 생성 시 class 정의 부분 없을 시, 자동으로 클래스명이 매개변수로 로드됨.

Hi.php

 

<?php

class Hi {

    function __construct() {

        echo "<h1>Hi</ht>";

    }

}

 


main.php

 

//require_once 'Hi.php';

function autoloader($path) {

    var_dump("path: {$path}");

    require_once $path.'.php';

}

spl_autoload_register('autoloader');

new Hi();

 

 


namespace - 같은 이름의 class가 같은 프로그앰에 공존 가능하게 해줌.

주의: \ 코드 유무에 주의.

예제1 - 네임스페이스 설정.

 

<?php

namespace en;

class Hi{

    function __construct() {

        echo '<h1>Hi</h1>';

    }

}


namespace ko;

class Hi{

    function __construct() {

        echo '<h1>안녕</h1>';

    }

}


new \en\Hi(); // Hi

new \ko\Hi(); // 안녕

?>

 


예제2 - 네임스페이스 분류.

 

<?php

namespace greeting\en;

class Hi{

    function __construct() {

        echo '<h1>Hi</h1>';

    }

}


namespace greeting\ko;

class Hi{

    function __construct() {

        echo '<h1>안녕</h1>';

    }

}


new \greeting\en\Hi(); // Hi

new \greeting\ko\Hi(); // 안녕

?>

 


예제3 - 네임스페이스 단축.

 

<?php

namespace greeting\en;

class Hi{

    function __construct() {

        echo '<h1>Hi</h1>';

    }

}


namespace greeting\ko;

class Hi{

    function __construct() {

        echo '<h1>안녕</h1>';

    }

}


use \greeting\en, \greeting\ko;

new en\Hi(); // Hi

new ko\Hi(); // 안녕

?>

 


예제4 - (네임스페이스+클래스명) 대체하는 별명.

 

<?php

namespace greeting\en;

class Hi{

    function __construct() {

        echo '<h1>Hi</h1>';

    }

}


namespace greeting\ko;

class Hi{

    function __construct() {

        echo '<h1>안녕</h1>';

    }

}


use \greeting\en\Hi as HiEn; 

use \greeting\ko\Hi as HiKo;

new HiEn(); // Hi

new HiKo(); // 안녕

?>

 

 


 

namespace 활용

autoload/greeting/en/Hi.php

 

<?php

namespace greeting\en;

class Hi{

  function __construct(){

    echo '<h1>hi</h1>';

  }

}

?>

 


autoload/greeting/ko/Hi.php

 

<?php

namespace greeting\ko;

class Hi{

  function __construct(){

    echo '<h1>안녕</h1>';

  }

}

?>

 


autoload/autoload.php

 

<?php

spl_autoload_register(function($path) {

    $path = str_replace('', '/', $path);

    $path = $path.'.php';

    print("path: {$path}");

    require_once $path;

});

?> 

 

PS.

spl_autoload_register() 함수 매개변수에 함수명 대신 익명함수를 넣은 형태로 바로 넣어도 무방.


autoload/main.php

 

<?php

require_once 'autoload.php';

use \greeting\en\Hi as HiEn;

use \greeting\ko\Hi as HiKo;

new HiEn();

new HiKo();

?>

 

PS.

핑크색 부분이 autoload.php 파일의 $path 매개변수로 전달됨.


autoload/index.php

 

<?php

require_once 'autoload.php';

new greeting\en\Hi();

?>

 



분류 제목
PHP7-바위 PHP7 9강 - Cookie (쿠키) / Session (세션) 사용법 ★★★★★
PHP7-바위 PHP7 8강 - FILTER_INPUT() 함수 - 사용자 입력값 유효성 검사 (필터인풋함수)
PHP7-바위 PHP7 7강 - (GET / POST) 사용자 입력 데이터 전송 방식 차이
PHP7-바위 PHP7 6강 - (include / require) - PHP 외부문서 삽입/불러오기 (※ 인클루드, 리콰…
PHP7-바위 PHP7 5강 - 함수, (매개변수/독립변수), (지역변수/전역변수), 정적변수
PHP7-바위 PHP7 4강 - 반복문 (while / do~while / for / foreach) ※ 와일반복문/두와일…
PHP7-바위 PHP7 3강 - 조건문 / 색인배열+연관배열 / for반복문+foreach반복문
PHP7-바위 PHP7 2강 - 기본구문 / 변수생성 / 주석처리 / 에러표시
PHP7-바위 PHP7 1강 - PHP 개발환경 세팅 [= 비트나미(Bitnami) 설치법/사용법] ※ VSCODE 에디터…
PHP2020-서기 PHP2020 8강 - 카카오맵 (마커 대신 오버레이로 내용 표시)
PHP2020-서기 PHP2020 7강 - 카카오맵 (현재 화면 좌표 안의 자료만 불러오기)
PHP2020-서기 PHP2020 6강 - 카카오뱁 (현재 화면의 영역값 추출)
PHP2020-서기 PHP2020 5강 - 카카오맵 (마커 표시/제거)
PHP2020-서기 PHP2020 4강 - 카카오맵 (MySQL 이용해 마커 표시 / 클러스터링 사용)
PHP2020-서기 PHP2020 3강 - 카카오맵 추가 (화면에 꽉차게 및 마커 표시)
5/47
목록
  • 채팅방
  • 필독
1. 채팅창 헤드에서 접속자 확인 2. 닉네임 클릭해 1:1 채팅 가능 3. 닉네임 클릭해 귓속말 가능 4. 닉네임 클릭해 호출하기 가능 5. 우하단 클릭해 환경 설정 가능 6. 의뢰글 작성 후 의뢰 상담 가능 7. 질문글 작성 후 질문 상담 가능 8. 채팅방에 개인정보 입력 금지 9. 채팅방에 광고 욕설 비방 금지
 홈  PC버전 로그인 일본어
웹디자인언어
서버관리언어
고급코딩언어
그누보드
제작의뢰
Q&A
커뮤니티 1
웹유틸
회원센터
홈짱 PC버전 로그인