类自动载入、开发一个PSR-0的基础框架

【php】自动加载类autoload psr-0与psr-4标准 psr-0 与 psr-4 标准 最近一直想整理一下关于php的自动加载类的方式进行一个总结。每个人都想在自己的代码中少一些include 和 require 的操作, 这样不仅能方便代码编写,而且能够减少不必要的引入类文件冲突的问题。下面我们分别来介绍 psr-0 和 psr-4 规范. PSR-0规范 1 命名空间必须与绝对路径一致 2 类名首字母必须大写 3 除 阅读详情

类自动载入

最早的php项目都是通过手动include或者require来载入依赖的文件的,当项目越来越大,依赖越来越多,这样开发就很不方便了。

<?php

require 'Test1.php';
require 'Test2.php';

Test1::test();
Test2::test();

PHP5.2就提供了类的自动载入功能。

<?php


Test1::test();
Test2::test();

function __autoload($className){
    require __DIR__.'/'.$className.'.php';
}

最早的时候我通过__autoload这个魔术函数,从上面代码,我们可以看出,我们没有手动引入Test1和Test2,那是因为__autoload函数帮我完成了这一步。

但是__autoload之后被废弃了。主要原因是我们一个php工程可能依赖于多个框架,如果我们每一个框架都有这个函数,就会报一个“函数重复定义”的错误。

在PHP5.3之后,官方提供了另一个函数:spl_autoload_register

<?php

spl_autoload_register('autoload1');
spl_autoload_register('autoload2');

Test1::test();
Test2::test();

function autoload1($className){
    require __DIR__.'/'.$className.'.php';
}

function autoload2($className){
    require __DIR__.'/'.$className.'.php';
}

开发一个PSR-0的基础框架

PSR-0规范:
1、命令空间必须和绝对路径一致
2、类名的首字母必须大写
3、除了入口文件外,其他.php必须只有一个类

开发符合RSR-0规范的基础框架:
1、全部使用命名空间
2、所有PHP文件必须自动载入,不能有include或require
3、单一入口
这里写图片描述

如果我们想在入口文件index.php中调用2个命令空间下的类方法

IMooc\Object::test();
App\Controller\Home\Index::test();

这个时候,怎么自动加载我们需要的类呢?Loader.php 就上场了。
Loader.php:

<?php

namespace IMooc;

class Loader
{
    static function autoload($className)
    {
        // 映射成文件的绝对路径
        $file =  BASEDIR.'/'.str_replace('\\','/',$className).'.php';
        //echo $file;

        require $file;
    }
}

所以我们只需要在入口文件引入这个Loader.php文件,并且用spl_autoload_register 函数注册,就实现了所有类的自动载入。

<?php

// 定义根目录
define('BASEDIR', __DIR__);

include BASEDIR.'/IMooc/Loader.php';
spl_autoload_register('\\IMooc\Loader::autoload');


IMooc\Object::test();
App\Controller\Home\Index::test();
PSR规范 (psr-0,psr-1,psr-2,psr-3,psr-4) 这个规范,我只有在海康威视面试的时候碰到。不过还是很重要的。记录一下 简单总结,方便记忆。04是自动加载的规范, 12是代码规范, 3是日志规范,后面的数字就是升级版 PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。 项目的目的在于:通过框架作者或者框架的代表之间讨论,以最低程度的限制,制... 阅读详情

相关推荐

PHP PSR规范详解

目前包括以下几个规范:PSR-0(弃用)PSR-1PSR-2PSR-3PSR-41.PSR-0自动加载规范,此规范已被启用-本规范已于2014年10月21日被标记为弃用,目前新的替代规范为【PSR-4】本文是为自动加载器实现通用自动加载所需要遵循的编码规范一个标准的命名空间与类名称的定义必须符合以下结构:\&lt;Vendor Name&gt;&lt;Namespace&gt;&lt;Namesp...

qq_38791687的博客 1281

PSR-0规范到底是个什么鬼

官网地址 社区翻译 文章目录规范说明稍微解释一下实战小demo总结 规范说明 一个完全合格的namespace和class必须符合这样的结构:“< Vendor Name>(< Namespace>)*< Class Name>” 每个namespace必须有一个顶层的namespace(”Vendor Name”提供者名字) 每个namespace可以有多个子namespace 当从文件系统中加载时,每个namespace的分隔符(/)要转换成 DIRECTORY_

北漂猿 596

PHP设计模式【莫卡笔记】(1/2)

PHP设计模式学习笔记一、课程目录二、掌握PHP各类设计模式三、PHP高级等基本语法1、PHP命名空间2、类自动载入3、PSR-0规范4、开发PSR-0规范的基础框架5、PHP SPL标准库6、PHP链式操作7、PHP魔术方法的使用 一、课程目录 1、PHP面向对象高级特性 2、11种PHP设计模式 3、PSR-0,Composer,Phar等最流行的技术 二、掌握PHP各类设计模式 具备设计纯面向对象框架和系统的能力 PHP开发工具 三、PHP高级等基本语法 1、PHP命名空间 1、命名空间的介绍 避免

Mr_Moka的博客 416

PSR-0规范的简单理解

1、PSR-0规范    [1]命名空间必须与绝对路径一致    [2]类名首字母必须大写    [3]除去入口文件外,其他“.php”必须只有一个类    [4]php类文件必须自动载入,不采用include等    [5]单一入口 2、案例   [1]目录结构   [2]源码   index.php <?php define('BASEDIE',__DIR____)

PHP学习与交流 2475

PHP 编码规范 --- PSR规范0-4整理

1. 前言 源码文件必须采用UTF-8编码,且不得有BOM头,某些历史遗留的GBK模块除外。 编码风格没有太多的好坏之分, 最重要的是风格保持一致,编码规范有助于规范我们编码的风格,使代码具有更好的可读性。 每项规范前面的[强制]代表该规范需要强制执行,[建议]代表推荐执行但不强制。 注: 文中所有的变量名前面为了方便没有加”$”, 示意即可。本篇规范是参照百度内部PHP的编码规范制定。 2. 排版 2.1. [强制][PHP002] 程序块要采用缩进风格编写,缩进的空格数建议为4个,单模块内

JineD的博客 8369

【WRF-CMAQ实战指南】从环境配置到测试案例运行全解析

本文详细解析了WRF-CMAQ从环境配置到测试案例运行的全过程,包括系统环境检查、依赖库安装、源码获取与项目初始化、关键配置技巧、编译实战与排错、测试案例运行验证等关键步骤。通过实战指南,帮助用户快速掌握WRF-CMAQ的安装和运行技巧,提升空气质量模拟的效率。

year5的博客 244

AI时代文件上传漏洞攻防演进:从传统绕过到智能对抗

文件上传是Web应用中的基础功能,其安全机制涉及服务器对用户文件的信任与处理逻辑。传统防御依赖规则匹配,而攻击者则通过混淆、解析漏洞等手段寻找规则缝隙。随着AI技术的普及,攻防博弈进入新阶段:攻击方利用大语言模型自动化生成混淆Payload、分析防护规则并模拟人类行为;防御方则借助AI实现智能代码审计、动态风险评分与异常行为识别。这场技术军备竞赛的核心,在于如何将机器学习、行为分析等前沿技术融入文件内容检测、请求序列监控等工程实践,构建自适应、分层的智能安全体系,以应对自动化攻击的挑战。

weixin_33738982的博客 451

半导体AMHS系统振动控制技术演进:从0.5G到超低振动的工艺革命

在半导体制造进入埃米级时代后,AMHS的振动控制能力将成为区分厂商技术等级的标尺。国内企业通过“弹性机械设计-混合主动控制-智能调度”的三重创新,正逐步突破0.2G阈值,支撑12英寸晶圆厂向3nm/2nm制程升级。未来,振动抑制不再仅是物流系统的性能参数,而是与光刻、刻蚀等核心工艺深度耦合的基础能力,这将重塑半导体设备产业的竞争格局。

m0_60674045的博客 1583

php 一个简单的符合PSR-0规范的框架

前提明白命名空间和自动加载 一、命名空间         命名空间和我们日常使用电脑中的文件夹一样,同一个文件夹下是不能有两个一样的文件的,在php中也是同理,具体使用如下: test1.php <?php namespace Test1; function test() { echo __FILE__; } test2.php <?php namespa

zhangdonghang 432

那些年-SAP固定资产导入AS91 OASV

固定资产起初导入步骤: 第一部分:资产数据导入 1)两个日期配置 填写图片摘要(选填) Specify transfer date/last closed fiscal year 这里的日期填写系统切换日期,如果系统是2015-10-01上线,这里填写2015-09-3 填写图片摘要(选填) Specifylast period posted in prv system 这里指定系统切换的上一期间。这里写2015-09 填写图片摘要(选填) ​2)AS91新增 填写固定资产的分类,公司

阿土工作室 7945

STM32F407串口DMA收发实战:标准库配置与环形缓冲区实现

DMA(直接存储器访问)是嵌入式系统中提升数据传输效率的核心技术,它允许外设与内存直接交换数据而无需CPU干预。其工作原理是通过专用硬件控制器接管数据搬运任务,CPU仅需初始化传输参数即可处理其他事务,从而显著降低系统负载。这项技术的核心价值在于释放CPU算力,实现高吞吐、低延迟的实时通信,尤其适用于数据采集、工业控制和通信网关等场景。在STM32F407等ARM Cortex-M4芯片中,串口结合DMA可实现稳定的高速数据流处理。本文以STM32F407标准库为基础,深入解析USART1的DMA发送与接收

weixin_29169899的博客 316

大话PHP设计模式笔记

针对PHP的设计模式进行总结记录。 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了。 笔记链接:http://pan.baidu.com/s/1qYdQdKK密码:pvj2 一、关于命名空间命名空间 1.命名空间介绍 2.命名空间使用 实例:test...

weixin_30920091的博客 199

ACT代码梳理:新手学具身智能,不需要学会一堆理论,先跑起来再说

我是一个刚接触具身智能的小白。第一次看 ACT 项目,什么 Transformer、VAE、Mujoco、rollout,全是天书。但我没打算先把理论补完。太难,也太慢。我的策略是:直接上手,边做边学,卡在哪就学到哪。这篇文章是我的第一站——带你一起看懂 ACT 项目的整体架构,了解它的核心模块和流程。开始前,我列了 本文出现的18 个关键词,是我一开始完全搞不懂的。你可以先扫一眼,如果不认识的超过 10 个,那我们就是同路人,可以放心往下看了。

qq_17405041的博客 1207

设计模式及面向对象高级特性

今日目标 能够掌握面向对象的高级特性 能够具备设计纯面向对象框架和系统的能力 能够遵循PSR-0规范开发一个基础框架 能够掌握单例模式 能够掌握工厂模式 能够掌握注册树模式 一、什么是设计模式? 1.概念 设计模式(英语 design pattern)是对面向对象设计中反复出现的问题的解决方案。 2.举例 如果我们把面向对象编程当成一本武功秘籍,设计模式就是其中的每一招每一式,如果我们可以把设计模式式活学活用,那在面向对象编程方面那一定是一个非常厉害的高手了! 二、开发环

271

坐标偏移不一致或瓦块重名的多个OSGB工程的融合

介绍如何使用实景三维小助手OSGBLab对坐标偏移不一致或瓦块重名的多个OSGB工程的融合

OSGBLab的博客 3231

Xiaojie雷达之路---使用CCS创建一个毫米波雷达的工程(AWR1843)

前些天,在工具箱中下载了一个基于毫米波雷达(AWR1843)自动停车的案例,并成果导入CCS中,可以完美运行,但是如何新建一个新的工程呢?这篇文章就会对其进行讲述。

XiaoJie的博客 4548

PHP 命名空间、类自动载入、PSR-0 规范基础框架

本篇概要:1. 命名空间;2. 类自动载入;3. PSR-0 规范基础框架。 1. 命名空间; 最早的时候 PHP 是没有命名空间的,所有的代码是在同一个命名空间之下,这样的话就不能存在相同名称的类和相同名称的函数。 但是当我们的工程越来越大的时候,PHP 文件也会越来越多,也可能会产生越来越多的命名冲突。还有一个问题就是我们的代码越来越复杂,如果能有一个“包”的概念,有层次的去区分每一个类,那...

业余敲代码 478

FOC 转子初始位置检测(图文详解)

什么是转子的初始位置? 其实转子的初始位置是不确定的,但是在电机启动的时候,我们需要得到电角度,这样才可以进行矢量控制;所以,这里将转子与A轴重合作为初始位置,此时电角度也恰好为零,具体如下图所示; ) 至于原理下面会详细分析,这样在转子到初始位置后,也可以得到准确的电角度,就可以实现磁场和转子的同步转动。 如何让转子运行到初始位置? 其实这是一个很简单的问题,在这里我将它放大了,简单地分析了一...

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 2万+

PHP规范PSR0和PSR4的理解

一、PSR0简介 下文描述了若要使用一个通用的自动加载器(autoloader),你所需要遵守的规范: 一个完全标准的命名空间(namespace)和类(class)的结构是这样的:\<Vendor Name>\(\)*每个命名空间(namespace)都必须有一个顶级的空间名(namespace)("组织名(Vendor Name)")。每个命名空间(namespace)

zhibin的程序日记 3万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

psr4 php 目录,composer 自动载入 autoload 的使用详解 psr0/psr4/classmap/files

composer 的自动载入 autoload 可以很方便的帮我们快速的构建一套自己的框架结构。而自动载入本身其实是利用命名空间进行对应规则或标准的路径映射,从而找到我们所需的类文件,读取载入都当前运行时。利用命名空间的自动载入都是懒加载形式的,并不会让程序变得臃肿,但懒加载在一定程度上也影响了程序的性能,要在程序规模和运行效率上做一个折中的选择。四种模式psr-0 标准autoload_nam...

weixin_39884270的博客 685

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

php psr 4 自动载入,遵循PSR-4的自动加载,遵循PSR-4加载_PHP教程

遵循PSR-4的自动加载,遵循PSR-4加载一、简介首先这里要了解PSR,Proposing a Standards Recommendation(提出标准建议)的缩写,就是一种PHP开发规范,让我们研发出来的代码更合理、更好维护、可读性更高。PSR有下面几个标准:PSR-0:自动加载PSR-1:基本代码规范PSR-2:代码样式PSR-3:日志接口PSR-4:规范自动加载的路径问题这里看出PSR的...

weixin_33562004的博客 304

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PSR规范0-4整理

PSR规范0-4整理 psr规范 引言: PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。这些规范的目的是:通过框架作者或者框架的代表之间讨论,以最低程度的限制,制定一个协作标准,各个框架遵循统一的编码规范,避免各家自行发展的风格阻碍了 PHP 的发展,解决这个程序设计师由来已久的...

vinter_he 530

一文读懂PHP最新加载规范PSR-4

FIG制定的PHP规范,简称PSR,是PHP开发的事实标准。 PSR原本有四个规范,分别是: PSR-0 自动加载 PSR-1 基本代码规范 PSR-2 代码样式 PSR-3 日志接口 2013年底,新出了第5个规范——PSR-4。 PSR-4规范了如何指定文件路径从而自动加载类定义,同时规范了自动加载文件的位置。这个乍一看和PSR-0重复了,实际上,在功能上确实有所重复。区别在于...

藏经阁 6275

PSR-4 自动载入

自动载入1. 概述这个 PSR 描述的是通过文件路径自动载入类的指南,它作为对 PSR-0 的补充;根据这个指导如何规范存放文件来实现自动载入2. 说明 Specification 术语 class 包含类 class,接口 interface,特性 traits 以及其他一些类似的结构 一个完整的限定类名应该按照如下范例: \<NamespaceName>(\<SubNamespaceNames

Arno 734
上一篇: 反复训练之建立object的“外包装”
下一篇: 工厂模式、单例模式、注册树模式
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值