2012-02-14 78 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" 
} 

?>