为什么我的getter(__get)没有在PHP类中调用?

时间:2017-01-21 10:40:27

标签: php oop getter

我已阅读所有相关问题,但未能从我的代码中删除该错误。请指导我的代码中可能出现的错误。 当我尝试调用以下代码时,它会报告Error: Call to undefined method SessionManager::close() in E:\wamp64\www\mjs-cms\private\systemcore\helper\SessionManager.php on line 22而不是“尝试关闭”。

提前致谢。

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class SessionManager{
    public function __construct() {
        session_start();
    }
    public function is_exist($a){
        return isset($_SESSION["system".$a]);
    }

    public function add($a,$b){
        $_SESSION["system".$a]=$b;
    }
    public function  addCookies($a,$b){
        setcookie($a, $b, time() + (86400 * 30), "/"); // 86400 = 1 day
    }
    public function sessionKey(){
        return session_id();
    }
    public function value($k){
        if(!isset($_SESSION[$k]))
            $this->close("SESSION_NOT_DEFINED".__LINE__);
        return $_SESSION[$k];
    }
    public function __get($key)
    {
        echo "tried to call $key";
        return get_instance()->$key;
    }
}

1 个答案:

答案 0 :(得分:2)

__get方法用于访问类的未声明属性。

要调用未声明的功能,请__call__callStatic

public function __call($method_name, $arguments)
{
    echo "tried to call: $method_name";
}

如果您想使用__get - 必须调用未定义的属性。在这种情况下,它不是

SessionManager::close()  // call method `close()`

必须是:

$sm = new SessionManager;
$sm->propertyName;   // trying to access undefined property `propertyName` of an object

考虑到

  

属性重载仅适用于对象上下文。

表示尝试访问静态属性,如

SessionManager::staticProperty;

__get一起使用。