php中的array_map与回调OOP

ita*_*aka 1 php oop callback

可能重复:
如何使用对象方法作为回调函数

通常我使用带有过程代码的array_map,但在这种情况下我在OOP中工作,回调应该是"this-> id2areas",但它不起作用.反正用OOP进行回调吗?

ERROR MESSAGE: array_map() expects parameter 1 to be a valid callback, function 'this->id2area' not found or invalid function name
Run Code Online (Sandbox Code Playgroud)

我的代码================================================ =================================

$this->context->assign('user_areas', implode(', ', array_map('id2area',   explode(',', $this->user['areas']))));     
explode(',', $this->user['areas']))));



function id2area($id) {//callback
    if ($id == 0) {
        return 'National';
    }
    $query = "SELECT area FROM area WHERE id = $id";
    return DB::fetch_instance()->slave->fetchColumn($query);
}    
Run Code Online (Sandbox Code Playgroud)

Vin*_*ert 13

在PHP中,您可以使用数组将对象和方法调用关联为可调用对象

array_map(array($this, 'id2area'), $array);
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/language.types.callable.php

  • 并且,由于`id2area()`实际上并没有使用`$ this`实例上下文,我建议将其设为`静态函数`.然后引用为`array_map(array('className','id2area'),$ array)` (2认同)

rre*_*ein 7

对象的PHP回调与全局函数有点不同.

//Global function callback
array_map('id2area', $data);

// Object function
array_map(array($object, 'id2area'), $data)
// - or -
array_map(array($this, 'id2area'), $data)

// Static class function
array_map(array('Class_Name', 'id2area'), $data)
// - or -
array_map('Class_Name::id2area', $data)
Run Code Online (Sandbox Code Playgroud)

http://us1.php.net/manual/en/language.types.callable.php