搜索
首页开发工具composer包你快速学会composer!

包你快速学会composer!

Jul 04, 2020 pm 01:21 PM
composer

下面由composer教程栏目给大家介绍如何学会composer,希望对需要的朋友有所帮助!

包你快速学会composer!

当系统有不同的web应用,但是需要共用很多代码怎么办
当系统需要一个扩展功能而这个扩展功能网上刚好有人提供了怎么用
PHP代码如何升级,降级,回滚
如何分配任务,如何让多个工程师一起进行开发任务

我在2011年接触PHP,那时候刚发布V5.3.5。从语言层面,我不认为PHP有过于明显的缺陷,我们在有丰富面向web的函数库的基础上,还有了类、SPL、匿名函数、etc。这些特性(一点都不“特”好吧)足够支撑一个大型项目的编码需求。

在这里插入图片描述
PHP5.3

可是,真当我们实际开发的时候,真的想用PHP写代码的时候,却经常会碰到一些抓狂的问题,这些问题和PHP倒是没太多的关系。可是还是让人很头疼的。我们想写一个网站的时候,我们可能会需要一个验证码,可是大部分的情况下,我不会自己想去写一个验证码。网上有那么一大把的验证码类,我自然想直接用。可是当我想直接用,我要做的有:

  1. 去搜索引擎搜索,然后看每一个结果有没有合适的代码,可以给我用。
  2. 我找到了一个类,这时候我需要把这个类引入我的项目,放在哪个目录?怎么autoload?它有没有依赖什么扩展?它会不会需要使用在比我现在更高版本的PHP上?这都是我要解决的问题。
  3. 如果我要解决2说的所有问题,那么我为什么不直接写一个?
  4. f**k it

就算用我自己的代码,当我 有多个web应用(电脑端、wap端 、api接口很正常吧),我当然希望它们不在一个项目(目录)里活稀泥,会增加我查看指定文件的难度,从而也增大我的维护成本。可是当我把这些web应用都分开以后,有那么多的通用的代码(model、logic、auth。。。),这些代码我应该如何处理,我修改了一个web应用的一个小逻辑,我还要去其他应用修改,要么我记不住,要么再小的一个改动也会变的让人想砸电脑、辞职、出去散心。

好吧,我把这些代码进行拆分,通过autoload来互相使用,这样还可以让更多的人参与开发,可线上的情况那么复杂,万一有哪段代码出问题了,万一有哪个web应用比较特殊,新的代码对它来说不适用。维护起来也是个问题,接手了这样一个依赖于很多其他项目的web应用,也许稍微改一下代码都会有很多麻烦,因为那些autoload的代码也很难让人有很直观的知道这个web应用到底用了哪些其他项目的哪些代码。

可是面对PHP,我又不想破罐子破摔啊,毕竟写起来那么方便。我还不想脱坑。但是上述问题不解决,反正我个人认为写PHP还是一件挺崩溃的事情。我们来看其他语言是怎么解决这个问题的。JAVA天然的包机制让它可以用maven,node的npm,连比PHP还老的Perl都有cpan。难道PHP不应该有一个包管理机制吗?

还好这些问题没有陪伴我的PHP时光太久,因为很快,PHP有了Composer,天亮了。

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

这是Composer中文官网自己的简介。

我试图从使用经验上来阐述一下这句话。

它允许你申明项目所依赖的代码库 就是说当你想用什么代码不再需要自己复制了,而是通过声明的方式来告诉Composer就好了,就像去餐厅吃饭一样,你不用教厨师怎么做,更不用自己做,也不用自己端盘子自己吃,而是告诉服务员,你要吃什么,告诉它就好了,当然,你不能告诉他我今天胃不舒服,给我做点方便消化清淡一点的菜,反正我从来不这么点菜,总得告诉他们你到底要吃什么菜,具体的菜名。这就是和之前在搜索引擎里找代码的区别,你不能通过关键词告诉Composer,而是要告诉它你要的代码库的名字,WTF?我哪里知道代码的名字,谁也不可能知道别人代码的名字,除非有个地方包含了所有的代码而且提供了搜索的功能让我们找到他们并知道他们的名字,
packagist.org就是干这个的。我们再也不用去各个搜索引擎里凭运气找了,在这里搜索关键词不会出现广告,不会出现莆田也不会出现JD。

它会在你的项目中为你安装他们:  告诉了Composer以后,Composer自然会帮我们把菜端上来,这是一件任何人都可以理解的事情,我们想要的代码不知道在哪台服务器里放着,但是Composer会帮我们下载到本地。可是这里还有一个问题,下载下来以后怎么用,我们知道PHP里想用一个文件必须得include或require,Composer下载下来以后,这盘菜怎么吃,需要自己准备碗筷吗?还好还好,还有一个好东西PHP-FIG,这个玩意它不生产代码,不提供任何实际问题的解决方案。他唯一做的事情就是BB,  那他BB一些什么呢?就像我上面说的那样,因为一些基础工具(比如Composer)的缺失,PHP开发很难有一些标准,比如编码规范,比如目录结构,比如如何自动加载类,比如如何打log,比如如何使用缓存,这样就会导致什么呢?不同的公司、不同的PHP程序员就会开始八仙过海各显神通,当然这对开发来讲短时间到也没什么,可是长久来看,这是会增加开发成本、维护成本的,当我们换一家公司、接手一个项目我们要从头开始理解代码,甚至在一个团队里我们都会因为没有标准而增加沟通成本。所以PHP-FIG就做了这样的事:制定标准。他制定的标准有:

  1. 编码规范 (psr-1 psr-2)
  2. 自动加载规范(psr-4)
  3. 一些通用接口 log(psr-3) cache(psr-6) http(psr-7)

这些标准在官网上都有详细的描述。我们这里要讨论的是psr-4。我在这里按照我自己的理解和使用经验稍微阐述一下:psr-4的自动加载基于文件夹和命名空间,我们需要指明一个根目录对应一个根命名空间,在这个基础上,我们可以通过除去根命名空间以外的命名空间和类名来在根文件夹下找到这个PHP文件并加载

#根文件夹 lib#根命名空间 model#file lib/A.phpnamespace model;class A {}#file lib/entity/B.phpnamespace mode\entity;class B{}#file demo.php$a = new \model\A();$b = new \model\entity\B();

Composer就实现了可以根据指明标准(如psr-4)和映射关系(如代码中的lib->model)来生成自动加载类的功能。事实上Composer提供了这些标准:

files  指明PHP文件路径的方式,这种方式会在每次请求时都要载入这些文件,适合一些通用函数的PHP文件

Classmap 比files智能一些,可以指明一个文件夹或一个文件来进行自动加载,缺点是即使是指明了一个文件夹,这个文件夹下增加了一个文件都需要Composer重新生成一次autoload文件,适合一些不能使用psr-4的类或类库,比如一个第三方接口的client,这个client可能在psr-4规则出现之前就有了,那么我们还是希望用Composer进行管理就可以使用这种方式

psr-0 psr-4的前身,以前落伍了,就当我没说过
psr-4 就像我上面介绍的,这种方式增加一个或多个文件也不需要重新生成autoload文件,因为它是按照命名空间和文件夹的映射关系来加载的。

那么Composer实现了这个有什么好处呢?

我们自己不需要写什么autoload文件了,同时这个标准也很好理解接受,维护和学习代码的成本也降低了
只要我们需要的第三方库也是使用Composer来处理自动加载的,我们只需要require这个包,那么加载这个第三方库的代码Composer也会处理,我们有了一个超强的autoload文件

所以,我们要做的就是学习和Composer打交道然后开始享受全球开发者的代码了。

就像上面描述的,Composer就像一个机器猫,你要什么它就给什么,那么交互的方式就类似于SQL语句那样,告诉它你要什么然后它给你结果。所以我们要做的就是描述需求,也就是当产品经理,好过瘾。

{
    "name": "fmw/test",
    "description": "fmw test",
    "authors": [
        {
            "name": "zzc",
            "email": "2272713550@qq.com"
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "http://package.fmw.com"
        }
    ],
    "version":"1.0.106",
    "require": {
        "fmw/other-layer":"1.*",
        "fmw/common":"1.*"
    },
    "require-dev":{
        "php-console/php-console": "^3.1",
        "phpdocumentor/phpdocumentor": "2.*"
    },
    "autoload":{
        "psr-4":{
            "model\\":"src/"
        }
    }
}

以上代码是一个我用过的composer配置文件,可以看出这是一个标准的json。我们来看一下这段json的每个key:

name和description是你给这个php项目起的名字,当这个项目仅仅是一个web项目,这两个其实不是很重要,但是这个项目其实是一个向外发布的代码库,就很关键了,name需要独一无二,description需要一句话来描述这个包的作用。

authors就是相当于宣布一下主权,可以有多个

repositories相当于你需要下载的代码库所在的仓库,默认会有一个全局的仓库,具体是什么就不在这里说了,上面的某个网址有介绍,在这里添加一个是因为如果你有个私人的仓库(有些代码不太适合放在公开的仓库吧),则可以在这里声明

version是版本号,这个是跨时代的功能啊,有了这个,PHP程序员也可以刷版本号了啊!

require则是上面阐述了很多的功能,解决了我说的那些痛点,通过“name”:"version"声明,可以有多个,require以后使用composer install命令composer会下载代码并自动加载
require-dev用法一致,但是功能不同,是用来声明一些在开发时候才用到的包,比如测试、文档等等

autoload 上面有介绍,就不废话

上面工作做完以后,执行composer install我们可以看到和composer.json同级的文件夹下生成了一个vendor文件夹,我们新建一个php文件引入vendor下的autoload.php文件就可以使用包和我们自己声明的autoload的php文件了
#index.php

include ‘./vendor/autoload.php’;

到这里,我们就算会用了composer,至于如何使用composer的功能就不拾人牙慧了,但是还有一些问题想讨论一下。

比如有些代码不太适合放在公开的仓库,但是我们还是希望包的形式来使用,毕竟这样的话,一个公司内部就很容易分工了,每一个PHP程序员维护若干个包,多方便,所以建立一个内部的代码仓库是很重要的。这时候Composer官方提供的工具satis就可以发挥作用了。

Simple static Composer repository generator

这是它的介绍,一个简单的Composer仓库生成器。使用它的步骤如下:

在合适的目录执行 php composer.phar create-project composer/satis --stability=dev --keep-vcs(前提是你已经按照Composer)
新建一个satis.json 实例如下

{
    "name": "My Repository",
    "homepage": "http://packages.dev.com",
    "repositories": [
        {"type": "vcs", "url": "http://git.dev.com/maxincai/package1.git"},
        {"type": "vcs", "url": "http://git.dev.com/maxincai/package1.git"},
    ],
    "require": {
        "maxincai/package1": "*",
        "maxincai/package2": "*",
    }
}

执行 php bin/satis build satis.json public/(public就是所有包的存放目录)
将public目录作为一个web服务对外发布就好了

使用的时候只需要在repositories多加一项(就像我在上面的composer.json做的那样),然后引入包就好了

关于Composer,上面就是我目前要说的了,通过Composer我们可以将业务逻辑、通用函数、逻辑拆分成不同的包,再也不需要做拷贝代码的蠢事了。

以上是包你快速学会composer!的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:csdn。如有侵权,请联系admin@php.cn删除
作曲家:简化PHP项目开发作曲家:简化PHP项目开发Apr 15, 2025 am 12:08 AM

Composer简化PHP项目开发的步骤包括:1)添加依赖,如在composer.json中添加"laravel/framework":"^8.0";2)自动加载,通过定义命名空间和类路径生成autoload.php文件;3)优化性能,使用composerdump-autoload-o和composerinstall--no-dev--optimize-autoloader命令。通过这些步骤,开发者可以提高效率并避免常见错误。

作曲家凭证:是什么使某人成为作曲家?作曲家凭证:是什么使某人成为作曲家?Apr 14, 2025 am 12:13 AM

成为作曲家的关键要素包括:1.掌握音乐理论,2.具备创造力和原创性,3.拥有技术技能,4.能够进行情感表达和故事讲述,5.理解文化和历史背景,6.积累实践和经验,这些要素共同构成了作曲家的身份和能力。

成为作曲家的途径:实用指南成为作曲家的途径:实用指南Apr 13, 2025 am 12:11 AM

成为作曲家的步骤包括:1.掌握音乐基本元素,如音符、节奏、和声、旋律;2.选择合适的技术工具,如AbletonLive;3.理解作曲的过程,包括灵感获取、构思、编写、修改和完善;4.从简单旋律创作开始,逐步尝试复杂技巧如和声进行;5.通过调试技巧解决常见问题,如音符选择和节奏安排;6.应用性能优化和最佳实践,如使用模板、版本控制和协作。

作曲家:构建强大PHP应用程序的关键作曲家:构建强大PHP应用程序的关键Apr 12, 2025 am 12:05 AM

Composer是构建健壮PHP应用的关键工具,因为它简化了依赖管理,提升了开发效率和代码质量。1)Composer通过composer.json文件定义项目依赖,并自动下载和管理这些依赖。2)它生成composer.lock文件确保依赖版本一致,并通过vendor/autoload.php实现自动加载。3)使用示例包括基本用法如添加日志库,以及高级用法如版本约束和环境变量管理。4)常见错误调试技巧包括处理依赖冲突和网络问题。5)性能优化建议包括使用composer.lock文件和优化自动加载。

作曲家专业知识:是什么使某人熟练作曲家专业知识:是什么使某人熟练Apr 11, 2025 pm 12:41 PM

要在使用Composer时变得熟练,需要掌握以下技能:1.熟练使用composer.json和composer.lock文件,2.理解Composer的工作原理,3.掌握Composer的命令行工具,4.了解基本和高级用法,5.熟悉常见错误与调试技巧,6.优化使用和遵循最佳实践。

作曲家在做什么?作曲家在做什么?Apr 08, 2025 am 12:19 AM

Composer是PHP的依赖管理工具,用于声明、下载和管理项目依赖。1)通过composer.json文件声明依赖,2)使用composerinstall命令安装依赖,3)解析依赖树并从Packagist下载,4)生成autoload.php文件简化自动加载,5)优化使用包括使用composerupdate--prefer-dist和调整autoload配置。

什么是应用作曲家?什么是应用作曲家?Apr 07, 2025 am 12:07 AM

AppComposer是一种用于构建和管理应用程序的工具。1)它通过拖拽和配置预定义组件简化应用开发,提高效率。2)开发者可以定义组件、组合界面、定义业务逻辑,并最终渲染应用。3)支持基本和高级用法,如任务管理和条件渲染,帮助构建灵活的应用。

作曲家是用什么?作曲家是用什么?Apr 06, 2025 am 12:02 AM

Composer是PHP的依赖管理工具。使用Composer的核心步骤包括:1)在composer.json中声明依赖,如"stripe/stripe-php":"^7.0";2)运行composerinstall下载并配置依赖;3)通过composer.lock和autoload.php管理版本和自动加载。Composer简化了依赖管理,提升了项目效率和可维护性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)