상현에 하루하루
All 개발자의 하루

클래스에서 $this가 왜 오류가 날까?

( 업데이트: )
class foobar {

    public $foo;

    public function __construct() {
        global $foo;

        $this->foo = $foo;
    }

    public function foobarfunc() {
        return $this->foo();
    }

    public function foo() {
        return $this->foo;
    }
}

이렇게 작성이 되어있을때 $this->foo 이렇게 쓰는 문법이 계속 틀리다고 나온다.

foobar::foobarfunc();

위와 같이 사용하는 것 또한 오류를 발생한다.
오류가 발생하는 이유는 무엇인가?

🔑 해결

$this에 나타나는 오류

public function 내부에서 사용된 $thisCannot use '$this' in non-object context라는 오류 메세지를 띄운다.

  • 비 정적 메서드에 대해 정적 호출을 사용해서는 안됩니다.
  • 정적 메서드 (또는 정적으로 호출되는 메서드)는 정적 호출을 사용할 때 클래스 인스턴스가 없기 때문에 일반적으로 클래스의 현재 인스턴스를 가리키는 $this를 사용할 수 없습니다.

여기에서 클래스의 메서드는 클래스의 $foo 속성에 액세스 해야하므로 클래스의 현재 인스턴스를 사용합니다.

즉, 메서드에 클래스의 인스턴스가 필요하므로 정적 일 수 없습니다.

정적 호출을 사용해서는 안됩니다. 코드의 마지막 부분에서 했던 것 처럼 클래스를 인스턴스화하고 객체를 사용하여 메서드를 호출해야 합니다.


참고