【问题标题】:Is it possible to make variables global from inside a function in PHP?是否可以从 PHP 中的函数内部使变量成为全局变量?
【发布时间】:2014-08-21 22:20:23
【问题描述】:

我正在尝试创建一个返回某个用户的 id 号的函数,但是当我调用该函数时,我无法访问我在函数中声明的变量。

function loadlink($users){

    global $database, $rowz, $results;
    $results = $database->query("SELECT * FROM users WHERE username = '{$users}'");
    $rowz = $results->fetch_all(MYSQLI_ASSOC);
    var_dump( $rowz); //returns basic array info
}

var_dump( $rowz); //returns "NULL"
loadlink('RandomUser');

var_dump($rowz);如果我首先调用 loadlink() 则返回数组信息,但问题是我想在调用 loadlink() 时使用 $rowz 变量来访问返回的关联数组的属性,但它不返回任何内容。

【问题讨论】:

  • 您的示例未反映您的要求。您在 loadlink() 中没有任何地方尝试访问 $rowz ,因此使其可访问是没有意义的。你可以让 loadlink() 返回 $rowz,但这似乎不是你想要的
  • 目标是调用loadlink并传入$rowz,像这样:loadlink($rowz['username']);

标签: php mysql scope


【解决方案1】:

你应该真正从你的函数返回你需要它返回的东西,而不是使用全局变量。

但是,可以使用$GLOBALS 数组,尽管您需要先调用您的函数,然后才能访问您在其中设置的变量:

function loadlink($users){
    global $database;

    $GLOBALS['results'] = $database->query("SELECT * FROM users WHERE username = '{$users}'");
    $GLOBALS['rowz'] = $results->fetch_all(MYSQLI_ASSOC);
}

// run function first to initialize the necessary variables
loadlink('RandomUser');
var_dump($rowz); //returns basic array info

【讨论】:

  • 由于某种原因,我仍然得到 NULL loadlink('RandomUser'); var_dump($GLOBALS['rowz']['username']); 我认为这不适用于我正在尝试做的事情。我希望 loadlink() 函数返回作为参数传递的用户名的 id。也许我需要2个功能?如果使用全局变量不好,我应该怎么做?仅在 $rowz 上使用return 我猜可能会以某种方式工作,但我不确定如何使用查询和 $users 参数将 loadlink() 拆分为 2 个函数
  • @MangoGarden 你把它需要的东西传递给函数,然后让它返回你想要的东西。关于您的NULL 值,您使用的是fetch_all(),因此您获得了一个多维数组,因此您需要var_dump($GLOBALS['rowz'][0]['username']);
  • 哦,我明白了。如果使用 globals 数组是不好的做法,我应该如何将此函数拆分为 2 以便我可以使用 return
  • 或者我应该为此提出一个新问题
  • @MangoGarden 我想是的,只是通过 cmets 并不清楚你想做什么 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 2015-06-25
  • 1970-01-01
  • 2023-01-05
  • 2022-08-02
  • 1970-01-01
  • 2011-10-28
相关资源
最近更新 更多