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 ,那么它将正常工作,但当我尝试使用 cube 方法作为回调函数,它给出了以下错误。为什么这样 以及如何从酷方法调用方法 cube 作为回调
答案 0 :(得分:2)
在PHP中,您可以使用数组将对象和方法调用关联为可调用
array_map(array($this, $this->callback), $array);
答案 1 :(得分:1)
试试这个:
$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'.
答案 2 :(得分:0)
试试这个
$b = array_map(array($this, 'cube'), $a);
而不是
$b = array_map( $this->callback , $a);