0

我在一个名为 /classes 的目录中保留了一个抽象类定义。它看起来像这样:

abstract class baseController {

    protected $registry;

    //Obtain registry object
    protected function __construct($reg) {
        $this->registry = $reg;
    }

    protected function show() {

    }

}

在 /controllers/ 目录中(它们共享相同的父文件夹)我有我的特定控制器类文件。例如,

class indexController extends baseController {

    public function show() {

        //render index page
        $this->registry->view->render('index');

    }

}

我在我的配置脚本中使用了两个spl_autoload_register()调用来确保在需要类时找到两个目录 - 但是当我尝试从我的 router.class.php 文件(位于 /classes/ 目录中)实例化 indexController 时,我得到以下错误:

PHP Fatal error:  Call to protected baseController::__construct() from context 'router'...

它正在识别线:$this->controller = new indexController($this->registry);作为罪魁祸首。

__construct 是受保护的,但 indexController 应该从 baseController 继承,因此,由于 __construct 方法没有被重新定义,它应该调用父类的构造函数。或者我是这么想的。

到底他妈发生了什么?

4

1 回答 1

3

您应该在方法中使用公共定义__construct,因为您在类上下文之外实例化类(例如在路由器类中)。

如果您在另一个扩展的类中实例化它,这可能会起作用baseController

于 2013-12-03T21:46:54.750 回答