多くのサブクラスを持つ基本クラスと、関数の結果をキャッシュする汎用関数があります。キャッシュ関数で、どのサブクラスが呼び出されたかを知るにはどうすればよいですか?
class Base {
public static function getAll() {
return CacheService::cached(function() {
// get objects from the database
});
}
}
class X extends Base {}
class Y extends Base {}
class Z extends Base {}
class CacheService {
function cached($callback) {
list(, $caller) = debug_backtrace();
// $caller['class'] is always Base!
// cannot use get_called_class as it returns CacheService!
// see if function is in cache, otherwise do callback and store results
}
}
X::getAll();
Z::getAll();