Пробовали ли вы использовать функции PHP, требующие указания кол-бек функции в качестве аргумента? Я часто пользуюсь preg_replace_callback().
Если функция вызывается внутри класса, то хотелось бы и callback разместить внутри этого же класса (объекта). О плюсах поговорим немного позже.
Как правильно объявить и вызвать такую функцию?
Предлагаю рассмотреть следующий пример PHP кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php //получение экземпляра некоего класса ABN $A = new ABN(); //работа с экземпляром echo $A->repl('9838jg4iojkikj9ky-3h-9'); //объявление класса class ABN { //хелпер private function _callback($m) { return '-'; } //единственный метод public function repl($s) { return preg_replace_callback('/[\d+]/ism', array($this, '_callback'), $s); } } |
Класс ABN объявляет публичный метод-функцию repl(), которая заменяет цифры в строке на символ «-». Для замены используется вызов хелпера — приватой функции этого же класса _callback(). Функция может быть объявлена и как public, это уже на ваш вкус.
Мне хотелось лишь обратить внимание на технику формирования аргумента в месте, где нужно указать CALLBACK функцию — это массив из двух элементов : ссылка на объект $this + имя функции.
1 |
preg_replace_callback('/[\d+]/ism', array($this, '_callback'), $s); |
Первым плюсом является сохранение чистоты пространства имен. Хелпер остаётся внутри своего класса, не создавая «бардака».
Если в хелпер требуется передать дополнительные параметры, то в случае с глобальной функцей-хелпером, необходимо будет объявлять вспомогательные глобальные переменные. А в случае хелпера внутри класса, вы сможете остаться в рамках контекста объекта, чтобы передать дополнительные данные в _callback функцию.