web-dev-qa-db-fra.com

array_map ne fonctionne pas dans les classes

J'essaie de créer une classe pour gérer les tableaux mais je n'arrive pas à faire fonctionner 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);

Cela sort

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

Qu'est-ce que je fais mal ou est-ce que cette fonction ne fonctionne tout simplement pas à l'intérieur des classes?

40
Justin

Vous spécifiez dash comme rappel dans le mauvais sens.

Cela ne fonctionne pas:

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

Cela fait:

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

Lisez les différentes formes qu'un rappel peut prendre ici .

121
Jon

Bonjour, vous pouvez utiliser comme celui-ci

    // 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 );
29
Vijaysinh Parmar

array_map($this->dash(), $data) appelle $this->dash() avec 0 arguments et utilise la valeur de retour comme fonction de rappel à appliquer à chaque membre du tableau. Vous voulez à la place array_map(array($this,'dash'), $data).

2
Anomie

Il faut lire

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

La chose array- est le rappel PHP pour une méthode d'instance d'objet. Les rappels aux fonctions régulières sont définis comme de simples chaînes contenant le nom de la fonction ('functionName'), Tandis que les appels de méthode statique sont définis comme array('ClassName, 'methodName') ou comme une chaîne comme celle-ci: 'ClassName::methodName' ( cela fonctionne à partir de PHP 5.2.3).

1
Stefan Gehrig