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 θα καλεί πάντα τη μέθοδο who της κλάσης A, ακόμα και αν η κλήση 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 και θα καλεί τη μέθοδο who() της κλάσης B.

Η καθυστερημένη στατική δέσμευση επιτρέπει τον δυναμικό καθορισμό της κλάσης που πρέπει να χρησιμοποιηθεί στο πλαίσιο μιας στατικής κλήσης, ανάλογα με την πραγματική κλάση που καλείται. Αυτό γίνεται ιδιαίτερα χρήσιμο όταν εργάζεστε με ιεραρχίες κλάσεων και στατικές μεθόδους που πρέπει να συμπεριφέρονται πολυμορφικά. Λειτουργεί θυμίζοντας την "μη-ανακατευθυνόμενη κλάση που καλείται" (η τελική κλάση στη σειρά κληρονομιάς από την οποία ξεκίνησε η στατική κλήση) και χρησιμοποιώντας την για την επίλυση των αναφορών static::.