2010-11-09 7 views
0
<?php 
class Popular 
{ 
    public static function getVideo() 
    { 
     return $this->parsing(); 
    } 
} 

class Video 
    extends Popular 
{ 
    public static function parsing() 
    { 
     return 'trololo'; 
    } 

    public static function block() 
    { 
     return parent::getVideo(); 
    } 
} 

echo Video::block(); 

Je certainement appeler la classe de cette façon:Comment invoquer une méthode de façon statique?

Video::block(); 

et non initialiser

$video = new Video(); 
echo $video->block() 

pas!

Video::block(); // Only this way << 

Mais: Erreur fatale: Utiliser $ quand pas dans le contexte de l'objet dans myFile.php en ligne 6

Comment appeler la fonction « analyse syntaxique » de la classe « populaire »?

Soooooooory pour mauvais anglais

+0

sur une note connexe, lire des liaisons sur les fin statiques. http://php.net/manual/fr/language.oop5.late-static-bindings.php – zzzzBov

+0

Vous devriez éviter les méthodes statiques si possible. [Ils sont la mort à la testabilité] (http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability). – Gordon

+0

Vous ne pouvez pas utiliser $ this dans un contexte statique. Utilisez-vous comme suggéré ci-dessous. – Vikash

Répondre

2

En tant que votre utilisant une méthode statique, vous ne pouvez pas utiliser $this mot-clé comme cela ne peut être utilisé dans des objets, et non des classes.

Lorsque vous utilisez le mot-clé new, votre création et objet d'une classe, si vous ne l'avez pas utilisé le nouveau mot-clé alors $this ne serait pas disponible comme pas un objet

Pour votre code travail, étant statique, vous devrez utiliser le static keyowrd avec Scope Resolution Operator (::) comme votre méthode est dans une classe parente et son n'est pas bornée, utilisez le mot-clé static pour appeler la méthode statique parent.

Exemple:

class Popular 
{ 
    public static function getVideo() 
    { 
     return static::parsing(); //Here 
    } 
} 
1

changement return $this->parsing();-return self::parsing();

+0

'self :: parsing()' va essayer d'appeler 'Popular :: parsing()', qui n'existe pas. Si vous utilisez PHP 5.3.0 (ou version ultérieure), vous devez utiliser des liaisons statiques en retard, c'est-à-dire 'static :: parsing()'. – Aether

Questions connexes