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 相关文章推荐
不用iconv库的gb2312与utf-8的互换函数
Oct 09 PHP
php&amp;java(二)
Oct 09 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
Jul 14 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
Apr 23 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 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
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
bootstrap导航栏、下拉菜单、表单的简单应用实例解析
2017/01/06 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
js实现内置计时器
2019/12/16 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
python网络爬虫实现发送短信验证码的方法
2021/02/25 Python
法律专业自我鉴定
2013/10/03 职场文书
会计电算化专业应届大学生求职信
2013/10/22 职场文书
公司门卫管理制度
2014/02/01 职场文书
《恐龙》教学反思
2014/04/27 职场文书
大学生活动总结怎么写
2014/04/29 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers