PHP命名空间与自动装载没有直接联系,只不过通常是使用命令空间与目录文件路径的规则来装载类文件,所以表面上好像有点关系。其实没有任何联系的。命令空间规则只是加载文件的
1. [代码][PHP]代码
spl_autoload_register(function($class){ $class=str_replace("\\","/",$class); echo $class.".php"; /*这种写法加载的路径是相对于get_include_path()中的值, 不过它总是包含当前路径。即'.',你也可以自定义路径形式。只要能找到对应的文件即可。*/ require $class.".php"; }); /*只是声明,不会触发自动加载。不需要加前缀\。 类似于java的import,导入后可以直接使用Commet来代表类了,而不用使用完全限定类名。*/ use common\lib\Comment;// /*只有在类实例化的时候才会去加载类文件common\lib\Comment.php,自动加载只会include这个文件, 而文件内是否定义命名空间,自动加载不会关心。只是在我们调用的时候才会有影响。 也就是说命名空间与自动加载时没有直接联系的。自动加载只是按规定去加载文件。*/ $comment=new Comment();// /*调用类之外的方法,必须在类实例化之后使用,否则报undefined错误,必须加前缀\*/ \common\lib\outter();// $ca=\common\lib\AAA;//调用类之外的常量,必须在类实例化之后使用,否则报undefined错误
2. [代码]common\lib\Comment.php文件:
<?php namespace common\lib; const AAA="aaa"; class Comment{ function __construct(){ echo "comment"; } } function outter(){ echo "outter"; } ?>