从array_map匿名函数中调用类方法

4
我想在 array_map 的匿名函数中调用我的一个对象方法。目前我收到了预期的错误提示:

致命错误:在非对象上下文中使用 $this...

我知道我为什么会收到这个错误,但我不知道如何实现我想要的... 有人有任何建议吗?

这是我当前的代码:

// Loop through the data and ensure the numbers are formatted correctly
array_map(function($value){
    return $this->some_method($value,'value',false);
},$this->mssql->data[0]['results'][0]);

升级到PHP 5.4,该版本增加了对闭包中$this的支持。 - igorw
2个回答

6
你可以使用"use"关键字让函数“闭合”$this变量。
$host = $this;
array_map(function($value) use ($host) {
    return $host->some_method($value,'value',false);
},$this->mssql->data[0]['results'][0]);

你不需要像 &$object 那样通过引用传递对象,因为对象已经被引用传递了。 - Glavić

0
此外,你可以从类上下文中调用你的映射函数,而不会收到任何错误。例如:
class A {

        public $mssql = array(
                'some output'
            );

        public function method()
        {
            array_map(function($value){
                return $this->mapMethod($value,'value',false);
            },$this->mssql);

        }

        public function mapMethod($value)
        {
            // your map callback here
            echo $value; 

        }


    }

    $a = new A();

    $a->method();

这正是我正在做的事情! - Ben Carey
嗯,我不太确定你的代码是否完全相同,因为如果是这样,你就不应该收到那个错误,而我非常确定。 - Cristian Bitoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接