Используйте массив, содержащий объект и имя метода:
$optionsArray['value'] = array_map(array($this, 'add_val'), array_chunk($drop_val, count($optionsArray['heading_x'])));
Вы делаете то же самое для большинства других функций, которые принимают обратные вызовы в качестве параметров, например array_walk()
, call_user_func()
, call_user_func_array()
и т. Д.
Как это работает? Что ж, если вы передаете массив в параметр обратного вызова, PHP делает что-то похожее на это (для array_map()
):
if (is_array($callback)) { // array($this, 'add_val')
if (is_object($callback[0])) {
$object = $callback[0]; // The object ($this)
$method = $callback[1]; // The object method name ('add_val')
foreach ($array as &$v) {
// This is how you call a variable object method in PHP
// You end up doing something like $this->add_val($v);
$v = $object->$method($v);
}
}
}
// ...
return $array;
Здесь вы можете видеть, что PHP просто перебирает ваш массив, вызывая метод для каждого значения. Ничего сложного в этом нет; опять просто базовый объектно-ориентированный код.
Это может быть, а может и не быть так, как это делает PHP внутри, но концептуально это то же самое.