PHPでコールバック関数にオブジェクトのメソッドを指定する

array_map()などのコールバック関数を引数にとる関数にメソッドを指定したい場合、PHPではどんな風に書けばよいかわからなかったので調べてみました。

ちなみに最初は次のようにしてみましたがダメでした。

array_map("$this->func", $var);

正しくは、PHPでコールバック関数にメソッドを指定したい場合、次のように配列を使って指定します。

array_map(array('クラス名', 'メソッド名'), $var);

また、既にクラスのインスタンスが入ったオブジェクト変数がある場合は次のように指定します。

$obj = new MyClass();
array_map(array($obj, 'メソッド名'), $var);

さらに、PHP4でオブジェクトを参照渡しにする場合は次のように指定します。PHP5の場合には、オブジェクトは参照渡しになるので上記の書き方と同じです。

$obj = new MyClass();
array_map(array(&$obj, 'メソッド名'), $var);

変な書き方ですね。これはcallbackという擬似的な型だそうです(PHP: 本ドキュメントにおける疑似的な型および変数 - Manual)。PHPは知れば知るほど混乱します。

コメント (0)

この記事へのコメントはまだありません。

コメントフォーム

トラックバック (2)

PHPでコールバック関数にクラスのメソッドを指定する

http://dxd8.com/archives/5/

[…] PHPでコールバック関数にオブジェクトのメソッドを指定する – (DxD)∞ – array_mapなど […]

この記事のトラックバックURI
http://dxd8.com/archives/5/trackback/
この記事のURI
http://dxd8.com/archives/5/