PHP名前空間の評価


11

私は、オープンソースPHPプロジェクトのプレリリース段階にいます。これは、他の開発者が自分のプロジェクトで使用することを望んでいます。このプロジェクトは現在、名前空間をサポートしていません。名前空間を使用するべきか、Dir_Subdir_ClassのPEAR命名規則を使用するべきかを評価しようとしています。正直に言うと、簡単な選択ではありません。

名前空間に対するいくつかの考慮事項:

  • 私のプロジェクトが、他の同様のプロジェクトよりもシンプルなAPIを提供することにより、差別化を図っている方法の1つ。名前空間は新しく、PEAR命名規則よりも複雑であるため、コードベースに名前空間を導入すると、プロジェクトの使用が簡単ではなくなります。それらを実装することで、使いやすさの点で差別化を失います。
  • 名前空間にはいくつかの利点がありますが、PEAR命名規則を使用する最新のPHP製品で解決する必要のある問題は解決しないようです。プロジェクトの使用中に名前の競合が存在しない場合は、最小限にする必要があります。
  • この記事では、名前空間の実装が恒星以下であるため、名前空間の採用を一時停止しました。
  • また、どこにも行かないかもしれない時流に飛び乗ることをためらっています。名前空間はPHPの新機能であるため、標準になるとはまだ確信していません。
  • 互換性。これまでに記述されたほとんどすべてのPHPコードは、新しい機能であるため名前空間を使用しません。他のライブラリは、変換なしでは互換性がありません。

名前空間を使用するためのいくつかのポイント:

  • 知覚。名前空間が標準になり、ベストプラクティスになると、私のプロジェクトはすぐに専門家ではなく、時代遅れのものと見なされるようになります。
  • コンペ。競合するPHPプロジェクトの中には、最新バージョンで名前空間を使用し始めているものもありますが、多くはまだ飛躍を遂げていません。これを行うと、私のプロジェクトに他のプロジェクトの足がかりを与えることができます。
  • プロジェクトを公開する前ではなく、公開する前に切り替えを行うと、しばらくの間2つのバージョンをサポートする必要があるため、将来の作業は容易になります。
  • ベストプラクティスをサポートしたいので、名前空間がPHPのベストプラクティスになった場合、プロジェクトはそれらを使用する必要があります。

私が言えることから、あなたはどちらかの方法を選ばなければなりません。両方を行うことはできません。検討していない点はありますか?PHPのプロフェッショナルな標準になるネームスペースに向かってまたは反対することを示す客観的な兆候はありますか(フレームワークはありません)。すぐに決定する必要があるので、あなたが喜んで共有してくれるであろう洞察やリソースに感謝します。

回答:


5

PHPの名前空間が残る2つの兆候:

  1. PEAR命名スキームは、PEAR2の名前空間を支持して放棄されました
  2. Zend Framework 2.0の目標の1つは、とりわけネームスペースを完全に活用することにより、PHP 5.3の使用法の模範となることです。これは、Zendが名前空間に完全にコミットしており、名前空間を引き続きサポートおよび進化させることを強く示すものであると考えています(できればより良いものに)。

控えめに言っても、名前空間の現在の実装が不足していることに完全に同意しますが、それらを使用することに対するあなたの議論はそれほど堅実ではありません。現在の形式でも、名前空間は以下を提供します。

  • より良いコード編成、
  • 命名の衝突を回避し、
  • クラス、関数、定数のコンテキスト。

PHP名前空間に対するほとんどの議論は、他の言語の実装と比較することであり、機能としての実際のメリットに反するものではないことに留意してください。


リンクの場合は+1。より良いコード構成とコンテキストポイントを拡張していただけますか?コード編成を改善する方法を理解するのに少し苦労しています。ほとんどのプロジェクトは、PEAR命名スキームで使用するのと同じように、論理ディレクトリにグループ化されたファイル構造の1:1クラスに固執するようです。ZF2でさえ、ほとんどの場合同じディレクトリとファイル構造を使用しているように見えますが、現在は名前空間のみを使用しています。違いはありますが、そもそも名前の付いたディレクトリやファイルよりも優れているか、整理されているかは必ずしもわかりません。
VirtuosiMedia

コンテキストポイントにも問題があります。どちらかといえば、名前空間はコンテキストを削除して、コンテキストを追加するのではなく、より簡潔なコーディングスタイルにするようです。例として、ファイルの奥深くに新しいクラスをインスタンス化する場合、名前空間がクラス名からすぐに明らかになるのではなく、名前空間が宣言された場所を見つけて、どのクラスであるかを把握する必要があります。何かが足りない限り、名前空間はそれほど冗長ではないようですが、明快さを犠牲にします。
VirtuosiMedia

@VirtuosiMedia PEARおよび古いZFの命名スキームは名前空間をエミュレートするため、私の3つのポイントはそれらにも多少当てはまります。私が指摘しようとしているのは、PHP名前空間の現在の実装でそれらの点が当てはまる場合、それらの小さなスナフはそれらを使用しないほど十分ではないということです。でより良いコードの組織私はあなたのクラス、名前空間なしもちろん可能で何かのために賢明かつ論理構造と階層を採用し、主にファイル間を意味します。ただし、名前空間(およびそれらをエミュレートするスキーム)は、3つのポイントすべてを一度に達成するのに役立つ機能です。
ヤンニス

わかった。説明をありがとう。エミュレートされた名前空間よりも実際の名前空間に大きな利点があると思いますか?
VirtuosiMedia

1
@VirtuosiMedia質問で作成した名前空間を使用するためのポイントはすべて有効です。それに加えて、PHP名前空間を使用すると、さまざまなバックグラウンドのコーダーにとってコードが少し自然に感じられるようになります。これは、大規模なプロジェクトでは非常に貴重です。また、エミュレートされた名前空間の標準はありません。それらのほとんどはほぼ同じですが、実際の名前空間を使用すると、全員が同じスキーマを使用するようになります。ところでありnamespacerはあなたのコードをnamespacifyするために使用することができますそこに。
ヤンニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.