spl_autoload_register用法

php中导入未包含的php文件有4种用法:

include(*.php) ,include_once(*.php) ,  require(*.php) , require_once(*.php) 四者的作用如下:

1.include()函数会将指定的档案读入并且执行里面的程序。

例如:include(‘/home/me/myfile’);

被导入的档案中的程序代码都会被执行,而且这些程序在执行的时候会拥有和源文件中呼叫到include()函数的位置相同的变量范围(variable scope)。你可以导入同一个服务器中的静态档案,甚至可以通过合并使用include()与fopen()函数来导入其它服务器上面的档案。

2.include_once()函数的作用和include()是几乎相同的

唯一的差别在于include_once()函数会先检查要导入的档案是不是已经在该程序中的其它地方被导入过了,如果有的话就不会再次重复导入该档案(这项功能有时候是很重要的,比方说要导入的档案里面宣告了一些你自行定义好的函数,那么如果在同一个程序重复导入这个档案,在第二次导入的时候便会发生错误讯息,因为PHP不允许相同名称的函数被重复宣告第二次)。

3.require()函数会将目标档案的内容读入,并且把自己本身代换成这些读入的内容。

这个读入并且代换的动作是在PHP引擎编译你的程序代码的时候发生的,而不是发生在PHP引擎开始执行编译好的程序代码的时候(PHP 3.0引擎的工作方式是编译一行执行一行,但是到了PHP 4.0就有所改变了,PHP 4.0是先把整个程序代码全部编译完成后,再将这些编译好的程序代码一次执行完毕,在编译的过程中不会执行任何程序代码)。require()通常来导入静态的内容,而include()则适合用来导入动态的程序代码。

4.如同include_once()函数,require_once()函数会先检查目标档案的内容是不是在之前就已经导入过了,如果是的话,便不会再次重复导入同样的内容。

最常用的是require_once来导入不同php文件中的类和函数,但实际上每次都要判断是否已经加载等等,其效率较低,但为避免重复加载出错,又不得不如此。对于要导入类库php文件而言,PHP还有一个__autoload($className)来自动导入未知的类。估计是php推崇一个类总要放到一个文件里。

然而,直接覆盖__autoload函数在引入多个类库时是不明智的,如果php版本>5.1.2可以使用

spl_autoload_register
(PHP 5 >= 5.1.2)
spl_autoload_register — 注册__autoload()函数
说明
bool spl_autoload_register ([ callback $autoload_function ] )
将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。
如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为
spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload()或
spl_autoload_call()。
参数
autoload_function
欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数
spl_autoload()。
返回值
如果成功则返回 TRUE,失败则返回 FALSE。
注:SPL是Standard PHP Library(标准PHP库)的缩写。它是PHP5引入的一个扩展库,其主要功能包括autoload机制的实现及包括各种Iterator接口或类。 SPL autoload机制的实现是通过将函数指针autoload_func指向自己实现的具有自动装载功能的函数来实现的。SPL有两个不同的函数 spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。
范例
load.php文件
class LOAD
{
static function loadClass($class_name)
{
$filename = $class_name.”.class.php”;
$path = “include/”.$filename
if (is_file($path)) return include $path;
}
}
function my_auto_load($className){
$path=”my_load_lib/ext/$className”.”.php”;
if (is_file($path)) return require_once($path);
}
/**
* 设置对象的自动载入
* spl_autoload_register — Register given function as __autoload() implementation
*/
spl_autoload_register(array(‘LOAD’, ‘autoload’));//引入静态加载函数

spl_autoload_register(‘my_auto_load”);//引入单一加载函数

当一个未知类在php代码中出现时,autoload会依次执行,直到找到加载类为止。


6 comments to spl_autoload_register用法

Leave a Reply to fushanlang

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Protected by WP Anti Spam