我是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
,因为它不是全局的。
通常的做法是什么?
答案 0 :(得分:33)
你在php代码块中加入了太多含义 这不是全球性的 这些块属于同一个PHP脚本。它只是输出HTML的一种简洁方式,仅此而已。你可以用回显HTML代替它,并且没有丝毫差异。
整个PHP脚本正在执行,而不是在迭代中执行,因为您可能想到这一点,认为PHP块正在服务器端执行,然后HTML阻止客户端,然后返回到服务器上的PHP块一边等等。那是错的。
整个PHP脚本正在服务器端执行,在浏览器中生成纯HTML。
这就是为什么你不能在同一个PHP脚本中编写HTML表单及其处理程序,只需将后者放在第一个表单之后。您将不得不再次调用服务器以使处理程序工作。完全是另一个调用,同一个脚本的另一个实例,而前一个已经很久了 - 这是你必须要了解的关于PHP的另一件事:
PHP脚本执行是原子的。它不像是在浏览器中不断运行的桌面应用程序,甚至不是与桌面应用程序持久连接的守护程序。它更像是一个命令行实用程序 - 完成它的工作并退出。它分散运行:
答案 1 :(得分:6)
您可以在块中使用它( 循环,if语句 ),但您无法在 函数 。要使其在函数内部工作,您必须使用global
关键字:
$user_info ....... //declared outside
function foo(){
global $user_info // now available here too
// more code
}
You can read more about PHP variable scope on the official docs :)
答案 2 :(得分:6)
即使$user_info
未声明为global
,也可以在多个PHP块中使用:您发布的内容应该有效; - )
有趣的手册页就是这个:Variable scope; 引用:
大部分都是PHP变量 只有一个范围。
这 单范围跨度包括和 所需的文件。
如果范围跨越其他文件(但不是那些文件中的函数!),它也可能跨越同一文件中的不同php-blocks; - )
基本上,你有:
你处于第一种情况,你的例子。