什么是动态访问元素?
动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的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 避免重复一个类,函数,常量,在重复使用时,而当你要更改类,函数,常量的麻烦