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 相关文章推荐
COM in PHP (winows only)
Oct 09 PHP
php 中的str_replace 函数总结
Apr 27 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
php获取表单中多个同名input元素的值
Mar 20 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
Yii入门教程之Yii安装及hello world
Nov 25 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
Oct 15 PHP
Symfony2函数用法实例分析
Mar 18 PHP
YII视图整合kindeditor扩展的方法
Jul 13 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 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/08/27 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
PHP实现提高SESSION响应速度的几种方法详解
2019/08/09 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
高级电工工作职责
2013/11/21 职场文书
财务出纳岗位职责
2014/02/03 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
数控机床专业自荐信
2014/05/19 职场文书
承诺书格式
2014/06/03 职场文书
代理词怎么写
2015/05/25 职场文书
课程设计感想范文
2015/08/11 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
python 如何用terminal输入参数
2021/05/25 Python