Я новичок в 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 является атомарным. Это не похоже на постоянное использование настольного приложения в вашем браузере или даже демона с постоянным подключением к вашему настольному приложению. Это больше похоже на утилиту командной строки – выполнение ее работы и завершение работы. Он работает дискретно:
Вы можете использовать его в блоках ( циклы, если инструкции ), но вы не можете использовать его внутри функций . Чтобы он работал внутри функций, вам нужно будет использовать global
ключевое слово:
$user_info ....... //declared outside function foo(){ global $user_info // now available here too // more code }
Вы можете больше узнать о области переменных PHP в официальных документах 🙂
Даже если $user_info
не объявляется global
, его можно использовать в нескольких PHP-блоках: то, что вы опубликовали, должно работать 😉
Интересная справочная страница об этом заключается в следующем: область переменных ; цитирование :
По большей части все переменные PHP имеют только одну область.
В эту единую область охвата включены и требуемые файлы.
Если область охвата относится к другим файлам (но не к функциям в этих файлах!) , Она, вероятно, также относится к отдельным php-блокам в том же файле 😉
В принципе, у вас есть:
Вы в первой ситуации, с вашими примерами.