当前位置 : 主页 > 网络编程 > PHP >

PHP命名空间与自动装载

来源:互联网 收集:自由互联 发布时间:2021-06-30
PHP命名空间与自动装载没有直接联系,只不过通常是使用命令空间与目录文件路径的规则来装载类文件,所以表面上好像有点关系。其实没有任何联系的。命令空间规则只是加载文件的
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";
}
?>
网友评论