VIDEO
※ 학습 내용:
클래스 정의와 사용 부분을 분리하기.
클래스 정의 부분 누락 시 자동으로 클래스 정의 파일 로드시키기.
namespace : 분류의 끝판왕.
배경지식 : class 정의 부분이 다른 파일에 있는 경우, require_once 이용해 삽입 가능.
greeting.php
<?php
class Hi {
function __construct() {
echo "<h1>Hi</ht>";
}
}
main.php
require_once 'greeting.php';
new Hi();
VIDEO
(예제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 ();
VIDEO
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(); // 안녕
?>
VIDEO
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();
?>
주소 복사
랜덤 이동
최신댓글