gotohayato.com

moon indicating dark mode
sun indicating light mode

PHP で関数を受け取る関数にインスタンスメソッドを渡す方法

2015/09/02PHP

PHP の関数型スタイルの関数 array_map()array_filter() の引数に通常の関数ではなくメソッドを渡す方法をご紹介したいと思います。

PHP では array(インスタンス, メソッド名を表す文字列) でインスタンスメソッドを指定することができるので、このスタイルでメソッドを渡せば OK です。

class People {
function __construct($name) {
$this->name = $name;
}
function flush_messages($messages) {
// コールバックとして関数ではなくインスタンスメソッドを使う
// array(インスタンス, メソッド名を表す文字列) で OK
$lines = array_map(array($this, 'wrap_comment'), $messages);
foreach ($lines as $line) {
print $line;
}
}
function wrap_comment($message) {
return $this->name . ': ' . $message . PHP_EOL;
}
}
$p1 = new People('Baku');
$messages = array('「この味がいいね」と', '君が言ったから', '七月六日は「サラダ記念日」');
$p1->flush_messages($messages);
// => Baku: 「この味がいいね」と
// => Baku: 君が言ったから
// => Baku: 七月六日は「サラダ記念日」

PHP にはいろいろと気持ち悪いところもありますが、こういうこともちゃんとできるようになっているんですね。 勉強になります。

関連記事


後藤隼人
個人事業でウェブ開発やマーケティングをしています。
GitHub
© 2020 gotohayato.com
サイトについてタグ一覧記事アーカイブ