PHP5.3の無名関数をRefrectionしてみた
http://nonn-et-twk.net/twk/php5.3-lambdaで、
ちなみに無名関数を代入した変数をprint_rすると、Closure Object()とかでてきます。
とあったので、さっそく試してみました。
<?php $function = function() { echo "hello!"; }; var_dump($function);
object(Closure)#1 (0) { }
function() {...}で無名関数を作ったとき、
Closureというクラスのインスタンスが作成されるみたい。
ClosureクラスをReflectionしてみる。
<?php ReflectionClass::export('Closure');
Class [ <internal> final class Closure ] { - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [0] { } - Methods [1] { Method [ <internal> public method __invoke ] { } } }
Closureクラスはfinalなクラスで、__invoke()というメソッドを持ってるらしい。
ためしに実験。。。ちゃんと動く。
<?php $function = function() { echo "hello!"; }; $function->__invoke(); // hello!
ここでピコーンと思いついて下記のコードを書いてみました。
<?php class Hoge { function __invoke() { echo "hoge"; } } $hoge = new Hoge(); $hoge(); // hoge
これを実行すると、予想通り"hoge"と表示されました。
__invoke()メソッドを書いておくと、
$hoge()で呼び出せる模様。
__invoke()は__call()とか__get()みたいなマジックメソッドなんでしょか。
Perlの評判
会社でのPerlの評判はやっぱり悪い。
読めないだのきもいだのちょっと高度なシェルスクリプトでしょだのblessが意味わからんだのPerlでOOPとかできるの?だの。
。。。(^ω^#)
昔のPerlとは違うんですよ!
インターフェースだってMoose使えば書けるんですよ!型指定もできるよ!
O/RマッパだってDBIx::Classがあるし、フレームワークだってCatalystもあるよ!
いちいちアクセサメソッド書かなくてもClass::Acsessor::Fast使えばかんたんですよ!
Plaggerは超楽しいよ!
書籍も充実しててPerlHacksとかPerlベストプラクティスとかすげえ本いっぱいでてるよ!
とか力説。
まだまだPerlに対する偏見が根強いと感じる今日この頃。
昔のPerlしか知らない人に最近のPerlを教えるためのテンプレみたいなのが欲しいなー
とりあえずperl-users.jp紹介しといたけど。
みんな今のPerl知らなくて、もったいないなあと思った。
すんげえ楽しいのにー
Windowsを再インストールしたときに入れるアプリ一覧
Windowsを入れなおしたので、備忘録代わりに。
・ActivePerl
・PHP
・Java
・Apache
・PostgreSQL
・Eclipse
・LimeChat
・Windows Live Messenger
・JaneView
・iTunes
・Poderosa
・Visual Studio Express Edition
・Firefox
・Thunderbird
・otbedit
・Meadow
・xkeymacs
・bluewind
・noah
・コマンドプロンプトへ送る
・リンク作成シェル拡張