네임스페이스 및 동적 언어 기능

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

PHP의 네임스페이스 구현은 프로그래밍 언어로서의 동적 특성의 영향을 받습니다. 따라서 다음 예제와 같은 코드를 네임스페이스 코드로 변환하려면:

예제 #1 동적으로 요소에 액세스

                  
<?php
class classname
{
    function __construct()
    {
        echo __METHOD__,"\n";
    }
}
function funcname()
{
    echo __FUNCTION__,"\n";
}
const constname = "global";

$a = 'classname';
$obj = new $a; // prints classname::__construct
$b = 'funcname';
$b(); // prints funcname
echo constant('constname'), "\n"; // prints global
?>
                  
                

완전한 이름(이름 공간 접두사가 있는 클래스 이름)을 사용해야 합니다. 동적 클래스 이름, 함수 이름 또는 상수 이름 내에서는 정규화된 이름과 정규화된 이름 사이에 차이가 없기 때문에 선행 백슬래시가 필요하지 않습니다.

예제 #2 네임스페이스 요소에 동적으로 액세스

                  
<?php
namespace namespacename;
class classname
{
    function __construct()
    {
        echo __METHOD__,"\n";
    }
}
function funcname()
{
    echo __FUNCTION__,"\n";
}
const constname = "namespaced";

/* note that if using double quotes, "\\namespacename\\classname" must be used */
$a = '\namespacename\classname';
$obj = new $a; // prints namespacename\classname::__construct
$a = 'namespacename\classname';
$obj = new $a; // also prints namespacename\classname::__construct
$b = 'namespacename\funcname';
$b(); // prints namespacename\funcname
$b = '\namespacename\funcname';
$b(); // also prints namespacename\funcname
echo constant('\namespacename\constname'), "\n"; // prints namespaced
echo constant('namespacename\constname'), "\n"; // also prints namespaced
?>
                  
                

문자열에서 네임스페이스 이름을 이스케이프하는 것에 대한 참고 사항을 읽으십시오.