2009-09-01 8 views
0

J'essaie de récupérer une variable d'une classe étendue. Voici comment ma classe principale ressemble:PHP Variable de la classe étendue

class SS { 
    public $NONE = NULL; 
    public $NUMBERS = array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0"); 
    public $OPERATORS = array("=", "&&", ">", "<", "+", "-", "/", "*", "^"); 
    public $DBLQUOTES = '"$1"'; 
    public $SNGQUOTES = "'$1'"; 
    public $CODE; 

    function SuperSyn($sCode, $cLang) {   
     $hLang = new VB6; 
     $VB6 = $hLang->__construct(); 
     echo $VB6->ssAuthor; 
    } 
} 

Et ma classe étendue ressemble à ceci (je l'ai enlevé plusieurs des mots-clés). Si je supprime la fonction publique __construct appelée, PHP se moque de l'attente d'une fonction.

Ma question est, comment puis-je récupérer une variable de la classe étendue dans ma classe principale?

Répondre

1

Le constructeur sera appelé pour vous lorsque vous créez un objet, donc cela devrait fonctionner:

function SuperSyn($sCode, $cLang) {      
    $hLang = new VB6(); //I think you need some parameters here 
    echo $VhLang->ssAuthor; 
} 

Cependant, dans votre constructeur VB6 vous n'êtes actuellement assignez des variables locales, de sorte que vous ne serait pas en mesure d'accéder à ssAuthor en externe. Au lieu de cela, vous voulez sans doute faire quelque chose comme:

class VB6 extends SS { 
    public $ssAuthor; 

    public function __construct() { 
     $this->ssAuthor = "James Brooks"; 
     //etc. 
    } 
} 
+0

C'est génial! Merci Tom! –

1

Utilise le mot-clé parent de php.

PHP parent

+0

Où si? Où est-ce que je mets le mot-clé? –

+1

Vérifiez: http://stackoverflow.com/questions/393204/using-parent-variables-in-a-extended-class-in-php Le sujet est discuté en détail. – KB22

0

Je pense qu'il ya un problème avec votre logique expectiation. Pourquoi une fonction de la classe SS devrait-elle connaître une variable qui n'existe que dans la sous-classe VB6?

Cela ne serait pas un comportement d'héritage propre et révèle un problème avec vos classes.

Deux choix pour résoudre que:

  • Mettez la variable dans la classe principale pour l'utiliser dans une fonction dans cette classe
  • Mettez la fonction en utilisant la variable de la sous-classe dans la sous-classe

(Après avoir lu les commentaires sur le mot-clé parent et la variable '$ this': J'ai compris la question différemment et je ne pense pas que l'une d'entre elles aiderait puisque la direction opposée est requise: fonction de classe parent> variable de sous-classe n> variable de classe parent)

+0

Eh bien l'idée de ceci est que vous serez capable de créer vos propres classes pour différentes langues, je dois être en mesure d'obtenir chacune des différentes règles de syntaxe de la classe. –

+0

Si vous devez extraire des informations individuelles des sous-classes, il peut être judicieux de rendre la classe SS abstraite et d'ajouter une fonction abstraite comme'getSyntaxRules() 'que chaque sous-classe doit implémenter et qui renvoie les règles de cette langue . –

0

utilisation parent:: ou $this-> (dépend, à savoir vous avez deux variables avec le même nom)

+0

Mais où? Si j'ai toujours la fonction dans la classe élargie, où? –

+0

attendre. après avoir relu votre code, cela n'a aucun sens.vous détenez un objet dérivé dans la classe de base? (SS: SuperSyn) et pourquoi ré-appliquez-vous toutes vos variables membres? néanmoins, cela devrait fonctionner: '$ ssNumbers = $ this-> NUMBERS' – knittl

Questions connexes