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程序
Oct 09 PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
php上传文件问题汇总
Jan 30 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
Sep 26 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP回调函数概念与用法实例分析
Nov 03 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 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
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
curl和libcurl的区别简介
2015/07/01 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
jquery遍历input取得input的name
2009/04/27 Javascript
Prototype Number对象 学习
2009/07/19 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
javascript结合fileReader 实现上传图片
2015/01/30 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
python全栈知识点总结
2019/07/01 Python
python代码区分大小写吗
2020/06/17 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
幼儿教师个人求职信范文
2013/09/21 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
先进班组事迹材料
2014/12/25 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
预备党员考察意见范文
2015/06/01 职场文书
宾馆安全管理制度
2015/08/06 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
详解Redis基本命令与使用场景
2021/06/01 Redis
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
html form表单基础入门案例讲解
2021/07/15 HTML / CSS