Sobes.tech
Junior — Middle

Ի՞նչ կլինի, եթե ենթակլասում դիմեք այն մեթոդին, որը այնտեղ չի սահմանված, օգտագործելով self::?

sobes.tech AI

Պատասխան AI-ից

PHP-ում self:: բանալի բառը միշտ հղվում է այն դասին, որտեղ այն գրված է, ոչ թե ժառանգական դասին: Եթե ժառանգական դասում self:: միջոցով կանչեք մեթոդ, որը չի սահմանվել հենց ժառանգական դասում, այլ ծնողական դասում, PHP-ն փորձելու է գտնել այդ մեթոդը հենց ժառանգական դասում և չի գտնի, ինչը կհանգեցնի սխալի:

Օրինակ՝

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

class ChildClass extends ParentClass {
    public static function bar() {
        self::foo(); // Փորձ է արվում կանչել foo()-ն self::-ով ChildClass-ում
    }
}

ChildClass::bar(); // Սխալ՝ Call to undefined method ChildClass::foo()

Ծնող դասի մեթոդը կանչելու համար պետք է օգտագործել parent::foo() կամ static::foo(), եթե անհրաժեշտ է ուշ ստատիկ կապը։