编辑:已解决!
我最近一直在研究自己的框架。我有一个像这样的控制器类:
class Controller {
private $model;
public function __construct() {
global $bean_db, $mv_name;
if (file_exists(APP_PATH . 'models/' . $mv_name . '.php')) {
require APP_PATH . 'models/' . $mv_name . '.php';
$model_name = $mv_name . '_Model';
$model = new $model_name;
$this->model = $model;
}
}
}
现在,在特定的控制器文件中,我有这样的代码:
class Start_Controller extends Controller {
function execute() {
$this->model->exec("SET NAMES 'utf8'");
}
}
正如您可能或可能没想到的那样,这不起作用。我收到一条错误消息,名为" model"不存在。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:7)
因为private
变量仅限于此类 而不限于任何子级。
在这种情况下,您需要protected
答案 1 :(得分:1)
制作model
protected
而不是private
。这是一个直接的解决方案,但您可能还想重新处理控制器访问其模型的方式。
答案 2 :(得分:0)
私有成员是声明它们的类所独有的。即使在子类中,也无法在其他任何地方访问它们。
您可以通过以下两种方式之一来克服这个问题。
通常你会做前者,但有些情况下后者可能是一种更明智的方法(例如,如果你需要对成员的只读访问权限)。