2009年01月14日

php:インスタンスのクラスを変えてしまう

php で擬似的に以下2つ
・ インスタンスのクラスを変更
・ メソッドの動的な追加

幾つかのオブジェクトシステムではインスタンスのクラスを変えられますが、それを php で真似る。

■ まずは結果
// 変換先クラスサンプル
class foo{
  public $p = 'yo!';
  public function dump(){var_dump($this);}
}

// 変更させるインスタンス
$obj = new stdClass;
$obj->d = 'hi!';

// 変更前のvar_dump
var_dump($obj);// object(stdClass)#1 (1) { ["d"]=> string(3) "hi!" }
echo "<br><br>";

// クラスを変えてしまう
change_class(&$obj, 'foo');

// 変更後のvar_dump
$obj->dump();// object(foo)#2 (2) { ["p"]=> string(3) "yo!" ["d"]=> string(3) "hi!" }
echo "<br><br>";

// foo そのものから作ると
$foo = new foo;
var_dump($foo);// object(foo)#1 (1) { ["p"]=> string(3) "yo!" }
echo "<br><br>";

// 一見するとメソッドの動的な追加のような事も
add_method(&$obj, 'public function hello(){echo "hello!<br />";}');
$obj->hello();// hello!

// メソッド追加後の var_dump
$obj->dump();// object(add_method_0)#3 (2) { ["p"]=> string(3) "yo!" ["d"]=> string(3) "hi!" }
echo "<br><br>";


■ 自前の環境
PHP Version 5.2.3
System Windows NT
Server API Apache 2.0

続きを読む
posted by HiFa at 22:29 | 🌁 | Comment(0) | TrackBack(1) | ときどきPHP | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。