아래 코드가 PHP 5.6부터 에러라고 하는데...왜 ?

아래 코드가 PHP 5.6부터 에러라고 하는데...왜 ?

QA

아래 코드가 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(); }

}

 

답변을 작성하시기 전에 로그인 해주세요.
전체 2

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT