У меня есть несколько классов, расширяющих абстрактный класс DatabaseRecord. По сути, класс DatabaseRecord обрабатывает некоторые общие функции, которые все дочерние классы используют при взаимодействии с базой данных (например, поиск по идентификатору, обновление и т. д.).
Теперь я хотел бы, чтобы мне не приходилось постоянно обращаться к БД для извлечения записи каждый раз, например, когда конкретный пользователь упоминается при загрузке страницы. У меня была в меру гениальная идея, чтобы я мог сделать следующее, так как 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
}
К сожалению, все дочерние классы используют один и тот же статический $cachedRecords
.
Я мог бы исправить это, повторно объявив static protected $cachedRecords;
во всех дочерних классах и объявив $cachedRecords
в DatabaseRecord как private
, чтобы не забыть переобъявление, но это кажется неэлегантным решением.
Есть ли лучший способ сделать это, чтобы написать один раз и забыть?