Область переменных PHP между блоками кода

Я новичок в PHP (по-прежнему) и продолжаю учиться.

Мне часто приходится извлекать определенную переменную и получать доступ к ее свойствам.

<?php $id = $_REQUEST['id']; $user_info = get_userdata($id); echo('Username: ' . $user_info->user_login . "<br>"); echo('User level: ' . $user_info->user_level . "<br>"); echo('User ID: ' . $user_info->ID . "<br>"); echo('First Name: ' . $user_info->user_firstname . "<br>"); echo('Family Name: ' . $user_info->user_lastname . "<br>"); echo('user_registered: ' . $user_info->user_registered . "<br>"); ?> 

Я бы предпочел однажды получить $user_info = get_userdata($id); а затем использовать его при необходимости в том же файле, но в разных блоках <?php?>

 <?php $id = $_REQUEST['id']; $user_info = get_userdata($id); ?> <some HTML> <?php echo $user_info->user_login; ?> <some HTML> <?php echo $user_info->user_login; ?> 

Но я подозреваю, что $user_info не может быть разделен между блоками, потому что он не является глобальным. Для чего это обычная практика?

Вы вкладываете слишком много смысла в блоки кода php.
Это не что-то глобальное.
Эти блоки принадлежат одному сценарию PHP. Это просто аккуратный способ вывода HTML, не более того. Вы можете заменить его эхом на HTML, и не будет никакой малейшей разницы.

Весь скрипт PHP выполняется сразу, а не в итерациях, поскольку вы, вероятно, видите это, думая, что блоки PHP выполняются на стороне сервера, затем HTML блокирует клиентскую сторону, а затем возвращается к блокам PHP на стороне сервера и так далее на. Это неверно.
Весь скрипт PHP выполняется на стороне сервера, в результате чего получается чистый HTML-код в браузере.

Вот почему вы не можете запрограммировать как HTML-форму, так и ее обработчик в том же PHP-скрипте, просто разместив последнюю сразу после первого. Вам нужно будет сделать еще один звонок на сервер, чтобы обработчик работал. Это будет еще один звонок полностью, другой экземпляр того же скрипта, в то время как предыдущий уже давно мертв – это еще одна вещь, которую вы должны знать о PHP:

Выполнение скрипта PHP является атомарным. Это не похоже на постоянное использование настольного приложения в вашем браузере или даже демона с постоянным подключением к вашему настольному приложению. Это больше похоже на утилиту командной строки – выполнение ее работы и завершение работы. Он работает дискретно:

  1. браузер делает звонок
  2. PHP просыпается, создает HTML-страницу, отправляет ее в браузер и умирает
  3. Браузер отображает этот HTML-код и показывает его пользователю.
  4. Пользователь нажимает на ссылку
  5. браузер делает звонок
  6. другой экземпляр PHP, ничего не зная о предыдущем вызове, просыпается и т. д.

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

 $user_info ....... //declared outside function foo(){ global $user_info // now available here too // more code } 

Вы можете больше узнать о области переменных PHP в официальных документах 🙂

Даже если $user_info не объявляется global , его можно использовать в нескольких PHP-блоках: то, что вы опубликовали, должно работать 😉

Интересная справочная страница об этом заключается в следующем: область переменных ; цитирование :

По большей части все переменные PHP имеют только одну область.
В эту единую область охвата включены и требуемые файлы.

Если область охвата относится к другим файлам (но не к функциям в этих файлах!) , Она, вероятно, также относится к отдельным php-блокам в том же файле 😉

В принципе, у вас есть:

  • Одна глобальная область: вне всех функций (и переменных, объявленных как глобальные, внутренние функции)
  • Один объект для каждой функции.

Вы в первой ситуации, с вашими примерами.