プログラミング

PHPで動的OOPもどき

2008年3月26日

PHP5では、クラスで__call()メソッドが使えるので、JavaScriptみたいな動的オブジェクトが作れそう。

<?php

$obj=(object)$obj;
$obj->testfunc=create_function('$i','return $i+1;');
//echo $obj->testfunc(2);// Fatal Error
$f=&$obj->testfunc;
echo $f(2);// 3

$obj=new dynamic_obj;
$obj->testfunc=create_function('$i','return $i+1;');
$obj->testfunc2=create_function('$i','return $i+2;');
echo $obj->testfunc(2);// 3
echo $obj->testfunc2(2);// 4

$obj->__destruct=create_function('','echo "__destruct!";');//__destruct!

class dynamic_obj{
    public function __call($methodname,$args){
        return call_user_func_array($this->$methodname,$args);
    }
    public function __destruct(){
        if (isset($this->__destruct)) call_user_func($this->__destruct);
    }
}

実行結果

334__destruct!

どんなときに便利か、今は思いつかないけれど。

コメント

コメントはありません

コメント送信