1

重複の可能性:
オブジェクト メソッドをコールバック関数として使用する方法

通常は手続き型コードで 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

マイコード ============================================== =================================

$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);
}    
4

3 に答える 3

15

PHP では、配列を使用して、オブジェクトとメソッド呼び出しを callable として関連付けることができます。

array_map(array($this, 'id2area'), $array);

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

于 2012-11-12T17:18:52.617 に答える
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)

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

于 2012-11-12T17:20:49.227 に答える
3

次のような無名関数としてこれを行うこともできます。

array_map(
    function($arg) {
        return $this->id2area($arg);
    },
    explode(',', $this->user['areas'])
);
于 2012-11-12T17:22:02.923 に答える