我正在尝试在仅用于发布数据的文件中使用全局。全局未在该页面上注册。如何在该页面中访问全局变量。
编辑也许我不太清楚所以让我清楚一点。我有这些文件的index.php
global $user;
echo $user->uid;
post.php中
global $user;
echo $user->uid;
现在来自index.php我通过jquery发布到post.php。但是,当我从post.php回显$ user-> uid时,它不会回显但是当我从index.php回显它时它会显示它。如何从post.php获取$ user-> uid。
答案 0 :(得分:2)
从全局范围访问变量的另一种方法是使用特殊的PHP定义的$ GLOBALS数组。
来自php.net
的示例<?php
$a = 1;
$b = 2;
function Sum() {
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}
Sum();
echo $b;
?>
答案 1 :(得分:1)
我认为你应该研究会话而不是全局。从听起来,您在一个页面上注册变量,然后当用户移动到另一个页面时,您希望该变量可用。
会话会让你这样做。只需使用此代码:
<?php
session_start();
$_SESSION['my_var'] = 'foo';
在随后的页面上......
<?php
session_start();
echo $_SESSION['my_var'];
将输出foo
。
答案 2 :(得分:1)
您必须记住,当用户提交表单并重定向到post.php
时,index.php
中的变量早已消失。与普通桌面应用程序不同,PHP执行是短暂的。
无论您在index.php
中执行什么操作来获取$user
对象,都必须在post.php
中重复。如果您不想复制代码,只需将其放在某个文件init_user.php
中,并让index.php
和post.php
包含使用include_once('init_user.php');
的文件
答案 3 :(得分:0)
如果你需要一个函数中的全局函数,你可以这样做
function phpFoobarFunction(){
global $my_global;
}
关于scoping
的参考资料 对于$_POST
$_GET
,{{1}}(等等),可以在任何地方。
从您更新的问题,您不能在两个不同的PHP调用之间共享变量。你会:
有关PHP如何使用会话superglobals
的更多参考答案 4 :(得分:0)
我同意mattbasta,因为安全原因,全局禁用了。无论如何你都可以使用它,但正确的方法是使用session。
其他的事情是,你说:“现在从index.php我通过jquery发布到post.php。” 你在使用一些Ajax调用吗?如果不是我不明白为什么使用JS来做这个...如果你通过Ajax发送数据并且只想发送这个参数,试试这个:
<input style="display:none" type="hidden" id="uid" name="uid" value="<?= $user->uid ?>" />
然后从你的ajax调用处理它,如:
$.ajax({
type: "POST",
url: "/post.php",
data: "uid=" + uid + "&otherVar=" + otherVar, //and so on..
success: function() {
//Here you can notify the user that the script ran successfully
}
});//end of ajax
希望这对你有所帮助。