J'ai une question concernant la fonction statique en php.
supposons que j'ai une classe
class test {
public function sayHi() {
echo 'hi';
}
}
si je le fais, test::sayHi();
cela fonctionne sans problème.
class test {
public static function sayHi() {
echo 'hi';
}
}
test::sayHi();
fonctionne aussi bien.
Quelles sont les différences entre la première et la deuxième classe?
Quelle est la particularité d'une fonction statique?
Réponses:
Dans la première classe,
sayHi()
est en fait une méthode d'instance que vous appelez en tant que méthode statique et que vous vous en sortez car ellesayHi()
ne fait jamais référence$this
.Les fonctions statiques sont associées à la classe, pas à une instance de la classe. En tant que tel,
$this
n'est pas disponible à partir d'un contexte statique ($this
ne pointe vers aucun objet).la source
Simplement, les fonctions statiques fonctionnent indépendamment de la classe à laquelle elles appartiennent.
$ cela signifie que c'est un objet de cette classe. Il ne s'applique pas aux fonctions statiques.
la source
Toute la différence est que vous ne recevez pas
$this
la fonction statique. Si vous essayez d'utiliser$this
, vous obtiendrez un fichierFatal error: Using $this when not in object context
.Eh bien, d'accord, une autre différence: un
E_STRICT
avertissement est généré par votre premier exemple.la source
$this
fait référence à l'objet courant. Dans une fonction statique, il n'y a pas d'objet courant; la fonction existe sur la classe sans besoin ni référence à une instance d'objet de cette classe.L'appel de méthodes non statiques génère un avertissement de niveau E_STRICT de manière statique.
la source
En un mot, vous n'avez pas l'objet comme $ this dans le second cas, car la méthode statique est une fonction / méthode de la classe et non l'instance d'objet.
la source
Après avoir essayé des exemples (PHP 5.3.5), j'ai trouvé que dans les deux cas de définition de fonctions, vous ne pouvez pas utiliser l'
$this
opérateur pour travailler sur des fonctions de classe. Je n'ai donc pas encore trouvé de différence entre eux. :(la source