从另一个类PHP7中调用一个类

时间:2017-12-29 04:38:06

标签: php oop php-7

我有一个抽象类,其中包含所有常见内容(数据库连接等),我可以将横幅放在那里,但我希望它们与自己类中的数据库分开。这就是我的工作......

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.有没有更好的方法可行?

另外,对我来说这似乎很奇怪,只有空函数在抽象类中才能使用。如果有人能够解释这个问题或建议一个更好的选择,我将非常感激。

感谢。

1 个答案:

答案 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();