Подтвердить что ты не робот

Сохраняются ли постоянные переменные в php по запросам?

Статическая переменная getcha в php

Я из фона Java и недавно перешел на php для одного проекта. Я нашел одно неожиданное поведение в php.

Значение, установленное для некоторой статической переменной, не будет оставаться постоянным через запросы.

Я не уверен, что это ожидаемый бахавир. Поскольку в java вы всегда можете использовать очень часто используемые переменные или указывать константы, такие как имя dbname, имя хоста, имя пользователя, пароль для всех запросов, чтобы вам не приходилось всегда читать их из локальных файлов свойств.

Это нормальное поведение? И если это нормально, есть ли альтернатива, по которой я могу сохранять значения, назначенные переменным в запросах?

Может кто-нибудь предложить мне лучший способ сделать это в php?

4b9b3361

Ответ 1

Нет, в то время как статическая переменная останется для текущего запроса, вам нужно будет добавить ее в сеанс, чтобы сохранить значение в запросах.

Пример:

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>';

Ответ 2

Статические переменные применимы только к одному запросу. Если вы хотите, чтобы данные сохранялись между запросами для определенного пользователя, используйте только переменные сеанса.

Хороший стартер для них находится здесь: http://www.tizag.com/phpT/phpsessions.php

Ответ 3

Если вы начнете работать со сложными наборами данных во всех сеансах, вы можете захотеть просмотреть данные в объектах, которые сериализуются в базе данных и извлекаются при восстановлении сеанса.

Переменные в PHP не должны быть постоянными. Поток вашего приложения (стека) выполняется, чтобы завершить выполнение каждой страницы. Нет ничего живого в фоновом режиме, который продолжает вашу логику или приложение. Самое близкое - сеанс, но вы не хотите хранить информацию, такую ​​как доступ к db и т.д. Там.

Конфигурации вашей базы данных должны быть в виде файла конфигурации или среды, к которому один раз обращаются к подключению к базе данных, после того, как соединение было сделано, вы можете просто запрашивать, когда это необходимо, и использовать дескриптор соединения для определения того, какое соединение использовать.