2010-12-16 10 views
0

私はあなたに「ベストプラクティス」アドバイスを与えることができるかどうか疑問に思っていました。PHPクラス:どのディレクトリ構造を使用するのですか?

Iは、複数のクラスの一つのクラスを拡張するクラス構造を有する:

interface db_host 
    class mysql_host implements db_host 
    class oracle_host implements db_host 
    class pgsql_host implements db_host 
    ... 

class database 
    class mysql_database extends database 
    class oracle_database implements database 
    class pgsql_database implements database 
    ... 

私は別のファイル "class_name.class.php" の各クラスを格納します。また、このクラスで使用されている例外がそこに格納されます。

質問:どこのプロジェクトにこれらのファイルを置くべきですか?それらをすべて/libカタログにダンプするだけですか?継承されたクラスを含むファイルを明確にするにはどうすればよいですか?

+0

http://stackoverflow.com/questions/4401657/how-to-avoid-srp-chaos/4401966#4401966これは以前のような質問に対する私の答えでした。しかし、まったく同じ質問ではありません。多分それが助けになるでしょう。 – DampeS8N

答えて

6

Zendクラスの名前付け/ディレクトリ構造のスタイルは非常に固いです。例えば、あなたのクラス、db_mysql、db_oracleなどについては

は...あなたの具体的な例では

/model/db/mysql.php 
/model/db/oracle.php 

にマップするでしょう、それはよりよいこれに合わせて、クラスの名前を変更するには、より理にかなって。

ここでは、ベースクラスをディレクトリと同じレベルに配置します。

/model/db.php 
/model/db/.. 
+0

ありがとう、それは私が探していたものでした。ただし、例外については何も教えていません。彼らはどこに保管されるべきですか? –

+0

私は本当に知りません。私たちは例外に関して特別なことはしません。だから、捕獲可能な型をひとつのファイルに定義するだけです。 – jasonbar

2

親クラス名(oracle_databaseのかわりにdatabase_oracle)を指定する方がよいでしょう。サイドノートでは

/lib/ 
/database/ 
    database.php (containing your database class) 
    database_oracle.php 
/dbhost 
    dbhost.php 
    dbhost_oracle.php 

:次に、あなたは、以下のようにして、あなたのクラスを編成することができ自動ロードは、この構造を使用して、非常に簡単なはずです。

+0

ファイル命名法のヒントをありがとう。 –

4
  1. なぜPDOを使用しないのですか?

    MyProject_Database_MysqlDriver -> .../MyProject/Database/MysqlDriver.php 
    
  2. :あなたはその後、名前空間をシミュレートするために、アンダースコア( _)を使用する名前空間を使用していない場合

    MyProject\Database\MysqlDriver -> .../MyProject/Database/MysqlDriver.php 
    
  3. :あなたが名前空間を使用している場合

  4. その後、完全なクラス名は、ディレクトリ構造を表すことができ

+0

ありがとうございますが、それらのデータベースクラスはPDOの置き換えではありません。私はデータベース管理ツールを設計しています。 –

関連する問題