Подтвердить что ты не робот

Array_map не работает в классах

Я пытаюсь создать класс для обработки массивов, но я не могу заставить array_map() работать в нем.

<?php
//Create the test array
$array = array(1,2,3,4,5,6,7,8,9,10);
//create the test class
class test {
//variable to save array inside class
public $classarray;

//function to call array_map function with the given array
public function adding($data) {
    $this->classarray = array_map($this->dash(), $data);
}

// dash function to add a - to both sides of the number of the input array
public function dash($item) {
    $item2 = '-' . $item . '-';
    return $item2;
}

}
// dumps start array
var_dump($array);
//adds line
echo '<br />';
//creates class object
$test = new test();
//classes function adding
$test->adding($array);
// should output the array with values -1-,-2-,-3-,-4-... 
var_dump($test->classarray);

Вывод

array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=> int(9) [9]=> int(10) }

Warning: Missing argument 1 for test::dash(), called in D:\xampp\htdocs\trainingdvd\arraytesting.php on line 11 and defined in D:\xampp\htdocs\trainingdvd\arraytesting.php on line 15

Warning: array_map() expects parameter 1 to be a valid callback, function '--' not found or invalid function name in D:\xampp\htdocs\trainingdvd\arraytesting.php on line 11 NULL

Что я делаю неправильно или эта функция просто не работает внутри классов?

4b9b3361

Ответ 1

Вы указываете dash как обратный вызов неверным способом.

Это не работает:

$this->classarray = array_map($this->dash(), $data);

Это делает:

$this->classarray = array_map(array($this, 'dash'), $data);

Читайте о различных формах, которые обратный вызов может принимать здесь.

Ответ 2

Здравствуйте, Вы можете использовать Как этот

    // Static outside of class context
array_map( array( 'ClassName', 'methodName' ), $array );

// Static inside class context
array_map( array( __CLASS__, 'methodName' ), $array );

// Non-static outside of object context
array_map( array( $object, 'methodName' ), $array );

// Non-static inside of object context
array_map( array( $this, 'methodName' ), $array );

Ответ 3

array_map($this->dash(), $data) вызывает $this->dash() с аргументами 0 и использует возвращаемое значение как функцию обратного вызова для каждого члена массива. Вместо этого вы хотите array_map(array($this,'dash'), $data).

Ответ 4

Он должен читать

$this->classarray = array_map(array($this, 'dash'), $data);

array -thing - это обратный вызов PHP для метода экземпляра объекта. Обратные вызовы к регулярным функциям определяются как простые строки, содержащие имя функции ('functionName'), а вызовы статических методов определяются как array('ClassName, 'methodName') или как строка вроде этого: 'ClassName::methodName' (это работает с PHP 5.2.3).