PHPクラッセ:関数からメンバー変数に値を取得する問題
-
28-09-2019 - |
質問
データベースから値を取得して返す関数があります。関数を呼び出してメンバー変数に保存しますが、次のエラーが発生します。
Parse error: parse error, expecting `','' or `';'' in I:\wamp\www\deposit\classes\Site.php on line 14
これは、エラーを引き起こす行です
public static $depositmoney = self::get_balance();
これはデータベースから値を取得する関数です
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().
このコードはすべて同じクラスにあります。何がエラーの原因となっているのかという考えはありますか?
解決
クラスのプロパティは、実行時の情報と宣言することはできません。
public static $depositmoney = self::get_balance();
上記は機能しません。
を参照してください クラスプロパティに関するPHPマニュアル: (私の強調)
クラスメンバー変数は「プロパティ」と呼ばれます。また、「属性」や「フィールド」などの他の用語を使用することに言及していることもありますが、このリファレンスの目的のために「プロパティ」を使用します。それらは、パブリック、保護、またはプライベートのキーワードの1つを使用して定義され、次に通常の変数宣言が続きます。この宣言には初期化が含まれる場合がありますが、この初期化は一定の値でなければなりません。つまり、コンパイル時に評価できる必要があります。 評価されるために実行時の情報に依存してはなりません.
Getterを作成できます $depositmoney
そして、それが現在設定されていない場合、値を初期化させてください:
public static function getDepositMoney()
{
if(self::$depositmoney === NULL) {
self::$depositmoney = self::get_balance();
}
return self::$depositmoney;
}
しかし、私はそれを取り除くことを提案します static
代わりにインスタンスメソッドとプロパティを使用して、状態を追跡します。また、それを取り除きたいと思うでしょう global
コンストラクター、セッター、またはメソッドの呼び出し中に依存関係を注入します。これにより、結合が減少し、コードがより保守可能になります。
所属していません StackOverflow