PHP Reliure statique tardive


Exemple

En PHP 5.3+ et ci-dessus, vous pouvez utiliser une liaison statique tardive pour contrôler la classe à partir de laquelle une propriété ou une méthode statique est appelée. Il a été ajouté pour résoudre le problème inhérent au résolver self:: scope. Prenez le code suivant

class Horse {
    public static function whatToSay() {
         echo 'Neigh!';
    }

    public static function speak() {
         self::whatToSay();
    }
}

class MrEd extends Horse {
    public static function whatToSay() {
         echo 'Hello Wilbur!';
    }
}

Vous vous attendez à ce que la classe MrEd remplace la fonction parent whatToSay() . Mais quand nous courons cela nous obtenons quelque chose d'inattendu

Horse::speak(); // Neigh!
MrEd::speak(); // Neigh!

Le problème est que self::whatToSay(); ne peut se référer qu'à la classe Horse , ce qui signifie qu'il n'obéit pas à MrEd . Si nous basculons sur le static:: scope, nous n’avons pas ce problème. Cette nouvelle méthode indique à la classe d'obéir à l'instance qui l'appelle. Ainsi, nous obtenons l'héritage attendu

class Horse {
    public static function whatToSay() {
         echo 'Neigh!';
    }

    public static function speak() {
         static::whatToSay(); // Late Static Binding
    }
}

Horse::speak(); // Neigh!
MrEd::speak(); // Hello Wilbur!