我已阅读所有相关问题,但未能从我的代码中删除该错误。请指导我的代码中可能出现的错误。
当我尝试调用以下代码时,它会报告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;
}
}
答案 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
一起使用。