Вопросы о сфере применения PHP – с точки зрения Java-программиста

Я до сих пор довольно новичок в PHP, поэтому я пытаюсь понять концепции областей в веб-приложениях PHP.

В Java-мире веб-приложение Java с использованием страниц сервера Java (JSP) и выше – позволит Java-компоненту иметь следующие уровни охвата:

  • страница
  • Запрос
  • сессия
  • заявка

Попытка сопоставить их с возможностями определения PHP:

  • Страница: не действительно, но объекты, которые являются локальными для вызова, считаются «ушедшими» после вызова функции, поэтому это похоже на область страницы
  • Запрос: сделанный с помощью «$ _REQUEST super global (не уверен, где это происходит … Cookies? Скрытые поля? Параметры URL?)
  • Сессия: использование супершагинга $ _SESSION PHP (где в некоторых документах и ​​отзывах форума говорится, что это не отличное место для размещения конфиденциальной информации по соображениям безопасности)
  • Приложение: с использованием PHP APC (ссылка переполнения стека)

Неужели я полностью ужинаю или эти похожие? Я знаю, что одним из основных отличий является архитектура PHP [«Shared Nothing»] [5] по сравнению с Java, которая должна обеспечивать совместное использование.

Любые советы / рекомендации / трезвые исправления наиболее приветствуются.

Ты на правильном пути. PHP действительно разделяет-ничего.

В веб-контексте приложение php запускается в полном объеме один раз для каждого HTTP-запроса. Это означает, что для каждого HTTP-запроса интерпретатор читает, анализирует и исполняет скрипт (это упрощается – использование кеша кода операции, такого как APC, удаляет служебные данные чтения / разбора).

PHP передает вход в скрипт в виде суперглобалов , таких как $ _REQUEST и $ _SESSION. Суперглобалы отличаются от обычных глобальных переменных тем, что они автоматически доступны в каждой области, поэтому нет необходимости использовать global ключевое слово.

Любые данные, которые сохраняются между запросами, должны храниться извне. Чтобы обмениваться данными между запросами на сохранение состояния для пользователя, вы обычно используете $ _SESSION, который по умолчанию сериализуется и записывается в файлы на диске (но может быть настроен на использование кеша или базы данных). Данные, которые должны быть разделены между сеансами (которые, я полагаю, схожи с областью применения в мире JSP), должны быть спрятаны где-то снаружи. Вы можете использовать кеш памяти, такой как APC или memcache, или записывать плоские файлы на диск или вставлять файлы в базу данных или использовать любую другую схему, которую вы можете придумать. В конце дня нет ничего встроенного.

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

Чтобы ссылаться на глобальную переменную в неглобальной области (т. Е. Внутри функции), вам нужно импортировать символ в локальную область с помощью global ключевого слова. PHP работает таким образом, чтобы усложнить случайные глобальные переменные clobber.

Этот материал, и многое другое, очень хорошо освещен в руководстве .

Вероятно, вам стоит взглянуть на это:

http://php.net/manual/en/language.variables.scope.php

У вас есть локальная и глобальная область действия, суперглобалы, статические переменные. И эта страница объясняет, как они работают.