创建与在 php 中传递对象相同的 class 的对象
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);
我可以创建一个新的参数对象 class,还是我必须为每个继承的 class 覆盖方法?
也许可以简化它,但 get_class()
是要走的路:
$class = get_class($obj);
$newObj = new $class;
我找不到 PHP 5.x 或 7.x 的单行代码,但这似乎适用于 PHP 8.0:
$newObj = new (get_class($obj));
我认为这样的东西应该适合你:
(这里我使用 get_called_class()
来获取调用方法的 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 ( )
我有以下情况
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);
我可以创建一个新的参数对象 class,还是我必须为每个继承的 class 覆盖方法?
也许可以简化它,但 get_class()
是要走的路:
$class = get_class($obj);
$newObj = new $class;
我找不到 PHP 5.x 或 7.x 的单行代码,但这似乎适用于 PHP 8.0:
$newObj = new (get_class($obj));
我认为这样的东西应该适合你:
(这里我使用 get_called_class()
来获取调用方法的 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 ( )