Я из фона Java и недавно перешел на php для одного проекта. Я нашел одно неожиданное поведение в php.
Значение, установленное для некоторой статической переменной, не остается постоянным по всем запросам.
- Unserialize PHP Array в Javascript
- default mailto в письмах по электронной почте в формате PDF
- mod_rewrite: многоуровневый URL-адрес с использованием параметра запроса
- Что лучше требовать (dirname (__ FILE __). '/'. 'MyParent.php'), чем просто требовать ('myParent.php')?
- Манипулятор ошибок Codeigniter для просмотра
Я не уверен, что это ожидаемый бахавиус. Поскольку в java вы всегда можете использовать очень часто используемые переменные или указывать константы, такие как имя dbname, имя хоста, имя пользователя, пароль по всем запросам, чтобы вам не приходилось их всегда читать из локальных файлов свойств.
Это нормальное поведение? И если это нормально, есть ли какая-либо альтернатива, по которой я могу сохранять значения, назначенные переменным по всем запросам?
Может ли кто-нибудь предложить мне лучший способ сделать это в php?
Нет, в то время как статическая переменная останется для текущего запроса, вам нужно будет добавить ее в сеанс, чтобы сохранить его значение в запросах.
Пример:
session_start(); class Car { public static $make; public function __construct($make) { self::$make = $make; } } $c = new Car('Bugatti'); echo '<p>' . Car::$make . '</p>'; unset($c); if (!isset($_SESSION['make'])) { echo '<p>' . Car::$make . '</p>'; $c = new Car('Ferrari'); echo '<p>' . Car::$make . '</p>'; } $_SESSION['make'] = Car::$make; echo '<p>' . $_SESSION['make'] . '</p>';
Статические переменные применимы только к одному запросу. Если вы хотите, чтобы данные сохранялись между запросами конкретного пользователя, используйте только переменные сеанса.
Хороший стартер для них находится здесь: http://www.tizag.com/phpT/phpsessions.php
Если вы начнете работать со сложными наборами данных во всех сеансах, вы можете захотеть просмотреть данные в объектах, которые сериализуются в базе данных и извлекаются при восстановлении сеанса.
Переменные в PHP не должны быть постоянными. Поток вашего приложения (стека) выполняется, чтобы завершить выполнение каждой страницы. Нет ничего живого в фоновом режиме, который продолжает вашу логику или приложение. Самое близкое – сеанс, но вы не хотите хранить информацию, такую как доступ к db и т. Д. Там.
Конфигурации вашей базы данных должны быть в виде файла конфигурации или среды, к которому один раз обращаются к соединению с базой данных, после того, как соединение было сделано, вы можете просто запрашивать, когда это необходимо, и использовать дескриптор соединения для определения того, какое соединение использовать.