You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建继承父类已填充数据的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:19:55