Intereting Posts
Как изменить язык LOCALE на Lumen Изменение диалогового окна подтверждения javascript для загрузки Как реализовать связь между клиентским приложением Java (Android) и приложением PHP-сервера? рисование «хороших» графиков в php Методы кэширования объектов PHP в файл? данные не извлекаются через formdata Расчет процентной ставки в PHP Добавление подкатегорий в laravel 5.4 Как сохранить имя файла в базе данных, с другой информацией при загрузке изображения на сервер с помощью PHP? Класс подключения базы данных PHP Как показать диалоговое окно «Сохранить как» с помощью PHP для текстовых файлов Использование PHP, как мне сделать правило перезаписи? Форма PHP отправляет электронную почту нескольким получателям Должен ли я использовать htmlspecialchars или mysql_real_escape_string или оба Как создать ссылку, которая отправляет пользователя на другую страницу, которая затем перенаправляется на другую страницу, связанную со ссылкой?

Как PHP отслеживает созданные объекты?

Это может быть немного глупого вопроса, но я не пришел из ООП-фона, и хотя я читаю и изучаю, поскольку я иду, я все еще боюсь с несколькими понятиями.

Сейчас я работаю с PHP 5.3 и прошу простую регистрацию с помощью нескольких классов объектов: User, который определяет пользователя. Session, который запускает и поддерживает данные сеанса, и если кто-то вошел в систему, и Database, которая выполняет запросы.

Поэтому, когда мой скрипт запущен, мой объект сеанса создается, и т. Д. Вот моя проблема. Когда я перехожу с одной страницы на другую, как отслеживается этот объект? Или, может быть, мой вопрос в том, как PHP знает объекты, связанные с моим входом, мои, а не кто-то еще, кто заходил на сайт?

Я знаю, что если я делаю это без OOP-метода, я просто проверю файл cookie сеанса на каждой странице и проверю свои данные таким образом, что прекрасно, мой мозг может справиться с этим. Но где и как отслеживаются данные объекта.

EG: На каждой странице я хочу проверить, не зарегистрирован ли кто-либо. Я ссылаюсь на $ session-> is_logged_in () и т. Д. Is_logged_in проверяет, что имя частной переменной является истинным или ложным. В этот момент нет проверки файлов cookie, что означает, что этот объект все еще существует, и, поскольку он продолжает запрашивать сохраненную переменную, экземпляр должен сохраняться, чтобы быть полезным … но как PHP, сервер, независимо от того, связан ли этот экземпляр с этим объектом к этому пользователю? Если все эти объекты будут плавать на сервере, пока я их не уничтожу, не будет ли много памяти, используемой объектами?

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

Данные сеанса (то есть все данные в $ _SESSION) по умолчанию сериализуются и сохраняются в файле между запросами. При вызове session_start () данные автоматически не инициализируются.

Из руководства PHP по обработке сеансов (акцент мой):

Поддержка сеанса позволяет регистрировать произвольное количество переменных, которые должны сохраняться в разных запросах. Когда посетитель обращается к вашему сайту, PHP будет проверять автоматически (если для параметра session.auto_start установлено значение 1) или вашего запроса (явно через session_start () или неявно через session_register ()), был ли отправлен конкретный идентификатор сеанса с запросом. Если это так, предыдущая сохраненная среда воссоздается .

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

Поэтому, когда мой скрипт запущен, мой объект сеанса создается, и т. Д. Вот моя проблема. Когда я перехожу с одной страницы на другую, как отслеживается этот объект? Или, может быть, мой вопрос в том, как PHP знает объекты, связанные с моим входом, мои, а не кто-то еще, кто заходил на сайт?

Когда вы начинаете сеанс, генерируется идентификатор. Все данные сеанса связаны с этим идентификатором, и он предоставляется браузеру для хранения в файле cookie. Последующие запросы включают этот id в файл cookie, а PHP вытаскивает данные из того места, где он хранит его .

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

Объекты сериализуются в файлы, а не хранятся в ОЗУ, и очищаются с истечением сеанса.

Я нахожу, что иногда, когда я начинаю терять представление о том, что происходит на самом деле, быстро перейти на страницу с phpinfo(); , или просто регистрация некоторых переменных ENV часто очищает вещи и возвращает меня обратно …

Globals позволит вам точно увидеть, что «существует» в вашей среде, и позволить вам мысленно пополнить то, что вы «работаете», и как лучше всего напасть на вызов. Вы найдете массу информации и что касается ваших конкретных «проблем», есть такие записи, как …

$_SERVER["HTTP_COOKIE"]
$_SERVER["QUERY_STRING"]
$_SERVER["argv | c"]
$include_path

и т.д…

Кроме того, никогда не помешает прочитать ваш /etc/php.ini (где бы это ни было) для небольшого количества раз в один раз с внутренними /etc/php.ini PHP, чтобы напомнить вам «что это такое».