> 백엔드 개발 > PHP 튜토리얼 > PHP 정적 함수의 $this 문제

PHP 정적 함수의 $this 문제

WBOY
풀어 주다: 2016-10-24 00:12:42
원래의
1706명이 탐색했습니다.

A등급{

<code>    public $age = 50;
    private $money = 2000;
    static public $head = 1;
    public function tell(){
            echo $this->age,'<br />';
            echo self::$head,'<br />';
    }
    static public function sayMoney(){
            echo $this->money,'<br />';
    }</code>
로그인 후 복사
로그인 후 복사

}
클래스 B가 A를 확장합니다.{

<code>    public $age = 22;
    private $money = 10;
    public function subtell(){
            parent::tell();
            echo $this->age,'<br />';
    }
    public function subMoney()
    {
            parent::sayMoney();
            echo $this->money,'<br />';

    }</code>
로그인 후 복사
로그인 후 복사

}

$b = new B();
$b->subtell();//22 1 22;

에코'


';
$b->subMoney();

마지막 문장에서는 객체 컨텍스트에 없을 때 $this를 사용하면 오류가 발생한다고 보고합니다
그러나 $this는 subMoney()가 호출될 때 바인딩되지 않습니다. $this는 b 객체를 가리키고 parent::sayMoney()가 실행됩니다. $this는 바인딩되지 않습니다. sayMoney()가 실행될 때 왜 오류가 발생합니까? 이전 $b-> subtell() 호출과 무엇이 다른가요?

답글 내용:

A등급{

<code>    public $age = 50;
    private $money = 2000;
    static public $head = 1;
    public function tell(){
            echo $this->age,'<br />';
            echo self::$head,'<br />';
    }
    static public function sayMoney(){
            echo $this->money,'<br />';
    }</code>
로그인 후 복사
로그인 후 복사

}
클래스 B가 A를 확장합니다.{

<code>    public $age = 22;
    private $money = 10;
    public function subtell(){
            parent::tell();
            echo $this->age,'<br />';
    }
    public function subMoney()
    {
            parent::sayMoney();
            echo $this->money,'<br />';

    }</code>
로그인 후 복사
로그인 후 복사

}

$b = new B();
$b->subtell();//22 1 22;

에코'


';
$b->subMoney();

마지막 문장에서는 객체 컨텍스트에 없을 때 $this를 사용하면 오류가 발생한다고 보고합니다
그러나 $this는 subMoney()가 호출될 때 바인딩되지 않습니다. $this는 b 객체를 가리키고 parent::sayMoney()가 실행됩니다. $this는 바인딩되지 않습니다. sayMoney()가 실행될 때 왜 오류가 발생합니까? 이전 $b-> subtell() 호출과 무엇이 다른가요?

정적 메서드 내에서는 this을 사용할 수 없습니다. 정적 속성과 메서드가 생성되면 호출할 수 있는 이 클래스의 인스턴스가 없을 수 있습니다. classA::staticMethod() 또는 $a = new classA(); $a->staticMethod()을 사용할 수는 없습니다. this

잘못 읽었습니다

위 사람 말이 맞네요. 두 번째 함수는 static을 사용하기 때문에 $this를 사용할 수 없습니다

원래 답변은 다음과 같습니다

private은 비공개이며 상속된 클래스라도 클래스 내에서만 액세스를 허용함을 나타냅니다.

상속된 액세스가 허용되고 외부 액세스를 원하지 않는 경우 보호됨으로 변경할 수 있습니다.

추가로 해당 클래스의 인스턴스가 생성되고 $this는 어떤 클래스인지 나타냅니다.

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿