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
我知道有 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