2010-06-21 5 views
0

J'ai une fonction qui récupère une valeur de la base de données et la renvoie. J'appelle la fonction de la stocker dans une variable membre mais je reçois l'erreur suivante:php classe: problème d'obtention de la valeur de la fonction dans une variable membre

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. Quelqu'un a une idée de ce qui cause l'erreur?

Répondre

3

Les propriétés de classe peuvent ne pas être déclarées avec des informations d'exécution.

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

Ce qui précède ne fonctionnera pas.

Voir la (Souligné par l'auteur) PHP Manual on Class Properties:

Class member variables are called "properties". You may also see them referred to using other terms such as "attributes" or "fields", but for the purposes of this reference we will use "properties". They are defined by using one of the keywords public, protected, or private, followed by a normal variable declaration. This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

Vous pouvez créer un getter pour $depositmoney et avoir 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 vous suggère d'obtenir débarrasser du static et utiliser des méthodes d'instance et des propriétés à la place pour suivre l'état. Vous souhaiterez également vous débarrasser de la substance global et injecter des dépendances via le constructeur, les setters ou lors de l'invocation de la méthode. Cela diminue le couplage et rendra le code plus facile à maintenir.

Questions connexes