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(), եթե անհրաժեշտ է ուշ ստատիկ կապը։