我在一个名为 /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 方法没有被重新定义,它应该调用父类的构造函数。或者我是这么想的。
到底他妈发生了什么?