我在一个名为/ 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文件(在/中)中实例化indexController时classes / directory)我收到以下错误:
PHP Fatal error: Call to protected baseController::__construct() from context 'router'...
它确定了一行:$this->controller = new indexController($this->registry);
作为罪魁祸首。
__construct受保护,但indexController应继承自baseController,因此,由于__construct方法未重新定义,应该调用父类构造函数。或者我想。
到底发生了什么事?
答案 0 :(得分:2)
您应该在__construct
方法中使用公共定义,因为您在类上下文之外实例化了类(例如在路由器类中)。
如果您在另一个扩展baseController
的类中实例化它,这可能会有效。