注釈の使用には1つの欠点があります。それらはコメントで定義されているため(これは奇妙です)、プリコンパイラー(Zend Guardなど)や一部のバイトコードphpキャッシング拡張機能を使用してコードパフォーマンスを向上させることはできません(一部はコメントを削除します)。注釈はこの技術的な障害がある唯一の仕様であるため、使用することはお勧めしません。
また、コメントに「機能的な」ものを書くのは奇妙です。
XMLはYAMLよりもはるかに冗長ですが、より広く知られています。XMLのドキュメントの例は、すべてのオプションの中で最も貧弱です。
YAMLは他のどのYAMLよりも読みやすくなっていますが、スペースのインデントにも依存しています(一部の人は気に入らない)。Symfonyはデフォルトで設定にYAMLを使用するため、Symfonyを使用する多くの人は教義のマッピングにYAMLを使用することを選択します。つまり、YAMLの例は十分に文書化されており、そこには多くのリソースがあります。
私は個人的にYAMLが好きです。doctrineスキーマツールを使用してエンティティを自動的に生成できます(つまり、ゲッター/セッターを作成する必要はありません)。コメントが削除されることを心配せずに、プリコンパイラ/バイトコードキャッシュオプションを使用することもできます。
追加情報:
opcache.save_comments = 0
PHP 7.0以降を使用している場合、アノテーションを使用しているとphp.iniに設定することはできません。PHPには、コメントを削除するネイティブの方法があります。これにより、アプリケーションが破損します。Doctrineの最もアクティブなメンテナの1人であり、ほとんどのプロジェクト(Doctrine、Symfony)で使用されるアノテーション検索クラスを開発したGuilherme Blancoは、コメントアノテーションに対して発言しました(スレッド全体を読むと、彼は非常に情熱的であることがわかりますこれについて)。Redditのコメント注釈に関する問題についても広範な議論があり、ほとんどの人はそれが悪い考えであることに同意しているようです。
それにもかかわらず、Symfonyの公式のベストプラクティスブックは、注釈を使用するように人々にアドバイスしています。したがって、ほとんどのSymfonyバンドルは、おそらくメタデータ形式として注釈を使用します。