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이보고됩니다.왜 내 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을 conufusing하고 있습니다. – 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 

속성이 개체 컨텍스트에서만 작동합니다 과부하 것을 고려. 노력하는 __get

SessionManager::staticProperty; 

것이다 하지 작업과 같은 정적 속성에 액세스 할 수 있음을 의미

.

+0

오, 알았어. 다른 클래스에서, 변수, 감사 형제를 참조하는 클래스 때문에 일하고 있었다. –

관련 문제