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


create object of the same class that passed object in php

我有闲置情况

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);

我可以为parameters类创建一个新对象吗?或者我必须为每个继承的类重写方法吗?

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

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

我找不到适用于PHP5.x或7.x的一行代码,但这似乎适用于PHP8.0:

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

我认为这样的东西应该对你有用:

(这里我使用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 ( )