Liaison tardive statique en PHP, c’est quoi exactement ?
Réponses
Trop de publicités?Vous devez absolument lire Late Static Bindings dans le manuel PHP. Cependant, je vais essayer de vous donner un rapide résumé.
En gros, ça se résume au fait que l' self
mot clé n'a pas suivi les règles de l'héritage. self
résout toujours à la classe dans laquelle il est utilisé. Cela signifie que si vous avez une méthode dans une classe parent et l'appeler à partir d'un enfant de la classe, self
pas référence à l'enfant que vous pourriez vous attendre.
Late static binding introduit une nouvelle utilisation pour l' static
mot-clé, qui traite de cette lacune. Lorsque vous utilisez static
, il représente la classe où la première utilisation, c'est à dire. il " lie " à la classe d'exécution.
Ce sont les deux concepts de base derrière elle. La façon dont self
, parent
et static
fonctionner lors de l' static
est en jeu peuvent être subtiles, alors plutôt que d'aller dans pour plus de détails, je voudrais vous recommandons fortement d'étude à la page de manuel des exemples. Une fois que vous comprenez les bases de chaque mot-clé, les exemples sont tout à fait nécessaire pour voir quel genre de résultats que vous allez obtenir.
Depuis PHP 5.3.0, PHP implémente une fonctionnalité appelée late static binding qui peut être utilisé pour faire référence à la classe appelée dans le contexte de l'héritage statique.
Late static binding tente de résoudre cette limitation par l'introduction d'un mot-clé qui fait référence à la classe qui a été appelée lors de l'exécution. Il a été décidé de ne pas introduire un nouveau mot-clé, mais plutôt d'utiliser static
qui était déjà réservé.
Voyons un Exemple:
<?php
class Car
{
public static function run()
{
return static::getName();
}
private static function getName()
{
return 'Car';
}
}
class Toyota extends Car
{
public static function getName()
{
return 'Toyota';
}
}
echo Car::run(); // output: Car
echo Toyota::run(); // output: Toyota.
?>
late static bindings
de travail en stockant le nom de la classe dans le dernier "non-renvoi d'appel". Dans le cas de la statique des appels de méthode, c'est la classe explicitement nommés (généralement l'un sur la gauche de l'opérateur::); en cas de non-statiques, les appels de méthode, c'est la classe de l'objet.
Un "renvoi d'appel" est statique qui est introduit par l' self::
, parent::
, static::
, ou, si en remontant dans la hiérarchie de classe, forward_static_call()
.
La fonction get_called_class()
peut être utilisée pour récupérer une chaîne de caractères avec le nom de la classe et de l' static::
présente son champ d'application.