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

답변

6

Zend 클래스 명명/디렉토리 구조 스타일은 매우 견고합니다.

는 등 예, 수업, db_mysql, db_oracle, 들어 .. 특정 예에서

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

에 매핑 할 더 나은이 맞게 수업의 이름을 변경하려면 더 의미가있다.

우리의 용도로는 기본 클래스를 디렉토리와 동일한 레벨에 놓습니다.

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

고마워요, 제가 찾고 있던 것이 었습니다. 하지만 예외에 대해서는 아무 말도하지 않습니다. 어디에서 보관해야합니까? –

+0

나는 정말로 모른다. 우리는 예외에 특별한 것을하지 않으므로 각각의 catchable 타입을 하나의 파일에 정의합니다. – 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를 대체하지 않습니다. 나는 데이터베이스 관리 도구를 설계하고있다. –

관련 문제