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学习之输出字符串(echo,print,printf,print_r和var_dump)
Apr 17 PHP
PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
Apr 02 PHP
浅析PHP绘图技术
Jul 03 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
PHP 读取文本文件内容并分页显示
Jan 02 PHP
Yii2 输出xml格式数据的方法
May 03 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
微信支付的开发流程详解
Sep 13 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
laravel实现于语言包的完美切换方法
Sep 29 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/10/09 PHP
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
smarty中英文多编码字符截取乱码问题解决方法
2014/10/28 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
jQuery模拟点击A标记示例参考
2014/04/17 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
详解jQuery中ajax.load()方法
2017/01/25 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
在Django的通用视图中处理Context的方法
2015/07/21 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
Python项目打包成二进制的方法
2020/12/30 Python
CSS3 3D酷炫立方体变换动画的实现
2019/03/26 HTML / CSS
毕业生文员求职信
2013/11/03 职场文书
铁路个人事迹材料
2014/01/30 职场文书
拒绝黄毒毒宣传标语
2014/06/26 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
技术支持岗位职责
2015/02/13 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
python字符串常规操作大全
2021/05/02 Python
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers