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(); // `test()` чакырган класс тарабынан чакырылат
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Bны чыгарат

Бул жерде, static::who() A классынын ичинде, B класынан чакырылганда, B классына шилтеме кылып, B классынын who() методуна чакыруу жасайт.

Кийинчерээк статикалык байланыштыруу динамикалуу түрдө кайсы класс колдонулушу керек экенин аныктоого мүмкүндүк берет жана ал чын эле чакырылган класска көз карандуу болуп саналат. Бул класс хиерархиялары жана полиморфтук иш-аракеттери менен иштөөдө өзгөчө пайдалуу. Ал static:: шилтемелерин чечүү үчүн чакырылган "чалынбаган класс" (статикалык чакыруунун башталган акыркы класс) эсинде сактап, аны колдонуу аркылуу ишке ашырылат.