2010-12-16 3 views
0

Мне было интересно, можете ли вы дать мне совет «лучшей практики».PHP-классы: какую структуру каталогов использовать?

У меня есть структура класса, где несколько классов расширить один класс:

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 2010-12-16 14:56:28

ответ

6

Стиль структуры именования/структуры каталога довольно прочный.

Например, ваши классы, db_mysql, db_oracle и т.д .. будет отображаться на

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

В вашем конкретном примере, было бы больше смысла, чтобы изменить имена ваших классов, чтобы лучше соответствовать этим.

В нашем использовании мы помещаем базовый класс на тот же уровень, что и каталог.

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

Спасибо, это было то, что я искал. Тем не менее, он ничего не говорит об исключениях. Где они должны храниться? – 2010-12-17 07:24:27

+0

Я действительно не знаю. Мы не делаем ничего особенного с исключениями, поэтому у нас есть только каждый захватывающий тип, определенный в одном файле. – jasonbar 2010-12-17 13:40:15

2

Лучше сначала поставить имя родительского класса (т.е. database_oracle вместо oracle_database). Тогда вы могли бы организовать классы следующим образом:

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

На стороне записки: Автозагрузка должна быть очень легко с помощью этой структуры.

+0

Спасибо за подсказку по именованию файлов. – 2010-12-17 07:23:46

4
  1. Почему бы вам просто не использовать PDO?
  2. Если вы используете пространство имен, то полное имя класса может представлять собой структуру каталогов:

    MyProject\Database\MysqlDriver -> .../MyProject/Database/MysqlDriver.php 
    
  3. Если вы не используете пространство имен, то используйте подчеркивание (_) для имитации пространства имен:

    MyProject_Database_MysqlDriver -> .../MyProject/Database/MysqlDriver.php