Domanda

Sto cercando di recuperare una variabile da una classe estesa.Ecco come appare la mia classe principale:

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;
    }
}

E la mia lezione estesa assomiglia a questa (ho rimosso molte parole chiave).

class VB6 extends SS {
    public function __construct() {
        $ssAuthor = "James Brooks";
        $ssCSS = "languages/vb6.css";
        $ssNumbers = $NUMBERS;
        $ssKeywords = array("Abs", "Access", "AddItem");
        $ssReserved = $NONE;
        $ssComments = "('.+)";
        $ssOperators = $OPERATORS;
        $ssDoubleQuote = $NONE;
        $ssSingleQuote = $NONE;
    }
}

Se rimuovo la funzione pubblica __construct chiamata, PHP si lamenta che si aspetta una funzione.

La mia domanda è: come posso recuperare una variabile dalla classe estesa nella mia classe principale?

È stato utile?

Soluzione

Il costruttore si chiamerà per voi quando si crea un oggetto, quindi questo dovrebbe funzionare:

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

Tuttavia nel costruttore VB6 si stanno attualmente solo Assegnazione di variabili locali, in modo che non sarebbe in grado di accedere ssAuthor esternamente. Invece, probabilmente si vuole fare qualcosa di simile:

class VB6 extends SS {
    public $ssAuthor;

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

Altri suggerimenti

Utilizza la parola chiave principale di php.

Genitore PHP

uso parent:: o $this-> (dipende, cioè si hanno due variabili con lo stesso nome)

Credo che ci sia un problema con la vostra logica expectiation. Perché una funzione della classe di SS dovrebbe conoscere una variabile che esiste solo nella sottoclasse VB6?

Non sarebbe un comportamento eredità pulito e rivela un problema con le classi.

Due scelte per risolvere questo:

  • Inserire la variabile nella classe principale di usarlo in una funzione in quella classe
  • Inserire la funzione utilizzando variabili della sottoclasse all'interno della sottoclasse

(Dopo aver letto i commenti sul parola chiave principale e 'variabile $ this': ho capito la questione in modo diverso e non credo che uno di coloro ai aiuterebbe in quanto è richiesta la direzione opposta: la funzione classe padre> variabile sottoclasse, non funzione sottoclasse> variabile di classe genitore)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top