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?

Était-ce utile?

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. : (

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top