【发布时间】:2018-06-09 14:11:35
【问题描述】:
我有一个抽象类,其中包含所有常见的东西(数据库连接等),我可以将横幅放在那里,但我希望它们在自己的类中与数据库分开。这就是我所拥有的...
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(){
}
然后,在我想要调用函数的扩展类中,我可以执行这样的操作,从 SEPARATEClass() 调用 draw_small_banner() 函数...
class EXTENDEDClass extends ABSTRACTClass
{
parent::draw_small_banner();
我从其他一些 Stackoverflow 问题中尝试了几种不同的方法,但这是我让它工作的唯一方法。这是使用 PHP 7。有更好的方法吗?
另外,我觉得这很奇怪,只有当空函数在抽象类中时才有效。如果有人能解释这一点或提出更简洁的替代方案,我将不胜感激。
谢谢。
【问题讨论】:
-
任何扩展
ABSTRACTClass并且没有省略其构造函数的东西都应该可以访问$this->separate,因为你已经隐式地使它成为了public -
谢谢。是的,但是如果没有抽象类中的空函数,
$this->separate->draw_small_banner();对我不起作用。 -
嗯,我不知道。
SEPARATEClass是否有draw_small_banner公开的非静态方法? -
抱歉,是的,它是公开的。就是这样...
class SEPARATEClass {然后public function draw_small_banner(){