中文drupal教程1. 自动加载器与Composer
admin
2024-02-07 21:34:37
0

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

自动加载器:

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

Drupal是一个现代化的面向对象方式开发的软件,她即使用了这个自动加载机制,在实例化某个对象的时候,PHP依据类的完全限定名称(带名字空间前缀的类名)和文件路径的对应关系自动去 include文件,这个工作被封装在一个对象里面完成,这个对象的类定义文件位于:
  \vendor\composer\ClassLoader.php

在\vendor\composer\文件夹下你会看到如下几个文件:

autoload_classmap.php 里面是类到类定义文件的映射关系图
autoload_files.php 里面是全局需要加载的函数
autoload_namespaces.php 里面是PSR0映射关系
autoload_psr4.php 里面是PSR4映射关系

ClassLoader类加载器对象凭借这些文件里面定义的基本对应关系去查找Drupal运行所需的绝大部分函数和类定义文件,另外在此后的运行过程中,我们也可以动态的添加这种映射关系进去,以便更加灵活的进行加载。

实例化类加载器后(实例化过程中已经通过spl_autoload_register向PHP注册了加载处理函数),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,官网 有几种安装方式,可以用命令行安装,也可以直接下载,打开Composer查看页面底部,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的更多介绍请到其官方网站:
Composer

作者声明:
伴随Drupal不断发布的新版本,本系列教程持续更新,适用于Drupal V8、V9、V10以及后续版本,如未及时更新请反馈。
本Drupal教程为中文原创,并非翻译,来自作者耗时八年对源代码的理解,最初取名为“云客Drupal源码分析”并在社区发布。
作者:云客,微信号及个人网站域名均为“indrupal”;首发于云客个人网站“水滴间”,已发布一百余万字,持续更新中。
鸣谢“未来很美科技”提供的赞助支持,“未来很美(深圳)科技有限公司”是国内专业的Drupal开发公司,总部位于深圳。
如对您有帮助可到“水滴间”进行赞助支持,同时Drupal中国社区需要大家共建共享,云客持开放态度与大家合作推进。
允许任何机构以及个人转载、翻译、引用传播等,但须同步附带本声明。

相关内容

热门资讯

消息称百度旗下昆仑芯瞄准500... 6 月 29 日消息,据《The Information》昨日援引知情人士消息,百度旗下 AI 芯片...
打造夏日消费新场景 第35届北... 北京商报讯(记者 翟枫瑞)6月29日消息,第35届北京国际燕京啤酒文化节新闻发布会在京举行。本届啤酒...
社保基金持仓数据出炉,一季度增... 最近各大上市公司一季度财报都公开了,咱们国家社保基金的持仓数据也全部曝光。目前社保拿着比亚迪价值44...
36氪首发 | 海思、中兴团队... 作者 | 乔钰杰 编辑 | 袁斯来 硬氪获悉,广州宸思通讯科技有限公司(以下简称“宸思科技”)近日完...
两天蒸发47亿市值!一纸税务通... 一纸税务通知书,能让一家百亿龙头两天蒸发47亿市值。 6月22日,北大荒(600598.SH)公告称...
SK海力士将投资1100万亿韩... SK集团会长崔泰源6月29日在韩国“三大重大计划”发布会上宣布,公司将投资1100万亿韩元扩大半导体...
两只A股,终止上市! 两家A股公司,即将摘牌。 6月29日,退市沪科(600608.SH)公告称,上海证券交易所将在202...
原创 M... 一家成立近十年的自动驾驶公司,在IPO时吸引了14家基石投资者认购近一半的发行股份,其中不乏奔驰、比...
基金忠言|国寿安保滤镜碎,三年... 图片来源:视觉中国 蓝鲸新闻6月29日讯(记者 祁和忠)保险系基金公司国寿安保总经理换人了。 6月2...
三星电机计划加码玻璃基板!相关... 6月29日,玻璃基板概念股午后有所回升, 华工科技(000988.SZ)逼近涨停, 彩虹股份(600...
拉萨海关持续壮大外贸经营主体 ...   新华网拉萨6月28日电(记者蒋梦辰)近日,记者从拉萨海关获悉,今年前5个月,西藏有进出口实绩的外...
机构:二季报临近,医药生物板块... 6月29日,华源证券发布了一篇医药生物行业的研究报告,报告指出,业绩期临近,产业链景气度有望再次迎来...
每日收评科创50放量涨超4.5... 财联社6月29日讯,三大指数全线收红,创业板指探底回升,科创50指数大涨4.61%。沪深两市成交额3...
6月多地土拍结构性升温:深圳单... 进入2026年6月,不少城市核心区地块集中诞生高溢价宗地,热度突出的城市包含深圳、杭州、长沙。 其中...
业绩炸裂!盛达资源半年预盈3.... 6月29日,贵金属矿山龙头盛达资源(000603.SZ)发布 2026 年半年度业绩预告,上半年业绩...
A股午后拉升三大股指收涨:半导... A股三大股指6月29日开盘涨跌互现。早盘沪强深弱,创指一度跌超2%。半导体午后拉升,带动两市上涨,沪...
原创 空... 前言 大家好,我是老金。 这几天,两幅极度割裂的画面放在一起,把我看笑了。 一边是在持续的热浪下,欧...
澳大利亚审慎监管局拟放宽银行风... 澳大利亚审慎监管局(APRA)6月29日就修改 银行信用风险资本设定公开征求意见,旨在加大信贷投放以...
全民炒股,急踩刹车!韩国股市突... 屈红燕/证券时报网 全民狂欢、交易高度拥挤、杠杆资金猛增、新入市投资者表现激进、大型IPO吸金等现象...