سؤال

PHP الخاص بي صدئ بعض الشيء ولكن هذا يحير ذهني الآن. لقد غوغل هذا وقرأت جميع أسئلة Stackoverflow التي يمكن أن أجدها تبدو ذات صلة ، ولكن يبدو أن جميعهم لديهم متغيرات غير محددة فيها. هذا يقودني إلى الاعتقاد بأنني نفس المشكلة ، ولكن لا يوجد أي قدر من التحديق في الكود البسيط الذي قمت بتخفيضه هذا يبدو لي أن أحضرني إلى أي مكان. من فضلك شخص ما يعطيني غطاء Dunce وأخبرني بما فعلته خطأ!

<?php
//test for damn undefined variable error

$msgs = "";

function add_msg($msg){
  $msgs .= "<div>$msg</div>";
}
function print_msgs(){
  print $msgs;
}

add_msg("test");
add_msg("test2");
print_msgs();
?>

هذا يعطيني ما يلي ، الإخراج المجنون:

إشعار: متغير غير محدد: msgs في c: wamp www fgwl php-lib fgwlshared.php على السطر 7

إشعار: متغير غير محدد: msgs في c: wamp www fgwl php-lib fgwlshared.php على السطر 7

إشعار: متغير غير محدد: msgs في c: wamp www fgwl php-lib fgwlshared.php على السطر 10

نعم ، من المفترض أن يكون هذا ملفًا مشتركًا ، لكن في الوقت الحالي قمت بتجريده إلى ما قمت بلصقه. أيه أفكار؟

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

المحلول

يتم تعريفه في النطاق العالمي. يستخدم global إذا كنت تريد استخدامه.

نصائح أخرى

<?php
$msgs = "";

function add_msg($msg){
  global $msgs;
  $msgs .= "<div>$msg</div>";
}
function print_msgs(){
  global $msgs;
  print $msgs;
}

add_msg("test");
add_msg("test2");
print_msgs();
?>

global يخبر أن PHP بحاجة إلى استخدام المتغير العالمي في الوظيفة المحلية الكائن.

استخدام Globals لشيء مثل هذا هو ممارسة سيئة. النظر في نهج بديل مثل ما يلي:

class MessageQueue {
  private static $msgs;


  public static function add_msg($msg){
    self::$msgs .= "<div>$msg</div>"; 
  }
  public static function print_msgs(){
    print self::$msgs;
  }
}


MessageQueue::add_msg("test");
MessageQueue::add_msg("test2");
MessageQueue::print_msgs();

إذا كنت لا ترغب في استخدام Globals ، فيمكنك الاستخدام

 function add_msg($msg)
   {
         echo  "<div>$msg</div>";
   }
    add_msg("test");
    add_msg("test2");

الوظيفة ، ستكون النتيجة هي نفسها.

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