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


Posted in PHP onFebruary 04, 2012

__autoload()的用法就不再说了,以前已经在我的WEB开发笔记中说过。PHP __autoload函数(自动载入类文件)的使用方法, 原文地址:https://3water.com/article/29625.htm 。

说一说,spl_autoload_register()的用法吧,很简单,可以这样理解,就是声明一个自定义__autoload(),你可以是A函数,也可以是B函数,想怎么样就怎么样,函数体的写法,当然要和__autoload()一样就OK 了。

当PHP找不到类文件会调用这个方法,当注册了自己的函数或方法时,PHP不会调用__autoload()函数,而会调用自定义的函数

spl_autoload_register(‘func_name');
spl_autoload_register(array(‘class_name','method_name'));

详细说明如下:

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指向这两个不同的函数地址来实现不同的自动加载机制。

代码如下:

test.class.php

<?php 
class abc{ 
function __construct() 
{ 
echo 'www.chhua.com; 
} 
} 
?>

load.php

<?php 
class LOAD 
{ 
static function loadClass($class_name) 
{ 
$filename = $class_name.".class.php"; 
if (is_file($filename)) return include_once $filename; 
} 
} 
/** 
* 设置对象的自动载入 
* spl_autoload_register — Register given function as __autoload() implementation 
*/ 
spl_autoload_register(array('LOAD', 'loadClass')); 
$a = new Test();//实现自动加载,很多框架就用这种方法自动加载类 
?>

spl_autoload_register装载函数的正确写法

AutoLoading\loading

<?php
namespace AutoLoading;

class Loadind {
 public static function autoload($className){
        //根据PSR-O的第4点 把 \ 转换层(目录风格符)   DIRECTORY_SEPARATOR , 
    //便于兼容Linux文件找。Windows 下(/ 和 \)是通用的
    //由于namspace 很规格,所以直接很快就能找到
    $fileName = str_replace('\\', DIRECTORY_SEPARATOR, DIR . '\\'. $className) . '.php';
    if (is_file($fileName)) {
      require $fileName;
    } else {
      echo $fileName . ' is not exist'; die;
    }    }   
}

index.php

//定义当前的目录绝对路径
define('DIR', dirname(__FILE__));
//加载这个文件
require DIR . '/loading.php';
//采用`命名空间`的方式注册。php 5.3 加入的
//也必须是得是static静态方法调用,然后就像加载namespace的方式调用,注意:不能使用use
spl_autoload_register("\\AutoLoading\\loading::autoload"); 
// 调用三个namespace类
//定位到Lib目录下的Name.php 
Lib\Name::test();
//定位到App目录下Android目录下的Name.php
App\Android\Name::test();
//定位到App目录下Ios目录下的Name.php
App\Ios\Name::test();
PHP 相关文章推荐
DedeCms模板安装/制作概述
Mar 11 PHP
Discuz 模板引擎的封装类代码
Jul 18 PHP
基于php-fpm 参数的深入理解
Jun 03 PHP
php自动加载机制的深入分析
Jun 08 PHP
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
php中switch语句用法详解
Aug 17 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
详解WordPress中添加友情链接的方法
May 21 PHP
php设计模式之适配器模式原理、用法及注意事项详解
Sep 24 PHP
TP5框架请求响应参数实例分析
Oct 17 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 #PHP
PHP对象转换为数组函数(递归方法)
Feb 04 #PHP
PHP投票系统防刷票判断流程分析
Feb 04 #PHP
php摘要生成函数(无乱码)
Feb 04 #PHP
写出高质量的PHP程序
Feb 04 #PHP
组合算法的PHP解答方法
Feb 04 #PHP
php处理斐波那契数列非递归方法
Feb 04 #PHP
You might like
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
PHP在线书签系统分享
2016/01/04 PHP
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
extjs之去除s.gif的影响
2010/12/25 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
Python实现的tab文件操作类分享
2014/11/20 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
Django 路由控制的实现代码
2018/11/08 Python
python图像处理入门(一)
2019/04/04 Python
python中pip的使用和修改下载源的方法
2019/07/08 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
python datetime处理时间小结
2020/04/16 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
演讲稿开场白
2014/01/13 职场文书
党员群众路线承诺书
2014/05/20 职场文书
关于美容院的活动方案
2014/08/14 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书