2009-03-02 19 views
4

良いデザインは、各関数を1回書くことだけを指示します。 PHPではincludeファイル(Utils.phpやAuthenticate.phpなど)をPHPコマンドinclude_onceとともに使用しています。しかし、私はPHPインクルードファイルの標準やベストプラクティスを見つけることができませんでした。 StackOverflowで何を提案しますか?PHP関数インクルードファイルのデザインヒント

  • コード規格
  • デザインパターン(今私は連想配列を使用しています)共通機能 の戻り値の型を定義するための
  • 提案規格の命名:私が探している

答えて

7

私が使用したい1つの習慣は、各クラスをClassName.class.phpという名前の独自のファイルに入れてから、クラスファイルを含めるようにautoloaderを設定することです。あるいは、私はそれらをすべてクラス/サブディレクトリに入れ、ClassName.phpという名前にします。私が期待しているクラスとクラス以外のクラスがいくつあるかによって異なります。

ユーティリティ関数をクラスに編成して静的メソッドにすると、最上位レベルのファイルに1つのrequire_once()しか書き込まなくなることがあります。この手法は、コードやコーディングスタイルに適しているかもしれません。

戻り値の型については、組み込み関数で使用されている規則に従います。リクエストに適切な型を返します。失敗した場合はfalseを返します。結果でfalseをチェックするときは、=== operatorを必ず使用してください。

あなたが慣習を心配しているという事実は、あなたが正しい軌道に乗っていることを示唆しています。あなたがJava、C++、C#などの他のOOP言語に精通しているなら、OOP goodness in PHP5のおかげで同じ慣習に従うことができます。

2

このような規格は既に書かれています。ほとんどの大規模なプロジェクトは、独自のものに従います。

Zendによって書かれたもので、Zendフレームワークで使用される標準です。 http://pear.php.net/manual/en/standards.php

私の好みの答えはしかし、あなた自身のプロジェクトのために、あなたが快適に感じるものを使用し、内部的に整合的であるべきであるということである。 http://framework.zend.com/manual/en/coding-standard.html

また、PEARは常にいくつかのかなり厳格なコーディング標準を持っていました。他のプロジェクトについては、そのルールに従ってください。一貫性により、コードの可読性を最大限に高めることができます。私の標準はPEARのものと同じではありません。私は4つのスペースでインデントしません(私はタブを使用します)、関数名のようなラクダのケースを使用することはありませんが、別のプロジェクトから何かを編集している場合は、

3

どのような命名規則を使用しても(私は可能な限りJavaまたはC#のいずれかから手がかりを取ることを好みます)、インクルードファイルを使用すると実際にコードを実行しないで、ファイルを2回作成します。 (include-onceまたはrequire-onceを使用)

0

私は以下を行っています。まず、すべてのWebリクエストをインターセプトするためのインターセプトフィルタを作成し、コマンドラインコマンドで動作するバージョンも作成しました。

両方のインターセプタは、ブートストラップファイルに移動し、オートローダをセットアップします。このファイルは、オートロード機能とハッシュです。ハッシュの場合、キーはクラス名であり、値はクラスファイルへのファイルパスです。 autoload関数は単にクラス名を取り、ファイルに対してrequireを実行します。

パフォーマンスに関するヒントをいくつかご用意していますが、ファイルを定義する際に一重引用符を使用してください。解釈されないために少し速いので、_onceバージョンではなくrequire/includeを使用してください。一度実行し、前者はかなり速いビットです。

上記のことは素晴らしいことですが、実際にはクラスが1トンの大きなコードベースであっても、ハッシュはそれほど大きくなく、パフォーマンスは一度も心配していませんでした。さらに重要なことに、私たちはいくつかの擬似名前空間クラス命名規則と結婚していません。以下を参照してください。

他のオプションは、区切られた名前、擬似名前空間トリックです。名前空間に5.3が付いてくるので、これはあまり魅力的ではありません。コードベース全体でこれらの名前を変更することは面白くないので、これは総体的です。それにかかわらず、これはどのように動作し、すべてのコードのルートを想定します。それから、すべてのクラスは、そこに到達するのに必要なディレクトリトラバースに基づいて名前が付けられます。たとえば、 '_'のような文字で区切られます。クラス名の後にファイル名が付けられます。この方法では、クラスの場所は名前のエンコーディングであり、オートローダーはそれを使用できます。 really_long_crazy_class_names_MyClass以外のこのメソッドの問題は、各呼び出しでかなりの処理が行われることですが、それは時期尚早の最適化であり、再び名前空間が来ることです。

例えば、

/code root 
ClassA ClassA.php 
    /subfolder 
    subFolder_ClassB ClassB.php 
関連する問題