ホームページ  >  記事  >  開発ツール  >  作曲家をすぐに学ぶことができます!

作曲家をすぐに学ぶことができます!

藏色散人
藏色散人転載
2020-07-04 13:21:152990ブラウズ

composer の次のチュートリアル コラムでは、composer の学習方法を紹介します。困っている友人の役に立てば幸いです。

作曲家をすぐに学ぶことができます!

システムにさまざまな Web アプリケーションがあるが、それらを実行する必要がある場合共有する 大量のコードをどうするか

システムに拡張機能が必要で、インターネット上の誰かがその使い方を提供するだけの場合

PHP コードをアップグレード、ダウングレード、ロールバックする方法
タスクを分散する方法、複数のエンジニアが共同作業できるようにする方法 開発タスク

私が PHP に出会ったのは、V5.3.5 がリリースされたばかりの 2011 年でした。言語レベルで見ると、PHP にはそれほど明らかな欠点はないと思いますが、Web 向けの豊富な関数ライブラリをベースに、クラス、SPL、匿名関数なども備えています。これらの機能 (まったく「特別」ではありません) は、大規模プロジェクトのコーディング ニーズをサポートするのに十分です。

PHP5.3作曲家をすぐに学ぶことができます!
しかし、実際に開発をしていて、本当に PHP を使ってコードを書きたいと思うと、とんでもない事態に遭遇することがよくあります。 PHPを使うため。しかし、まだ頭が痛いです。 Web サイトを作成するときに確認コードが必要になる場合がありますが、ほとんどの場合、自分で確認コードを書きたくありません。インターネット上には非常に多くの種類の確認コードがあるため、当然それらを直接使用したいと考えます。しかし、それを直接使用したい場合、私がしなければならないことは次のとおりです:

検索エンジンにアクセスして検索し、各結果に使用できる適切なコードがあるかどうかを確認します。自分。
  1. クラスを見つけました。このクラスをプロジェクトに導入する必要があります。どのディレクトリに配置すればよいでしょうか?オートロードするにはどうすればよいですか?何かの拡張機能に依存しているのでしょうか?現在使用しているものよりも新しいバージョンの PHP で使用する必要がありますか?これらはすべて私が解決したい問題です。
  2. 2 で述べた問題をすべて解決したい場合は、1 つだけ書けばいいのではないでしょうか?
  3. f**k it
  4. 自分のコードを使用する場合でも、複数の Web アプリケーション (コンピューター側、WAP 側、API インターフェースは正常です) がある場合、もちろん、これらがプロジェクト (ディレクトリ) 内に存在しないことを願っています。指定されたファイルを表示することがさらに困難になり、メンテナンス コストも増加します。しかし、これらの Web アプリケーションを分離すると、非常に多くの共通コード (モデル、ロジック、認証など) が存在しました。これらのコードをどのように処理すればよいでしょうか? Web アプリケーションの小さなロジックを変更しました。他のアプリケーションでは、それを思い出せないか、ほんの小さな変化でさえ、コンピューターを壊したくなったり、仕事を辞めたり、リラックスするために外出したくなります。

わかりました。これらのコードを分割し、自動読み込みを通じて相互に使用します。これにより、より多くの人が開発に参加できるようになりますが、オンラインの状況は非常に複雑です。何か問題が発生した場合に備えて、コードの一部。特別な Web アプリケーションがあり、新しいコードがそれに適用されない場合に使用します。メンテナンスも問題であり、他の多くのプロジェクトに依存している Web アプリケーションを引き継ぐ場合、コードを少し変更すると、自動ロード コードによって Web アプリケーションがどのように動作するかを直感的に把握することが困難になるため、多くのトラブルが発生する可能性があります。他のプロジェクトのどのコードが使用されているか。

しかし、PHP に関しては、書くのに非常に便利なので、壊したくありません。まだ罠から抜け出したくない。しかし、上記の問題が解決されない場合、個人的には、PHP を書くのは依然として非常にイライラするものだと思います。他の言語がこの問題をどのように解決するかを見てみましょう。 JAVA の自然なパッケージング メカニズムにより、Maven、ノードの npm、さらには PHP よりも古い Perl にも cpan が使用できます。 PHP にはパッケージ管理メカニズムが必要ではないでしょうか?

幸いなことに、これらの問題は私の PHP 使用にそれほど長い間悩まされることはありませんでした。すぐに PHP に Composer が導入され、夜が明けたからです。

Composer は、PHP の依存関係管理ツールです。これにより、プロジェクトが依存するコード ライブラリを宣言でき、それらがプロジェクトにインストールされます。

Composerの中国語公式サイトのご紹介です。

この文について、私の経験に基づいて詳しく説明してみます。

これにより、プロジェクトが依存するコード ベースを宣言できます。これは、コードを使用するときに、自分でコピーする必要がなくなり、宣言を通じて Composer に伝えることができることを意味します。レストランに食べに行っても、その必要はありません。シェフに作り方を教えてください。ましてや自分で料理するのであれば、皿に盛り付けて自分で食べる必要はありません。代わりに、ウェイターに自分の食べたいものを伝えてください。 「食べたいときは、彼に伝えてください。もちろん、今日はお腹の調子が悪くて、何か作ってくださいとは言えません。軽い料理の方が消化が簡単です。とにかく、私はこのように注文することはありません。いつも伝えなければなりません」食べたい料理と具体的な料理名。これが、以前の検索エンジンでコードを検索する場合との違いです。キーワードを通じて Composer に伝えることはできませんが、必要なコード ライブラリの名前を Composer に伝える必要があります。コードの名前はどうやって知ることができますか? すべてのコードが含まれており、コードを見つけて名前を知るための検索機能を提供する場所がない限り、他人のコードの名前を知ることは誰にも不可能です。 ##packagist.org はこれを行います。さまざまな検索エンジンで運に頼る必要はもうありません。ここでキーワードを検索しても、広告は表示されず、莆田も京東も表示されません。

それはあなたのプロジェクトにそれらをインストールします: Composer に伝えた後、Composer は自然に料理を運ぶのを手伝ってくれます。これは誰でも理解できることです。私たちが望むコードです。それがどのサーバーであるかわかりません。ただし、Composer を使用するとローカルにダウンロードできます。しかし、ここにはまだ疑問があります, ダウンロードした後にそれを使用する方法. PHP でファイルを使用したい場合は、それを含めるか必須にする必要があることはわかっています. Composer をダウンロードした後、この料理をどのように食べるか? 必要ですか?自分のボウルと箸を準備しますか?幸いなことに、PHP-FIG と呼ばれる別の優れた機能がありますが、これはコードを生成せず、実際的な問題に対する解決策も提供しません。彼はバーベキューしかやっていないのですが、一体何のためにバーベキューをしているのでしょうか?上で述べたように、いくつかの基本的なツール (Composer など) が不足しているため、PHP 開発では、コーディング標準、ディレクトリ構造、クラスを自動的にロードする方法などの標準を確立することが困難です。キャッシュの使用方法など、ログを記録する方法は何につながりますか?さまざまな企業、さまざまな PHP プログラマーが魔法の力を発揮し始めます。もちろん短期的には問題ありませんが、長期的には開発コストと保守コストが増加します。プロジェクトを引き継ぐとコードを一から理解する必要があり、チームであっても標準がないためコミュニケーションコストがかかります。つまり、PHP-FIG はまさに標準を設定するのです。彼が策定した標準は次のとおりです。

    エンコーディング仕様 (
  1. psr-1 psr-2)
  2. 自動ローディング仕様 (##) # psr-4
  3. )いくつかの共通インターフェイス ログ(
  4. psr-3
  5. ) キャッシュ(psr-6) http(psr-7)
  6. これらの規格については、公式 Web サイトで詳しく説明されています。ここで取り上げるのは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 ファイルに適しています

クラスマップはファイルよりも賢いです。自動ロード用にフォルダまたはファイルを指定できます。欠点は、フォルダを指定した場合でも、このフォルダにファイルを追加するには 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 サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。