88 votes

L'utilisation de $this dans une fonction statique échoue

J'ai cette méthode dans laquelle je veux utiliser $this mais tout ce que j'obtiens est : Erreur fatale : Utilisation de $this en dehors du contexte de l'objet.

Comment faire pour que ça marche ?

public static function userNameAvailibility()
{
     $result = $this->getsomthin();
}

155voto

Sarfraz Points 168484

C'est la manière correcte

public static function userNameAvailibility()
{
     $result = self::getsomthin();
}

Utilice self:: au lieu de $this-> para méthodes statiques .

Voir : Tutoriel sur les méthodes statiques en PHP pour plus d'informations :)

15voto

catchmeifyoutry Points 4956

Vous ne pouvez pas utiliser $this à l'intérieur d'une fonction statique, car les fonctions statiques sont indépendantes de tout objet instancié. Essayez de rendre la fonction non statique.

Modifier : Par définition, les méthodes statiques peuvent être appelées sans qu'aucun objet ne soit instancié, et il n'y a donc pas d'utilisation significative de l'option $this à l'intérieur d'une méthode statique.

6voto

zeeann Points 11

Seules les fonctions statiques peuvent être appelées à l'intérieur de la fonction statique en utilisant self: : si votre classe contient une fonction non statique que vous voulez utiliser, vous pouvez déclarer l'instance de la même classe et l'utiliser.

<?php
class some_class{
function nonStatic() {
    //.....  Some code ....   
    }
 Static function isStatic(){
    $someClassObject = new some_class;
    $someClassObject->nonStatic();
    } 
}
?>

3voto

Kangkan Points 7119

L'accesseur this fait référence à l'instance actuelle de la classe. Comme les méthodes statiques ne s'exécutent pas sur l'instance, l'utilisation de this est interdit. Il faut donc appeler la méthode directement ici. La méthode statique ne peut accéder à rien dans la portée de l'instance, mais elle peut accéder à tout ce qui se trouve dans la portée de la classe en dehors de la portée de l'instance.

1voto

Midas Mtileni Points 91

C'est dommage que PHP n'affiche pas une erreur suffisamment descriptive. Vous ne pouvez pas utiliser $this-> dans une fonction statique, mais plutôt utiliser self: : si vous devez appeler une fonction dans la même classe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X