Для начала, я полностью работаю в PHP с использованием инфраструктуры Yii, хотя в конечном итоге Yii имеет мало общего с этим вопросом.
У меня есть класс, и внутри него есть массив с именем $ data. Я хочу отфильтровать некоторые элементы массива, которые не соответствуют параметрам, которые я отправляю в класс (ниже я приведу некоторый синтаксис, чтобы дать вам лучшее представление). Поэтому я использую array_filter, и он требует, чтобы один из его входов был функцией сравнения (т. Е. Тот, который возвращает true или false для определенного элемента. Любые, которые вызывают возвращение 'false', удаляются из массива). 1003 *
Проблема в том, что поскольку введенная функция вводится в кавычках, я не вижу способа использовать функцию сравнения внутри фактического класса. Но когда функция находится за пределами класса, я не могу вызвать нужную мне переменную экземпляра. Поэтому мне действительно нужно иметь возможность вызывать переменную экземпляра вне класса, посылать переменную экземпляра в функцию в качестве параметра или каким-либо образом сохранять функцию сравнения внутри класса.
Есть идеи по этому поводу? Класс, который я упомянул, является виджетом в Yii. Ниже приведен вызов этого виджета (не так важно). Соответствующим параметром является «params».
$this->widget('application.widgets.CListViewParam', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'params'=>array('receiverId'=>Yii::app()->user->userId),
));
В виджете есть переменная экземпляра класса для сохранения параметра:
public $params = array();
Затем вызывается array_filter и функция сравнения:
$data = array_filter($data, "filterData");
Фактическая функция сравнения не важна, но ниже находится скелет. Помните, что это вне класса.
function filterData($item) {
// unable to access $this->params inside of this function!
}