php benim tanımlı değişken tanımsız olduğunu iddia ediyor

4 Cevap php

Benim php biraz paslanmış ama bu şu anda aklımı ürkütüyor. Ben bu googled ve ben ilgili baktım bulabildiğim tüm stackoverflow soruları okumak, ama o tüm bunları meşru tanımlanmamış değişkenler var gibiydi. O benim aynı sorun olduğuna inanıyoruz yol açar, ama bu azalttı kod basit bit bakarak hiçbir miktarı her yerde beni almak gibi görünüyor. Birisi bana ahmak vermek ve ne yanlış yaptım söyle lütfen!

<?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();
?>

Bu çıkış, çıldırtıcı bana aşağıdakileri verir:

Notice: Undefined variable: C msj: \ wamp \ www \ fgwl php-lib \ fgwlshared.php \ 7. satırda

Notice: Undefined variable: C msj: \ wamp \ www \ fgwl php-lib \ fgwlshared.php \ 7. satırda

Notice: Undefined variable: C msj: 10 hattı üzerine \ wamp \ www \ fgwl \ php-lib \ fgwlshared.php

Evet, bu bir paylaşılan dosya olması gerekiyordu, ama şu anda ben yapıştırılan sadece ne kadar aşağı çalmıştır. Herhangi bir fikir?

4 Cevap

<?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 yerel işlevinde genel değişkeni kullanmanız gerektiğini söyler scope.

Böyle bir şey için küresellerle kullanarak kötü bir uygulamadır. Aşağıdaki gibi, bir alternatif yaklaşım göz önünde bulundurun:

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();

Eğer küresellerle kullanmak istemiyorsanız, size kullanımı JAST yapabilirsiniz

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

fonksiyonu, sonuç aynı olacaktır.