【问题标题】:Can't access global PHP array variable无法访问全局 PHP 数组变量
【发布时间】:2012-03-06 02:54:10
【问题描述】:

在 Drupal 模块回调函数中,有一个简单的自定义函数接收一个数组。

当我在 Drupal 模块回调函数中定义输入数组时,自定义函数正确执行。但是,当我在根级别(全局)定义输入数组时,Drupal 模块回调函数中的自定义函数失败。

作为测试,我让自定义函数简单地将输入数组的内容输出为字符串。第一种方法输出正确,而第二种方法没有任何输出。理想情况下,我想在全局级别定义数组,以便其他函数可以使用它。

想法?

<?php

// ** Placement of array for method 2
$mapping = array(
    0 => "name",
    1 => "match"
);

function mymodule_menu() {
    $items = array();

    $items['mymodule'] = array(
        'title' => 'MyModule',
        'page callback' => 'myModule_main',
        'access callback' => TRUE,
        'type' => MENU_NORMAL_ITEM
    );

    return $items;
}

function myModule_main() {

    // ** Placement of array for method 1
    $mapping = array(
        0 => "name",
        1 => "match"
    );

    $output = myFunction($mapping);

    echo $output; // ** Returned to client side via AJAX
}

【问题讨论】:

标签: php drupal-6 global-variables


【解决方案1】:
<?php

global $foobar;
$foobar = "text";

function myFunction() {
    echo $GLOBALS["foobar"]; // Returns "text"
}

?>

【讨论】:

    【解决方案2】:

    您需要使用global 关键字将全局变量“导入”到函数的作用域中。

    http://php.net/manual/en/language.variables.scope.php#language.variables.scope.global

    function myModule_main() {
        global $mapping;
        ...
    }
    

    【讨论】:

    • 或者使用 $GLOBALS['mapping'] 代替。该方法不会将变量导入当前作用域,直接使用即可。如果您不会多次使用该变量,那就太好了。
    • @DiegoAgulló 感谢您为我指出正确的方向。实际的工作解决方案是您的两种回答的组合。我已按问题更新以包含解决方案(因为目前我没有足够的代表来自我回答我的问题)。
    • 很高兴听到这个消息!不过,它可以改进。您是否尝试避免在这种情况下使用global?删除它是安全的,因为变量已经在全局范围内创建。
    • @DiegoAgulló 不幸的是,这对我不起作用。为了检测到我的数组,我需要在根级别将其定义为全局。然后,我可以使用 GLOBALS 在函数中访问它。
    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多