访问扩展类中的$this


access $this in extended class

我一直在关注有关OOP编程的教程。我得到了一个名为User的类:

class User {
    private $_db,
            $_data,
            $_sessionName,
            $_isLoggedIn;
    public function __construct($user = null) {
        $this->_db = DB::getInstance();
        $this->_sessionName = Config::get('session/session_name');
        if (!$user) {
            if (Session::exists($this->_sessionName)) {
                $user = Session::get($this->_sessionName);
                if ($this->find($user)) {
                    $this->_isLoggedIn = true;
                } else {
                    // Process logout
                }
            }
        } else {
            $this->find($user);
        }
    }
    public function update($fields = array(), $id = null) {
        if (!$id && $this->isLoggedIn()) {
            $id = $this->data()->id;
        }
        if (!$this->_db->update('users', $id, $fields)) {
            throw new Exception('De gegevens konden niet gewijzigd worden');
        }
    }
    public function create($fields = array()) {
        if (!$this->_db->insert('users', $fields)) {
            throw new Exception('Het account is niet aangemaakt');
        }
    }
    public function find($user = null) {
        if ($user) {
            $field = (is_numeric($user)) ? 'id' : 'email';
            $data = $this->_db->get('users', array($field, '=', $user));
            if ($data->count()) {
                $this->_data = $data->first();
                return true;
            }
        }
    }
    public function login($email = null, $password = null) {
        $user = $this->find($email);
        if ($user) {
            if ($this->data()->password === hash::make($password)) {
                session::put($this->_sessionName, $this->data()->id);
                return true;
            }
        }
        return false;
    }
    public function logout() {
        session::delete($this->_sessionName);
    }
    public function hasPermission($key) {
        $group = $this->_db->get('user_role', array('id', '=', $this->data()->rank));
        if ($group->count()) {
            $permissions = json_decode($group->first()->permission, true);
            if ($permissions[$key] == true) {
                return true;
            }
        }
        return false;
    }
    public function data() {
        return $this->_data;
    }
    public function isLoggedIn() {
        return $this->_isLoggedIn;
    }
}

每个用户在数据库中存储了不同的快速链接。我尝试使用类链接扩展类用户,如下所示:

class Link extends User {
    public static function getUserLinks($user) {
        if ($user) {
            $data = $this->_db->get('user_links', array('uid', '=', $user));
            if ($data->count()) {
                $this->_data = $data->results();
                return $this->_data;
            } else {
                echo 'No matches found';
            }
        } 
        return false;
    }

但是我收到一条错误消息:致命错误:不在对象上下文中使用$this...在第 153 行

以为在扩展课程时,我可以访问所有家长的详细信息?

我做错了什么?另外,我的逻辑是否正确class Link extends User

感谢您的帮助。

您尝试访问静态方法中的类指针,这是不可能的,因为静态方法属于类本身而不是实例。

你可以

有一个静态属性来保存你的实例,然后你可以这样做:(你必须确保你有一个 Link 的实例)

class Link extends User {
    public static $instance;
    public function __construct() {
        parent::__construct();
        self::$instance = $this;
    }
    public static function getUserLinks($user) {
        if (self::$instance instanceof Link && $user) {
            $data = self::$instance->_db->get('user_links', array('uid', '=', $user));
            if ($data->count()) {
                self::$instance->_data = $data->results();
                return self::$instance->_data;
            } else {
                echo 'No matches found';
            }
        } 
        return false;
    }
}