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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
아래 코드가 PHP 5.6부터 에러라고 하는데...왜 ?

QA

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

답변 2

본문

<?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(); }

}

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 0
© SIRSOFT
현재 페이지 제일 처음으로