命名空间-动态访问元素(二)

什么是动态访问元素?

动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。

对象,函数,常量的动态调用


class classname{
        function __construct(){
            echo __METHOD__;
        }


}
function  funcname(){
    echo __FUNCTION__;
}
const constname = "global";
$a = 'classname';
$obj = new $a;
$b = 'funcname';
$b();
echo constant('constname');



命名空间的动态访问元素:


namespace newnamespace;
class classname{
    function __construct(){
        echo __METHOD__;
    }
}
function funcname(){
    echo __FUNCTION__;
}
const constname = 1;

//这里需要注意反斜杠的使用\,如果使用""反斜杠会后面的字符转义,比如,在这个例子中如果使用双引号,则\newnamespace的\n会被转义,代表unxi
//下的换行符,因此建议使用单引号http://php.net/manual/zh/language.namespaces.faq.php#language.namespaces.faq.shortname1
$a = '\newnamespace\classname';
new $a;
$a = 'newnamespace\classname';
$b = 'newnamespace\funcname';
$b();
$c = 'newnamespace\constname';
echo constant($c);


需要注意的问题:

1:在动态调用命名空间时,反斜杠的转义问题,在动态调用命名空间时建议使用单引号

2:必须使用完全限定名称(包括命名空间前缀的类名称)。注意因为在动态的类名称、函数名称或常量名称中,限定名称和完全限定名称没有区别,因此其前导的反斜杠是不必要的。 (官方)


动态访问元素应用环境: 

1 根据程序的上下文来决定使用不同的类,函数,常量 

2 避免重复一个类,函数,常量,在重复使用时,而当你要更改类,函数,常量的麻烦

你可能感兴趣的:(命名空间-动态访问元素(二))