父类中存在属性,但不能从子类中使用

时间:2012-04-17 19:41:31

标签: php

编辑:已解决!

我最近一直在研究自己的框架。我有一个像这样的控制器类:

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"不存在。任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:7)

因为private变量仅限于此类 而不限于任何子级。
在这种情况下,您需要protected

答案 1 :(得分:1)

制作model protected而不是private。这是一个直接的解决方案,但您可能还想重新处理控制器访问其模型的方式。

答案 2 :(得分:0)

私有成员是声明它们的类所独有的。即使在子类中,也无法在其他任何地方访问它们。

您可以通过以下两种方式之一来克服这个问题。

  1. 保护私人会员
  2. 为私人会员提供受保护的获取者
  3. 通常你会做前者,但有些情况下后者可能是一种更明智的方法(例如,如果你需要对成员的只读访问权限)。