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 相关文章推荐
PHP HTML代码串截取代码
Dec 29 PHP
php URL验证正则表达式
Jul 19 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
Jul 07 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
Jul 15 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
php实现paypal 授权登录
May 28 PHP
php递归实现无限分类的方法
Jul 28 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 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
如何写php程序?
2006/12/08 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
jQuery实现鼠标滑动切换图片
2020/05/27 jQuery
原生js生成图片验证码
2020/10/11 Javascript
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
python logging模块的使用总结
2019/07/09 Python
Python箱型图处理离群点的例子
2019/12/09 Python
Python requests设置代理的方法步骤
2020/02/23 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
2019秋季运动会口号
2019/06/25 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
Python快速实现一键抠图功能的全过程
2021/06/29 Python
logback如何自定义日志存储
2021/08/30 Java/Android