问题
I am trying to create a class to handle arrays but I can't seem to get array_map()
to work in it.
<?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);
This outputs
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
What am I doing wrong or does this function just not work inside classes?
回答1:
You are specifying dash
as the callback in the wrong way.
This does not work:
$this->classarray = array_map($this->dash(), $data);
This does:
$this->classarray = array_map(array($this, 'dash'), $data);
Read about the different forms a callback may take here.
回答2:
Hello You can use Like this one
// 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)
calls $this->dash()
with 0 arguments and uses the return value as the callback function to apply to each member of the array. You want array_map(array($this,'dash'), $data)
instead.
回答4:
It must read
$this->classarray = array_map(array($this, 'dash'), $data);
The array
-thing is the PHP callback for a object instance method. Callbacks to regular functions are defined as simple strings containing the function name ('functionName'
), while static method calls are defined as array('ClassName, 'methodName')
or as a string like that: 'ClassName::methodName'
(this works as of PHP 5.2.3).
来源:https://stackoverflow.com/questions/5422242/array-map-not-working-in-classes