2010-12-16 45 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

类命名/目录结构的Zend风格是非常稳固。

例如,你的类,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?如果你不使用的命名空间,然后使用下划线(_)来模拟命名空间

    MyProject\Database\MysqlDriver -> .../MyProject/Database/MysqlDriver.php 
    
  2. MyProject_Database_MysqlDriver -> .../MyProject/Database/MysqlDriver.php 
    
  3. 如果你使用的命名空间,然后全类的名字可以代表目录结构

+0

谢谢,但这些数据库类不是PDO的替代品。我正在设计一个数据库管理工具。 – 2010-12-16 14:58:28