Rubyには、接続の管理を容易にするクラスによって拡張されたDAOクラスがあります。これは、DB内のデータを表現および操作するクラスによって拡張され、さらに別のクラスによって拡張されます。動物の比喩を使用するには、次のようになります。
class Animal
...
end
class Mammal < Animal
...
end
class Feline < Mammal
...
end
class Cat < Feline
...
end
class Lion < Cat
...
end
...
PHPには__destruct、クラスを破棄/削除するときに実行されるメソッドがあります。そして、そのクラスが別のクラスを拡張する場合は、次のようparent::__destruct()にクラスの__destructメソッドに追加するだけです。
public function __destruct() {
// Clean up code for this class here
...
// Execute clean up code for Parent class
parent::__destruct();
}
を除くすべてのクラスで同様のメソッドを使用できますAnimal。何も拡張されないため、このparent::__destruct();行は無効になります。
しかし、私が理解しているように、Rubyにはそのオブジェクトに対してこのようなメソッドがありません。cleanupファイナライザーは設定できますが、クラスを破棄/削除したいときはいつでも呼び出すことができるメソッドを入れることにしました。これで、クラスをに設定する前に行う必要のあるすべての処理が行われnilます。
しかし、これは新しい問題を引き起こします。メソッドに常に名前が付けられていて、を呼び出す場合は、cleanupを呼び出すlion_instance.cleanupと想定しますLion#cleanup。それではcleanup、クラス内で呼び出してから、チェーンの下流で呼び出すようにするにはどうすればよいですか?CatFeline
それとも、これは間違ったアプローチであり、あなたはより良いアイデアを持っていますか?