上海戴文 - Drupal开发专家

你在这里

云客Drupal8源码分析 之 自动加载器与Composer

主标签

自动加载器:

drupal8启动的第一步就是创建自动加载器,自动加载器是什么玩意?它是怎么产生的?

在面向对象的php程序开发的时候,要实例化一个类对象则需要先加载类定义文件,当 php发现并没有包含类定义文件时,并不会立即报错,它会去一个列队里面依次调用里面定义的函数或者方法,如果在这个过程中类定义文件被加载了,则返回继 续实例化对象,程序可以没有问题的继续执行,否则程序报错,那么这个列队里面的函数或方法是怎么来的呢?它是由用户定义好,然后通过 spl_autoload_register()注册进去的,这就是php的自动加载机制,spl_autoload_register()的使用方法请 见http://www.php.net/manual/zh/function.spl-autoload-register.php

drupal8就使用了这个自动加载机制,在实例化某个对象的时候,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注册了),drupal8就不需要手动的 include一大堆文件了,省去了大量工作,说到这里你应该明白了什么是自动加载器和它的原理。

如果你看过drupal8的index.php文件可能会奇怪为什么要中转几次才 到\vendor\composer,其实是因为\vendor\composer里面的文件是自动生成的,此外\vendor目录里面的所有文件都是自 动生成的(vendor里是drupal8用到的所有第三方程序库),这是怎么回事?是谁生成了他们?她就是大名鼎鼎的composer

Composer:

composer被用于php程序的依赖管理,简单点说就是现代php项目或多或少会用到第三方程序库,那么如何保持第三方库的更新?如何下载?多个协作者如何保持版本统一?第三方库又互相依赖或多级依赖怎么处理?这需要一个自动化的解决方案,于是composer产生了

composer用于解 决上述问题,它本身是一个用php写成的应用程序,被封装成了composer.phar,运行在php之上,帮助你下载第三方组件库,保持版本统一,产 生自动加载器的源代码等等,drupal8的\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怎么制作那是使用第三方库的项目开发者的责任,请参考官方文档,这里复制drupal8根目录的composer.json、 composer.lock、core文件夹到C:\root\test\composer中,打开命令行,开始菜单>cmd请确保php被添加到 了系统环境变量,运行下面的命令:

  1. cd C:\root\test\composer  
  2. php composer.phar  install 

此时程序开始下载第三方库,并产生自动加载器,多出一个C:\root\test\composer\vendor目录

进去看一看,对比一下于drupal8根目录下面的\vendor是不是一模一样呢?

关于composer的更多介绍请到官方网站https://getcomposer.org/

 

云客20160913 本文为云客原创,qq群203286137 原文地址http://blog.csdn.net/u011474028

Drupal 版本: 

猜你喜欢