Я знаю, что это действительно старый вопрос, но я столкнулся с этой проблемой. После дополнительных исследований и экспериментов я придумал, что я считаю приемлемой альтернативой хранению уроков в сессии. Это может быть немного хакерским, но работает для моего текущего проекта.
ПРИМЕЧАНИЕ: этот обходной путь работает для меня, потому что я начинаю сеанс, когда пользователь входит в систему и не хочет включать все возможные классы, которые пользователь может или не может встретить во время сеанса. Включение всех классов не кажется практичным или эффективным (но, может быть, это не лучше ???).
Во-первых, мой базовый класс содержит следующий код, который автоматически заполняет атрибуты объекта из данного массива.
class BaseClass {
public function __construct($properties=[]){
if (!empty($properties)) {
array_walk($properties, function ($val, $key) {
$this->fromArray($key, $val);
});
}
}
public function fromArray($property, $value){
return (property_exists($this, $property)) ? $this->$property = $value : null;
}
public function toArray(){
return get_object_vars($this);
}
}
Обходной путь:
Я использую метод toArray () для преобразования экземпляра класса в массив перед его передачей в сеанс, а затем создаю новый экземпляр класса при извлечении его из сеанса.
$_SESSION['user'] = $userInstance->toArray();
// ... do stuff ...
$userInstance = new User($_SESSION['user']);
Это также очень удобно для записи классов в базу данных и преобразования в JSON. И то, и другое упрощается при работе с массивом PHP.
Как я уже говорил выше, это может или не может быть наиболее эффективным способом решения этой проблемы. Также возникает вопрос: «Должен ли я использовать классы PHP, если я просто собираюсь преобразовывать в массивы?»