erläuterungen zu oop mit php5

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

  • #46
    Original geschrieben von Kropff
    @slava
    OffTopic:
    übe dich in geduld junger padavan

    ich bin gegen ende nächster woche mit allem fertig. mache nur eine kleine pause, mein alljährlicher flucht-vor-dem-kölner-karneval-urlaub


    peter
    tja, dann schreib mich für alle fälle an, wann du zeit hast, damit wir ein kleiner Jedi-Rat veranstalten können.
    Slava
    bituniverse.com

    Kommentar


    • #47
      Original geschrieben von Slava
      tja, dann schreib mich für alle fälle an, wann du zeit hast, damit wir ein kleiner Jedi-Rat veranstalten können.
      wie wäre es mit den nächsten wochenende? samstag den 24.? bei mir? für bier ist gesorgt . bin bis einschließlich 20. bei meinen eltern im sauerland, um dem kölner karneval zu entfliehen. schick mir einfach ne mail oder pm.

      gruß
      peter
      Zuletzt geändert von Kropff; 14.02.2007, 22:25.
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #48
        OffTopic:
        Solange hast du auch noch nicht deine Sterne, als dass du vergessen haben könntest, dass er dir garkeine PM schicken kann
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #49
          sitze gerade an meinem opp-tutorial "fortgeschrittenes" und bin beim thema "final". frage: gibt es eine möglichkeit, das überschreiben (überladen) von eigenschaften zu verhindern? die einzige möglichkeit scheint zu sein, eine klasse als final zu deklarieren.

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

          Kommentar


          • #50
            Hi,

            dafür ist es doch da Man kann dann nicht mehr von dieser
            klasse ableiten also auch keine methoden neu implementieren.

            Was ich jetzt nicht getestet habe, was aber so funktionieren sollte
            ist die methoden die nicht überschrieben werden dürfen in der
            basisklasse als private zu deklarieren.

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

            Kommentar


            • #51
              was aber so funktionieren sollte ist die methoden die nicht überschrieben werden dürfen in der basisklasse als private zu deklarieren.
              nein funktioniert nicht. private eigenschaften können überschrieben werden.

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

              Kommentar


              • #52
                Eine Methode kannst du als final deklarieren, bei Klassenvariablen geht das nicht...
                Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                var_dump(), print_r(), debug_backtrace und echo.
                Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                Kommentar


                • #53
                  Original geschrieben von Shurakai
                  Eine Methode kannst du als final deklarieren, bei Klassenvariablen geht das nicht...
                  das war mir klar, ich wollte halt wissen ob es bei eigenschaften andere möglichkeiten gibt, von denen ich nichts weiss.

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

                  Kommentar


                  • #54
                    kennt eigentlich irgend jemand eine verständliche einführung mit verständlichen(!) beispielen zum thema überladen mit php5, also get, set, call, etc. ? ich finde dazu nur müll.

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

                    Kommentar


                    • #55
                      Original geschrieben von Kropff
                      kennt eigentlich irgend jemand eine verständliche einführung mit verständlichen(!) beispielen zum thema überladen mit php5, also get, set, call, etc. ? ich finde dazu nur müll.
                      Tja, dann versuche ich noch mehr müll beizutragen
                      aber ich hoffe wenigstens, dass die konkrete fragen kommen.
                      PHP-Code:
                      <?php
                      error_reporting
                      (E_ALL);
                      class 
                      Ueberladung{
                        
                       public 
                      $array;//für die represintation von dynamisch gesetzten variablen
                       
                      public $eigenschaft="";//eine eigenschaft
                       
                      public  function __construct(){
                        
                      $this->array=array();  
                      }
                        
                      /*bei überschreiben von __set können wir dynamisch eine variable in unserem object erzeuten
                        beispiel: $einobject->eine_nichtexistierende_variable="ein wert";
                        das wird am meistens mit einem privatem array realisiert aber bedeutet nicht, dass wir das nicht anderes
                        umsetzen können
                        @parameter $was: name von der variable die gesetzt wird
                        @parameter $wert: ist wert von variable die gesetzt wird
                        ein beispiel mit dem array
                        */
                        
                      function __set($was,$wert){
                          
                      //erst mal schauen, ob wir schon andere variablen haben
                          
                      if(isset($this->$was))
                          { 
                            
                      //wenn ja, dann werden wir diese vorhandene variable mit dem wert belegen
                            
                      $this->$was=$wert;
                          }
                          else
                          
                      //in anderem fall setztn wir unser wert in ein arra
                          
                      $this->array[$was]=$wert;
                        }
                      //ende von __set
                        
                        
                        /*bei überschreiben von __get methode, können wir entscheiden
                        was wir bei aufruf einer eigenschaft liefern. 
                        wenn jemand $objectname->eigenschaft aufruft, dann möchte ich
                        __get() hat nur 1 parameter, in dem name von variable steckt.  
                        */
                        
                      function __get($was){
                          
                      //erst mal schauen, ob wir schon andere variablen mit dem namen haben
                          
                      if(isset($this->$was)){
                           
                      //dann ausgeben
                           
                      return $this->$was;
                           
                           }elseif(isset(
                      $this->array[$was])){//jetzt kontrollieren, ob wir in unserem array was haben    
                           //wenn ja dann ausgeben
                           
                      return $this->array[$was];
                          }else{
                      //nichts davon gefunden wurde entweder Exception oder zbs NULL senden.
                               
                      throw new Exception("der Eigenschaft $was existiert nicht</br>");
                               }
                          
                          
                        }
                      //ende von __get
                        
                        
                        /*__call kann man mit __get vergleichen, mit dem unterschied, dass __call für die methoden sorgt.
                         wir können  entscheiden, was wir bei aufruf von einer methoden machen können
                         
                         @parameter $functionname ist name von der function, die aufgerufen wird
                         beispiel: $objectname->bljablja(); also hat zur laufzeit unserer variable $functionname der wert "bljablja"
                         @parameter: $parameterarray ist ein array mit allen argumenten, die zur laufzeit an unsere functionen übergeben werden.
                        */
                         
                      function __call($functionname,$parameterarray)
                         {
                           
                      //hier kann natürlich viel mehr stehen
                           //aber für ein beispiel muss es ausreichen
                           //hier erlaube ich beliebige function mit beliebigen parameter aufrufen
                           // obwohl ich normale weise mehr kontrollieren müsste
                           
                      return call_user_func_array($functionname,$parameterarray);
                         }
                      //ende von __call
                         
                         //string presentation von dem object, jetzt kann es auch mit echo benutzt werden
                         
                      function __toString()
                          {
                            return 
                      "Hi ich bin Object von classe ".__CLASS__." und habe hier eine ".$this->eigenschaft;
                          }
                      }

                      //ein paar Tests 
                      $object=new Ueberladung();
                      //beweis, dass wir dank __set() dynamisch die varible setzen können
                      $object->ding="hallo welt";
                      echo 
                      $object->array['ding']."<br />";//hura es ist wirklich im array

                      //__get test
                      echo $object->ding." -test __get() diese variable ist eigentlich aus dem array gekommen</br>";//

                      //ob es mit anderen, vorhandenen Variable klappt?
                      $object->eigenschaft="nicht dynamische Eigenschaft<br />";//ja klar

                      //dass wird natürlich nicht mehr funktionieren, da variable bei __set methode nicht in array abgespeichert wurde
                      //echo $object->array['eigenschaft']."<br />";

                      //hier ist wie erwartet die vordifenierte variable ausgegeben wurde
                      echo $object->eigenschaft;//dass muss ok sein

                      //und jetzt müssen wir eine exeption bekommen, da eigenschaft nicht_da existiert nirgendwo
                      try{
                      echo 
                      $object->nicht_da;
                      }catch(
                      Exception $E){
                        echo 
                      $E->getMessage();//ja ja ich weis.
                      }

                      //__call  probe
                      //hier haben wir PHP function substr geklaut :-)
                      echo "<br />".$object->substr("Hallo Welt",0,5)."<br/>";//schäm


                      //test von __toString
                      //jetzt kann man der object als string ausgeben.
                      echo $object;//blja blja blja
                      ?>
                      Slava
                      bituniverse.com

                      Kommentar

                      Lädt...
                      X