子类不从父类继承属性

Jef*_*eff 2 php inheritance class parent-child

这不符合我的想法.这是我的课程:

class App {
    public $db;

    public function __construct($db) {
        $this->db = $db;
    }
}

class Analysis extends App {

    public $analysis_id;

    public function __construct($analysis_id) {
        $this->analysis_id = $analysis_id;
    }
}

class Standard extends Analysis {

    public function __construct($analysis_id) {
        parent::__construct($analysis_id);
    }
}
Run Code Online (Sandbox Code Playgroud)

$db 是我传递给App类的数据库(mysqli)对象.

当我尝试执行新的标准分析时,我这样启动它:

$analysis = new Standard($analysis_id);
Run Code Online (Sandbox Code Playgroud)

Analysis类包含检索有关分析的元数据的方法,而Standard类包含检索特定类型分析的计算的方法.我以为我能够访问该$db对象,但我无法从Analysis或Standard类中访问.$db我启动它时是否需要将对象传递给Standard类?

dou*_*arp 6

您的Analysis类需要在其父级上调用构造函数App.默认情况下不会发生这种情况.因为$dbApp构造函数的参数,所以你必须从子类中传入它,然后parent::__construct($db)Analysis构造函数调用 .

正确的代码:

class App {
    public $db;

    public function __construct($db) {
        $this->db = $db;
    }
}

class Analysis extends App {
    public $analysis_id;

    public function __construct($analysis_id, $db) {
        $this->analysis_id = $analysis_id;
        parent::__construct($db);
    }
}

class Standard extends Analysis {
    public function __construct($analysis_id, $db) {
        parent::__construct($analysis_id, $db);
    }
}

$analysis = new Standard($analysis_id, $db);
Run Code Online (Sandbox Code Playgroud)