아래 코드가 PHP 5.6부터 에러라고 하는데...왜 ?
관련링크
본문
<?php
class A {
function f() { echo get_class($this); }
}
class B {
function f() { A::f(); }
}
(new B)->f();
?>
결과값:
Deprecated: Non-static method A::f() should not be called statically in C:\laragon\www\index.php on line 7
Fatal error: Uncaught Error: Using $this when not in object context in C:\laragon\www\index.php:3 Stack trace: #0 C:\laragon\www\index.php(7): A::f() #1 C:\laragon\www\index.php(10): B->f() #2 {main} thrown in C:\laragon\www\index.php on line 3
위 내용을 쉽게 풀어서 설명 가능하실까요?
위 코드가 에러 안 나게 하려면 어떻게 처리해야 하는지 궁금합니다.
답변 2
정적 메소드가 아닌데 정적으로 호출하고 있다는 에러입니다.
본래 PHP 에서 유연하게 처리해줬을 뿐이지
객체지향 언어의 기본격인 C++, Java 에서도 저렇게 사용하면 에러입니다.
인스턴스를 생성하고 해당 인스턴스로 접근을 해야합니다.
<?php
class A {
function f() { echo get_class($this); }
}
class B {
// function f() { A::f(); }
function f() { (new A)->f(); }
}
(new B)->f();
?>
정적으로 호출하려면 정적키워드인 static 을 기술해야 합니다.
<?php
class C {
private $a;
private static $c;
public function __construct() {
$this->a = new A();
self::$c = 'this is static variable';
}
public function f() { $this->a->f(); }
public static function staticF() { echo 'this is static method'; }
public static function staticC() { echo self::$c; }
}
(new C)->f();
C::staticF();
C::staticC();
?>
https://stackoverflow.com/questions/11237511/multiple-ways-of-calling-parent-method-in-php
원하시는 것이 이런 형태같군요
class B {
function f() { parent::f(); }
}