Domanda

Ho una funzione che ottiene un valore dal database e lo restituisce. Chiamo la funzione per memorizzare in una variabile membro ma ottengo il seguente errore:

Parse error: parse error, expecting `','' or `';'' in I:\wamp\www\deposit\classes\Site.php on line 14

Questa è la linea che causa l'errore

public static $depositmoney = self::get_balance();

E questa è la funzione che ottiene il valore dal database

    public static function get_balance()
    {
        global $link, $usertable, $userid, $useridentify;

        //query current balance
        $cb = mysqli_fetch_object(mysqli_query($link, "SELECT deposit FROM ".$usertable." WHERE ".$userid."=".$useridentify.""));
        return $cb->deposit;

    }//end of function get_balance().

tutto questo codice è nella stessa classe. Chiunque un'idea di che cosa sta causando l'errore?

È stato utile?

Soluzione

Le proprietà delle classi non può essere dichiarato con le informazioni di run-time.

public static $depositmoney = self::get_balance();

È possibile che questo non funzionerà.

Vedere la Manuale PHP su Proprietà Classe: ( sottolineatura mia)

  

variabili membro di classe sono chiamati "proprietà". Si può anche vedere loro indicati utilizzando altri termini come "attributi" o "campi", ma per gli scopi di questo riferimento useremo "proprietà". Essi sono definiti utilizzando una delle parole chiave del pubblico, protetto o privato, seguito da una dichiarazione di variabile normale. Questa dichiarazione può includere un'inizializzazione, ma questa inizializzazione deve essere un valore costante - cioè, deve essere in grado di valutare in fase di compilazione e non deve dipendere informazioni run-time, per essere valutato .

È possibile creare un getter per $depositmoney e farlo inizializzare il valore se è attualmente impostata:

public static function getDepositMoney()
{
    if(self::$depositmoney === NULL) {
        self::$depositmoney = self::get_balance();
    }
    return self::$depositmoney;
}

Tuttavia, vi consiglio di sbarazzarsi dei metodi e delle proprietà static e l'utilizzo di istanza invece di monitorare lo stato. Si vuole anche per sbarazzarsi della roba global e le dipendenze iniettarlo attraverso il costruttore, setter o durante la chiamata di metodo. Che diminuisce l'accoppiamento e renderà il codice più mantenibile.

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