2014-09-10 78 views
3

我在WordPress中運行查詢,需要在腳本中稍後重新使用$my_query_results變量。如何拓寬變量PHP的範圍?

function init() { 

    $args = array(
     'post_type' => 'post' 
    ); 
    $my_query_results = new WP_Query($args); 
} 

-

function process() { 
    // I need to process $my_query_results here. 
} 
add_action('wp_ajax_myaction', 'process'); 

我不想重新運行裏面process()查詢。我如何使$my_query_results可用於process()函數?

背景信息:process()函數處理通過AJAX請求發送的數據。處理完成後,它會向瀏覽器發送響應。例如:echo json_encode($response)

回答

5

如果這些功能都出現在同一類,你可以把它分配給類屬性:

class Class 
{ 
    public $my_query_results; 

    function init(){ 
     $args = array(
      'post_type' => 'post' 
     ); 
     $this->my_query_results = new WP_Query($args); 
    } 
    function process() { 
     // access $this->my_query_results 
    } 
} 
+0

如果他們都沒有? – putvande 2014-09-10 12:11:47

+1

將process()函數移動到其他類或實例化init()存在於存在process()的類中的類(不建議) – 2014-09-10 12:12:57

+1

重新運行查詢會更好... – 2014-09-10 12:14:29

-3

,或者你可以簡單地做全局變量:

$my_query_results = null; 
function init() { 

$args = array(
    'post_type' => 'post' 
); 
$my_query_results = new WP_Query($args); 

}

+0

Globals是邪惡的! – 2014-09-10 12:15:33

+0

這不是一個'好的做法',但會做這項工作 – 2014-09-10 12:16:28

+0

出於興趣,爲什麼globals不好做法? – henrywright 2014-09-10 12:31:40

1

你可以通過變量作爲參數

function init(&$my_query_results) { 

    $args = array(
     'post_type' => 'post' 
    ); 
    $my_query_results = new WP_Query($args); 
} 

function process(&$my_query_results) { 
    // I need to process $my_query_results here. 
} 

使用

init($my_query_results); 
process($my_query_results); 
+0

或從init()返回它。但由於這個函數的名稱,我懷疑是否適合返回它或將它作爲參數傳遞。 – 2014-09-10 12:16:48