Sobes.tech
Middle+

Ինչ է ուշացած ստատիկ կապը 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::-ի լուծման համար կոչված ոչ-ուղղորդված դասը (վերջին դասը ժառանգության շղթայում, որտեղ սկսվել է ստատիկ կանչը) և օգտագործելով այն։