php classe: Problem bekommen Wert von Funktion in eine Membervariable
-
28-09-2019 - |
Frage
habe ich eine Funktion, die einen Wert aus der Datenbank und gibt es nur geht. Ich rufe die Funktion in eine Membervariable zu speichern, aber ich bekomme die folgende Fehlermeldung:
Parse error: parse error, expecting `','' or `';'' in I:\wamp\www\deposit\classes\Site.php on line 14
Das ist die Linie, die den Fehler verursacht
public static $depositmoney = self::get_balance();
Und das ist die Funktion, die den Wert aus der Datenbank
bekommt 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().
alle dieser Codes ist in der gleichen Klasse. Wer eine Vorstellung davon, was den Fehler verursacht?
Lösung
Klasse Eigenschaften können nicht mit Laufzeitinformationen deklariert werden.
public static $depositmoney = self::get_balance();
Das oben wird nicht funktionieren.
Siehedie PHP Manual auf Klasseneigenschaften: ( Hervorhebung von mir)
Klasse Membervariablen werden „Eigenschaften“ bezeichnet. Sie können sehen, wie sie auch mit anderen Begriffen wie „Attribute“ oder „Felder“ bezeichnet, aber für die Zwecke dieser Referenz werden wir „Eigenschaften“ verwenden. Sie werden durch die Verwendung eines der Schlüsselwörter public definiert, geschützt oder privat, durch eine normale Variablendeklaration gefolgt. Diese Erklärung kann eine Initialisierung enthalten, aber diese Initialisierung muss einen konstanten Wert sein - das heißt, er muss bei der Kompilierung ausgewertet werden und muß hängt nicht von Laufzeitinformationen ausgewertet, um .
Sie können einen Getter für $depositmoney
erstellen und haben es initialisieren den Wert, wenn es zur Zeit nicht gesetzt ist:
public static function getDepositMoney()
{
if(self::$depositmoney === NULL) {
self::$depositmoney = self::get_balance();
}
return self::$depositmoney;
}
Allerdings schlage ich vor den static
und Verwendung Beispiel Methoden, um loszuwerden, und Eigenschaften, anstatt den Zustand zu verfolgen. Sie wollen auch die global
Sachen und inject Abhängigkeiten durch den Konstruktor, Einrichter oder während des Methodenaufrufes loszuwerden. Dass verringert Kopplung und wird der Code besser verwaltbar machen.