php的autoload大致可以使用两种方法:__autoload和spl方法。这两种方法又各有不同的几种使用方法

PHP SPL 自动加载机制详解与实战应用:spl_autoload_register 使用指南 摘要: PHP 的 spl_autoload_register 函数提供了一种高效的自动加载机制,可动态加载未定义的类文件,避免手动引入每个类。文章详细介绍了其工作原理与实现方法,包括基本用法示例、在 MVC 框架中的实战应用,以及如何支持多命名空间和结合 Composer 使用。通过合理运用这一机制,开发者能显著提升代码的模块化程度和可维护性,适用于各类 PHP 项目开发场景。(150字) 阅读详情

php的autoload大致可以使用两种方法:__autoload和spl方法。这两种方法又各有不同的几种使用方法

__autoload的使用方法1: 

最经常使用的就是这种方法,根据类名,找出类文件,然后require_one 
复制代码代码如下:

function __autoload($class_name) { 
$path = str_replace('_', '/', $class_name); 
require_once $path . '.php'; 
} 
// 这里会自动加载Http/File/Interface.php 文件 
$a = new Http_File_Interface(); 

这种方法的好处就是简单易使用。当然也有缺点,缺点就是将类名和文件路径强制做了约定,当修改文件结构的时候,就势必要修改类名。 

__autoload的使用方法2(直接映射法) 
复制代码代码如下:

$map = array( 
'Http_File_Interface' => 'C:/PHP/HTTP/FILE/Interface.php' 
); 
function __autoload($class_name) { 
if (isset($map[$class_name])) { 
require_once $map[$class_name]; 
} 
} 
// 这里会自动加载C:/PHP/HTTP/FILE/Interface.php 文件 
$a = new Http_File_Interface(); 


这种方法的好处就是类名和文件路径只是用一个映射来维护,所以当文件结构改变的时候,不需要修改类名,只需要将映射中对应的项修改就好了。 

这种方法相较于前面的方法缺点是当文件多了的时候这个映射维护起来非常麻烦,或许这时候你就会考虑使用json或者单独一个文件来进行维护了。或许你会想到使用一个框架来维护或者建立这么一个映射。 

spl_autoload 

__autoload的最大缺陷是无法有多个autoload方法 

好了, 想下下面的这个情景,你的项目引用了别人的一个项目,你的项目中有一个__autoload,别人的项目也有一个__autoload,这样两个__autoload就冲突了。解决的办法就是修改__autoload成为一个,这无疑是非常繁琐的。 

因此我们急需使用一个autoload调用堆栈,这样spl的autoload系列函数就出现了。你可以使用spl_autoload_register注册多个自定义的autoload函数 

如果你的PHP版本大于5.1的话,你就可以使用spl_autoload 

先了解spl的几个函数: 


spl_autoload 是_autoload()的默认实现,它会去include_path中寻找$class_name(.php/.inc) 
Spl_autoload实现自动加载: 
复制代码代码如下:

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*test.php*/ 
<?php 
set_include_path("/home/yejianfeng/handcode/"); //这里需要将路径放入include 
spl_autoload("http"); //寻找/home/yejianfeng/handcode/http.php 
$a = new http(); 
$a->callname(); 


Spl_autoload_register 

将函数注册到SPL __autoload函数栈中,直接看一个例子: 
复制代码代码如下:

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 

/*test.php*/ 
<?php 
spl_autoload_register(function($class){ 
if($class == 'http'){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
}); 

$a = new http(); 
$a->callname(); 


spl_autoload_call 

调用spl_autoload_register中注册的调用函数, 看下面的例子 
复制代码代码如下:

/*http.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http"; 
} 
} 
/*http2.php*/ 
<?php 
class http 
{ 
public function callname(){ 
echo "this is http2"; 
} 
} 

/*test.php*/ 
<?php 
spl_autoload_register(function($class){ 
if($class == 'http'){ 
require_once("/home/yejianfeng/handcode/http.php"); 
} 
if($class == 'http2'){ 
require_once("/home/yejianfeng/handcode/http2.php"); 
} 
}); 
spl_auto_call('http2'); 
$a = new http(); 
$a->callname(); //这个时候会输出"this is http2" 

spl_auto_register这个函数使得我们不使用__autoload,使用自定义的函数来进行自动加载成为可能。这个方法现在是经常使用到的。 
Zend的AutoLoader模块就使用了这个方法。摘录其中对应的代码 
复制代码代码如下:

spl_autoload_register(array(__CLASS__, 'autoload')); 

public static function autoload($class) 
{ 
….. 

} 

PHP:类的自动加载 阅读详情

相关推荐

PHP 类自动加载的方法

类的自动加载是一个方便的功能,可以减少手动包含类文件的工作量。在本文中,我们介绍了两种常用的PHP类自动加载方法:使用spl_autoload_register函数和使用Composer自动加载器。在 PHP 中,类的自动加载是一种方便的功能,它允许我们在使用类时自动加载所需的类文件,而无需手动包含它们。在本文中,我将介绍两种常用的 PHP 类自动加载方法:使用spl_autoload_register函数和使用Composer自动加载器。文件来确定类文件的位置,并自动加载所需的类。

MdlForward的博客 348

PHP 自动加载功能原理解析

这篇文章是对 PHP 自动加载功能的一个总结,内容涉及 PHP 的自动加载功能、 PHP 的命名空间、 PHP 的 PSR0 与 PSR4 标准等内容。 一、PHP 自动加载功能 PHP 自动加载功能的由来 在 PHP 开发过程中,如果希望从外部引入一个 class,通常会使用 include 和 require 方法,去把定义这个 class 的文件包含进来。这个在小规模开发的时候,没什么大问题。但在大型的开发项目中,使用这种方式会带来一些隐含的问题:如果一个 PHP 文件需要使用很多其它类,那么就需要很

cangqiong_xiamen的博客 708

PHP autoload 机制详解

本文主要介绍 PHP autoload 机制,这里整理了详细的知识资料供大家学习参考,希望能帮助有需要的小伙伴

PHP 的自动加载机制

PHP 的自动加载机制

jkzyx123的博客 1095

Vue3 视频播放器完整指南 – @videojs-player/vue 从入门到精通

全面解析 Vue3 生态中最强大的视频播放解决方案 @videojs-player/vue。从基础安装到高级功能,涵盖自动播放、直播流、字幕支持等核心特性。提供完整的代码示例和最佳实践,助你快速构建专业的视频播放应用。

前端开发-前端技术分享 1422

Langfuse实战:从评估打分到问题解决的完整指南

本文详细介绍了如何利用开源LLM工程平台Langfuse对AI应用进行系统性评估与优化。从创建评估数据集、设计自动化评分函数,到深入排查常见问题并关联Trace进行精准打分,提供了完整的实战指南。最后,探讨了如何利用评估结果驱动提示词迭代与A/B测试,并给出了生产环境部署与性能优化的关键考量,帮助开发者构建可测量、可分析、可改进的LLM应用。

backprop5master的博客 651

php autoload 原理,PHP中自动加载原理以及__autoload的使用教程

自动加载原理自动加载的原理,就是在我们new一个class的时候,PHP系统如果找不到你这个类,就会去自动调用本文件中的__autoload($class_name)方法,我们new的这个class_name 就成为这个方法的参数。所以我们就可以在这个方法中根据我们需要new class_name的各种判断和划分就去require对应的路径类文件,从而实现自动加载。__autoload使用教程:我...

weixin_39716510的博客 489

使用VScode编译AMI代码

我现在了解到的和拿到的code,都是基于AMI的code,一般的编译AMI都需要搭配使用AMI的编译环境Veb,而Veb用到现在,一直都觉得有点卡顿,浏览代码的体验也比VScode差很多。在这之前还要,考虑设置TOOLS_DIR和EWKE_DIR的环境变量,因为在Veb中是可以通过设置自动设置的,但是VScode里面没用设置环境变量的选项。这里可以看出,Veb工具栏中的Build和Rebuild All的命令对应这里的make和make rebuild,也就是说Veb是调用此命令进行编译的。

Dodijd的博客 1881

PHP中spl_autoload_register()函数用法实例详解

本文实例分析了PHP中spl_autoload_register()函数用法。分享给大家供大家参考,具体如下: 在了解这个函数之前先来看另一个函数:__autoload。 一、__autoload 这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数。看下面例子: printit.class.php: 1 2 3 4 5 6 7 <?php class PRINTIT {

nigo134的博客 3320

本地部署大模型 vs 网页版大模型区别

fill:#333;color:#333;color:#333;fill:none;本地服务器/工作站硬件资源私有化部署GPU集群高速存储模型文件训练框架推理引擎。

Ds-Rag的博 1712

VS2019 C# 连接IBM DB2数据库并查询数据表

操作系统:win10 64位 C#:VS2019 数据库:IBM DB2v11.1_win64_expc 其他工具:IBM Data Studio ibm_ds4130_win 步骤一:使用命令行或是IBM DB2工具:Data Studio,创建一个数据库。这里名称为:Student CREATE DATABASE "Student" AUTOMATIC STORAGE YES ...

坚韧与专注 3796

PHP中spl_autoload_register函数的用法

spl_autoload_register (PHP 5 >= 5.1.2) spl_autoload_register — 注册__autoload()函数 说明 bool spl_autoload_register ([ callback $autoload_function ] ) 将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。

yipiankongbai的专栏 3419

【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)

【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)

2401_89898861的博客 1923

php spl autoload,php中spl_autoload详解

SPL有两个不同的函数 spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。spl_autoload 是SPL实现的默认的自动加载函数,它的功能比较简单。它可以接收两个参数,第一个参数是$class_name,表示类名,第二个参 数$file_extensions是可选的,表示类文件的扩展名" title...

weixin_42572602的博客 546

IMEI引起的无法驻网问题

问题不复杂,场景很简单,如上图,UE在进行LTE attach过程时,在送完NAS security mode complete后,就立刻收到了网络attach reject 带cause 6 Illegal ME,根据协议描述这个cause 代表ME不被网络可接受,例如ME在禁止名单或者黑名单中就会有这种cause。然而前方在报这个问题的时候,也是知道SIM卡和手机IMEI在运营商那边没能成功绑定,然后才报的问题,要查看手机是不是有问题...... 告诉前方原因后,还认为是手机问题,告知要继续查。

asd199086的博客 1426

UDF学习(四)FLUENT UDF-DEFINE_PROFILE宏

利用DEFINE_PROFLILE可以指定以下边界或计算域信息:DEFINE_PROFILE(name,t,i)//既可以用。

weixin_44386973的博客 1806

Deprecated: __autoload() is deprecated, use spl_autoload_register()

官网是这样说的: spl_autoload_register (PHP 5 >= 5.1.0, PHP 7) spl_autoload_register — 注册给定的函数作为 __autoload 的实现 说明 spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $p...

人在码途 4294

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PHP中spl_autoload_register()和__autoload()区别分析

PHP中spl_autoload_register()和__autoload()区别分析

NiceGY 1465

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

php中 spl_autoload_register 实现自动加载 以及多次调用

php中 spl_autoload_register 实现自动加载 以及多次调用 最近一段时间有看某课网的视频,对里面讲解的框架源码产生兴趣,所以这里特意了解了一下   开始前,首先要知道 spl_autoload_register 这个函数是拿来干嘛的,有什么用,按照官方文档的解释:就是将函数注册到SPL __autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。    下面我们开始一些实际操作,去看看如何进行使用 创建index.php文件 <

weixin_44320900的博客 3531

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

PHP — __autoload()和spl_autoload_register()

__autoload 在PHP中,我们通常将一个类放在一个文件中,当其他的类需要使用某个类时,只需通过include或require将需要使用的类包含进来即可,但是当某个类需要依赖成百上千个或者更多的其他类时,就得有成百上千的include或者require,这时PHP文件就会很臃肿,这时__autoload()就起到作用了 __autoload():魔术方法,当实例化的类找不到时,会自动调用此...

johnhan9的博客 810

PHP Class Autoload 的几种方法

我们在写代码的时候经常会用到类的自动加载,下面我就总结了php中类的自动加载的方法。 1.使用__autoload函数 比如我想加载/usr/local/lib/目录下的类 function __autoload($className) { $path = '/usr/local/lib/'; $file = $path.$className.'php'; requir...

代码改变人生 724

php splautoloadcall,详解php中spl_autoload自动加载函数 与spl_autoload_call的区别

详解php中spl_autoload自动加载函数 与spl_autoload_call的区别分类:PHP_Python| 发布:佚名| 查看: | 发表时间:2015/1/29SPL有两个不同的函数 spl_autoload, spl_autoload_call,通过将autoload_func指向这两个不同的函数地址来实现不同的自动加载机制。spl_autoload 是SPL实现的默认的自动加载...

weixin_42347925的博客 505

SPL spl_autoload_register 初体验

        网上关于SPL spl_autoload_register的用法的例子有很多很多,自己也查看了很多,但感觉介绍得并不太详细,使自己真正能明白其中的原理苦闷了好一会儿。现将自己的理解记录下来。        关于 Standard PHP Library (SPL) 的 autoload 的方法,这些都是 PHP 5.1.2 之后才加上的方法。为了方便,这里做了一些设定。假设

cq_jone的专栏 6317

玩坏了的spl_autoload_register

为什么要用spl_autoload_register其实我觉得这一段话基本可以解决所有的问题 尽管 __autoload() 函数也能自动加载类和接口,但更建议使用 spl_autoload_register() 函数。spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载(同一个应用中,可以支持任意数量的加载器,比如第三方库中的)。因此,不再建议使用 __a...

月如钩 4628

PHP的自动加载autoload和spl_autoload_register

一、自动加载的实现 __autoload PHP早期支持的版本。具体细节参加官方文档。 如果你需要实现自动加载后,可以通过定义这个函数来启用。 就是在你的PHP脚本中定义这样的一个函数,把加载逻辑都写在里面。比如这样: function autoload($className){ $name = strtolower($className); $path= "./includes/{$name}.php"; if(file_exists($path)){ require_once($path

hxthon的博客 597

PHP函数spl_autoload_register()用法和__autoload()介绍

spl_autoload_register()的用法:就是声明一个自定义__autoload(),你可以是A函数,也可以是B函数,想怎么样就怎么样,函数体的写法,当然要和__autoload()一样就OK 了。 当PHP找不到类文件会调用这个方法,当注册了自己的函数或方法时,PHP不会调用__autoload()函数,而会调用自定义的函数 spl_autoload_register(‘func_n

后端开发 1690
上一篇: apache2.2 虚拟主机配置
下一篇: 阿里云Mysql重置密码
HackProgramer
博客等级 码龄12年 255粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值