自动加载以及Composer的实现
类的自动加载
两个函数 __autoload()魔术方法、spl_autoload_register
当php文件中使用了new关键字实例化一个对象时,如果该类没有在本php文件中被定义,将会触发__autoload函数
__autoload
运行到new Animal()时,发现 class Animal没有定义
触发了__autoload函数,该函数引进了Animal.php文件
实例化成功。
spl_autoload_register
(注意:当文件中同时出现__autoload和spl_autoload_register时,以spl_autoload_register为准)
bool spl_autoload_register ([ callable autoloadfunction[,boolthrow = true [, bool $prepend = false ]]] )
autoload_function
- 欲注册的自动装载函数。如果没有提供任何参数,则自动注册 autoload 的默认实现函数spl_autoload()。
throw
- 此参数设置了 autoload_function 无法成功注册时, spl_autoload_register()是否抛出异常。
prepend
- 如果是 true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。
1 |
#main.php |
两者的区别
1,可以按需多次写spl_autoload_register注册加载函数,加载顺序按谁先注册谁先调用。__aotuload由于是全局函数只能定义一次,不够灵活。 自动加载对象方便
2,可以被catch到错误,而__autoload不能。
3,spl_autoload_register注册的加载函数可以按需被spl_autoload_unregister掉
Composer
运行 Composer 需要 PHP 5.3.2+ 以上版本。
composer的使用
在composer.json内包含 require
composer install
require vendor/autoload.php
以上就可以实现自动加载
composer 自动加载原理
Laravel
1 |
/public/index.php <?php /** |
composer内部代码GetLoader
1 |
vendor/composer/autoload_real.php class ComposerAutoloaderInit175720aab51ecef5d6218812498b5793 |
步骤 :首先判断PHP版本决定使用Staticloader还是普通的Namespaceloader
加载PSR-0规范的类 方法在ClassLoader内
加载PSR-4规范的类 方法在ClassLoader内
加载上面两个类就是对ClassLoader内的需要加载的类进行编辑操作
register进行类注册加载 方法在ClassLoader内 调用spl_autoloader_register();
自动加载以及Composer的实现的更多相关文章
- 基于PHP规范的自动加载方式(composer配置)
针对PHP这种编程语言,到目前FIG指定了五个规范,分别如下: PSR0:自动加载: PSR1:基本代码规范: PSR2:代码样式规范: PSR3:日志接口规范: PSR4:自动加载规范: 看上去PS ...
- 深入解析 composer 的自动加载原理 (转)
深入解析 composer 的自动加载原理 转自:https://segmentfault.com/a/1190000014948542 前言 PHP 自5.3的版本之后,已经重焕新生,命名空间.性状 ...
- 深入解析 composer 的自动加载原理
PHP 自5.3的版本之后,已经重焕新生,命名空间.性状(trait).闭包.接口.PSR 规范.以及 composer 的出现已经让 PHP 变成了一门现代化的脚本语言.PHP 的生态系统也一直在演 ...
- Composer 的自动加载机制
Composer 的自动加载机制 Composer 提供了四种自动加载方式,分别是 PSR-0.PSR-4.生成 classmap 以及之间包含 files. PSR-0 方式 PSR-0 方式要求目 ...
- Yii2的深入学习--自动加载机制
Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个 ...
- Yii2的深入学习--自动加载机制(转)
Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个 ...
- Composer概述及其自动加载探秘
composer概述 一开始,最吸引我的当属 Composer 了,因为之前从没用过 Composer . Composer 是PHP中用来管理依赖关系的工具,你只需在自己的项目中声明所依赖的外部工具 ...
- Composer实现PHP中类的自动加载
本篇博客承接上一篇,学习一下Composer实现的PHP的类的自动加载方式.首先说明一下,Composer是PHP针对PHP语言的第三方的依赖管理工具,将工程所用到的依赖文件包含在composer.j ...
- composer 实现自动加载原理
简介 一般在框架中都会用到composer工具,用它来管理依赖.其中composer有类的自动加载机制,可以加载composer下载的库中的所有的类文件.那么composer的自动加载机制是怎么实现的 ...
随机推荐
- PaddlePaddle tutorial
什么是PaddlePaddle PaddlePaddle,百度旗下深度学习开源平台.Paddle(Parallel Distributed Deep Learning,并行分布式深度学习). 2016 ...
- Kaggle:Home Credit Default Risk 数据探索及可视化(1)
最近博主在做个 kaggle 竞赛,有个 Kernel 的数据探索分析非常值得借鉴,博主也学习了一波操作,搬运过来借鉴,原链接如下: https://www.kaggle.com/willkoehrs ...
- linux 实用命令 —— tr
1. [:alnum:] tr -cd '[:alnum:]' -d:delete:-c:complement:-cd:删除后边的参数以外的: [:class:] [:alpah:]:字母,[:dig ...
- Python学习笔记第九周
目录: 一.基础概念 1.paramiko模块 2.进程与线程 1.进程 2.线程 3.进程与线程的区别 4.Python GIL 5.thread模块 6.Join与Daemon 7.线程锁(Mut ...
- php字符编码转换之gb2312转为utf8(转)
在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦.string iconv ...
- pip windows下的引入
安装了python以后,并且环境变量里引入了python安装路径后, 想使用pip来安装未安装的模块,但是命令模式里不能执行pip, 查看python安装路径,发现pip跟easy_install的执 ...
- 利用SIFT进行特征匹配
SIFT算法是一种基于尺度空间的算法.利用SIFT提取出的特征点对旋转.尺度变化.亮度变化具有不变性,对视角变化.仿射变换.噪声也有一定的稳定性. SIFT实现特征的匹配主要包括四个步骤: 提取特征点 ...
- Hierarchical RNN
https://blog.csdn.net/liuchonge/article/details/73610734 https://blog.csdn.net/triplemeng/article/de ...
- (1)什么是web框架和http协议
Django是一个web框架 web框架的本质:就是一个socket服务端 bs架构本质上就是cs架构(cs架构就是client和server):bs架构就是browser和server,本质上bro ...
- 【BZOJ2120】数颜色
看代码学习好,好学好懂好ac 原题: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中 ...