سؤال

خذ بعين الاعتبار ما يلي:

$var = 'foo' . 'bar'; # Not a member of a class, free-standing or in a function.

بمجرد أن أضع علامة $var مثل static, ، لكن:

static $var = 'foo' . 'bar';

PHP (5.3.1 في إعداد WAMP) يشكو من الخطأ التالي:

خطأ تحليلي:خطأ في بناء الجملة، غير متوقع '.'، متوقع '،' أو '؛'

يبدو أن تسلسل السلسلة هو الجاني هنا.


ما الذي يحدث هنا؟هل يمكن لأي شخص أن يشرح لي قواعد المتغيرات الثابتة؟

هل كانت مفيدة؟

المحلول

ينص الدليل، في نطاق المتغيرات:

ستؤدي محاولة تعيين قيم لهذه المتغيرات [الثابتة] والتي هي نتيجة للتعبيرات إلى حدوث خطأ في التحليل.

وقد ورد ذكره أيضاً في الكلمة الأساسية الثابتة:

مثل أي متغير ثابت آخر في PHP، لا يجوز تهيئة الخصائص الثابتة إلا باستخدام حرفي أو ثابت؛التعبيرات غير مسموح بها.

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

نصائح أخرى

لا يمكنك القيام بالتعبيرات في أدوات التهيئة.ومع ذلك، يمكنك القيام بذلك:

define('FOOBAR', 'foo'.'bar');
static $var = FOOBAR;
echo $var;

الحقيقة غير المعروفة هي أنه على الرغم من أن أدوات التهيئة لا يمكن أن تحتوي على تعبيرات وقت التشغيل، إلا أنها يمكن أن تحتوي على ثوابت يمكن تعريفها وحلها في وقت التشغيل.يجب تحديد الثابت حسب الوقت $var يتم استخدامه لأول مرة، وإلا فستحصل على سلسلة مطابقة للثابت (على سبيل المثال: "FOOBAR").

أفعل هذا:

class MyClass {

  static $var1;
  static $var2;
  public static function _init() {
      self::$var1 = 'slkslk' . 'sksks' . 'arbitrary' ; 
      self::var2 = <<<EOT
          <root>
            <elem1>skjsksj</elem1>
          </root>
EOT;
  }
}
MyClass::_init();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top