我有许多扩展抽象 DatabaseRecord 类的类。本质上,DatabaseRecord 类处理所有子类在与数据库交互时使用的一些通用功能(例如,按 id 搜索、更新等)。
现在,我不想每次都经常去数据库获取记录,例如,在页面加载时引用了特定用户。我有一个相当巧妙的想法,因此我可以执行以下操作,因为 PHP 具有后期静态绑定。
abstract class DatabaseRecord{
static protected $cachedRecords;
public static function searchById($id){
if(!isset(static::$cachedRecords[$id])) {
// logic
static::$cachedRecords[$id] = static::constructFromDatabase($results);
}
return static::$cachedRecords[$id];
}
// ... more logic
}
不幸的是,所有子类共享相同的 static $cachedRecords
。
我可以通过static protected $cachedRecords;
在所有子类中重新声明并$cachedRecords
在 DatabaseRecord 中声明private
以阻止我忘记重新声明来解决此问题,但这似乎是一个不雅的解决方案。
有没有更好的方法可以做到一劳永逸?