浅谈PHP组件、框架以及Composer-php教程

资源魔 59 0
本篇文章次要引见了PHP组件、框架和Composer,具备肯定的学习代价,感兴味的冤家能够理解一下。

甚么是组件

组件是一组打包的代码,是一系列相干的类、接口以及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组件

抱歉,评论功能暂时关闭!