2010-04-02 5 views
3

J'ai des problèmes avec les méthodes d'appel de type MyClass::function(); et je ne comprends pas pourquoi. Voici un exemple (je suis en utilisant le framework Kohana BTW):Opérateur de résolution d'étendue PHP Question

class Test_Core 
{ 
    public $var1 = "lots of testing"; 

    public function output() 
    { 
    $print_out = $this->var1; 
    echo $print_out; 
    } 
} 

J'essaie d'utiliser ce qui suit pour l'appeler, mais il retourne var1 $ comme non défini:

Test::output() 

Cependant, cela fonctionne très bien :

$test = new Test(); 
    $test->output(); 

J'utilise généralement ce style d'appeler des objets par opposition au style « nouvelle classe », mais je ne peux pas comprendre pourquoi il ne veut pas travailler.

+0

Je ne sais pas pourquoi mais la plupart du script ne s'est pas montré dans la section de code. Ça avait l'air bien quand je l'ai prévisualisé. – anthony

Répondre

4

En utilisant ceci:

Test::output() 

Vous appelez votre méthode comme statique - et les méthodes statiques n'avez pas accès à l'instance propriétés, car il n'y a pas d'instance.

Si vous souhaitez utiliser une propriété, vous devez instancier la classe pour obtenir un objet et appeler les méthodes sur cet objet.


Quelques liens vers le manuel, comme référence:


la dernière page Citant I liés à:

Comme les méthodes statiques sont appelables sans une instance de l'objet créé, la pseudo-variable $this n'est pas disponible dans la méthode déclarée comme statique.

Et:

Appel de méthodes non statiques statiquement génère un avertissement de niveau E_STRICT.

-1

Essayez Test_Core::output() parce que vous utilisez un mauvais nom de classe

0

Vous ne pouvez pas utiliser $ ce pendant un appel statique car $ ceci est fait référence à l'objet qui est pas créé dans votre cas.