首页 > 代码库 > 跟着辛星认识一下PHP的自动加载

跟着辛星认识一下PHP的自动加载

   作为一个框架,文件的加载机制是不能少的,那么我们应该怎么加载呢,这些PHP已经给我们想好了,所以我们只需要按照规则办事就可以了,PHP中有两个函数可以完成这个功能,第一个是__autoload,现在已经很少用了,取而代之的是功能更加强大的spl_autoload_register,它需要的版本是PHP5.2.1之后的版本,现在我们的主流版本都是支持的,因此可以放心使用。

      在以前的PHP版本中,我们往往需要require一堆的文件名,比如配置文件、数据库连接文件、日志文件等等,后来我们有了__autoload函数,它是在一个函数内完成所有的导入工作,它的一个优点是可以用编程的方式来处理,比如用正则表达式一次可以导入n个文件,在一定程度上会很方便我们的操作,但是,我们必须在__autoload中把所有的类型都写到,否则自动加载会得不到很好的实现。

      现在有了spl_autoload_register,它的功能就是可以注册n个加载函数,我们随时随地可以使用这个内置函数来指定我们需要加载的文件名,下面是它的函数原型:

bool spl_autoload_register ( [callback $autoload_function] )
下面我们用代码实战一下:

首先我们创建一个B.class.php,内容如下:

<?php
class B {
	private $name = "辛星";
	private $age = 23;
	function getmsg(){
		return "姓名是:".$this->name."   年龄是:".$this->age;
	}
}
然后我们在同级目录下新建一个a.php文件,内容如下:

<?php
//先定义一个加载函数
function xin_load($class){
	$file = $class.".class.php";
	if(file_exists($file)){
		require_once($file);
	}
}
//然后注册它
spl_autoload_register('xin_load');


$class = new B();
echo $class->getmsg();
这里的类B之所以能够被正确的实例化,就是因为当我们定义一个类B的实例的时候,系统发现需要去加载文件才行,于是他去找所有的加载函数,然后再B.class.php中找到了了B的定义,也就加载该文件,值得注意的是,这里的只有B.class.php被导入,其他的格式差不多的并不会被导入。





跟着辛星认识一下PHP的自动加载