Sobes.tech
Junior — Middle

Kas notiks, ja apakšklasē izsauc metodi, kas tajā nav definēts, izmantojot self::?

sobes.tech AI

Atbilde no AI

PHP valodā atslēgas vārds self:: vienmēr attiecas uz klasi, kurā tas ir rakstīts, nevis uz mantoto klasi. Ja mantotajā klasē ar self:: izsauc metodi, kas nav definēta pašā mantotajā klasē, bet vecākklasē, PHP mēģinās to atrast tieši mantotajā klasē un neatradīs, kas novedīs pie kļūdas.

Piemērs:

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

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Mēģinājums izsaukt foo() ar self:: ChildClass
    }
}

ChildClass::bar(); // Kļūda: Call to undefined method ChildClass::foo()

Lai izsauktu vecāklases metodi, jāizmanto parent::foo() vai static::foo(), ja nepieciešama vēlā statiskā saite.