- 此问题在此处已有答案**:
How to use class methods as callbacks(5个答案)
两个月前关门了。
我试图创建一个类来处理数组,但似乎无法让array_map()
在其中工作。
$array = [1,2,3,4,5,6,7,8,9,10];
class test {
public $values;
public function adding($data) {
$this->values = array_map($this->dash(), $data);
}
public function dash($item) {
return '-' . $item . '-';
}
}
var_dump($array);
$test = new test();
$test->adding($array);
// Expected: -1-,-2-,-3-,-4-...
var_dump($test->values);
- 此输出**
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 [...]\arraytesting.php on line 11 and defined in [...]\arraytesting.php on line 15
Warning: array_map() expects parameter 1 to be a valid callback, function '--' not found or invalid function name in [...]\arraytesting.php on line 11 NULL
我做错了什么,还是这个函数在类内部不起作用?
9条答案
按热度按时间huwehgph1#
您以错误的方式将
dash
指定为回调。这是行不通的:
这将:
了解回调可能采用的不同形式here。
wmvff8tz2#
当使用类方法作为
array_map()
和usort()
等函数的回调函数时,必须将回调函数作为二值数组发送。第二个值始终是字符串形式的方法名称。第一个值是上下文(类名或对象)1aaf6o9v3#
array_map($this->dash(), $data)
使用0个参数调用$this->dash()
,并将返回值用作回调函数以应用于数组的每个成员。您需要使用array_map(array($this,'dash'), $data)
。xxb16uws4#
它必须是
array
-thing是对象示例方法的PHP回调函数,对常规函数的回调函数被定义为包含函数名('functionName'
)的简单字符串,而静态方法调用被定义为array('ClassName, 'methodName')
或如下所示的字符串:'ClassName::methodName'
(从PHP 5.2.3开始可以使用)。tkqqtvp15#
array_map
将 callback 作为其第一个参数。对静态方法的回调是这样写的:
这意味着,在您的特定情况下,您将用途:
有关 callbacks 的更多信息,请参见PHP手册的这一节:本文档中使用的伪类型和变量-回调。
o4tp2gmn6#
如果类属于不同的命名空间,你需要使用完整的命名空间类名称。下面是一个使用CakePHP Utility类的例子:
这是行不通的:
这将工作:
uxhixvfz7#
yizd12fk8#
//常规函数:数组Map('我的函数',$数组);
//类中的静态函数:数组Map(数组('我的类','我的函数'),$数组);
//对象中的函数:数组Map(数组($this,“我的函数”),$数组);
//父类中的函数array_map(array($this,'parent::MyFunction'),$array);
x7rlezfr9#
对于多维数组(任何数组):
对于类中的多维数组(任何数组):