composer autoload原理浅析
来源:互联网 发布:淘宝商品如何推广 编辑:程序博客网 时间:2024/05/23 17:40
最近读了一点laravel的代码,里面用到composer,感觉其中的autoload机制有点诡异,翻阅源码,有所得,故记载之。
使用composer下载包之后,需要require "vendor/autoload.php",所以就从入口文件着手。
1.autoload.php => composer/autoload_real.php/getLoader() => $loader = new \Composer\Autoload\ClassLoader();
2.之后根据php的版本会有不同的处理,但实质效果是一样的,都是为了初始化$loader->prefixLengthsPsr4、$loader->prefixDirsPsr4、$loader->prefixesPsr0和
$loader->classMap这些变量,只是利用不同版本的php特性提高实现性能而已。涉及到的文件为autoload_namespaces.php,autoload_psr4.php,autoload_classmap.php。
这些文件主要保存的是类名起始名称与文件之间的对应关系,比如'App\\' => array($baseDir . '/app'),实质上就是所有出现的以App\开始的类名都在文件夹app下面。
App\Events\Event类的位置自然就在app\Events文件夹的Event文件之中定义。
3.调用$loader->register(true);注册Composer\Autoload\ClassLoader\loadClass函数为autoload函数,当类名找不到时触发autoload函数的执行。
4.Composer\Autoload\ClassLoader\loadClass函数主要就是findFile&&includeFile了,寻找文件的方法就是依次查找2中所保存的映射关系。
这样所有namespace命名的规则就很清晰了,比如文件夹app\Http文件夹下新建文件Kernel.php,那么应该在Kernel文件中定义类Kernel如下
namespace App\Http;
class Kernel {
}
使用composer下载包之后,需要require "vendor/autoload.php",所以就从入口文件着手。
1.autoload.php => composer/autoload_real.php/getLoader() => $loader = new \Composer\Autoload\ClassLoader();
2.之后根据php的版本会有不同的处理,但实质效果是一样的,都是为了初始化$loader->prefixLengthsPsr4、$loader->prefixDirsPsr4、$loader->prefixesPsr0和
$loader->classMap这些变量,只是利用不同版本的php特性提高实现性能而已。涉及到的文件为autoload_namespaces.php,autoload_psr4.php,autoload_classmap.php。
这些文件主要保存的是类名起始名称与文件之间的对应关系,比如'App\\' => array($baseDir . '/app'),实质上就是所有出现的以App\开始的类名都在文件夹app下面。
App\Events\Event类的位置自然就在app\Events文件夹的Event文件之中定义。
3.调用$loader->register(true);注册Composer\Autoload\ClassLoader\loadClass函数为autoload函数,当类名找不到时触发autoload函数的执行。
4.Composer\Autoload\ClassLoader\loadClass函数主要就是findFile&&includeFile了,寻找文件的方法就是依次查找2中所保存的映射关系。
这样所有namespace命名的规则就很清晰了,比如文件夹app\Http文件夹下新建文件Kernel.php,那么应该在Kernel文件中定义类Kernel如下
namespace App\Http;
class Kernel {
}
0 0
- composer autoload原理浅析
- composer autoload
- 深入理解composer的autoload自动加载原理
- 深入 Composer autoload
- 深入 Composer autoload
- 深入理解Composer autoload
- autoload之composer分析
- Yii2与Composer中的autoload
- 【php】 勾搭 Composer\Autoload\ClassLoader 类
- php composer autoload添加个性化命名空间
- php autoload 使用方法和原理
- What does ‘composer dump-autoload’ do in Laravel?
- composer 自动加载原理
- PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
- 如何使用composer的autoload来自动加载自己编写的函数库与类库
- 如何使用composer的autoload来自动加载自己编写的函数库与类库?
- composer原理与使用简介
- Composer
- 传纸条 优化
- linux文件学习9
- RMQ模板题 POJ 3264
- Windows7/10 64Bit安装Theano并实现GPU加速
- 【Android 进阶:翻译】Get Started With Firebase for Android
- composer autoload原理浅析
- 基础知识
- java网络编程之TCP
- 高数常考考点总结
- Kaldi中的plda的训练以及computer-socre
- Android6.0读取通话记录
- 【自考】数据库系统原理--范式
- iOS_数字变化(UICountingLabel与CADisplayLink)
- 安装5.7.11版本mysql所遇问题