2010-04-08 6 views
1

나는 개체가 'DB'부모 데이터베이스 클래스의 '결과'속성을 상속, 분명히 객체개체의 상속 된 속성을 해제하는 방법?

(
     [id] => 1 
     [parent_id] => 0 
     [result:Database:private] => 
     [db:Database:private] => mysqli Object 
      (
       [affected_rows] => 0 
       ... 
      ) 

    ) 

있습니다.

unset ($ object-> result) 또는 unset ($ object-> result : 데이터베이스) 또는 unset ($ object-> result : Database : private) 작업.

더 이상 필요하지 않을 때 (예 : 개체 속성을 출력하려고 할 때) 해당 속성의 설정을 해제 할 수 있습니까?

데이터베이스 개체를 다른 클래스의 상속 된 속성으로 사용하는 것이 좋습니다 (데이터베이스 연결을 사용하는 다른 모든 클래스와 함께 하나의 데이터베이스 클래스 확장).

답변

1

$object->result = null

는 (하나 개의 데이터베이스 클래스는 데이터베이스 연결을 사용하는 모든 다른 클래스로 확장)가 다른 클래스의 상속 재산으로 데이터베이스 개체를 가지고 일반적으로 좋은 생각입니다 시도?

아니요. 클래스에 한 가지 책임이 있습니다. 데이터베이스에서 데이터를 읽거나 쓰는 클래스 또는 클래스 집합에 데이터베이스 연결을 유지하십시오. 다른 도메인 객체는 상속 된 경우에도 SQL 및 데이터베이스 코드에 의해 혼잡하지 않고 자신의 책임을 처리해야합니다.

"상속보다 유리한 구성"이라는 개념을 읽어 볼 수도 있습니다.

+1

$ object-> result = null은 메모리에 계속 존재할 DB에 대한 참조만을 제거합니다. unset()은 메모리에서 객체를 제거하지만 DB는 다른 클래스에서도 상속되기 때문에 unset()을 사용할 수 없습니다. –

+0

불행히도 $ object-> result = null도 unset ($ object-> result)도 작동하지 않습니다. $ object-> result = null은 새 속성 'result'만 설정합니다. – Blackbeard

1

unset()을 하나의 객체에서만 사용하는 경우 객체가 메모리에 존재하고 객체에있는 객체가 참조이므로 객체를 설정 해제하지 않은 것입니다. 동일한 참조가이 DB 객체를 보유하는 다른 모든 객체에 의해 사용됩니다. 당신이 할 수있는 유일한 방법은이 참조를 NULL로 설정하는 것입니다. 그러나 DB가 다른 객체에 의해 여전히 사용되기 때문에 메모리를 비우지 않습니다.

일반적으로 DB 성능을 향상시키지 않으므로 DB 객체를 설정 해제 할 필요가 없습니다. PHP는 실행이 끝나면 객체를 자동으로 가비지 수집합니다.

예, 하나의 정적 DB 개체를 사용하거나 데이터베이스를 사용하는 클래스에서 상속하는 것이 좋습니다.

+0

데이터베이스 오브젝트 상속 된 특성을 설정 해제하는 목적은 메모리를 비우는 것이 아니라, 예를 들어 반복에 대해 하위 오브젝트를보다 관리하기 쉽게 만드는 것입니다. 나는 $ this-> query ($ query)를하기 쉽고 이클립스가 $ this-> db-> query ($ query를 좋아하지 않기 때문에 데이터베이스 IO를 필요로하는 다른 모든 클래스들로 Database 클래스를 확장하고있다.) 구문을 사용합니다. 이 접근법을 좋은 생각이라고 생각해서 다행입니다. Мерси много за помощта приятелю;) – Blackbeard

+0

관리가 용이하다는 것은 무엇을 의미합니까? 또한 DB를 상속하는 모든 클래스는 데이터베이스 조작 만하는 데 적합하도록하는 것이 좋습니다. Пак заповядай :) –

+0

예 : 많은 속성을 가진 Item 클래스는 Database 클래스를 확장하므로 Item 클래스는 모든 데이터베이스 메서드를 사용할 수 있습니다. Item 클래스의 객체가 출력 될 때, 상속 된 모든 속성의 객체를 제거하고 Item 객체에 반복을 사용하고 싶습니다. – Blackbeard

관련 문제