Verständnisfrage: Klassenvariblen

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

  • Verständnisfrage: Klassenvariblen

    Irgentwie habe ich noch nicht so den überblick wo man welche Art von Klassenvariablen verwendet. Erstmal ein Beispiel:

    PHP-Code:
    class Test {

    public 
    $hallo
    private $hallo_unveraenderlich;

    public function 
    cool() {
    $ausgabe 'test';
    return 
    $ausgabe;
    }

    public function 
    cooler() {
    $this->ausgabe 'bestertester';
    return 
    $this->ausgabe;
    }

    public function 
    noch_cooler() {
    return 
    $this->ausgabe 'wow';
    }


    Die Variable in der funktion cool ist nur in der Funktion cool aufrufbar

    Die $this Variable ist nicht nur in der function cooler aufrufbar, sondern in der ganzen Klasse.

    Für was sind dann die variablen gut, die man am anfang der klasse mit public/private/protected registriert?

  • #2
    $this->ausgabe wird dir (ich weiß nicht ob das im toleranten PHP auch der Fall ist) einen Fehler auspucken, da 'ausgabe' bis dahin nicht existiert! Dafür musst du sie eben am Anfang der klasse initialisieren. Die Unterschiede zwischen private, public und so kennst du?

    Kommentar


    • #3
      Re: Verständnisfrage: Klassenvariblen

      Original geschrieben von TobiasKa
      Die Variable in der funktion cool ist nur in der Funktion cool aufrufbar
      Natürlich, weil sie nur eine kleine lokale Variable ist.
      Das wäre in jeder anderen Funktion genauso - selbst außerhalb von Klassen/OOP.
      Die $this Variable ist nicht nur in der function cooler aufrufbar, sondern in der ganzen Klasse.
      Natürlich, weil sie eine spezielle Variable ist, die die Objektinstanz repäsentiert.


      Aber das sind alles echte Anfängerfragen - du solltest im Manual noch mal etwas gründlicher nachlesen, und dir ggf. auch ein Tut zum Thema vornehmen, bevor noch mehr von dem Klaiber kommen ...
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        @tobiaska

        hier wird alles erklärt.

        gruß
        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Danke, also muss jede $this->xx variable am anfang der klasse definiert werden (ja ich weiß was privat/public/protected bedeutet)

          ich hab schon error_reporting(E_ALL); ans Anfang der Datei geschrieben, aber wenn ich unregistrierte $this->xx variablen aufrufe, kommt bei mir kein error - warum?

          sorry, für die dumme frage, aber ich hab schon unzähle tuts durchsucht, aber nirgends stand das so drinnnen - ich hab eh schon schläge erwartet- aber ich muss es ja wissen

          Kommentar


          • #6
            Original geschrieben von TobiasKa
            ich hab schon error_reporting(E_ALL); ans Anfang der Datei geschrieben, aber wenn ich unregistrierte $this->xx variablen aufrufe, kommt bei mir kein error - warum?
            Funktionieren die Variablen dann auch, oder sind die immer leer (glaub ich nciht), bzw. wieder freed nach dem benutzen in der funktion? Wie ich bereits erwähnt habe ist PHP sehr tolerant, kann mir gut vorstellen dass er automatisch speicher für die entsprechenden variablen alloziiert.

            Original geschrieben von TobiasKa
            sorry, für die dumme frage
            Stört mich nicht. Ich hör gute Musik

            Kommentar


            • #7
              oder registriert man die variablen nur wegen der übersichtlichkeit und weil manche privat oder protected sein sollen?

              Kommentar


              • #8
                Also das nichtinitialiseren finde ich schon ziemlich eklig und kann zu einiger schiesse führen

                Kommentar


                • #9
                  Original geschrieben von TobiasKa
                  Danke, also muss jede $this->xx variable am anfang der klasse definiert werden (ja ich weiß was privat/public/protected bedeutet)
                  Nicht unbedingt definiert aber zumindest deklariert.

                  ich hab schon error_reporting(E_ALL); ans Anfang der Datei geschrieben, aber wenn ich unregistrierte $this->xx variablen aufrufe, kommt bei mir kein error - warum?
                  Die zend-leute würden das sicher als feature bezeichnen. Ich nenne das
                  einen bug.
                  Ich konnte das erst nicht glauben aber es stimmt. Man kann so variablen
                  anlegen. Diese variablen haben dann ein default-access-level von public

                  Hier ein beispiel
                  PHP-Code:
                  <?php
                  error_reporting
                  (E_ALL);
                  class 
                  Foo{
                     public function 
                  __construct(){
                         
                  $this->foo 3;
                         echo 
                  $this->foo;
                     }

                     public function 
                  bla(){
                        echo 
                  $this->foo;
                     }
                  }

                  $f = new Foo();
                  $f->bla();
                  echo 
                  $f->foo;
                  ?>
                  Ausgabe ist: 333

                  Zur ausgangsfrage:
                  Wie du bereits richtig bemerkt hast sind member-variablen ein bisschen
                  anders als lokal u. globale variablen. Sie haben einen anderen scope.
                  Sie sind für jede methode der klasse sozusagen global.
                  Klassen sind datenstrukturen die operationen und zustände abbilden.
                  Die zustände werden in den membern gespeichert, weswegen sie
                  auch manchmal zustandsvariablen genannt werden.
                  Ein instanz einer klasse ist eine konkrete ausbildung der klassenvorschrift
                  und hat sozusagen sein ganz eigenens "leben".

                  greets
                  (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                  Kommentar

                  Lädt...
                  X