PHP Classe: مشكلة الحصول على قيمة من الوظيفة إلى متغير عضو

StackOverflow https://stackoverflow.com/questions/3083943

  •  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 على خصائص الفصل: (التأكيد الألغام)

وتسمى متغيرات أعضاء الفصل "الخصائص". قد تراهم أيضًا يشار إلى استخدام مصطلحات أخرى مثل "السمات" أو "الحقول" ، ولكن لأغراض هذا المرجع ، سنستخدم "الخصائص". يتم تعريفها باستخدام إحدى الكلمات الرئيسية العامة أو المحمية أو الخاصة ، تليها إعلان متغير عادي. قد يتضمن هذا الإعلان تهيئة ، ولكن يجب أن يكون هذا التهيئة قيمة ثابتة-أي ، يجب أن يكون قادرًا على تقييمه في وقت الترجمة و يجب ألا تعتمد على معلومات وقت التشغيل من أجل تقييمها.

يمكنك إنشاء getter ل $depositmoney وجعلها تهيئة القيمة إذا كانت حاليًا غير مركبة:

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

ومع ذلك ، أقترح التخلص من static واستخدم أساليب المثيل وخصائص بدلاً من ذلك لتتبع الحالة. سترغب أيضًا في التخلص من global الأشياء وحقن التبعيات من خلال المُنشئ أو المستقلين أو أثناء استدعاء الطريقة. وهذا يقلل من الاقتران وسيجعل الكود أكثر قابلية للصيانة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top