1

私はオブジェクトを持っています

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

    )

明らかに、オブジェクトは親データベース クラスの 'db' および 'result' プロパティを継承しています。

unset($object->result) も unset($object->result:Database) も unset($object->result:Database:private) も機能しません。

これらのプロパティが不要になったとき (つまり、オブジェクト プロパティが出力されようとしているとき) に、これらのプロパティを設定解除するにはどうすればよいですか?

データベースオブジェクトを他のクラスの継承プロパティとして持つことは一般的に良い考えですか (データベース接続を使用する他のすべてのクラスで 1 つの Database クラスを拡張します)?

4

2 に答える 2

1

試す$object->result = null

データベースオブジェクトを他のクラスの継承プロパティとして持つことは一般的に良い考えですか (データベース接続を使用する他のすべてのクラスで 1 つの Database クラスを拡張します)?

いいえ。クラスの責任は 1 つにするのが最善です。データベース接続は、データベースからのデータの読み取りと書き込みを担当するクラスまたはクラスのセットに保持します。他のドメイン オブジェクトは、たとえそれが継承されていたとしても、SQL やデータベース コードによって混雑することなく、独自の責任を処理する必要があります。

また、「継承よりも構成を優先する」という概念についても読みたいと思うかもしれません。

于 2010-04-08T14:20:25.127 に答える
1

unset() を 1 つのオブジェクトでのみ使用している場合、オブジェクトの設定を解除していません。これは、メモリのどこかに存在し、オブジェクトにあるものは単なる参照であるためです。この DB オブジェクトを保持する他のすべてのオブジェクトで同じ参照が使用されます。できる唯一のことは、この参照を NULL に設定することですが、DB がまだ他のオブジェクトによって使用されているため、メモリを解放していません。

通常、パフォーマンスが向上しないため、DB オブジェクトの設定を解除することについて心配する必要はありません。実行が終了すると、PHP は自動的にオブジェクトをガベージ コレクションします。

はい、静的 DB オブジェクトを 1 つ持つか、データベースを使用しているクラスでそれを継承することをお勧めします。

于 2010-04-08T14:20:48.247 に答える