Ankündigung

Einklappen
Keine Ankündigung bisher.

Benutzung einer nicht definierten Klassenvariable

Einklappen

Neue Werbung 2019

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

  • Benutzung einer nicht definierten Klassenvariable

    Moin,

    ich habe gerade in unserem Shop gesehen, dass in einer Klasse eine Variable benutzt wird die aber nicht mit der Klasse definiert wird.

    Normaler Werdegang ist ja:

    Code:
    class name {
    var $test;
    
        function xyz()
        {
           $this->test = 'irgendwas';
        }
    ...
    }
    Aber hier wurde es einfach so gemacht:

    Code:
    class name {
    
       function xyz()
       {
          $this->test = 'irgendwas';
       }
    ...
    }
    Welche Konsequenzen hat sowas unter Umständen?

  • #2
    Meines Wissens keine. Der einzige Unterschied könnte sich bei vererbten Membern ergeben. Deklaration kommt nämlich einer Initialisierung mit NULL gleich. Vgl:

    PHP-Code:
    <?
    class name {

      var $test = 'abc';
      function xyz()
        {
        var_dump ($this->test);
        }
      
      }

    class name1 extends name {
      var $test;
      }

    class name2 extends name {
      }

    $n1 = new name1;
    $n1->xyz();  // NULL

    $n2 = new name2;
    $n2->xyz(); // abc = Init der Parentklasse

    Kommentar


    • #3
      in der klasse vordeklarierte variablen werden nicht durch __set geführt, wenn diese einfach angesprochen werden, wird __set verwendet !

      Kommentar


      • #4
        Zitat von notyyy
        in der klasse vordeklarierte variablen werden nicht durch __set geführt, wenn diese einfach angesprochen werden, wird __set verwendet !
        __get, __unset, __isset sowie __set werden nur nicht angepsrochen, wenn eine variable als public deklariert wurde.

        Kommentar


        • #5
          Stimmt, da hatte ich gar nicht dran gedacht. Wie siehts da eigentlich aus mit vererbten Eigenschaften?

          Kommentar


          • #6
            Wenn eine Variable nicht deklariert, aber __set/__get definiert wurde, werden die Methoden beim Setzen/Laden aufgerufen, unabhaengig von private/protected/public, sonst koennte man ja garnicht mehr auf Eigenschaften zugreifen. Das gilt auch fuer vererbte Eigenschaften.

            Natuerlich kannst du Eigenschaften auch undeklariert in Objekte schreiben, sonst waere stdClass ziemlich sinnlos. Das ist aber unschoen und erinnert etwas an den "global" oder "register_globals" Programmierstil. Du solltest das wirklich vermeiden.

            "var" ist uebrigens deprecated.

            Kommentar


            • #7
              Zitat von Zergling
              "var" ist uebrigens deprecated.
              ab PHP6 ists ein alias für public

              Kommentar


              • #8
                Zitat von brian johnson
                Zitat von Zergling
                "var" ist uebrigens deprecated.
                ab PHP6 ists ein alias für public
                Hehe, aus alt mach neu ....

                Kommentar


                • #9
                  Zitat von brian johnson
                  Zitat von Zergling
                  "var" ist uebrigens deprecated.
                  ab PHP6 ists ein alias für public
                  Ah schoener Artikel, den hatte ich garnicht mehr in den Lesezeichen. Zum Thema uebrigens:
                  http://wiki.php.net/todo/php53#future_php_releases

                  Kommentar


                  • #10
                    hm folgendes erzeugt doch eine notice:

                    PHP-Code:
                    $this->undefined instanceof stdClass;
                    $this->undefined && TRUE

                    Kommentar

                    Lädt...
                    X