Передача метода объекта array_map()
class theClass{
function doSomeWork($var){
return ($var + 2);
}
public $func = "doSomeWork";
function theFunc($min, $max){
return (array_map(WHAT_TO_WRITE_HERE, range($min, $max)));
}
}
$theClass = new theClass;
print_r(call_user_func_array(array($theClass, "theFunc"), array(1, 5)));
exit;
Может ли кто-нибудь сказать, что я могу написать в WHAT_TO_WRITE_HERE, так что функция doSomeWork получает проход как первый параметр array_map. и код работает правильно.
И выведите put как
Array
(
[0] => 3
[1] => 4
[2] => 5
[3] => 6
[4] => 7
)
Ответы
Ответ 1
Чтобы использовать методы объекта с помощью array_map()
, передайте массив, содержащий экземпляр объекта и имя метода. Для области с одинаковым объектом используйте $this
как обычно. Поскольку имя вашего метода определено в свойстве public $func
, вы можете пройти $this->func
. Это относится к большинству функций, которые принимают callback в качестве аргумента.
В качестве побочной заметки круглые скобки вне array_map()
не нужны.
return array_map(array($this, $this->func), range($min, $max));
Ответ 2
В следующем коде представлен массив писем из массива $users
, который содержит экземпляры класса с методом getEmail
:
if(count($users) < 1) {
return $users; // empty array
}
return array_map(array($users[0], "getEmail"), $users);