【发布时间】:2022-01-14 12:49:21
【问题描述】:
我知道有 extends 用于类继承,但我需要不同的方法:
我想实现如下类结构:
c_main
|
--- c_subclass1
|
--- c_subclass2
|
--- c_subclass3
想法:
c_main 拥有所有类的功能,如抓取、状态消息、数据库和错误处理、日志记录..
所以子类总是需要访问主类。
详细: subclass1 将为所有子类加载主 ID,因此子类需要相互通信 - 例如: subclass1 将获得 id - subclass2 将基于它进行广泛的抓取并收集数据并将某些内容传递给子类 3,子类 3 也将收集数据。 所有子类都需要访问父类,因为它将写入子类之间正在进行的进程的持续日志文件。 最后,c_main 将包含所有子类的最终数据。
我目前的做法如下
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;
}
}
我想知道:这是最好的方法还是有更好的方法?
【问题讨论】:
-
只要定义
c_themoviedb extends c_movie之类的类,将c_movie的属性和方法定义为protected,这样孩子就可以访问了。 -
那你为什么要在父类中创建子类的对象呢?
-
为什么不直接使用extends?这正是你所需要的.....
-
我知道这听起来很奇怪,但我也希望子类能够在解析过程中相互通信,所以我总是需要访问 c_movie 对象
-
您的问题似乎是关于组合与继承。虽然我想知道为什么 c_themoviedb 和其他人需要了解这部电影?
标签: php class inheritance