7

この例の非サティック メソッドへの「自己」呼び出しが機能するのはなぜですか?

class A{

    protected function aNonStaticMethod(){
        return __class__;
    }

    public function aEcho(){
        echo self::aNonStaticMethod();
    }
}

説明ありがとう。

4

2 に答える 2

7

あなたの簡単な例では、 $this と self は交換可能です。ただし、継承を処理するときに解決される別のメソッドに注意してください (完全を期すために static を追加しました)。

class A {
    protected function aNonStaticMethod(){
        return __class__;
    }

    public function selfEcho(){
        echo self::aNonStaticMethod();
    }

    public function staticEcho(){
        echo static::aNonStaticMethod();
    }

    public function thisEcho(){
        echo $this->aNonStaticMethod();
    }
}

class B extends A {
    protected function aNonStaticMethod(){
        return __class__;
    }
}

$b = new B();
$b->selfEcho(); // A
$b->staticEcho(); // B
$b->thisEcho(); // B
于 2014-01-23T15:43:59.220 に答える