创建在php中传递对象的同一个类的对象

时间:2015-02-16 19:23:06

标签: php class oop object

我有以下情况

class A {
   ... 
   public static function Copy($obj) {
      $newObj = new (class of $obj);
      ...
   }
}

class B extends A {
...
}

class C extends A {
...
}
...
$newB = B::Copy($BObject);
$newC = C::Copy($CObject);

我可以创建参数类的新对象,还是必须为每个继承的类重写方法?

2 个答案:

答案 0 :(得分:3)

可以简化它,但get_class()是可行的方法:

$class  = get_class($obj);
$newObj = new $class;

答案 1 :(得分:1)

我觉得这样的事情对你有用:

(这里我使用get_called_class()来获取调用方法的类名称)

<?php

    class A {

        public static function Copy() {
            $class = get_called_class();
            return $newObj = new $class;      
        }

    }

    class B extends A {

    }

    class C extends A {

    }

    $newB = B::Copy();
    print_r($newB);
    $newC = C::Copy();
    print_r($newC);

?>

输出:

B Object ( )
C Object ( )