编辑:解决了!
我最近一直在研究自己的框架。我有一个这样的控制器类:
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"的属性不存在。谁能帮我解决这个问题?
因为private
变量仅限于此类,而不能限制任何子变量。
在这种情况下,您需要protected
Make model
protected
而不是 private
。 这是一个直接的解决方案,但您可能还希望重新设计控制器访问其模型的方式。
私有成员是声明它们的类所独占的。 它们不能在其他任何地方访问,即使在子类中也是如此。
您可以通过以下两种方式之一来克服此问题。
- 使私有成员受到保护
- 为私有成员提供受保护的 getter
通常,您会执行前者,但在某些情况下,后者可能是更明智的方法(例如,如果您需要对成员的只读访问权限)。