Sobes.tech
Middle+

Ispričaj o problemu kasnog statičnog povezivanja u kontekstu PHP.

sobes.tech АИ

Одговор од АИ

Kasno statičko povezivanje u PHP (static) omogućava referencu na pozvanu klasu u kontekstu nasleđivanja, čime rešava problem referenciranja na roditeljsku klasu (self).

Problem nastaje kada se unutar roditeljske klase koristi self::, koji prilikom poziva iz deteta klase i dalje referiše na roditeljsku klasu. To je u suprotnosti sa očekivanjem da referenca bude na trenutnu, dete klasu.

Primer korišćenja self:: i njegovog ponašanja:

<?php
class ParentClass {
    public static function ko_sam() {
        return __CLASS__;
    }

    public static function ko_je_zvao() {
        return self::ko_sam();
    }
}

class ChildClass extends ParentClass {
    public static function ko_sam() {
        return __CLASS__;
    }
}

echo ChildClass::ko_je_zvao(); // Prikazaće ParentClass
?>

Ovde, self::ko_sam() unutar ParentClass::ko_je_zvao() i dalje referiše na ParentClass, čak i kada se metoda poziva preko ChildClass.

Da bi se rešio ovaj problem, koristi se static::. Ovo se naziva kasno statičko povezivanje, jer se povezivanje dešava u vreme izvršavanja, a ne pri kompajliranju.

Primer korišćenja static:: za rešavanje problema:

<?php
class ParentClassCorrected {
    public static function ko_sam() {
        return __CLASS__;
    }

    public static function ko_je_zvao() {
        return static::ko_sam(); // Koristimo static:: umesto self::
    }
}

class ChildClassCorrected extends ParentClassCorrected {
    public static function ko_sam() {
        return __CLASS__;
    }
}

echo ChildClassCorrected::ko_je_zvao(); // Prikazaće ChildClassCorrected
?>

Sada, static::ko_sam() unutar ParentClassCorrected::ko_je_zvao() referiše na ChildClassCorrected, kada se metoda pozove preko ChildClassCorrected.

Na ovaj način, kasno statičko povezivanje pomoću static:: omogućava metodama u roditeljskoj klasi da ispravno referenciraju metode ili svojstva pozvane klase u hijerarhiji nasleđivanja.