Php 设置数组_映射中的回调函数时出错
在这段代码中,如果$callback设置为类似于intval或sqrt的值,那么它将正常工作,但当我尝试使用cube方法作为回调函数时,它给出了以下错误。为什么呢 以及如何从cool方法调用方法cube,作为回调 试试这个:Php 设置数组_映射中的回调函数时出错,php,callback,Php,Callback,在这段代码中,如果$callback设置为类似于intval或sqrt的值,那么它将正常工作,但当我尝试使用cube方法作为回调函数时,它给出了以下错误。为什么呢 以及如何从cool方法调用方法cube,作为回调 试试这个: class Test { public $callback = "sqrt"; public function cube($n) { return($n * $n * $n); } public functi
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();
输出为:
$b = array_map( array($this, $this->callback) , $a);
如果是静态方法:
array
0 => int 1
1 => int 8
2 => int 27
3 => int 64
4 => int 125
更新:
好的,问题是,当你把这个参数赋给你的数组映射
时,它会解析类的回调
属性中的内容。有一个字符串值:cube
。您没有全局cube
函数intval
和sqrt
是全局函数,因此它们可以工作。因此,您需要按照PHP文档所述进行传递:实例化对象的方法作为数组进行传递,数组包含索引0处的对象和索引1处的方法名称。
这就是为什么我的示例有效,因为您有一个实例化的方法$This
,方法名在$This->callback
中
对于静态方法:
也可以通过传递类名而不是索引0处的对象来传递静态类方法,而无需实例化该类的对象。从PHP 5.2.3开始,还可以传递“ClassName::methodName”。
尝试以下方法:
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();
输出为:
$b = array_map( array($this, $this->callback) , $a);
如果是静态方法:
array
0 => int 1
1 => int 8
2 => int 27
3 => int 64
4 => int 125
更新:
好的,问题是,当你把这个参数赋给你的数组映射
时,它会解析类的回调
属性中的内容。有一个字符串值:cube
。您没有全局cube
函数intval
和sqrt
是全局函数,因此它们可以工作。因此,您需要按照PHP文档所述进行传递:实例化对象的方法作为数组进行传递,数组包含索引0处的对象和索引1处的方法名称。
这就是为什么我的示例有效,因为您有一个实例化的方法$This
,方法名在$This->callback
中
对于静态方法:
也可以通过传递类名而不是索引0处的对象来传递静态类方法,而无需实例化该类的对象。从PHP 5.2.3开始,还可以传递“ClassName::methodName”。
尝试以下方法:
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();
输出为:
$b = array_map( array($this, $this->callback) , $a);
如果是静态方法:
array
0 => int 1
1 => int 8
2 => int 27
3 => int 64
4 => int 125
更新:
好的,问题是,当你把这个参数赋给你的数组映射
时,它会解析类的回调
属性中的内容。有一个字符串值:cube
。您没有全局cube
函数intval
和sqrt
是全局函数,因此它们可以工作。因此,您需要按照PHP文档所述进行传递:实例化对象的方法作为数组进行传递,数组包含索引0处的对象和索引1处的方法名称。
这就是为什么我的示例有效,因为您有一个实例化的方法$This
,方法名在$This->callback
中
对于静态方法:
也可以通过传递类名而不是索引0处的对象来传递静态类方法,而无需实例化该类的对象。从PHP 5.2.3开始,还可以传递“ClassName::methodName”。
尝试以下方法:
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();
输出为:
$b = array_map( array($this, $this->callback) , $a);
如果是静态方法:
array
0 => int 1
1 => int 8
2 => int 27
3 => int 64
4 => int 125
更新:
好的,问题是,当你把这个参数赋给你的数组映射
时,它会解析类的回调
属性中的内容。有一个字符串值:cube
。您没有全局cube
函数intval
和sqrt
是全局函数,因此它们可以工作。因此,您需要按照PHP文档所述进行传递:实例化对象的方法作为数组进行传递,数组包含索引0处的对象和索引1处的方法名称。
这就是为什么我的示例有效,因为您有一个实例化的方法$This
,方法名在$This->callback
中
对于静态方法:
也可以通过传递类名而不是索引0处的对象来传递静态类方法,而无需实例化该类的对象。从PHP 5.2.3开始,还可以传递“ClassName::methodName”。
在PHP中,您可以使用数组将对象和方法调用关联为可调用对象
$b = array_map( "Test::staticMethodName" , $a);
在PHP中,可以使用数组将对象和方法调用关联为可调用对象
$b = array_map( "Test::staticMethodName" , $a);
在PHP中,可以使用数组将对象和方法调用关联为可调用对象
$b = array_map( "Test::staticMethodName" , $a);
在PHP中,可以使用数组将对象和方法调用关联为可调用对象
$b = array_map( "Test::staticMethodName" , $a);
试试这个
array_map(array($this, $this->callback), $array);
而不是
$b = array_map(array($this, 'cube'), $a);
试试这个
array_map(array($this, $this->callback), $array);
而不是
$b = array_map(array($this, 'cube'), $a);
试试这个
array_map(array($this, $this->callback), $array);
而不是
$b = array_map(array($this, 'cube'), $a);
试试这个
array_map(array($this, $this->callback), $array);
而不是
$b = array_map(array($this, 'cube'), $a);
是的,它是有效的,但我仍然不明白发生了什么。请你解释一下我编辑的代码,我试图解释。如果不清楚,请告诉我。是的,它有效,但我仍然不明白发生了什么。请你解释一下我编辑的代码,我试图解释。如果不清楚,请告诉我。是的,它有效,但我仍然不明白发生了什么。请你解释一下我编辑的代码,我试图解释。如果不清楚,请告诉我。是的,它有效,但我仍然不明白发生了什么。请你解释一下我编辑的代码,我试图解释。如果不清楚,请告诉我。