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?

War es hilfreich?

Lösung

Klasse Eigenschaften können nicht mit Laufzeitinformationen deklariert werden.

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

Das oben wird nicht funktionieren.

Siehe

die 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top