2017-01-21 1 views
2

Я прочитал все связанные вопросы, но не смог удалить ошибку из моего кода. Сообщите мне о возможной ошибке в моем коде. Когда я пытаюсь вызвать следующий код, он сообщает Error: Call to undefined method SessionManager::close() in E:\wamp64\www\mjs-cms\private\systemcore\helper\SessionManager.php on line 22 вместо того, чтобы «пытаться вызвать close».Почему мой getter (__get) не вызывается в PHP-классе?

Заранее спасибо.

<?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

Вы являетесь владельцем __get и __call – yivi

+0

Да, братец, это связано с неправильным наблюдением методов, работающих через __get, но они работали, как этот '$ this-> otherModel-> method()'. –

ответ

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.

+0

О, получилось, в других классах он работал из-за класса, на который ссылаются переменные, спасибо брату. –