2010-05-13 2 views
1

는 데이터베이스 데이터베이스 상호 작용이 클래스의 아이 위해 만들어 추상 클래스 (사용자 데이터베이스는 ActionDatabase, EventDatabase는) 정적로 정의의 데이터베이스 연결을 상속 내 . 상속 데이터베이스 연결

abstract class Database { public static $connection; public function __construct() { ... $this->connection = mysql_connect($host, $username, $password); } } class UserDatabase extends Database { public function verify() { if ($this->connection == parent::$connection) { print "true"; } else { print "false"; print "this:" . $this->connection . " parent:" . parent::$connection; } } } $instance = new UserDatabase(); $instance->verify(); // this prints false, as parent::$connection is empty 

내 데이터베이스 연결 만 설정하고 일단 메모리 에 저장하고 각 인스턴스에 대해 복제하지 않고 참고로 서브 클래스에 전달되어, 그 의미합니까?

OOP 올바른 데이터베이스 인터페이스를 구현하는 방법은 무엇입니까?

답변

2

잠시 동안 당신의 코드를 무시하고이 계획이 어떻게 작동해야하는지에 대한 설명 만 보면 ... 예, 데이터베이스 연결은 각 PHP 스크립트마다 한 번만 설정되며 각 인스턴스에 대해 복제되지 않습니다.

이것이 좋은 아이디어인지 아닌지는 하위 클래스가 무엇인지에 따라 다릅니다. 각 반에는 하나의 책임이 있어야합니다. 하위 클래스의 유일한 책임은 DB 상호 작용 인 한, 당신은 아마 괜찮을 것입니다. (이것이 일반적으로 어떻게 수행되는지에 대한 설명은 Repository Pattern을 보라.) User 클래스가 Database를 확장하여 자신을 저장할 수 있다면, 선을 넘어서서 너무 많은 의존성과 책임이있는 클래스를 작성하고있다.

코드의 경우 코드의 거의 모든 행이 잘못되었습니다. 함수의 결과에 클래스 변수를 초기화 할 수 없습니다. SQL이 잘못되었습니다. 줄 $connection ? "connected" : "not connected";은 아무 작업도 수행하지 않습니다. 그 중 거의 모든 것이 생성자에서 수행되어야합니다. 기타

+0

, 나는 가능한 한 짧게 클래스의 목적을 설명하기 위해 노력했다,하지만 난 내 PHP-문법이 나를 실패 같아요. 내 ** 사용자 ** 인스턴스는 ** UserDatabase **가 반환하는 항목입니다. 사용자 클래스는 스크립트를 처리하는 동안 시스템에서 필요할 수있는 값에 대한 setter/getter 클래스입니다. 스크립트가 완료되면 사용자 개체를 현재 UserDatabase로 전달하므로 사용자를 값으로 줄인 다음 데이터베이스 쿼리에 업데이트 쿼리를 보낼 수 있습니다. 그래서 클래스 데이터베이스 상속 체인은 반환하는 유형과 구분됩니다. ActionDatabase는 Action의 인스턴스를 반환하고 받아들입니다. – sdkfasldf

1

그 패턴으로는 아무 것도하지 않고 데이터베이스 상호 작용 만한다면이 패턴은 정상입니다.

그렇지 않으면 매번 "getInstance()"를 할 수있게 만들어진 데이터베이스 클래스를 사용하는 것이 더 나을 것입니다. 싱글 톤 디자인 패턴. 당신은 전적으로 옳습니다

http://www.tonymarston.net/php-mysql/singleton.html

+0

이것은 아주 좋은 기사입니다. 고마워요. – sdkfasldf