Ankündigung

Einklappen
Keine Ankündigung bisher.

Was macht das @ vor einer Variablen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Was macht das @ vor einer Variablen?

    Hallo,
    mir ist nicht ganz klar, was das @ vor einer Variablen macht. Nach dem Template
    zu urteilen, an dem ich sitze, scheint es die Variable zu initalisieren.
    So steht
    PHP-Code:
    @$order_total $order_total $total 
    am Ende einer Schleife. Beim ersten Schleifendurchlauf, wird ja praktisch nur der
    Wert von $total an $order_total zugewiesen.
    Ohne @ bekomme ich die Fehlermeldung:
    Undefined variable: order_total.
    Geht das in die richtge Richtung??

    Dank, Iago


  • #2
    Es unterdrück die Fehlermeldung und sollte nicht verwendet werden.

    http://php.net/manual/en/language.op...rorcontrol.php
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

    Kommentar


    • #3
      Tja, wie du schon heraus gefunden hast, unterdrückt das @ Fehlermeldungen. "Üblicherweise" (oder leichtfertigerweise) oft vor mysql_query() o.ä. eingesetzt. Bei dir liegt es einfach daran, dass du $order_total verwendest (auf der rechten Seite vom =), bevor es initialisiert wurde.
      Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
      Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)

      Kommentar


      • #4
        Zitat von dennis81 Beitrag anzeigen
        Bei dir liegt es einfach daran, dass du $order_total verwendest (auf der rechten Seite vom =), bevor es initialisiert wurde.
        Muss nicht sein, kann ja irgendwo schon definiert sein!

        @ sollte man nur dann verwenden wenn man wirklich weiß warum man es tut! Zum Beispiel wenn man selbst entsprechende Fehlermeldungen ausgeben möchte und nicht die PHP Fehlermeldungen verwenden will. Dies ist aber nur bei wenigen Funktionen nötig, also in der Regel @ nicht verwenden.

        Kommentar


        • #5
          Kann man sagen, dass das ein Beispiel für unsauberen Code ist???

          Kommentar


          • #6
            Ja.
            Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

            Kommentar


            • #7
              In aller Regel ja.
              Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

              Kommentar


              • #8
                Ja, ich hab halt immer das gleiche Problem:
                Ich hab das Template aus einem Buch von einer Programmiererin namens Janet Valet. Bei den Dingen, die ich nicht verstehe, gibt es meiner Meinung nach nur zwei Möglichkeiten der Interpretation:
                Entweder der Code ist schlampig programmiert oder es ist alles sehr sehr gut durchdacht.
                Obwohl mir das mit dem '@' schon sehr willkürlich erscheint!!

                Kommentar


                • #9
                  PHP-Code:
                  <?php
                  for ( $i $i $i++ ) {
                    
                  $var $var 1// warning, da $var beim ersten Schleifendurchlauf noch nicht definiert war
                  }
                  echo 
                  $var// Ausgabe = 5
                  hingegen:
                  PHP-Code:
                  <?php
                  $var 
                  0;
                  for ( 
                  $i $i $i++ ) {
                    
                  $var $var 1// keine warning, da $var beim ersten Schleifendurchlauf schon definiert war
                  }
                  echo 
                  $var// Ausgabe = 5
                  PHP-Code:
                  if ($var != 0) {
                    
                  $var 0;

                  Kommentar


                  • #10
                    Sollte eigentlich nicht nötig sein in einem Template. Dort sollten alle Variablen initialisiert sein. Man sollte generell seine Skript so schreiben das eben keine Fehler oder Notices auftreten können, also immer alles prüfen oder abfangen (z.B. bevor man ne Textdatei öffnet prüfen ob sie existiert und lesbar ist).

                    Mit @ unterbindet man aber solche möglichen Fehler, Problem dabei ist das man gar nicht mehr mitbekommt wenn was nicht funktioniert, dann ist man Stunden lang am rätseln warum es nicht geht obwohl kein Fehler kommt und dann belästigt man irgend ein Forum

                    Von daher solltest du deine Version ohne @ schreiben.

                    Kommentar


                    • #11
                      Das @ kann man als "lazy" Schreibweise für isset() verwenden, so dass ein nicht existierender Index keine Strict-Fehlermeldung auslöst:
                      PHP-Code:
                      if (@$_POST['indexdernichtexistiert']) { //... } 

                      Kommentar


                      • #12
                        Sollte man aber nicht. Was ist, wenn der betreffende Index gerade 0 ist?

                        Ein isset() durch ein @ zu ersetzen ist schon mehr als schlechter stil, das ist eine große Fehlerquelle und sollte definitiv nicht gemacht werden.

                        Kommentar


                        • #13
                          Man kann das Error Reporting auch komplett ausschalten und im Blindflug durch seine Scripte stolpern.
                          Das @ gehört in eine Emailadresse, und sonst nirgendwo hin.
                          PHP-Code:
                          if ($var != 0) {
                            
                          $var 0;

                          Kommentar


                          • #14
                            Zitat von Flor1an Beitrag anzeigen
                            Muss nicht sein, kann ja irgendwo schon definiert sein!
                            Er schrieb aber:
                            Ohne @ bekomme ich die Fehlermeldung:
                            Undefined variable: order_total.
                            Wo kommt die Fehlermeldung deiner Meinung nach dann her?
                            Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
                            Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)

                            Kommentar


                            • #15
                              lesenswerter artikel zum thema: PHP performance: error suppression.

                              cx

                              Kommentar

                              Lädt...
                              X