Вызов функции из класса с помощью array_walk_recursive
Это упрощенная версия класса, который у меня есть в 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, используя цикл (я сохраню это как последнее средство)? Спасибо заранее!
Ответы
Ответ 1
для этой функции нужно статически ссылаться. Я успешно использовал этот код:
<?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));
Ответ 2
Ваши методы не определены как статические, поэтому я предполагаю, что вы создаете экземпляр. В этом случае вы можете пройти $this
:
public function edit_array($array) {
array_walk_recursive($array, array($this, 'edit_value'));
}
Ответ 3
Try:
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
}
}
NB: Я использовал __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
}
}
Ответ 4
Вы также можете сделать это inline..
array_walk_recursive($myArray, function (&$item){
$item = mb_convert_encoding($item, 'UTF-8');
});