php Передача дополнительных параметров в фукцию обратного вызова (callback, function use). Нестатические методы
Primary tabs
Проблема
Предположим, что вы не можете поменять элементы, которые должен ожидать обработчик на входе, а вам нужно передать внутрь дополнительный параметр.
Решение
Чтобы решить эту проблему:
- Сделайте обработчик анонимной функцией
- Используйте конструкцию function... use чтобы неявно передать функции переменные из текущей области видимости.
то есть, используйте вместо:
function myfunction($standartVal1, $standartVal2) { $taxonomyName = 'addValue!'; // переменная жестко задана внутри функции echo $taxonomyName; }; add_filter('filterName', 'myfunction');
подход:
$taxonomyName = 'external addValue!'; $myfunction = function($standartVal1, $standartVal2) use ($taxonomyName) { echo $taxonomyName; // теперь динамически определяется снаружи }; add_filter('filterName', $myfunction);
-- такое решение позволяет использовать в качестве обработчиков (колбеков) "нестатические" состояния, завязанные на конкретный объект, ведь ни что не мешает завернуть последний код в нестатический метод класса:
public function setTaxonomyNameHandler($taxonomyName) { $myfunction = function($standartVal1, $standartVal2) use ($taxonomyName) { echo $taxonomyName; // теперь динамически определяется снаружи }; add_filter('filterName', 'myfunction'); }
Спасибо за подсказку @math2
- Log in to post comments
- 1806 reads