打印本页
%15 %408 %2014 %16:%八 %PM

PHP中spl_autoload_register函数的用法

作者
给本项目评分
(0 得票数)

php的spl_autoload_register函数的用法。spl为 Standard PHP Library的缩写。中文为标准PHP库,他是PHP5引人的一个扩展库,其主要功能是包括autoload机制的实现及包括各种能够Iterator接口或者类。SPL autoload机制的实现是通过函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的。SPL有两个不同的函数spl_autoload,spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动装载机制。

在new PHP类的时候一般先要包含该类的实现文件。我们用require就可以做到。如果在一个文件中要使用很多的类,那么我们就需要包含很多的require语句了。这个虽然没问题,但感觉有点繁琐。能否智能化呢?

当然,PHP提供了一个自动注册函数 function __autoload($class)

这个函数接受一个参数,该参数为一个字符串,需要加载的类名。我们可以在文件中加上上面的代码:

function  __autoload($class)
	 {
		$class = strtolower($class);
		$file = "class.".$class.'.php';
		if(is_file($file))
		{
			require_once($file);
		}
	 }

 那么当我们new 一个类的时候,如果类的文件不存在,那么系统就会自动调用__autoload函数,帮我们加载类文件了。

当然,这个函数的名称是固定的,不能够改变。必须为__autoload.那么你就会想,如果我不喜欢这个__autoload名称,那就没办法了吗?办法还是有的。我们可以用spl_autoload_register来实现。

bool spl_autoload_register([callback $autoload_function]) 

参数:需要注册的自动加载回调函数,如果为空,那么默认为__autoload

返回值:如果成功加载返回TRUE否则返回FALSE.

那么现在的代码就会变为:

 function  myAutoloader($class)
	 {
		$class = strtolower($class);
		$file = "class.".$class.'.php';
		if(is_file($file))
		{
			require_once($file);
		}
	 }
 
 spl_autoload_register('myAutoloader');
 //require("class.a.php");
 $testA = new testA();

 当系统遇到没有定义的类的时候,就会调用我们的myAutoLoader来尝试加载文件了。

在面向对象的时代,能否使自动加载函数和一个对象相关呢?可以,看代码:

 

 class loader{
	static function  myAutoloader($class)
	 {
		$class = strtolower($class);
		$file = "class.".$class.'.php';
		if(is_file($file))
		{
			require_once($file);
		}
	 }
 }
 
 spl_autoload_register(array('loader','myAutoloader'));
 //require("class.a.php");
 $testA = new testA();

 请注意,其中的static关键字。也就是说只能够使用类的静态方法。

 当然你可以同时注册多个自动加载函数:

 class loader{
	static function  myAutoloader($class)
	 {
		$class = strtolower($class);
		$file = "class.".$class.'.php';
		if(is_file($file))
		{
			require_once($file);
		}
	 }
	 
	 static function  youAutoloader($class)
	 {
		$class = strtolower($class);
		$file = $class.'.php';
		if(is_file($file))
		{
			require_once($file);
		}
	 }
	 
	
 }
 
 spl_autoload_register(array('loader','myAutoloader'));
 spl_autoload_register(array('loader','youAutoloader'));
 //require("class.a.php");
 $testA = new testA();
 

 系统会按照你的注册顺序以此超找。如果找到就返回,不再继续查找。

 

阅读 4696 次数 最后修改于 %19 %224 %2014 %12:%八 %PM