命名空间和动态语言特征
(PHP 5 >= 5.3.0)
PHP 命名空间的实现受到其语言自身的动态特征的影响。因此,如果要将下面的代码转换到命名空间中:
Example #1 动态访问元素
example1.php:
<?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
?>
Example #2 动态访问命名空间的元素
<?php
namespace namespacename ;
class classname
{
function __construct ()
{
echo __METHOD__ , "\n" ;
}
}
function funcname ()
{
echo __FUNCTION__ , "\n" ;
}
const constname = "namespaced" ;
include 'example1.php' ;
$a = 'classname' ;
$obj = new $a ; // prints classname::__construct
$b = 'funcname' ;
$b (); // prints funcname
echo constant ( 'constname' ), "\n" ; // prints global
/* 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
?>
请一定别忘了阅读 对字符串中的命名空间名称转义的注解.