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 相关文章推荐
实现dedecms全站URL静态化改造的代码
Mar 29 PHP
在php MYSQL中插入当前时间
Apr 06 PHP
php 学习资料零碎东西
Dec 04 PHP
php记录代码执行时间(实现代码)
Jul 05 PHP
php stream_get_meta_data返回值
Sep 29 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
php获取YouTube视频信息的方法
Feb 11 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
Apr 15 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 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来处理多个提交任务
2008/05/08 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
2010/07/11 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
2018/12/11 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python统计cpu利用率的方法
2015/06/02 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
五种Python转义表示法
2020/11/27 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
工程造价与管理专业应届生求职信
2013/11/23 职场文书
教学改革实施方案
2014/03/31 职场文书
给老婆的保证书
2015/01/16 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
python 中yaml文件用法大全
2021/07/04 Python
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS