2012-02-14 37 views
-1

在Drupal模块回调函数中,有一个简单的自定义函数用于获取数组。无法访问全局PHP数组变量

当我在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 
} 
+0

怎么样展示你的代码? – Vyktor 2012-02-14 18:13:00

+0

请发布回调代码。 – 2012-02-14 18:13:35

+0

请添加一些示例代码,以便我们可以确切地看到你在做什么。 – Arjan 2012-02-14 18:13:53

回答

5

你需要“进口”的全局变量到使用global关键字功能的范围。

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

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

或者使用$ GLOBALS ['mapping']而不是。此方法不会将变量导入当前范围,只是直接使用它。这很好,如果你不会多次使用这个变量。 – 2012-02-14 18:26:59

+0

@DiegoAgulló谢谢你指点我正确的方向球员。实际的工作解决方案是您的答案的组合。我已经更新了问题以包含解决方案(因为我目前没有足够的代表来自我回答我的问题)。 – kaspnord 2012-02-14 18:46:56

+0

很高兴听到!不过,它可以改进。你有没有试图避免在这种情况下使用'global'?可以安全地删除它,因为变量已经在全局范围内创建。 – 2012-02-14 21:14:02

1
<?php 

global $foobar; 
$foobar = "text"; 

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

?>