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 autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
PHP微信红包API接口
Dec 05 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
Jun 30 PHP
PHP实现数组的笛卡尔积运算示例
Dec 15 PHP
PHP钩子实现方法解析
May 21 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基于mcrypt的加密解密实例
2014/10/27 PHP
php rsa加密解密使用详解
2015/01/14 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
Python装饰器入门学习教程(九步学习)
2016/01/28 Python
Python内置模块logging用法实例分析
2018/02/12 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
毕业生动漫设计求职信
2013/10/11 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
博士给导师的自荐信
2015/03/06 职场文书
表扬信范文
2019/04/22 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
Java异常处理try catch的基本用法
2021/12/06 Java/Android
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android