Sobes.tech
Junior — Middle

Kas nutiks, jei pogrupyje kreipiatės į metodą, kuris jame nėra apibrėžtas, naudodami self::?

sobes.tech AI

Atsakymas iš AI

PHP kalboje self:: raktinis žodis visada nurodo klasę, kurioje jis rašytas, o ne vaikų klasę. Jei vaikų klasėje iškviesite metodą naudodami self::, kuris nėra apibrėžtas pačioje vaikų klasėje, o yra tėvų klasėje, PHP bandys jį rasti būtent vaikų klasėje ir neradęs sukels klaidą.

Pavyzdys:

class ParentClass {
    public static function foo() {
        echo "Parent foo";
    }
}

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Bandymas iškviesti foo() per self:: vaikų klasėje
    }
}

ChildClass::bar(); // Klaida: Call to undefined method ChildClass::foo()

Norint iškviesti tėvų klasės metodą, reikia naudoti parent::foo() arba static::foo(), jei reikalingas vėlyvas statinis ryšys.