“中国要复兴、富强,必须在开源软件领域起到主导作用,为了国家安全和人类发展,责无旁贷,我们须为此而奋斗”——By:云客
1. 自动加载器与Composer
自动加载器:
Drupal启动的第一步就是创建自动加载器,自动加载器是什么呢?它是怎么产生的?
在面向对象的PHP程序开发的时候,要实例化一个类对象则需要先加载(require或include)类定义文件,当PHP发现并没有包含类定义文件时,并不会立即报错,它会去一个列队里面依次调用里面定义的函数或者方法,如果在这个过程中类定义文件被加载了,则返回继续实例化对象,程序可以没有问题的继续执行,否则程序报错,那么这个列队里面的函数或方法是怎么来的呢?它是由用户定义好,然后通过spl_autoload_register()注册进去的,这就是php的自动加载机制,spl_autoload_register()的使用方法请见:
http://www.php.net/manual/zh/function.spl-autoload-register.php
Drupal是一个现代化的面向对象方式开发的软件,她就使用了这个自动加载机制,在实例化某个对象的时候,PHP依据类的完全限定名称(带名字空间前缀的类名)到文件路径的对应关系自动去 include文件,这个工作被封装在一个对象里面完成,这个对象的类定义文件位于:
\vendor\composer\ClassLoader.php
在\vendor\composer\文件夹下你会看到如下几个文件:
autoload_classmap.php 里面是类到类定义文件的映射关系图
autoload_files.php 里面是全局需要加载的函数
autoload_namespaces.php 里面是PSR0映射关系
autoload_psr4.php 里面是PSR4映射关系
ClassLoader类加载器对象凭借里面定义的基本对应关系去查找函数和类定义文件,我们也可以动态的添加这种映射关系进去
实例化类加载器后(实例化过程中已经向spl_autoload_register注册了),Drupal就不需要手动的 include一大堆文件了,省去了大量工作,说到这里你应该明白了什么是自动加载器和它的原理。
在以后的学习中,如果你使用的开发工具是phpstorm,并且开启了Drupal集成,那么可以按“Ctrl+N”并粘贴类的全限定名字空间名,就可以自动打开文件了,这样你不需要去目录中查找,phpstorm便是依据类加载对应机制自动实现的,该功能以后我们会多次使用
如果你看过Drupal的index.php文件可能会奇怪为什么要中转几次才到\vendor\composer,其实是因为\vendor\composer里面的文件是自动生成的,此外\vendor目录里面的所有文件都是自动生成的(vendor目录储存Drupal运行所依赖的第三方程序库),这是怎么回事?是谁生成了她们?她就是大名鼎鼎的composer
Composer(依赖管理工具):
composer被设计用于PHP程序的依赖管理,简单点说就是现代PHP项目或多或少会用到第三方程序库,那么如何保持第三方库的更新?如何下载?多个协作者如何保持版本统一?第三方库又互相依赖或多级依赖怎么处理?这需要一个自动化的解决方案,于是composer产生了
composer用于解决上述问题,它本身是一个用php写成的应用程序,被封装成了composer.phar,运行在php之上,帮助你下载第三方组件库,保持版本统一,产生自动加载器的源代码等等,Drupal的\vendor目录就是她自动产生的。下面我们来学习一下它的用法:
先安装composer,所谓安装其实就是下载它的执行文件composer.phar,如果需要方便一点再把它加入操作系统的环境变量,这里为叙述方便,假定你使用的是window系统,PHP已经被添加到环境变量中,composer.phar无需添加到环境变量中,实验目录为C:\root\test\composer:
首先下载composer.phar,官网 有几种安装方式,可以用命令行安装,也可以直接下载,打开https://getcomposer.org/download/查看页面底部,Manual Download手动下载,选择最新的一个版本,下载保存到C:\root\test\composer中。
composer是通过composer.json文件来解析并自动下载第三方库的,下载完成会生成一个composer.lock文件,用于固定协同开发者的第三方版本,关于composer.json怎么制作那是使用第三方库的项目开发者的责任,请参考官方文档,这里复制Drupal根目录的composer.json、composer.lock到C:\root\test\composer中,打开命令行(开始菜单>cmd),请确保PHP被添加到了系统环境变量,运行下面的命令:
cd C:\root\test\composer
php composer.phar install
此时程序开始下载第三方库,并产生自动加载器,多出一个C:\root\test\composer\vendor目录
进去看一看,对比一下于Drupal根目录下面的/vendor是不是一模一样呢?
关于composer的更多介绍请到官方网站https://getcomposer.org/
反馈互动