2013-05-29 2 views
0

직접 만든 패키지가 있습니다. 서비스 제공자와 함께 $app 인스턴스를 실제 클래스에 전달합니다. 그런 다음 세션 구성 요소 기능을 사용하려면패키지의 구성 요소를 조명하십시오.

$this->app['session']->get('key', 'value'); 

을 사용하십시오. 그래서 난 그냥

Session::get(...) 

를 사용하여 시도

Using $this when not in object context

하지만 그것은 클래스를 찾을 수없는 말한다 : 그러나, 나는이 프로그램을 실행할 때, 나는 다음과 같은 오류가 발생합니다.

어떻게 해결할 수 있습니까?

이 내 전체 클래스 :

namespace AlexCogn\Messenger; 

use Illuminate\Foundation\Application as Application; 

    class Messenger 
    { 
    protected $app; 

    public function __construct(Application $app) 
    { 
     $this->app = $app; 
    } 

    public static function messages() 
    { 
     $messages = $this->app['session']->get('messages', array()); 

     $this->app['session']->forget('messages'); 

     return $messages; 
    } 

    public function addMessage($message) 
    { 
     $messages = $this->app['session']->get('messages', array()); 
     array_push($messages, $message); 

     $this->app['session']->put('messages', $messages); 
    } 
} 

편집 : 나는 외관을 통해 메신저를 호출 오전 :

분명히 모든 사람이 질문을 이해

Messenger::addMessage('test'); 

을 나는 Laravel 변환 생각 this to $ app [ 'messenger'] -> addMessage ('test');

인스턴스를 통해 호출하지 않아야합니까?

+1

그래야하지만, 문제는 정적으로 메서드를 정의하고 있다는 것입니다. 이제'''$ app [ 'messenger'] -> addMessage ('test');''는 정적 호출이 아닌 인스턴스로부터의 호출이라고합니다. – crynobone

+0

@crynobone 감사합니다. 메서드 선언에서 정적을 제거하여 해결했습니다! –

답변

0

$this을 클래스의 정적 메서드에서 호출하려고합니다. 이것은 작동하지 않습니다.

  • 방법 내부 클래스의 내부 인스턴스 (즉 $this->foo())
  • 를 통해 호출되었습니다 PHP의 정의에 의하면, $this는 다음 범위에서만 사용할 수 있습니다 (그리고 그렇지 않으면 바보 같은 것 때문에) 이 다른

뭐든지 this의 원인이되는 Runkit 라이브러리를 사용하여 재정의 된 Callable 내부

  • (__construct() 내부) 생성자는 치명적인 전자를 트리거합니다 당신이 방금받은 반역자. 코드를 작성하지 않았으므로 픽스를 제안 할 수는 없지만, 필요한 경우 해결책을 찾을 수있을 것입니다.

  • +0

    나는 그것을 알고 있지만 이것이 Laravel에 특정한 것이 아닌가? 나머지 코드는 그렇게 중요하지 않아야합니까? –

    +0

    @AlexanderCogneau : 힌트 : 붙여 넣은 코드 줄의 처음 다섯 글자는'$ this'입니다. 메소드의 전체 본문을 게시하십시오. 그렇게하는 동안'static' 키워드를 보게 될 것이라고 확신합니다. –

    +0

    static 키워드를 삭제했지만 여전히 작동하지 않습니다. –

    관련 문제