如何将参数发送到PHP中的比较函数?

Par*_*gon 2 php compare class yii

首先,我使用Yii框架完全使用PHP,尽管Yii最终与这个问题没什么关系.

我有一个类,在其中我有一个名为$ data的数组.我想过滤掉与我发送给类的参数不匹配的数组中的某些元素(我将在下面添加一些语法给你一个更好的主意).因此我使用array_filter,它需要一个输入作为比较函数(即,对于特定元素返回true或false的函数.任何导致返回'false'的函数都将从数组中删除).

问题是因为输入的函数是在引号中输入的,所以我没有看到在实际类中使用比较函数的方法.但是当函数在类之外时,我无法调用我需要的实例变量.所以我真正需要的是能够以某种方式在类之外调用实例变量,将实例变量作为参数发送到函数,或以某种方式将比较函数保留在类中.

有什么想法吗?我提到的类是Yii中的一个小部件.下面是对该小部件的调用(不是那么重要).相关参数是'params'.

$this->widget('application.widgets.CListViewParam', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
    'params'=>array('receiverId'=>Yii::app()->user->userId),
));
Run Code Online (Sandbox Code Playgroud)

在窗口小部件的类中有一个实例变量来保存参数:

public $params = array();
Run Code Online (Sandbox Code Playgroud)

然后调用array_filter和比较函数:

$data = array_filter($data, "filterData");
Run Code Online (Sandbox Code Playgroud)

实际比较功能并不重要,但下面是骨架.请记住,它不在课堂上.

function filterData($item) {
    // unable to access $this->params inside of this function!
}
Run Code Online (Sandbox Code Playgroud)

net*_*der 7

如果它在类之外并且无法访问$this->params,那么为什么不将它放在类中:

class MyClass {

    public $params;

    public function widget() {
        // ...
        $filtered = array_filter($array, array($this, 'filterData'));
    }

    private function filterData($item) {
       // $this->params is now accessible
    }

}
Run Code Online (Sandbox Code Playgroud)