2014-09-10 79 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