よく似てるけど違うクラスに無理やりキャストする関数
Redirecting...
<? /** * 無理やりキャストする * @param string $class キャスト先のクラス名 * @param object $object キャスト元のオブジェクト * @return object キャスト先のオブジェクト */ function cast($class,$object) { return unserialize( preg_replace( '/^O:\d+:"[^"]++"/', 'O:'.strlen($class).':"'.$class.'"', serialize($object) ) ); } /********************************************/ class A { public $a; public $b; function show(){ print("i am A\n"); } } class B { public $a; public $c; function show(){ print("i am B\n"); } } $A = new A; $A->a = "Hello"; $A->b = "world"; $B = cast("B",$A); print( "$B->a, $B->b, $B->c \n"); $B->show();
Hello, world, i am B
コピー元の変数は全部コピーされる。 コピー先にしか無い変数はしょうがない。
こういう適当さがあとでバグを産むのはわかってるが・・・