Php 设置数组_映射中的回调函数时出错

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

在这段代码中,如果$callback设置为类似于intvalsqrt的值,那么它将正常工作,但当我尝试使用cube方法作为回调函数时,它给出了以下错误。为什么呢 以及如何从cool方法调用方法cube,作为回调

试试这个:

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);

是的,它是有效的,但我仍然不明白发生了什么。请你解释一下我编辑的代码,我试图解释。如果不清楚,请告诉我。是的,它有效,但我仍然不明白发生了什么。请你解释一下我编辑的代码,我试图解释。如果不清楚,请告诉我。是的,它有效,但我仍然不明白发生了什么。请你解释一下我编辑的代码,我试图解释。如果不清楚,请告诉我。是的,它有效,但我仍然不明白发生了什么。请你解释一下我编辑的代码,我试图解释。如果不清楚,请告诉我。