Установка функции обратного вызова в array_map с ошибкой

class Test
{
public $callback = "sqrt";

public function cube($n)
{
return($n * $n * $n);
}

public function cool()
{
$a = array(1, 2, 3, 4, 5);
$b = array_map( $this->callback , $a);
var_dump($b);
}
}

$t = new Test();
$t->cool();

В этом коде, если $Перезвоните настроен на что-то вроде intval или же SQRT тогда это будет работать нормально, но когда я пытаюсь использовать куб Метод в качестве функции обратного вызова дает следующую ошибку. Почему так
и как вызвать метод куб от прохладно метод в качестве обратного вызова

введите описание изображения здесь

0

Решение

Попробуй это:

$b = array_map( array($this, $this->callback) , $a);

Выход:

array
0 => int 1
1 => int 8
2 => int 27
3 => int 64
4 => int 125

Если это статический метод:

$b = array_map( "Test::staticMethodName" , $a);

ОБНОВИТЬ:

Хорошо, проблема в том, что когда вы передаете этот параметр array_map, это разбирается, что в свойстве вашего класса называется callback, Есть строковое значение: cube, У вас нет глобальных cube функция. intval а также sqrt являются глобальными функциями, поэтому они будут работать. Так что вам нужно пройти, как говорится в документах PHP: A method of an instantiated object is passed as an array containing an object at index 0 and the method name at index 1.

Вот почему мой пример работает, потому что у вас есть экземпляр метода $thisи имя метода в $this->callback,

И для статических методов:

Static class methods can also be passed without instantiating an object of that class by passing the class name instead of an object at index 0. As of PHP 5.2.3, it is also possible to pass 'ClassName::methodName'.

1

Другие решения

В PHP вы можете использовать массив, чтобы связать объект и вызов метода как вызываемый

array_map(array($this, $this->callback), $array);

http://php.net/manual/en/language.types.callable.php

2

Попробуй это

$b = array_map(array($this, 'cube'), $a);

вместо

$b = array_map( $this->callback , $a);
0