class foobar {
public $foo;
public function __construct() {
global $foo;
$this->foo = $foo;
}
public function foobarfunc() {
return $this->foo();
}
public function foo() {
return $this->foo;
}
}
Code language: PHP (php)
이렇게 작성이 되어있을때 $this->foo
이렇게 쓰는 문법이 계속 틀리다고 나온다.
foobar::foobarfunc();
Code language: CSS (css)
위와 같이 사용하는 것 또한 오류를 발생한다.
오류가 발생하는 이유는 무엇인가?
🔑 해결
$this에 나타나는 오류
public function
내부에서 사용된 $this
는 Cannot use '$this' in non-object context
라는 오류 메세지를 띄운다.
- 비 정적 메서드에 대해 정적 호출을 사용해서는 안됩니다.
- 정적 메서드 (또는 정적으로 호출되는 메서드)는 정적 호출을 사용할 때 클래스 인스턴스가 없기 때문에 일반적으로 클래스의 현재 인스턴스를 가리키는
$this
를 사용할 수 없습니다.
여기에서 클래스의 메서드는 클래스의 $foo
속성에 액세스 해야하므로 클래스의 현재 인스턴스를 사용합니다.
즉, 메서드에 클래스의 인스턴스가 필요하므로 정적 일 수 없습니다.
정적 호출을 사용해서는 안됩니다. 코드의 마지막 부분에서 했던 것 처럼 클래스를 인스턴스화하고 객체를 사용하여 메서드를 호출해야 합니다.
참고