进入危险区域 当你序列化一个对象,你会得到某种格式的字符串,如果你感兴趣,你可以调究它,其中,字符串中有类的名字(太好了!),你可以把它取出来,象:
代码:
<?php $herring=serialize($obj); $vec=explode(´:´,$herring); $nam=str_replace("\"",´´,$vec[2]); ?>
所以假设你创建了一个"Universe"的类,并且强制所有的类都必须从universe扩展,你可以在universe中定义一个clone的方法,如下:
代码:
<?php class Universe { function clone() { $herring=serialize($this); $vec=explode(´:´,$herring); $nam=str_replace("\"",´´,$vec[2]); $ret=new $nam; return $ret; } } //然后 $obj=new Something(); //从Universe扩展 $other=$obj->clone(); ?>
你所得到的是一个新的Something类的对象,它同使用new方法,调用构造函数创建出的对象一样。我不知道这个对你是否有用,但是Universe类可以知道派生类的名字是一个好的经验。想象是唯一的限制。 上一页 [1] [2] [3] [4] |