我有一个抽象类,其中包含所有常见的东西(DB 连接等),我可以将横幅放在那里,但我希望它们在自己的类中与 DB 分开。这就是我所拥有的有效...
include "includes/abstract-class.php";
include "includes/extended-class.php";
include "includes/separate-class.php";
$separate = new SEPARATEClass();
$extended = new EXTENDEDClass($separate);
然后,在抽象类中...
abstract class ABSTRACTClass
{
public function __construct (SEPARATEClass $separate){
$this->separate = $separate;
}
// This empty function is needed in order for there not to be fatal errors
// even though the function with the same name that actually has content is
// in the separate class...
protected function draw_small_banner(){
}
然后,在我想调用函数的扩展类中,我可以做这样的事情,draw_small_banner()
从SEPARATEClass()
...
class EXTENDEDClass extends ABSTRACTClass
{
parent::draw_small_banner();
我从其他一些 Stackoverflow 问题中尝试了几种不同的方法来做到这一点,但这是我让它工作的唯一方法。这是使用 PHP 7。有没有更好的方法可以工作?
此外,这对我来说似乎很奇怪,只有当空函数在抽象类中时才有效。如果有人可以解释这一点或提出更简洁的替代方案,我将不胜感激。
谢谢。
如评论中所述,任何扩展ABSTRACTClass
且不省略其构造函数的内容都应该可以访问$this->separate
.
假设SEPARATEClass
有类似的东西
public function draw_small_banner() {
// do some drawing or something
}
我首先会使其成为ABSTRACTClass
...的受保护成员
abstract class ABSTRACTClass {
protected $separate;
public function __construct(SEPARATEClass $separate) {
$this->separate = $separate;
}
}
然后,在您的扩展类中,您应该可以访问它
class EXTENDEDClass extends ABSTRACTClass {
public function drawStuff() {
$this->separate->draw_small_banner();
}
}
执行看起来像
$separate = new SEPARATEClass();
$extended = new EXTENDEDClass($separate);
$extended->drawStuff();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句