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的更多相关文章

  1. __autoload 与spl_autoload_register()

    PHP __autoload函数(自动载入类文件)的使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-02-04   在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都 ...

  2. PHP中spl_autoload_register()函数的用法

    spl_autoload_register (PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数 说明 bool spl_autol ...

  3. 转:spl_autoload_register与autoload的区别详解

    转:http://www.poluoluo.com/jzxy/201306/209614.html spl_autoload_register(PHP 5 >= 5.1.2)spl_autolo ...

  4. PHP中spl_autoload_register函数的用法

    spl_autoload_register (PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数 说明bool spl_autolo ...

  5. PHP标准库 (SPL) 笔记

    简介 SPL是Standard PHP Library(PHP标准库)的缩写. The Standard PHP Library (SPL) is a collection of interfaces ...

  6. php SPL学习

    数据结构 SplDoublyLinkedList - 该SplDoublyLinkedList类提供了一个双向链表的主要功能 SplStack - 该SplStack类提供了一种使用双向链表实现栈的主 ...

  7. PHP 设计模式 笔记与总结(3)SPL 标准库

    SPL 库的使用(PHP 标准库) 1. SplStack,SplQueue,SplHeap,SplFixedArray 等数据结构类 ① 栈(SplStack)(先进后出的数据结构) index.p ...

  8. PHP函数spl_autoload_register()用法和__autoload()介绍(转)

    详细出处参考:http://www.jb51.net/article/29624.htm 又是框架冲突导致__autoload()失效,用spl_autoload_register()重构一下,问题解 ...

  9. spl_autoload_register()和__autoload()区别

    这篇文章主要介绍了spl_autoload_register()和__autoload()区别,需要的朋友可以参考下   关于spl_autoload_register()和__autoload(), ...

  10. php 加载函数 __autoload(), spl_autoload_register()

    来自:http://www.cnblogs.com/myluke/archive/2011/06/25/2090119.html spl_autoload_register (PHP 5 >= ...

随机推荐

  1. iOS开发网络篇—监测网络状态(转)

    文章转载自:http://www.cnblogs.com/wendingding/p/3950114.html iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时 ...

  2. xml序列化方式

    public static class MySerializeXmlHelper { static MySerializeXmlHelper() { } private static object _ ...

  3. C++ 异常机制分析

    C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统 ...

  4. yum综合梳理

    1.安装软件包: yum install package yum localinstall package #从本机目录安装软件包 yum groupinstall group #安装某个组件的全部软 ...

  5. 60.Android通用流行框架大全

    转载:https://segmentfault.com/a/1190000005073746 Android通用流行框架大全 1. 缓存 名称 描述 DiskLruCache Java实现基于LRU的 ...

  6. [日常训练]training

    Description 一条线上有栋楼,第栋楼有层,每层有1个价值为的物品. 可以花费1个单位时间完成以下3种移动: 1.在同一栋楼中向上或者向下走一层; 2.如果此刻在顶楼,可以通往1楼; 3.从当 ...

  7. oracle大数据量。表分区提示查询效率

    现在业务有一张usertrack 日志记录表.每天会产生30万条数据.数据量大查询效率会非常慢 所以我考虑通过表分区来提示效率  逻辑上是一张表.但是分区后会按照分区条件将数据分在不同的物理文件 优点 ...

  8. espcms /public/class_connector.php intval truncation Vul Arbitrary User Login

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link:2. 漏洞触发条件3. 漏洞影响范围4. 漏 ...

  9. [iOS 基于CoreBluetooth的蓝牙4.0通讯]

    一.首先大致介绍下蓝牙4.0的模式,中心和周边: 一般情况下,iPhone作为中心,接收来自周边传感器(比如手环等)采集的数据. 二.那整一个数据通讯的协议是怎样的呢? 为什么要一层层搞这么复杂呢?据 ...

  10. JSP+JavaBean+Servlet+Oracle新增功能中对Date类型的字段的处理

    Oracle库中userinfo表borth字段是Date类型,age年纪字段是int类型.age字段要根据borth来自动计算 先说一下我遇到的问题: insert into的时候遇到日期转换类型错 ...