甚么是组件
组件是一组打包的代码,是一系列相干的类、接口以及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的具体内容,更多请存眷资源魔其它相干文章!
标签: php开发教程 php开发资料 php开发自学 Composer php框架 PHP组件
抱歉,评论功能暂时关闭!