【发布时间】:2011-06-12 00:08:24
【问题描述】:
首先,我使用 Yii 框架完全在 PHP 中工作,尽管 Yii 最终与这个问题无关。
我有一个类,在其中我有一个名为 $data 的数组。我想过滤掉数组中与我发送给类的参数不匹配的某些元素(我将在下面放置一些语法,让您有一个更好的想法)。因此,我使用array_filter,它需要它的一个输入是一个比较函数(即,一个为特定元素返回真或假的函数。任何导致返回“假”的东西都会从数组中删除)。
问题是因为输入的函数是在引号中输入的,所以我看不到在实际类中具有比较函数的方法。但是当函数在类之外时,我无法调用我需要的实例变量。所以我真正需要的是能够以某种方式调用类的实例变量outside,将实例变量作为参数发送给函数,或者以某种方式将比较函数保留在类中。
对此有什么想法吗?我提到的类是 Yii 中的一个小部件。下面是对该小部件的调用(不是那么重要)。相关参数是'params'。
$this->widget('application.widgets.CListViewParam', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'params'=>array('receiverId'=>Yii::app()->user->userId),
));
widget中的类中有一个实例变量来保存参数:
public $params = array();
然后是调用array_filter和比较函数:
$data = array_filter($data, "filterData");
实际的比较函数并不重要,但下面是骨架。请记住,它在课堂之外。
function filterData($item) {
// unable to access $this->params inside of this function!
}
【问题讨论】:
-
你在课堂上考虑过
static方法吗?