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 相关文章推荐
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
php+ajax实时刷新简单实例
Feb 25 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
php curl模拟post请求和提交多维数组的示例代码
Nov 19 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
Sep 22 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 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
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
深入PHP curl参数的详解
2013/06/17 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
基于Jquery的淡入淡出的特效基础练习
2010/12/13 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
layui文件上传实现代码
2017/05/20 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
keras中的backend.clip用法
2020/05/22 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
大学生求职自我评价
2014/01/16 职场文书
初中生评语大全
2014/04/24 职场文书
2015年财政局工作总结
2015/05/21 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
五年级作文之想象作文
2019/10/30 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
Mybatis是这样防止sql注入的
2021/12/06 Java/Android