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)
如果它在类之外并且无法访问$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)