Utilisez self:: ou __CLASS__ pour faire une référence statique à la classe actuelle, selon la classe dans laquelle la méthode actuelle est définie : l'utilisation de static:: n'est plus analysée dans la classe dans laquelle la méthode actuelle est définie, mais est calculé au moment de l'exécution réelle. Elle peut également être appelée « liaison statique » car elle peut être utilisée pour (mais sans s’y limiter) des appels à des méthodes statiques.
On m'a récemment posé une petite question dans les commentaires d'une vidéo : y a-t-il des considérations particulières lors du choix d'utiliser static au lieu de self ici ? Ou nous pouvons changer la question comme ceci :
Que sont exactement le nouveau statique et le nouveau moi de PHP ?
En fait, cela devrait être très clair si nous regardons un exemple :
class Father { public static function getSelf() { return new self(); } public static function getStatic() { return new static(); } } class Son extends Father {} echo get_class(Son::getSelf()); // Father echo get_class(Son::getStatic()); // Son echo get_class(Father::getSelf()); // Father echo get_class(Father::getStatic()); // Father
Notez cette ligne ici get_class(Son::getStatic());
renvoie la classe Son
, qui peut se résumer ainsi :
nouveau soi
1 .self
renvoie la classe dans laquelle se trouve le mot-clé new self
dans new
Par exemple, dans cet exemple :
public static function getSelf() { return new self(); // new 关键字在 Father 这里 }
. Father
Basé sur ce qui précède, c'est un peu plus intelligent : static
renverra la classe qui exécute static
, comme new static()
exécutant Son
Ce qui est renvoyé est get_class(Son::getStatic())
, Son
exécute Father
et ce qui est renvoyé est get_class(Father::getStatic())
Father
et new self
. renvoie le même résultat. new static