Sobes.tech
Middle+

Ce este legarea statică târzie în PHP?

sobes.tech AI

Răspuns de la AI

Acest mecanism permite referirea la clasa apelată în contextul apelurilor statice. Rezolvă problema referințelor auto-referințe în clasele moștenite atunci când se utilizează cuvântul cheie static::.

Să luăm un exemplu cu self:::

<?php
class A {
    public static function who() {
        echo __CLASS__; // Va afișa A
    }
    public static function test() {
        self::who(); // Va apela A::who()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__; // Va afișa B
    }
}

B::test(); // Va afișa A

În acest caz, self::who() din clasa A va apela întotdeauna metoda who din clasa A, chiar dacă apelul test() provine din clasa B.

Acum, să vedem un exemplu cu static:::

<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Va apela who() din clasa care a inițiat apelul la test()
    }
}
class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Va afișa B

Aici, static::who() din clasa A atunci când este apelat din clasa B se va referi la clasa B și va apela metoda who() din clasa B.

Legătura statică întârziată permite determinarea dinamică a clasei care trebuie utilizată în contextul unui apel static, în funcție de clasa efectiv apelată. Acest lucru devine deosebit de util atunci când se lucrează cu ierarhii de clase și metode statice care trebuie să se comporte polimorfic. Funcționează prin reținerea "clasei apelate ne-redirecționate" (clasa finală din lanțul de moștenire de la care a început apelul static) și utilizarea acesteia pentru rezolvarea referințelor static::.