php classe: problema ottenere valore da funzione in una variabile membro
-
28-09-2019 - |
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?
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.