我试图在第二个函数中使用第一个函数的参数作为变量,这是我到目前为止工作的方式,但我怀疑这是好方法。请注意,第二个函数(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。
另外,我不明白为什么我需要在第一个函数中将$ theTime置于全局...这个变量在函数外部不存在,因此它不使用函数外的任何变量。如果我不把它全球化,它就行不通。但我确实理解,在第二个函数中我需要把它全局化。
答案 0 :(得分:0)
我建议不要在php中的函数中放置函数。
我的部分原因是:http://www.php.net/manual/en/language.functions.php#16814
因此,从该帖子开始,理论上可以从外部函数外部调用函数内部。
如果单独调用内部函数,它将不知道变量“$ time”,并导致许多问题。我建议不要在另一个函数内部定义函数,并在函数之外定义全局变量,如果可能的话。至于为什么你不能将$ time变量作为参数传递给你的其他函数,我也很困惑。
答案 1 :(得分:0)
根据add_filter如何设置对函数的调用,您可以使用闭包并避免混乱全局空间。
function filtrerDuree($time) {
add_filter( 'posts_where', function($where) use ($time){
return $where .= " AND post_date > '" . date('Y-m-d', strtotime('-'.$time.' days'))."'";
});
}