Вызов функции из класса с помощью array_walk_recursive - PullRequest
15 голосов
/ 20 апреля 2011

Это упрощенная версия класса, которая у меня есть в php:

class someClass {
   public function edit_array($array) {
      array_walk_recursive($array, 'edit_value');
   }
   public function edit_value(&$value) {
      //edit the value 
   }
}

Теперь отправка имени функции из класса в array_walk_recursive, очевидно, не работает.Однако есть ли обходной путь, отличный от воссоздания array_walk_recursive с использованием цикла (я сохраню это как последнее средство)?Заранее спасибо!

Ответы [ 4 ]

23 голосов
/ 20 апреля 2011

Ваши методы не определены как статические, поэтому я предполагаю, что вы создаете экземпляр. В этом случае вы можете передать $this:

public function edit_array($array) {
    array_walk_recursive($array, array($this, 'edit_value'));
}
20 голосов
/ 20 апреля 2011

на функцию нужно ссылаться статически.Я успешно использовал этот код:

<?php

class someClass {
   public function edit_array($array) {
      array_walk_recursive($array, 'someClass::edit_value');
   }
   public static function edit_value(&$value) {
      echo $value; 
   }
}

$obj = new SomeClass();

$obj->edit_array(array(1,2,3,4,5,6,7));
7 голосов
/ 20 апреля 2011

Попробуйте:

class someClass {
   static public function edit_array($array) {
      array_walk_recursive($array, array(__CLASS__,'edit_value'));
   }
   static public function edit_value(&$value) {
      //edit the value 
   }
}

Примечание: Я использовал __CLASS__, чтобы изменение имени класса не мешало выполнению.Вы могли бы также использовать "someClass".

Или в случае:

class someClass {
   public function edit_array($array) {
      array_walk_recursive($array, array($this,'edit_value'));
   }
   public function edit_value(&$value) {
      //edit the value 
   }
}
0 голосов
/ 01 мая 2015

Вы также можете сделать это встроенным ..

array_walk_recursive($myArray, function (&$item){
   $item = mb_convert_encoding($item, 'UTF-8');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...