如何创建继承父类已填充数据的PHP子类对象?
实现子类实例继承父类实例的public属性值
嘿,要让子类实例$child继承父类实例$parent已经赋值的$var属性,有几个实用的办法,我给你一步步拆解:
方法一:通过子类构造函数传递父类实例的属性值
这是最直观也最常用的方式,给子类加个构造函数,接收父类实例后直接把目标属性值赋值过来就行:
<?php class parentClass{ public $var; private function somefunc(){ /* 私有方法不影响public属性的继承 */ } } class childClass extends parentClass{ // 子类构造函数,接收父类实例作为参数 public function __construct(parentClass $parent) { // 直接将父类的public属性值赋值给子类自身的属性 $this->var = $parent->var; } } $parent = new parentClass(); $parent->var = 'SOMETHING'; // 给父类实例的属性赋值 $child = new childClass($parent); // 传入父类实例初始化子类 // 验证结果:$child->var已经继承了父类的赋值 echo $child->var; // 输出 SOMETHING
方法二:批量复制父类的所有public属性(多属性场景适用)
如果父类有多个public属性,一个个手动赋值太麻烦,可以用get_object_vars()批量获取父类的public属性,再循环赋值给子类:
<?php class parentClass{ public $var; public $anotherPublicVar; private function somefunc(){ /* ... */ } } class childClass extends parentClass{ public function __construct(parentClass $parent) { // 获取父类实例的所有public属性数组 $parentPublicProps = get_object_vars($parent); // 循环批量赋值给子类 foreach ($parentPublicProps as $propName => $propValue) { $this->$propName = $propValue; } } } $parent = new parentClass(); $parent->var = 'SOMETHING'; $parent->anotherPublicVar = 'ANOTHER_VALUE'; $child = new childClass($parent); echo $child->var; // 输出 SOMETHING echo $child->anotherPublicVar; // 输出 ANOTHER_VALUE
小提醒
- 父类的
private方法和属性不会被子类继承,所以不用考虑它们的处理;但如果是protected属性,上面的方法同样适用。 - 要是想追求更“自动化”的方式,也可以用PHP反射类实现,但上面的方案已经能覆盖绝大多数日常场景,反射反而会增加代码复杂度,没必要画蛇添足。
内容的提问来源于stack exchange,提问作者Lazik
相关产品推荐
相关产品推荐

