我的方法的签名如下所示:
public function ProgramRuleFilter(&$program, $today=null) {
当我这样调用它时,
$programs = array_filter($programs, array($this,'ProgramRuleFilter'));
一切都按预期工作。该ProgramRuleFilter
方法更新$program
数组,然后如果成功过滤则返回真/假$programs
。
但是,现在我想向过滤器传递一个额外的参数,$today
. 我怎样才能做到这一点?
我试图像这样调用它:
$programs = array_filter($programs, new CallbackArgs(array($this,'ProgramRuleFilter'),$today));
使用这个小类作为包装器:
class CallbackArgs {
private $callback;
private $args;
function __construct() {
$args = func_get_args();
$this->callback = array_shift($args);
$this->args = $args;
}
function __invoke(&$arg) {
return call_user_func_array($this->callback, array_merge(array($arg),$this->args));
}
}
但是程序没有被更新,所以在某处它丢失了对原始对象的引用。我不知道如何解决这个问题。