SPL--spl_autoload_register
2015-01-23 15:30
148 查看
spl_autoload_register() :
调用未定义类时,系统会按顺序调用注册到spl_autoload_register()函数的所有函数,而不是调用__autoload函数。
解决问题:
函数__autoload($classname)可以做到动态的加载类,可以避免使用require_once语句,但如果拥有一个大规模的应用程序,其中包含了库或者较小的应用程序,那么每个应用程序可能都希望声明一个__autoload函数去查找他的文件。问题在于,在全局范围内声明两个__autoload()函数会产生重复声明的错误。
Usage:
spl函数接受3个参数:[ 添加到自动加载栈的函数, 加载器不能找到这个类时是否抛出异常的标志 = true,注册到队首而不是队尾 = false ]
第一个参数可选,默认指向spl_autoload(),这个函数会自动在路径中查找具有小写类名和.php或.ini扩展名的文件,或注册到spl_autoload_extensions()函数的其他扩展名。
安全调用:
一旦调用了spl_autoload_register(), 程序中的__autoload()函数就不回被调用了,如果想保留__autoload()的功能,把其注册为自动加载栈中的第一个函数:
spl_autoload_function() : 返回已注册函数的数组,如果spl自动加载栈还没有初始化,返回false。
调用未定义类时,系统会按顺序调用注册到spl_autoload_register()函数的所有函数,而不是调用__autoload函数。
解决问题:
函数__autoload($classname)可以做到动态的加载类,可以避免使用require_once语句,但如果拥有一个大规模的应用程序,其中包含了库或者较小的应用程序,那么每个应用程序可能都希望声明一个__autoload函数去查找他的文件。问题在于,在全局范围内声明两个__autoload()函数会产生重复声明的错误。
Usage:
spl函数接受3个参数:[ 添加到自动加载栈的函数, 加载器不能找到这个类时是否抛出异常的标志 = true,注册到队首而不是队尾 = false ]
第一个参数可选,默认指向spl_autoload(),这个函数会自动在路径中查找具有小写类名和.php或.ini扩展名的文件,或注册到spl_autoload_extensions()函数的其他扩展名。
<?php define('CLASS_DIR', 'class/') /* * set_include_path 设置php包含文件的路径 * get_include_path 获取当前php包含文件的路径,默认.:/usr/share/pear:/usr/share/php //linux以:分割,win以;分割 * PATH_SEPARATOR 常量,代表当前系统的分隔符 */ set_include_path(get_include_path().PATH_SEPARATOR.CLASS_DIR); //扩展php包含文件的路径 //注册并返回spl_autoload函数使用的默认文件扩展名,本函数用来修改和检查 __autoload() 函数内置的默认实现函数 spl_autoload() 所使用的扩展名,默认的spl_autoload函数使用的扩展名是".inc,.php"。 //spl_autoload_extensions('.class.php,inc,interface,.class'); //注册多个 spl_autoload_extensions('.class.php'); // 用默认方法 //spl_autoload_register(); //默认调用,默认抛出异常 spl_autoload_register(null, false); //用默认函数,未找到类时不抛出异常 spl_autoload_register('myLoader1', false); spl_autoload_register('myLoader2', false); //实例化类时,spl_autoload()先在包含路径中查找,这里的class/test.class.php存在,将会被include,如果不存在,将会调用myLoader1,2自定义函数,如果还是没找到,抛出一个没有被正确声明类异常。 $instance = new Test();
安全调用:
一旦调用了spl_autoload_register(), 程序中的__autoload()函数就不回被调用了,如果想保留__autoload()的功能,把其注册为自动加载栈中的第一个函数:
if( false === spl_autoload_function() ){ if( function_exists('__autoload') ){ spl_autoload_register('__autoload', false); } }
spl_autoload_function() : 返回已注册函数的数组,如果spl自动加载栈还没有初始化,返回false。
相关文章推荐
- spl_autoload_register比__aotuload的好处:
- PHP函数__autoload()和spl_autoload_register()
- PHP函数spl_autoload_register()用法和__autoload()介绍
- PHP自动加载类—__autoload()和spl_autoload_register() (补充)
- PHP进阶学习之spl_autoload_register与__autoload方法使用
- PHP函数spl_autoload_register()用法和__autoload()介绍
- spl_autoload_register()函数的作用
- spl_autoload_register自动加载介绍
- PHP自动加载之spl_autoload_register()
- __autoload 与spl_autoload_register()
- 详解spl_autoload_register()函数
- 详解spl_autoload_register()函数
- PHP中的__autoload()和spl_autoload_register()笔记
- php自动加载类的实现 spl_autoload_register
- PHP - spl_autoload_register()函数
- 详解spl_autoload_register()函数
- php spl_autoload_register()函数
- PHP自动加载机制[2]---spl_autoload_register操作详解
- spl_autoload_register比__aotuload的好处:
- spl_autoload_register与autoload区别