PHP:class 继承 - 最佳实践

PHP: class inheritance - best practice

我知道有 extends 用于 class 继承,但我需要一种不同的方法:

我想实现如下class结构:

c_main
|
--- c_subclass1
|
--- c_subclass2
|
--- c_subclass3

想法: c_main 拥有所有 classes 的功能,例如抓取、状态消息、数据库和错误处理、日志记录 .. 所以 child classes 总是需要访问主 class.

详细: subclass1 将为所有 subclasses 加载主 id,因此 subclasses 需要相互通信 - 如: subclass1 将获取 id - subclass2 将基于它进行广泛的抓取并收集数据并将某些内容传递给 subclass 3 ,它也将收集数据。 所有 subclasses 都需要访问 parent class,因为它将写入 subclasses 之间正在进行的进程的持续日志文件。 最后,c_main 将包含来自所有子class 的最终数据。

我目前的做法如下

class c_main
{
    public $id;
    function __construct()
    {
        $this->sub1 = new c_subclass1(this);
        $this->sub2 = new c_subclass2(this);
        $this->sub3 = new c_subclass3(this);
    }

    function log($msg, $obj)
    {
        $class = get_class($obj);
        $msg = "class: " . $class . " | " . $msg;
        // write $msg to consistent log 
    }

    function scrape($url, $obj)
    {
        $this->log("scraping: $url", $obj);
    }

    function load()
    {
        $this->id = $this->sub1->get_id();
        $data2 = $this->sub2->get_data();
        $data3 = $this->sub3->get_data();

        $this->all = array( $data1, $data2, $data3 );
    }

}

subclass1 看起来像这样:

class c_subclass1
{
    function __construct( $oMain )
    {
        $this->oMain = $oMain;
    }

    function get_id()
    {
        $this->oMain->log("getting id  ..", $this);
        $id = $this->oMain->scrape("www.foo.com", $this);
        return $id;
    }

}

subclass2 看起来像这样:

class c_subclass2
{
    function __construct( $oMain )
    {
        $this->oMain = $oMain;
    }

    function get_data()
    {
        $this->oMain->log("getting data for id " . $this->id . " ..", $this);
        $aData = $this->oMain->scrape("www.bar.com?id=" . $this->id, $this);
        return $aData;
    }

}

我想知道:这是最好的方法还是有更好的方法?

如果您想继承多个 类 但 php 不允许超过 1 个继承并且 php 提供 Traits 机制,请阅读 php 文档将帮助您找到最佳方法。

A Trait is intended to reduce some limitations of single inheritance