SPL--spl_autoload_register
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()函数的其他扩展名。
<?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--spl_autoload_register的更多相关文章
- __autoload 与spl_autoload_register()
PHP __autoload函数(自动载入类文件)的使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-02-04 在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都 ...
- PHP中spl_autoload_register()函数的用法
spl_autoload_register (PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数 说明 bool spl_autol ...
- 转:spl_autoload_register与autoload的区别详解
转:http://www.poluoluo.com/jzxy/201306/209614.html spl_autoload_register(PHP 5 >= 5.1.2)spl_autolo ...
- PHP中spl_autoload_register函数的用法
spl_autoload_register (PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数 说明bool spl_autolo ...
- PHP标准库 (SPL) 笔记
简介 SPL是Standard PHP Library(PHP标准库)的缩写. The Standard PHP Library (SPL) is a collection of interfaces ...
- php SPL学习
数据结构 SplDoublyLinkedList - 该SplDoublyLinkedList类提供了一个双向链表的主要功能 SplStack - 该SplStack类提供了一种使用双向链表实现栈的主 ...
- PHP 设计模式 笔记与总结(3)SPL 标准库
SPL 库的使用(PHP 标准库) 1. SplStack,SplQueue,SplHeap,SplFixedArray 等数据结构类 ① 栈(SplStack)(先进后出的数据结构) index.p ...
- PHP函数spl_autoload_register()用法和__autoload()介绍(转)
详细出处参考:http://www.jb51.net/article/29624.htm 又是框架冲突导致__autoload()失效,用spl_autoload_register()重构一下,问题解 ...
- spl_autoload_register()和__autoload()区别
这篇文章主要介绍了spl_autoload_register()和__autoload()区别,需要的朋友可以参考下 关于spl_autoload_register()和__autoload(), ...
- php 加载函数 __autoload(), spl_autoload_register()
来自:http://www.cnblogs.com/myluke/archive/2011/06/25/2090119.html spl_autoload_register (PHP 5 >= ...
随机推荐
- 区间DP lightoj 1031
在此游戏中任意时刻的状态都是原始序列的一段子序列故: 定义d(i, j) : 表示原来序列的第i ~ j个元素组成的子序列,在双方都采取最优策略的情况下,先手得分的最大值. 状态转移时,需要枚举从左边 ...
- 时间复杂度---我又要想起初中数学老师的脸了xxxxx
时间复杂度: 常用的时间复杂度有:常数级,对数级,线性级 线性对数级 平方级,立方级别,多项式级别,指数级别,阶乘级别 这里我们主要探讨对数级,线性级,平方级,指数级---为什么不讨论其他的?别的我也 ...
- spring第一课,beans配置(中)——自动装配
•Spring IOC 容器可以自动装配 Bean. 需要做的仅仅是在 <bean> 的 autowire 属性里指定自动装配的模式 •byType(根据类型自动装配): 若 IOC 容器 ...
- js 通过身份证识别生日、年龄、性别
<script>function IdCard(UUserCard,num){ if(num==1){ //获取出生日期 birth=UUserCard.sub ...
- OneThink学习笔记02----数据字典(即OneThink项目数据库里的表及其字段)
action 字段 类型 注释 id int(11) unsigned 自增主键 name char(30) 行为唯一标识 title char(80) 行为说明 remark char(140) 行 ...
- 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith
[C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...
- 简单理解dropout
dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...
- MySql的一些操作
我们安装mysql时一开始root用户如果没设置的话是可以没有密码的,所以,如果需要设置密码,则 格式:mysql> set password for 用户名@localhost = passw ...
- xml解析模块
XML XML是可扩展标记语言的缩写,是实现不同语言或程序之间进行数据交换的协议,主要可以对key添加属性. 页面做展示(字符类型的一个xml格式数据)\做配置文件(内部xml格式的数据).,每一个节 ...
- JAVA获取apk包的package和launchable-activity名称(一)
背景: 每次要获取apk包的package和launchable-activity名称都需要运行doc命令,感觉好浪费感情,因为经常记不住常常的路径,但又不想把aapt设置为环境变量 我这个工具分几步 ...