0

我正在尝试将第一个函数的参数用作第二个函数中的变量,这就是我到目前为止的工作方式,但我怀疑这是个好方法。请注意,第二个函数 (clauseWhere) 不能有其他参数。

function filtrerDuree($time) {
    global $theTime;
    $theTime = $time;
    function clauseWhere($where = '') {
        global $theTime;
        return $where .= " AND post_date > '" . date('Y-m-d', strtotime('-' . $theTime. ' days')) . "'";
    }
    add_filter( 'posts_where', 'clauseWhere' );
}

我不能像这样在第二个函数中直接使用参数 $time:strtotime('-' . $time. ' days')),因为它无论如何都是第一个函数的本地函数。

将全局 $time 放在第二个函数中不起作用,即使我在第一个函数中做了 $time=$time 。

另外,我不明白为什么我需要在第一个函数中将 global 放在 $theTime 上......这个变量在函数之外不存在,所以它没有在函数之外使用任何变量。如果我不把它放在全球范围内,它就行不通。不过,我确实明白,在第二个函数中,我需要将其放在全局范围内。

4

2 回答 2

0

Depending on how add_filter sets up the call to your function you may be able to use a closure and avoid cluttering up global space.

function filtrerDuree($time) {
    add_filter( 'posts_where',  function($where) use ($time){
        return $where .= " AND post_date > '" . date('Y-m-d', strtotime('-'.$time.' days'))."'";
    });
}
于 2013-08-17T02:36:36.710 回答
0

我建议不要将函数放在 php 中的函数中。

关于我为什么的部分逻辑:http ://www.php.net/manual/en/language.functions.php#16814

因此,从那篇文章来看,理论上可以从外部函数外部调用内部函数。

如果单独调用内部函数,它不会知道变量“$time”,会导致很多问题。如果可能的话,我建议不要在另一个函数内部定义函数,并在函数外部定义全局变量。至于为什么不将 $time 变量作为参数传递给其他函数,我也很困惑。

于 2013-08-17T01:03:52.550 回答