테스트 사이트 - 개발 중인 베타 버전입니다

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

sinbi 3년 전 조회 1,520

<?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개

채택된 답변
+20 포인트
3년 전

정적 메소드가 아닌데 정적으로 호출하고 있다는 에러입니다.

 

본래 PHP 에서 유연하게 처리해줬을 뿐이지

객체지향 언어의 기본격인 C++, Java 에서도 저렇게 사용하면 에러입니다.

인스턴스를 생성하고 해당 인스턴스로 접근을 해야합니다.

 

</p>

<p><?php

class A {

    function f() { echo get_class($this); }

}</p>

<p>class B {

    // function f() { A::f(); }

    function f() { (new A)->f(); }

}</p>

<p>(new B)->f();

?></p>

<p>

 

정적으로 호출하려면 정적키워드인 static 을 기술해야 합니다.

</p>

<p><?php</p>

<p>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; }

}</p>

<p>(new C)->f();

C::staticF();

C::staticC();</p>

<p>?></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

s
sinbi
3년 전
자세한 설명 감사합니다.
아직 공부가 부족해 100% 이해는 못 했지만, 큰 도움이 되었습니다.

댓글을 작성하려면 로그인이 필요합니다.

https://stackoverflow.com/questions/11237511/multiple-ways-of-calling-parent-method-in-php

원하시는 것이 이런 형태같군요

class B {

    function f() { parent::f(); }

}

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

s
sinbi
3년 전
이미 채택된 질문에 관심 갖고 답변 남겨주셔서 정말 감사합니다.
( ^ __________ ~ ) ===b
엑스엠엘
3년 전
게을러서
댓글을 늦게 달았네요. ^^

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인