全局PHP帮助

时间:2009-11-18 04:00:44

标签: php globals

我正在尝试在仅用于发布数据的文件中使用全局。全局未在该页面上注册。如何在该页面中访问全局变量。

编辑也许我不太清楚所以让我清楚一点。我有这些文件

的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。

5 个答案:

答案 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

http://www.php.net/manual/en/book.session.php

答案 2 :(得分:1)

您必须记住,当用户提交表单并重定向到post.php时,index.php中的变量早已消失。与普通桌面应用程序不同,PHP执行是短暂的。

无论您在index.php中执行什么操作来获取$user对象,都必须在post.php中重复。如果您不想复制代码,只需将其放在某个文件init_user.php中,并让index.phppost.php包含使用include_once('init_user.php');的文件

答案 3 :(得分:0)

如果你需要一个函数中的全局函数,你可以这样做

function phpFoobarFunction(){
  global $my_global;
}

关于scoping

的参考资料 对于$_POST $_GET,{{1}}(等等),

可以在任何地方


从您更新的问题,您不能在两个不同的PHP调用之间共享变量。你会:

  • 通过从数据库(或您的来源)重新加载来重新创建您的$ user类
  • 在$ _SESSION
  • 中存储对象
  • 通过javascript传递用户对象(但这很危险,因为用户可以编辑它)并添加它有params到你的ajax调用。

有关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

希望这对你有所帮助。