LANGUAGE
SEOUL
language:php
ABOUT
NOW
JRNL
ESSY
RVIW
WIKI
검색
최근 바뀜
미디어 관리자
사이트맵
로그인
추적:
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
<!DOCTYPE markdown> # PHP ## 모던 PHP 개념 ### Namespace PHP에서 namespace를 사용하는 목적은, 다른 언어와 마찬가지로 여러 클래스나 함수 등을 재사용하기 위해서다. 특히, 크게 두 가지 목적을 갖는다. 1. 사용자 생성 코드와 내부/서드파티 클래스/함수/상수 등을 구별하기 위함 2. 1번 문제를 해결하는 과정에서 클래스/함수/상수 등의 이름이 너무 길어지는 현상을 방지하고, 더 짧게 대체하거나 줄이기 위함 #### 정의 하나의 네임스페이스가 하나의 파일에서만 정의될 필요는 없으며, 네임스페이스와 동일한 파일명을 가질 필요도 없다. 반대로 하나의 파일에서 여러 개의 네임스페이스를 정의하는 것도 가능하다. 네임스페이스에 종속되는 요소는 클래스, 인터페이스, 함수, 상수의 네 가지다. 네임스페이스는 파일 맨 앞에 `namespace <namespace_name>` 형식으로 명시한다. 즉 해당 라인과 `<?php` 사이에는 `declare` 외에는 어떠한 코드도 허용되지 않는다. 다만 php 블록 위에 HTML 등의 다른 스크립트가 오는 것은 상관없다. 네임스페이스는 `<namespace_name>\<subnamespace_name>\<subsubnamespace_name>\...` 식으로 그 계층구조를 명시할 수 있다. 인터페이스/클래스/함수/상수 등도 동일한 규칙을 따른다. 즉 `namespcae` 네임스페이스 내의 `class` 클래스를 호출할 경우, `namespace\class` 형태로 호출할 수 있다. 만약 하나의 파일에 여러 네임스페이스에 대한 정의를 담을 경우, 각 네임스페이스마다 중괄호로 블록을 형성하는 것을 권장한다. 그렇게 하지 않아도 상관없으나, 가독성 차원에서 추천하지 않는다. ```php <?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } ?> ``` #### 사용 PHP에서 namespace를 사용하는 방식은 PHP가 파일을 다루는 규칙(상대경로 / 절대경로)와 유사하다. 1. 상대경로: 현재 네임스페이스 (또는 다른 파일에 정의된 하위 네임스페이스)에 정의된 클래스 등을 사용할 경우, 현재 네임스페이스의 이름을 생략할 수 있다. 2. 절대경로: 네임스페이스의 full path를 명시한다. ```php <?php namespace Foo\Bar; include 'file1.php'; const FOO = 2; function foo() {} class foo { static function staticmethod() {} } /* Unqualified name */ foo(); // resolves to function Foo\Bar\foo foo::staticmethod(); // resolves to class Foo\Bar\foo, method staticmethod echo FOO; // resolves to constant Foo\Bar\FOO /* Qualified name */ subnamespace\foo(); // resolves to function Foo\Bar\subnamespace\foo subnamespace\foo::staticmethod(); // resolves to class Foo\Bar\subnamespace\foo, // method staticmethod echo subnamespace\FOO; // resolves to constant Foo\Bar\subnamespace\FOO /* Fully qualified name */ \Foo\Bar\foo(); // resolves to function Foo\Bar\foo \Foo\Bar\foo::staticmethod(); // resolves to class Foo\Bar\foo, method staticmethod echo \Foo\Bar\FOO; // resolves to constant Foo\Bar\FOO ?> ```
language/php.txt
· 마지막으로 수정됨: 2023/05/31 07:32 저자
127.0.0.1