web-dev-qa-db-fra.com

L'utilisation de ceci à l'intérieur d'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 lorsqu'il n'est pas dans le contexte de l'objet.

Comment puis-je faire en sorte que cela fonctionne?

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

C'est la bonne façon

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

Utilisation self:: au lieu de $this-> pour les méthodes statiques .

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

116
Sarfraz

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.

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

13
catchmeifyoutry

Seules les fonctions statiques peuvent être appelées dans la fonction statique en utilisant self :: si votre classe contient une fonction non statique que vous souhaitez 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();
    } 
}
?>
2
Gourav

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 interdite. 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 accéder à tout dans la portée de classe en dehors de la portée de l'instance.

2
Kangkan

Voici un exemple de ce qui se passe lorsqu'une méthode d'une classe est appelée de manière incorrecte. Vous verrez quelques avertissements lors de l'exécution de ce code mais cela fonctionnera et affichera: "Je suis A: impression de la propriété B". (Exécuté en php5.6)

class A {
    public function aMethod() {
        echo "I'm A: ";
        echo "printing " . $this->property;
    }
}

class B {
    public $property = "B property";

    public function bMethod() {
        A::aMethod();
    }
}

$b = new B();
$b->bMethod();

Il semble que la variable $ this, utilisée dans une méthode qui est appelée comme méthode statique, pointe vers l'instance de la classe "caller". Dans l'exemple ci-dessus, il y a la propriété $ this-> utilisée dans la classe A qui pointe vers une propriété du B.

MODIFIER:

La pseudo-variable $ this est disponible lorsqu'une méthode est appelée à partir d'un contexte d'objet. $ c'est une référence à l'objet appelant ( généralement l'objet auquel appartient la méthode, mais éventuellement un autre objet, si la méthode est appelée statiquement à partir du contexte d'un objet secondaire ). PHP> Les bases

1
Nicolai Nita

C'est dommage PHP n'affiche pas une erreur suffisamment descriptive. Vous ne pouvez pas utiliser $ this-> à l'intérieur d'une fonction statique, mais plutôt utiliser self :: si vous devez appeler une fonction à l'intérieur du même classe

0
Midas Mtileni