Не перестаю удивляться PHP (в хорошем смысле), как он позволяет ломать собственные же функции. Например, хочу использовать свой класс для работы с базой данных поверх PDO, но у меня нету времени изобретать велосипед, а работать хочется «прямщяс»!
Да не вопрос:
class Database {
protected $db_handler = NULL;
public function __construct() {
try {
$this->db_handler = new PDO(
'sqlite:../db/development.sqlite', NULL, NULL,
['PDO::ATTR_ERRMODE' => 'PDO::ERRMODE_EXCEPTION']
);
return $this->db_handler;
}
catch (PDOException $e) {
die();
}
}
public function __call($method, $args) {
return call_user_func_array(array($this->db_handler, $method), $args);
}
}
$db = new Database();
Сессии оказывается тоже можно переписать, причём для этого не нужно перелопачивать проект целиком, а установить одну единственную функцию session_set_save_handler();, указав «бэкенд» для работы с сессиями. Затем все действия, open/close/read/write/gc (garbage collector)/destroy, будут спрашиваться у этого бэкенда, тобишь задавая переменную $_SESSION['key'] = 'value';
на деле будет вызываться класс $session = new Session(); $session->write('key', 'value');
, который может являться записью key-value значения в SQL базу данных. Как тебе такое, Илон Маск!?
Вопрос. Вместо того, чтобы «ломать» встроенный механизм сессий PHP, может проще сразу использовать свой? Тобишь, отказаться от использования session_start / $_SESSION / etc... А полностью перейти на своё. Или не?