Question

J'ai une fonction qui obtient une valeur de la base de données et le renvoie. J'appelle la fonction de la stocker dans une variable membre mais je reçois l'erreur suivante:

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

Ceci est la ligne qui provoque l'erreur

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

Et c'est la fonction qui obtient la valeur de la base de données

    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().

tout ce code est dans la même classe. Toute personne une idée de ce qui cause l'erreur?

Était-ce utile?

La solution

Propriétés de classe ne peut pas être déclarée avec des informations d'exécution.

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

Le ci-dessus ne fonctionnera pas.

Voir la PHP Manual sur Propriétés de classe: ( Souligné par l'auteur)

  

variables membres de classe sont appelées « propriétés ». Vous pouvez également les voir appelés à utiliser d'autres termes tels que « attributs » ou « champs », mais dans le cadre de cette référence, nous utiliserons les « propriétés ». Ils sont définis en utilisant l'un du public, protégée ou privée, des mots-clés suivie par une déclaration variable normale. Cette déclaration peut inclure une initialisation, mais cette initialisation doit être une valeur constante - qui est, il doit pouvoir être évaluée au moment de la compilation et ne doit pas dépendre des informations d'exécution afin d'être évalués .

Vous pouvez créer un getter pour $depositmoney et l'ont initialiser la valeur si elle est actuellement hors service:

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

Cependant, je suggère de se débarrasser des méthodes d'instance de static et de l'utilisation et les propriétés au lieu de suivre l'état. Vous aurez aussi envie de se débarrasser des trucs de global et dépendances Injecter par le constructeur, setters ou lors de l'appel de la méthode. Cela diminue le couplage et va rendre le code plus maintenable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top