Правильное хранение объектов в php? хочется закешировать результаты работы тяжелого класса. но непонятно как правильно хранить часто используемый объект (возвращается из метода класса) в кеше (файловый кеш, то есть хотелось бы в строку объект сохранить) . пробовал сериализацию, но в объекте защита.public function __wakeup() { trigger_error('Unserializing is not allowed.', E_USER_ERROR); } убрал триггер - естественно, php криво сохранил объект какие еще есть варианты? php 5.5.23
Если вы не можете использовать сериализацию объекта для кеширования его в файловом кеше из-за метода __wakeup(), то можно рассмотреть другой способ.
Один из вариантов - использовать библиотеку или расширение для PHP, такие как Memcached, Redis или APCu. Они позволяют хранить объекты в кеше и могут управлять сериализацией и десериализацией объектов автоматически.
Если использование дополнительных библиотек не подходит, можно рассмотреть другой способ хранения объектов в файловом кеше. Например, можно реализовать свой собственный механизм кеширования, где объекты будут сохраняться как строки в файле, а затем десериализоваться при чтении из файла.
Ниже приведен пример такого механизма кеширования:
class ObjectCache { public static function saveObjectToFile($object, $filename) { $serializedObject = serialize($object); file_put_contents($filename, $serializedObject); } public static function getObjectFromFile($filename) { $serializedObject = file_get_contents($filename); return unserialize($serializedObject); } } // Сохранение объекта в файл $obj = new YourClassName(); ObjectCache::saveObjectToFile($obj, 'cached_object.txt'); // Получение объекта из файла $cachedObj = ObjectCache::getObjectFromFile('cached_object.txt');
В этом примере подразумевается, что ваш объект YourClassName не содержит сложной логики сериализации и десериализации. Если объект имеет сложную логику, то возможно потребуется реализовать свой собственный метод сериализации и десериализации или использовать другие способы хранения и кеширования объектов.
Если вы не можете использовать сериализацию объекта для кеширования его в файловом кеше из-за метода __wakeup(), то можно рассмотреть другой способ.
Один из вариантов - использовать библиотеку или расширение для PHP, такие как Memcached, Redis или APCu. Они позволяют хранить объекты в кеше и могут управлять сериализацией и десериализацией объектов автоматически.
Если использование дополнительных библиотек не подходит, можно рассмотреть другой способ хранения объектов в файловом кеше. Например, можно реализовать свой собственный механизм кеширования, где объекты будут сохраняться как строки в файле, а затем десериализоваться при чтении из файла.
Ниже приведен пример такого механизма кеширования:
class ObjectCache {public static function saveObjectToFile($object, $filename) {
$serializedObject = serialize($object);
file_put_contents($filename, $serializedObject);
}
public static function getObjectFromFile($filename) {
$serializedObject = file_get_contents($filename);
return unserialize($serializedObject);
}
}
// Сохранение объекта в файл
$obj = new YourClassName();
ObjectCache::saveObjectToFile($obj, 'cached_object.txt');
// Получение объекта из файла
$cachedObj = ObjectCache::getObjectFromFile('cached_object.txt');
В этом примере подразумевается, что ваш объект YourClassName не содержит сложной логики сериализации и десериализации. Если объект имеет сложную логику, то возможно потребуется реализовать свой собственный метод сериализации и десериализации или использовать другие способы хранения и кеширования объектов.