私のメソッドの署名は次のようになります。
public function ProgramRuleFilter(&$program, $today=null) {
このように呼び出すと、
$programs = array_filter($programs, array($this,'ProgramRuleFilter'));
すべてが期待どおりに機能します。このProgramRuleFilter
メソッドは配列を更新し、$program
正常にフィルタリングされた場合は true/false を返します$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));
}
}
しかし、プログラムは更新されていないため、どこかで元のオブジェクトへの参照が失われています。これを修正する方法がわかりません。