PHP 네임스페이스 쓰임새와 예제
네임스페이스 입니다. 자바의 패키지 같은것이라 생각하시면 되는데
용도는 여러사람이 프로그램을 같이 만들때 겹치게 되는것에 대한 대안책 이며
많이 사용하는 RDB가 있고 RDB 안에는 MySQL 도 있고 SqlLite3 같은것도 있고 오라클도 있고 ~
많은 경우 클래스명을 같게 만들 경우가 생기는데 이런 경우 방지 하는 용도 입니다.
개인적으론 복잡하게 할 일이 없어 사용은 안하고 있습니다.
패키지 형태의 프로그램을 만들거나 솔루션 형태로 만들게 되면 반드시 필요한 기능으로 테스트 해 보았습니다.
// Fatal error: Namespace declaration statement has to be the very first statement or after any declare call in the script
// 반드시 namespace는 첫 번째 명령으로 있어야 한다.
//
// Fatal error: Uncaught Error: Class "DbconMysql\MySQLi" not found in
// 찾지 못하는 현상이 있으면 아래 처럼 상속의 부모에 역슬레쉬를 붙여 주면 된다.
namespace DbconMysql;
class MyDataBase extends \MySQLi {
public function __construct() {
}
public function classCheck() {
echo date('Y-m-d H:i:s') . ' MySQLi ' . PHP_EOL;
}
}
namespace DbconSqlLight;
class MyDataBase extends \SQLite3 {
public function __construct() {
}
public function classCheck() {
echo date('Y-m-d H:i:s') . ' SQLite3 ' . PHP_EOL;
}
}
# 클래스의 사용
# > 아래 namespace 없으면 위에서 include 된 부분 때문에 오류가 발생 한다. 이미 사용 중 이라는 메시지를 보게 된다
namespace NameTest;
// use DbconSqlLight\MyDataBase;
use DbconMysql\MyDataBase;
$obj = new MyDataBase();
$obj->classCheck();
exit;
위는 오토로드와 무관한 파일 include 되었다고 생각하고 한파일에 모두 넣어 테스트 하였습니다.
위 예제를 보면 한 파일에 모두 다 있는데요.
요즘 오토로드 사용하면 클래스명과 파일명이 같지요~
아래쪽에 보면 객체를 생성하는것은 동일하고 뭘 사용할까 use 선택을 합니다.
네임스페이스는 확장성에 대한 부분 이기도 합니다.
