Ինչ է ուշացած ստատիկ կապը PHP-ում։
sobes.tech AI
Պատասխան AI-ից
Այս մեխանիզմը թույլ է տալիս հղում կատարել կանչված դասին ստատիկ կանչերի կոնտեքստում: Այն լուծում է ինքնահղման խնդիրները ժառանգվող դասերում static:: բանալի բառի օգտագործման ժամանակ:
Եկեք դիտենք self:: օգտագործող օրինակ:
<?php
class A {
public static function who() {
echo __CLASS__; // Տպում է A
}
public static function test() {
self::who(); // Կանչում է A::who()
}
}
class B extends A {
public static function who() {
echo __CLASS__; // Տպում է B
}
}
B::test(); // Տպում է A
Այս դեպքում, self::who() դասի A ներսում միշտ կանչում է A դասի who մեթոդը, նույնիսկ եթե test() կանչը գալիս է B դասից:
Հիմա դիտենք static:: օգտագործող օրինակ:
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // Կանչում է այն `who()`-ն, որը սկսեց `test()`-ի կանչը
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); // Տպում է B
Այստեղ, static::who() A դասի ներսում, երբ կանչվում է B դասից, հղվում է B դասին և կանչում B դասի who() մեթոդը:
Որոշված է, որ ուշ ստատիկ կապը թույլ է տալիս դինամիկ կերպով որոշել, որ դաս օգտագործել ստատիկ կանչի կոնտեքստում, կախված այն դասից, որը իրականում կանչվել է: Սա հատկապես օգտակար է դասերի հիերարխիաներով աշխատելիս և ստատիկ մեթոդների դեպքում, որոնք պետք է դրսևորեն պոլիմորֆ վարք: Այն աշխատում է հիշելով static::-ի լուծման համար կոչված ոչ-ուղղորդված դասը (վերջին դասը ժառանգության շղթայում, որտեղ սկսվել է ստատիկ կանչը) և օգտագործելով այն։