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 相关文章推荐
模仿OSO的论坛(一)
Oct 09 PHP
PHP数组内存耗用太多问题的解决方法
Apr 05 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
PHP加密扩展库Mcrypt安装和实例
Nov 10 PHP
PHP结合Mysql数据库实现留言板功能
Mar 04 PHP
php排序算法实例分析
Oct 17 PHP
简单实现PHP留言板功能
Dec 21 PHP
PHP设计模式之工厂模式定义与用法详解
Apr 03 PHP
PHP数组常用函数实例小结
Aug 20 PHP
PHP FileSystem 文件系统常用api整理总结
Jul 12 PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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 日期时间函数的高级应用技巧
2009/10/10 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
js过滤HTML标签以及空格的思路及代码
2013/05/24 Javascript
AngularJS语法详解
2015/01/23 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
Python实现基本线性数据结构
2016/08/22 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
python如何在循环引用中管理内存
2018/03/20 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
python3的pip路径在哪
2020/06/23 Python
PyTorch安装与基本使用详解
2020/08/31 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
教师实习期自我鉴定
2013/10/06 职场文书
标准单位租车协议书
2014/09/23 职场文书
大学毕业生自我评价
2015/03/02 职场文书
个人合作协议范本
2015/08/06 职场文书
安全教育主题班会教案
2015/08/12 职场文书
800字作文之大雪
2019/12/04 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
使用HttpSessionListener监听器实战
2022/03/17 Java/Android