composer の次のチュートリアル コラムでは、composer の学習方法を紹介します。困っている友人の役に立てば幸いです。
システムにさまざまな Web アプリケーションがあるが、それらを実行する必要がある場合共有する 大量のコードをどうするか
システムに拡張機能が必要で、インターネット上の誰かがその使い方を提供するだけの場合PHP コードをアップグレード、ダウングレード、ロールバックする方法
タスクを分散する方法、複数のエンジニアが共同作業できるようにする方法 開発タスク
私が PHP に出会ったのは、V5.3.5 がリリースされたばかりの 2011 年でした。言語レベルで見ると、PHP にはそれほど明らかな欠点はないと思いますが、Web 向けの豊富な関数ライブラリをベースに、クラス、SPL、匿名関数なども備えています。これらの機能 (まったく「特別」ではありません) は、大規模プロジェクトのコーディング ニーズをサポートするのに十分です。
PHP5.3
しかし、実際に開発をしていて、本当に PHP を使ってコードを書きたいと思うと、とんでもない事態に遭遇することがよくあります。 PHPを使うため。しかし、まだ頭が痛いです。 Web サイトを作成するときに確認コードが必要になる場合がありますが、ほとんどの場合、自分で確認コードを書きたくありません。インターネット上には非常に多くの種類の確認コードがあるため、当然それらを直接使用したいと考えます。しかし、それを直接使用したい場合、私がしなければならないことは次のとおりです:
わかりました。これらのコードを分割し、自動読み込みを通じて相互に使用します。これにより、より多くの人が開発に参加できるようになりますが、オンラインの状況は非常に複雑です。何か問題が発生した場合に備えて、コードの一部。特別な Web アプリケーションがあり、新しいコードがそれに適用されない場合に使用します。メンテナンスも問題であり、他の多くのプロジェクトに依存している Web アプリケーションを引き継ぐ場合、コードを少し変更すると、自動ロード コードによって Web アプリケーションがどのように動作するかを直感的に把握することが困難になるため、多くのトラブルが発生する可能性があります。他のプロジェクトのどのコードが使用されているか。
しかし、PHP に関しては、書くのに非常に便利なので、壊したくありません。まだ罠から抜け出したくない。しかし、上記の問題が解決されない場合、個人的には、PHP を書くのは依然として非常にイライラするものだと思います。他の言語がこの問題をどのように解決するかを見てみましょう。 JAVA の自然なパッケージング メカニズムにより、Maven、ノードの npm、さらには PHP よりも古い Perl にも cpan が使用できます。 PHP にはパッケージ管理メカニズムが必要ではないでしょうか?
幸いなことに、これらの問題は私の PHP 使用にそれほど長い間悩まされることはありませんでした。すぐに PHP に Composer が導入され、夜が明けたからです。
Composer は、PHP の依存関係管理ツールです。これにより、プロジェクトが依存するコード ライブラリを宣言でき、それらがプロジェクトにインストールされます。Composerの中国語公式サイトのご紹介です。
この文について、私の経験に基づいて詳しく説明してみます。
これにより、プロジェクトが依存するコード ベースを宣言できます。これは、コードを使用するときに、自分でコピーする必要がなくなり、宣言を通じて Composer に伝えることができることを意味します。レストランに食べに行っても、その必要はありません。シェフに作り方を教えてください。ましてや自分で料理するのであれば、皿に盛り付けて自分で食べる必要はありません。代わりに、ウェイターに自分の食べたいものを伝えてください。 「食べたいときは、彼に伝えてください。もちろん、今日はお腹の調子が悪くて、何か作ってくださいとは言えません。軽い料理の方が消化が簡単です。とにかく、私はこのように注文することはありません。いつも伝えなければなりません」食べたい料理と具体的な料理名。これが、以前の検索エンジンでコードを検索する場合との違いです。キーワードを通じて Composer に伝えることはできませんが、必要なコード ライブラリの名前を Composer に伝える必要があります。コードの名前はどうやって知ることができますか? すべてのコードが含まれており、コードを見つけて名前を知るための検索機能を提供する場所がない限り、他人のコードの名前を知ることは誰にも不可能です。 ##packagist.org はこれを行います。さまざまな検索エンジンで運に頼る必要はもうありません。ここでキーワードを検索しても、広告は表示されず、莆田も京東も表示されません。
psr-2)
いくつかの共通インターフェイス ログ(psr-6
) http(psr-7
)
#根文件夹 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 ファイルに適しています
クラスマップはファイルよりも賢いです。自動ロード用にフォルダまたはファイルを指定できます。欠点は、フォルダを指定した場合でも、このフォルダにファイルを追加するには Composer が自動ロード ファイルを再生成する必要があることです。サードパーティのインターフェイス クライアントなど、psr-4 クラスまたはクラス ライブラリを使用できない一部のアプリケーション用です。このクライアントは、psr-4 ルールが登場する前に存在していた可能性があります。それでも管理に Composer を使用したい場合は、これを使用できますメソッド
psr-0 psr-4
の前身は以前は時代遅れでした。言わなかったことにしてください psr-4
上で紹介したのと同じです。はい、この方法で 1 つ以上のファイルを追加する場合、autoload
ファイルを再生成する必要はありません。これは、ファイルが名前空間とフォルダー間のマッピング関係に従って読み込まれるためです。 それでは、Composer がこれを実装するメリットは何でしょうか?
自動ロード ファイルを自分で記述する必要はありません。同時に、この標準は理解しやすく受け入れられやすく、コードの保守と学習のコストも削減されます。
As longサードパーティ ライブラリとして、自動ロードを処理するために Composer も使用する必要があるため、このパッケージを要求するだけで済み、Composer はこのサードパーティ ライブラリをロードするコードも処理します。非常に強力な自動ロード ファイル# があります。 ##したがって、私たちがしなければならないことは、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我们可以将业务逻辑、通用函数、逻辑拆分成不同的包,再也不需要做拷贝代码的蠢事了。
以上が作曲家をすぐに学ぶことができます!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。