lors de l'utilisation de l'auto, le parent, le statique et comment?
Si maintenant j'ai compris un peu dans ststic Maintenant, je réalise que je ne comprends rien. Je suis tellement confus et j'ai du mal à comprendre et je ne peux pas. Quelqu'un peut expliquer ce programme lors de l'utilisation de l'auto, le parent, le statique et comment
Toute la petite modification que je ne change le résultat, sans que je ne comprends pas ce qui se passe.
merci beaucoup ..
le code de http://docs.php.net/language.oop5.late-static-bindings
<?php
class A {
public static function foo() {
static::who();
}
public static function who() {
echo __CLASS__."\n";
}
}
class B extends A {
public static function test() {
A::foo();
parent::foo();
self::foo();
}
public static function who() {
echo __CLASS__."\n";
}
}
class C extends B {
public static function who() {
echo __CLASS__."\n";
}
}
C::test();
?>
Les mettre sont:
A
C
C
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de comprendre le concept de Late Static Binding, qui détermine quand un identificateur est lié à du code ou des données. Vous pouvez dire à PHP de le lier au début (
self::
) ou plus tard (static::
).Amincissant l'exemple de deux classes, nous obtenons:
Regarder http://php.net/manual/en/language.oop5.static.php. Il dit:
Vous ne pouvez pas utiliser
$this
parce que lors de l'appel d'une méthode statique, il n'est pas instancié de la classe de l'objet à placer dans le$this
variable. Si vous utilisezself::
.parent::
est en se référant à la classe parent qui la classe actuelle est l'extension. Par exemple, pour la Classe C la classe parent est de Classe B et de Classe B, la classe parent est de Classe A. Voir http://php.net/manual/en/keyword.parent.php.Vous utilisez des méthodes statiques lorsque vous souhaitez que la fonction soit accessible sans avoir effectivement une instance de cette classe déclarée.
Après une inspection plus proche de votre question, votre lien pointe vers Late Static Bindings. Les deux premiers exemples dans cette page assez indiquent clairement la nécessité pour les
static::
syntaxe, mais pour préciser, pour l'exemple que vous avez posté le:Prendre un coup d'oeil à la
foo()
méthode dans la Classe A. Il appellestatic::who()
. Cela signifie que la méthodewho()
sera appelée dans le champ d'application de la classe qui a appelé la fonction, au lieu de la portée de la classe où la fonction est définie. Donc, si vous étiez à l'appelC::foo()
, il serait echo C.Si, au lieu de cela, il a appelé
self::who()
, il serait d'appelerA::who()
. Parce que dans la Classe A,self::
se réfère à A.Espérons que cette aide.
static::
contreself::
sont utilisés, ce qui est vraiment l'aspect le plus important de l'exemple de code.La clé de la réponse est statique::qui(), n'oubliez pas statique:: signifie que vous appelez la méthode avec la classe réelle (dans notre cas C).
C::test() exécuter comme suit:
si, au lieu de static::qui() foo appelait self::qui() vous auriez obtenir que trois à la suite.
static::
vsself::