什么是组件
组件是一组打包的代码,是一系列相干的类、接口和Trait,用于协助我们处置惩罚PHP运用中某个细致题目。比方,你的PHP运用须要收发HTTP要求,可以运用现成的组件如guzzle/guzzle完成。我们运用组件不是为了从新完成已完成的功用,而是把更多时候花在完成项目的长远目标上。
优异的PHP组件具有以下特征:
- 作用单一:专注于处置惩罚一个题目,而且运用简朴的接口封装功用
- 小型:小巧玲珑,只包括处置惩罚某个题目所需的起码代码
- 协作:PHP组件之间可以优越协作,组合在一起完成大型项目
- 测试优越:本身供应测试,而且有足够的测试掩盖度
- 文档完美:应当供应完美的文档,能让开辟者随意马虎装置、明白和运用
组件 vs 框架
我们挑选框架时,要为这个框架的东西投入许多,框架一般会供应大批东西,但却没有供应我们所需的某个东西时,痛楚就转嫁到我们头上,我们要寻觅并集成自定义的PHP库。把第三方代码集成到框架中是件难事,因为第三方代码和框架可以没有运用雷同的接口。
挑选框架时,我们看中的是框架的将来,然则谁又能保证某个框架始终是完成某项事变最好的东西呢?存在多年的大型项目必须有好的表现,而且要时候做好调解,假如选错了PHP框架,可以没法做到这一点。较旧的PHP框架可以因为缺少社区支撑而变慢或过期,这些旧框架一般运用过程式代码编写,而没有运用新式的面向对象代码以及PHP的一些新特征,总之,决议是不是运用PHP框架时,要斟酌的事变许多。
光荣的是,Laravel在这些担心方面表现优越,因而才能在浩瀚PHP框架中脱颖而出,从某种意义上来讲,Laravel也是个基于组件开辟的框架(中心组件是本身的Illuminate库,功用完成上则大批依靠第三方组件),比拟Symfony而言,上手又比较简朴,所以兼具了扩展性和易用性。然则,Laravel也存在一些不足,比方Laravel本身的组件不能随意马虎解耦,用于Laravel框架以外(然则置信这类状况会有好转,比方其数据库和行列组件就可以解耦出去)。综合来看,Laravel照样一个精彩的框架,能帮组我们疾速建立壮大的运用。
那我们应当运用组件照样框架呢?答案是,运用准确的东西做准确的事,假如能经由过程一些PHP组件疾速完成小型项目,那就运用组件,假如有多个团队成员开辟大型项目,而且能从框架供应的商定原则和构造中受益,那就运用框架(假如是在纠结运用什么框架,那末挑选Laravel吧,它不会让你扫兴),运用框架可以指导并加快项目的开辟。
运用组件
Packagist
我们在Packagist中查找PHP组件,这个网站用于网络PHP组件,最好的PHP组件在Packagist中都能找到。
比方我们想运用一个http组件用于收发HTTP音讯,在搜刮框中搜刮http,获得的第一个效果就是Guzzle,就用它吧。
Composer
Packagist是查找PHP组件的社区,Composer则是装置PHP组件的东西。Composer是PHP的依靠治理器,运转在敕令行中,你通知Composer须要哪些组件,Composer会下载并把这些组件自动加载到你的项目中,就这么简朴。
Composer和Packagist严密协作,假如你通知Composer想要运用guzzlehttp/guzzle
组件,Composer会从Packagist中猎取guzzlehttp/guzzle
组件,找到这个组件的堆栈地点,肯定要运用哪一个版本,还能找出这个组件的依靠,然后把guzzlehttp/guzzle
组件及其依靠下载到你的项目中。
另外,Composer会为项目中的一切PHP组件自动生成相符PSR规范的自动加载器,有效地笼统了依靠治理和自动加载,所以,对PHP社区来讲,Composer是最主要的附加东西,没有之一,想一想之前我们要运用诸如include、require、spl_autoload_register来手动完成自动加载的痛楚日子,这一点也不为过。
关于Composer的装置和运用,这里不赘述,请参考Composer中文网。
示例项目
下面我们经由过程一个示例项目来演示怎样运用Composer和组件来开辟一个PHP运用,这个运用的作用是扫描一个CSV文件中的URL,找出死链,该运用会向每一个URL发HTTP要求,假如返回的HTTP状况码大于即是400,就把这个死链发给规范输出。这是一个敕令行运用,开辟好以后,我们会实行这个剧本,传入csv文件的途径,在规范输出中显现死链列表。
装置组件
最先之前,先看看哪些使命可以运用现有的PHP组件处置惩罚:我们须要一个可以迭代处置惩罚csv文件数据的组件,另外还要向csv文件中的每一个URL发送HTTP要求,因而还须要一个可以发送HTTP要求并搜检HTTP相应的组件。
阅读Packagist后,我们找到guzzlehttp/guzzle
和league/csv
两个组件,前者用于处置惩罚HTTP音讯,后者用于处置惩罚CSV数据。下面我们在项目最顶层运转以下敕令:
composer require guzzlehttp/guzzle composer require league/csv
Composer会将依靠装置到根目次的vendor
目次下,装置完成后,会在根目次下生成composer.json
和composer.lock
文件:
composer.lock
文件中会列出项目运用的一切PHP组件,以及组件的细致版本号,这实际上是锁定了项目,让项目只能运用细致版本的PHP组件。如许的优点是,composer会下载这个文件中列出的细致版本,而不论Packagist中可用的最新版本是多少,你应当把composer.lock
文件归入版本掌握,如许让团队成员运用的PHP版本和你一样,假如当地开辟和服务器运用的PHP组件版本雷同,可以只管下降由组件版本差别致使的bug。
假如确切要下载最新版本的组件并更新composer.lock
,可以运用composer update
敕令。
自动加载
接下来我们来编写运用代码,在根目次下建立一个scan.php
文件,然后在该文件顶部运用require
导入Composer建立的自动加载器:
require 'vendor/autoload.php';
Composer建立的自动加载器实在就是个名为autoload.php
的文件,保存在vendor
目次中,Composer下载各个PHP组件时,会搜检每一个组件的composer.json
文件,肯定怎样加载该组件,获得这个信息后,Composer会在当地为该组件建立一个相符PSR规范的自动加载器。如许我们就可以实例化项目中的任何PHP组件,这些组件按需自动加载。
编写代码
下面我们正式运用Guzzle和CSV组件编写scan.php
代码:
//运用composer自动加载器 require 'vendor/autoload.php'; //实例Guzzle Http客户端 $client = new GuzzleHttp\Client(); //翻开并迭代处置惩罚CSV $csv = League\Csv\Reader::createFromPath($argv[1]); foreach ($csv as $csvRow) { try { //发送HTTP GET要求 $httpResponse = $client->get($csvRow[0]); //搜检HTTP相应的状况码 if($httpResponse->getStatusCode() >= 400) { throw new Exception(); } } catch (Exception $e) { //把死链发给规范输出 echo $csvRow[0] . PHP_EOL; } }
下面我们在urls.csv
中增加一些URL,一行一个,而且至少有一个是死链:
然后翻开终端,实行scan.php
剧本:
php scan.php urls.csv
我们传入了两个参数,第一个是剧本文件scan.php
的途径,另一个是CSV文件的途径。输出以下:
相干教程:PHP视频教程
以上就是浅谈PHP组件、框架以及Composer的细致内容,更多请关注ki4网别的相干文章!