在PHP的开发过程中,如果你想从外部引入一个类,通常使用包含和要求的
方法来定义包含的类
文件,但是这可能使在新的
脚本文件中,有大量的包含或需要的方法,如果不经意地出现遗漏
错误,使得代码难以
维护。
自PHP5,的__autoload作为拦截的方法,可以自动包含类文件的引用,我们通常写:
复制代码代码如下所示:
功能__autoload($ className){
include_once $名。。类。php;
}
用户=新用户();
当PHP引擎试图实例化一个未知的类的
操作,称为()方法,并__autoload在PHP不能加载所需的类的最后机会。因此,当上面的代码被
执行,PHP引擎实际上执行我们__autoload方法,包括user.class.php文件。
抛出的异常在__autoload
函数不能用catch语句块捕获并导致一个致命的错误。
如果使用PHP的CLI交互
模式,则不会执行自动加载机制。
当你想用梨式的命名规则,如需要引入用户/ register.php文件,你也可以这样做:
复制代码代码如下所示:
加载
功能__autoload($ className){
文件大小= str_replace('_ ',directory_separator,$ className);
include_once 'php文件;
}
userregister美元=新user_register();
这种方法很方便,但是如果我们
介绍在一个大的
应用程序的多个类库,可能会有一些莫名其妙的问题,由于不同的类库加载机制。在PHP5的SPL标准库的介绍后,我们有一个新的
解决方案,spl_autoload_register()函数。
这个函数的功能是登记功能为SPL __autoload函数堆栈和
删除默认的__autoload()
系统的功能。一旦呼叫spl_autoload_register()函数,当调用未定义的类,系统将调用
顺序登记spl_autoload_register(所有)的功能,而不是自动呼叫__autoload()功能,例如电话用户/ register.php代替user_register.class.php:
复制代码代码如下所示:
我不加载
功能__autoload($ className){
include_once $名。。类。php;
}
加载
函数体($ className){
文件大小= str_replace(/,directory_separator,$ className);
include_once文件。'。php;
}
开始加载
spl_autoload_register('autoload);
userregister美元=新user_register();
当使用spl_autoload_register(),我们还可以考虑一个更安全的初始化调用方法,参照以下:
复制代码代码如下所示:
系统默认 / / __autoload功能
功能__autoload($ className){
include_once $名。。类。php;
}
/ / __autoload功能可用于加载SPL
函数体($ className){
文件大小= str_replace('_ ',directory_separator,$ className);
include_once文件。'。php;
}
/ /意外错误的加载函数名和默认的__autoload机制
取消......尴尬
spl_autoload_register('_autoload,假);
容错机制
如果(假)= spl_autoload_functions(){
如果(function_exists('__autoload ')){
spl_autoload_register('__autoload,假);
}
}
在Unix / Linux环境奇技淫巧,如果你有多个小类,为了方便
管理,都写在一个PHP文件,通过ln -s
命令软链接的方式快速分发到多个不同的类的副本,然后通过加载机构加载。