php fonction statique
Question
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 ne 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 classe et la classe seconde?
Quelle est la particularité d'une fonction statique?
La solution
Dans la première classe, sayHi()
est en fait une méthode d'instance que vous appelez comme une méthode statique et vous sortir avec elle parce que sayHi()
ne fait jamais référence à $this
.
Les fonctions statiques sont associées à la classe, et non pas une instance de la classe. En tant que tel, $this
ne sont pas disponibles à partir d'un contexte statique ($this
ne pointe pas sur un objet).
Autres conseils
Il suffit, les fonctions statiques fonctionnent indépendamment de la classe où ils appartiennent.
$, cela signifie, cela est un objet de cette classe. Il ne concerne pas les fonctions statiques.
class test {
public function sayHi($hi = "Hi") {
$this->hi = $hi;
return $this->hi;
}
}
class test1 {
public static function sayHi($hi) {
$hi = "Hi";
return $hi;
}
}
// Test
$mytest = new test();
print $mytest->sayHi('hello'); // returns 'hello'
print test1::sayHi('hello'); // returns 'Hi'
différence est entière, vous ne recevez pas $this
fourni dans la fonction statique. Si vous essayez d'utiliser $this
, vous obtiendrez un Fatal error: Using $this when not in object context
.
Bon, d'accord, une autre différence:. Un avertissement E_STRICT
est généré par votre premier exemple
Appel de méthodes non statiques génère statiquement un avertissement du niveau de E_STRICT.
En un mot, vous n'avez pas l'objet en tant que $ dans le second cas, comme la méthode statique est une fonction / méthode de la classe pas l'instance d'objet.
Après avoir essayé des exemples (PHP 5.3.5), je trouve que dans les deux cas, de définir les fonctions que vous ne pouvez pas utiliser l'opérateur de $this
pour travailler sur des fonctions de classe. Donc, je ne pouvais pas trouver une différence encore en eux. : (