我有一个抽象类,其中包含所有常见内容(数据库连接等),我可以将横幅放在那里,但我希望它们与自己类中的数据库分开。这就是我的工作......
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.有没有更好的方法可行?
另外,对我来说这似乎很奇怪,只有空函数在抽象类中才能使用。如果有人能够解释这个问题或建议一个更好的选择,我将非常感激。
感谢。
答案 0 :(得分:3)
正如评论中所述,任何延伸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();