当前位置: 首页 > 后端技术 > PHP

PHPReview的Composer

时间:2023-03-29 15:13:41 PHP

转载请注明文章出处:https://tlanyan.me/php-review...PHP评论系列目录PHP基础web请求cookieweb响应session数据库操作加解密Composer是一个依赖推荐的PHP社区管理工具。Composer之于PHP就像npm之于Node,它几乎是现代PHP开发的必备技能。本文简单回顾一下相关概念和Composer的使用。与扩展和包相关的概念是框架和库。关于framework和library的区别,可以查看我之前写的这篇文章。扩展和包是两个非常相似的概念。在PHP世界中,两者一般可以这样理解和区分:扩展(extension)相当于模块(module),是用C语言编写的函数集合;包(package)相当于库(library),主要用于PHP实现的功能集合;extensions以动态链接库(dll左右)的形式加载,packages通过require/include加载。大多数时候,将两者混用不会造成理解上的困难。常见的扩展有GD、ZIP、XML、MySQLi、OPCache等。常见的包有PHPMailer、PHPOffice、HTMLPurifier等。PEAR和PECL在Composer流行之前,PEAR和PECL是PHP开发者熟知的两个工具(社区)。PEAR是PHPExtensionandApplicationRepository(PHP扩展和应用程序库)的缩写,官网http://pear.php.net;PECL是PHPExtensionCommunityLibrary(PHP扩展社区库)的缩写,官网http://pecl。php.net。两者的区别可以通过扩展和包来区分:PECL托管扩展,源代码多为C文件,如APC、AMPQ等;PEAR托管包,功能用PHP实现,如PHPCodeSniffer、HTTPRequest等;PEAR对应pear命令,PECL对应pecl命令,可以用来安装和管理扩展和包(pear的build/pickle子命令也可以编译PECL中的扩展)。两人相得益彰,官网用姐妹来形容两人的关系。PECL是对官方扩展的补充,目前仍然活跃。一些优秀的扩展有可能成为官方扩展。大神韩天峰的swooleexpansion也是托管在PECL,在国内有非常高的知名度。相比之下,PEAR已成为过去。PEAR2和Pyrus(下一代PEAR包安装工具,基于PHP5.3+构建,官网http://pear2.php.net)的出现也未能挽救PEAR。PEAR的没落伴随着本文的主角Composer的崛起。PEAR的定位是“提供可重用的PHP组件”,集中为开发者提供功能包。集中发布的方式保证了代码的质量,但同时也带来了维护上的不便:只有通过审核的包才能发布,包严重过时。PEAR安装的包是全局的。不能为单个项目安装依赖包,非特权用户不能自行安装依赖包。其他缺点包括依赖性管理不善。随着Github的流行和Composer的出现,包管理进入了Composer时代。PEAR已经完成了它的历史使命,可以高枕无忧了。严格来说,Composer的定位是依赖管理工具,而不是包管理器。Composer中文网对Composer的工作介绍如下:Composer将通过以下方式为您解决问题:a)您有一个依赖多个库的项目。b)其中一些库依赖于其他库。c)你声明你所依赖的。d)Composer将确定需要安装哪些版本的包,并安装它们(将它们下载到您的项目中)。PEAR能做的,Composer也能做(包括安装PECL扩展),而且其中一些可以做得更好。Composer默认将包安装在项目目录下,普通用户可以正常使用(Composer官方建议不要以root身份执行composer命令);鼓励遵循最佳实践(即著名的PSR规范,参见PHP-FIG官网https://www.php-fig.org),这极大地促进了PHP社区编码风格的标准化;Composer是一个去中心化的平台,任何人都可以发布代码包;发布包不需要审核,包的好坏由用户投票决定。。作为PEAR的继承者,Composer的性能经受住了社区的考验,成为了事实上的依赖管理标准工具.Composer现在已经形成了一个庞大的生态。从数量上来说,Composer的包远超PEAR。由于任何人都可以自由发布包而无需审查,因此Composer生态中的包可能存在代码质量参差不齐、代码风格不同、后门漏洞等隐患。另外,Composer的依赖管理是基于项目的,同一个包可能会在一台机器上安装多次。但缺点并不能掩盖优点。总体而言,Composer极大地改变了PHP的开发生态,促进了代码交流和社区发展。Composer的使用Composer是为托管项目的依赖而生的,项目中的composer.json文件是其工作的基础。这个文件最重要的部分是require部分,它告诉Composer期望安装哪些包及其版本,例如:{"name":"tlanyan/foo","version":"1.0.0",...."require":{"php":">=5.4.0","yiisoft/yii2":">=2.0.6","yiisoft/yii2-swiftmailer":"*","yiisoft/yii2-redis":">=2.0.0","smarty/smarty":"<=3.1.25","yiisoft/yii2-smarty":">=2.0.0","phpoffice/phpexcel":">=1.8.0","tecnickcom/tcpdf":"~6.2.0"},....}然后运行composerinstall命令,Composer会自动分析依赖关系,安装最合适的包到vendor目录。添加-v(-vv,-vvv)选项将在命令执行期间打印详细信息。安装完成后会在vendor目录下生成autoload.php文件。将此文件包含在项目的入口文件中:require__DIR__。"/vendor/autoload.php";,那么在项目的任何地方都可以引用依赖包中的接口和类。除了install命令之外,Composer还提供了许多其他命令来管理依赖项。常用的命令场景包括:查找依赖、引入依赖、安装依赖、更新依赖。对应的命令为:composersearch:根据关键字搜索依赖包,比如查找我发布的包:composersearchtlanyan。该命令相当于在https://packagist.org上搜索包;composerrequire:导入依赖,声明项目或全局(global,用户名global,非系统global)依赖某个包,例如声明需要swiftmailer包:composerrequire[global]"swiftmailer/swiftmailer:开发大师“;此命令更新composer.json文件并默认立即安装依赖项(--no-update选项可以阻止默认安装);效果相当于编辑composer.json文件,然后执行install命令;composerinstall:安装composer.json声明的依赖包,依赖包最终安装的版本可能取决于是否有composer.lock文件;composerupdate:更新依赖到最新版本,相当于删除composer.lock文件后执行composerinstall。以上四个命令涵盖了大部分使用Composer的场景。下面是几个常用的辅助命令,与依赖分析有关:composerinfo:查看安装的依赖包信息,相当于composershow;composerdumpautoload:添加-o选项以导出优化的加载程序;composerwhy(-not):查看(不)安装包的原因。小结从复制第三方代码到项目中(1994年),到用PEAR安装依赖包(1999年),再到Composer的兴起(2012年),PHP社区经历了近20年的探索。PHP,一门古老的语言,也在不断的发展和更新,一直在web领域大放异彩。Composer作为目前最好的PHP包依赖管理工具,值得每一位PHP开发者掌握。参考https://benramsey.com/blog/20...http://fabien.potencier.org/t...http://docs.phpcomposer.com