Здравствуйте! Подскажите пожалуйста правильный синтаксис Задача: Есть класс, в котором рекурсивно обрабатываются элементы массива, переданного аргументом в публичную функцию. Для рекурсии используется функция PHP array_walk_recursive ( array &input, callback funcname [, mixed userdata] ) во втором параметре которой нужно передать НАЗВАНИЕ приватной функции класса. Вопрос: Как синтаксически правильно передать название ? Если передать "_recursion" то выдается ошибка об отсутствии функции, т.к. внутри класса обращение к членам класса через $this Заранее благодарен всем откликнувшимся! Код : class ABC { function checkdata($val) { array_walk_recursive($val, '_recursion'); } private function _recursion(&$val, $key) { ... } }
Код (PHP): <?php header('Content-Type: text/html; charset=utf-8'); class TestClass { public function walkFunc($item, $key){ echo "key:",$key," item:",$item,'<br/>'; } public function checkdata($val){ array_walk_recursive($val, array(&$this, 'walkFunc')); } public $testArr=array(); public function checkdata2(){ array_walk_recursive($this->testArr, array(&$this, 'walkFunc')); } } $obj = new TestClass(); $testArr=array("2", "3", "1", array("22","23","21"));//наш подопытный массив //1 - тестовая функция "walkFunc" в классе, но вызыается извне array_walk_recursive($testArr, array(&$obj, 'walkFunc')); echo '<hr/>'; //2 - тестовая фукнция вызывается из класса, данные извне $obj->checkdata($testArr); echo '<hr/>'; //3 - тестовая фукнция вызывается из класса, данные из класса $obj->testArr = $testArr; $obj->checkdata2(); echo '<p>Описание функции и пользовательские примеры [url="http://php.net/manual/function.array-walk-recursive.php"]array-walk-recursive[/url]</p>';
YSandro, спасибо большое за совет! Все работает! Если не затруднит напишите пару строк пожалуйста, о механизму реализации передачи имени функции через массив. Я что-то не понял... Индексированный массив. В первом элементе ссылка на объект класса, во втором - строка "имя функции". А каким образом элементы массива ( $this и строка ) увязываются между собой не могу понять... Не дайте остаться неучем пожалуйста. Очень хочу разобраться Спасибо!
Пардон, ссылка на описание функции была не верная, в конце нужно php, а не html. Исправил. На форуме кто-то пытался применить ИИ, но включили не на полную мощность, видимо. Ссылки переименовываются на местный домен. Индексированный? Ну, видимо, специально для работы внутри объектов есть второй вариант синтаксиса, в котором указывается сначала контекст, а потом уже имя функции. array_walk_recursive($массив, 'имя_функции') - простой вариант, array_walk_recursive($массив, array($контекст, 'имя_функции')) - для работы в контейнере. Вы могли сделать точно такой же вывод.