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 相关文章推荐
使用sockets:从新闻组中获取文章(一)
Oct 09 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
PHP中include与require使用方法区别详解
Oct 19 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
ThinkPHP连接Oracle数据库
Apr 22 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
PHP实现的策略模式简单示例
Aug 25 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
TMDPHP 模板引擎使用教程
2012/03/13 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
python tornado使用流生成图片的例子
2019/11/18 Python
wxPython实现画图板
2020/08/27 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
iPython pylab模式启动方式
2020/04/24 Python
本科生求职简历的自我评价
2013/10/21 职场文书
同学聚会欢迎辞
2014/01/14 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
音乐学专业求职信
2014/07/22 职场文书
综合管理员岗位职责
2015/02/11 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
新员工入职感言范文!
2019/07/04 职场文书
对PyTorch中inplace字段的全面理解
2021/05/22 Python
Go语言并发编程 sync.Once
2021/10/16 Golang