erläuterungen zu oop mit php5

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

  • #16
    kleiner Versuch zur privaten static Methoden
    aber vorher, mache ich kurze Wiederholung

    privat:
    eine classe hat private Methoden und variablen, um diese Methoden und variablen von anderen Programmierer zu verbergen, da diese Methoden nur intern benutzt werden und haben überhaupt keine Wichtigkeit bei benutzen von einer classe und es ist unerwünscht, wenn diese interne Methoden und variablen geändert werden, sogar bei abgeleiteter classe.

    protected:
    diese Methoden und variablen haben keine Wichtigkeit bei benutzen von einer classe,
    aber wenn jemand eine classe erweitern und ableiten möchte, dann kann er Funktionalität von diesen Methoden und variablen ausnutzen.

    static: (oder auch classen Methoden und variablen genannt)
    die Methoden und variablen die static sind, gehören nicht zu einem instantiiertem Objekt. diese Methoden und variablen kann man mit "global" vergleichen, mit dem unterschied, das der globalität nicht für die ganze programm, sondern für namespace, dass unsere Objekte von einer classe bilden.
    eine static Methode kann nicht auf die lokale variable von einer classe mit ($this->blabla) zuzugreifen.
    Ich kann auch versuchen ein logischer beispiel zur static Methode machen:

    wir haben class Mitarbeiter und alles was ein Mitarbeiter macht können wir als Methode bezeichnen (gehen, sprechen, springen) und sogar hilfsmethoden, die seine Eigenschaften setzen und ausgeben.
    Jetzt kommt die frage ob die Methode
    Mitarbeiter_feuern($Mitarbeiter);
    zu unserem Konzept passt?
    zu dem Objekt Mitarbeiter passt diese Methode einfach logisch nicht, da es wird eine Tätigkeit ausgeübt, die zwar einen Mitarbeiter verändert, aber sein eigener Funktionalität hat damit nichts Zutun.

    deshalb packen wir einfach solche Methoden die nur für bearbeitung von Mitarbeiter dienen als statische Methoden in unsere classe rein.

    Und jetzt kommt es:
    Wenn wir unsere statische Methoden in classe beschreiben, dann kann es auch vorkommen, dass bei Implementierung von einer statischer public Methode, ein paar kleine hilfsmethoden gebraucht werden,
    die für die Leute die unsere Bibliothek weiter nutzen wollen absolut nicht interessant sind oder sogar schaden bei Veränderung einrichten können.
    und markieren sie als PRIVATE

    und sorry für mein Deutsch
    Slava
    bituniverse.com

    Kommentar


    • #17
      Hi,

      die verwendung die slava vorgeschlagen hat ist auch die einzige
      die mir für methoden eingefallen ist. Für statische membervariablen sollte
      es ja klar sein warum es dort verschiedene accesslevel gibt.
      Als beispiel kann man da schön das singletonpattern
      einführen oder auch referencecounting bei einem imaginären garbage-
      collection-algorithmus.

      Nochmal grundsätzlich zu statischen methoden. Sie werden häufig
      als "factory-methoden" verwendet.
      Als beispiel könnte man eine zeitklasse benutzen.
      Mal ohne implementierung. Eine konkrete instanz dieses zeitobjekts
      stellt einen zeitpunkt dar. Nun hat man aber häufiger den fall,
      dass man hilfsmethoden braucht die den code intuitiver machen.

      Bei der zeitklasse wären das zum beispiel methoden die ein zeitobjekt,
      das dem aktuellen zeitpunkt oder gestern oder morgen entspricht,
      erstellen.

      Entsprechend könnte man dann die statischen methoden
      now, tomorrow, yesterday definieren.
      PHP-Code:
      class Time{
          public function 
      __construct(timestamp){
                 
      //irgendwas
          
      }
          public static function 
      now(){
               return new 
      Time(/*timestamp von jetzt*/);
          }
          public static function 
      yesterday(){
               return new 
      Time(/*timestamp von gestern*/);
          }
          public static function 
      tomorrow(){
               return new 
      Time(/*timestamp von morgen*/);
          }
      }

      $now Time::now();
      $tomorrow Time::tomorrow();
      $yesterday Time::yesterday(); 
      Man hätte das auch alles mittels richtiger benutzung des ctors
      machen können, was aber weniger intuitiv gewesen wäre.

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

      Kommentar


      • #18
        erst mal danke für die antworten. ich setze einfach mal einen hinweis, dass die einsatzmöglichkeiten von statischen methoden extrem begrenzt sind, wenn man sie als private oder protected definiert.

        btw: slava hat methoden, die eigenschaft ändern oder ausgeben, als hilfsmethoden bezeichnet. mir ist dieser ausdruck bisher nicht unter die finger gekommen. ist er gebräuchlich? ich finde, dass damit dieses methoden sehr gut beschrieben werden.

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

        Kommentar


        • #19
          ich kann leider nicht behaupten, dass die benutzung von statischen methoden sehr begrenzt ist.

          welche möglichkeiten haben wir bei mitarbeiter_feuern($mitarbeiter) ?

          1)wir machen normale methode in der klasse Mirarbeiter
          dann können wir
          $mitarbeiterinstance->feuern($anderermitarbeiter) machen.
          aber nur Chef darf einen mitarbeiter feuern!
          das wir funktionieren, aber das ist nicht richtig und passt nicht zum dem Konzept

          2)
          wir können eine classe Chef schreiben, was eigentlich ok ist, besonders wenn es mehrere operationen mit Mitarbeiter von aussen kommen.

          3)
          wir schreiben einfach eine function, die einfach in raum hängt und mitarbeiter_feuern() heist.
          In vergleich zu Java oder C# (keine Methoden ausserhalb von Objecten möglicht) wird das in PHP funktionieren, aber wir haben eine funktion und wissen nicht mehr wo wir diese funktion in unserer bibliothek packen können. Eine class.Mitarbeiter.php datei aufmachen und darein classe Mitarbeiter und diese frei hängende funktion rein schreiben?
          Das kann in zukunft bei einer include eine Kalision verursachen, da ein anderer programmierer bei benutzen von classe Mitarbeiter eine eigene funktion mitarbeiter_feurn schreibt und muss dann alle include durchsuchen um dieses fehler aufhäben.
          Also das geht aber besser machen wir das nicht.

          Es bleiben uns also 2 richtige einsätze
          1) neue classe, die Mitarbeiter bearbeitet und die Methode mitarbeiter_feuern() hat.
          oder
          2)statische Methode innerhalb von classe Mitarbeiter selbst zu packen.



          zur hilfsmethoden
          Ich weis nicht, ob so ein Begriff gebräuchlich ist, aber du weis wie gut mein deutsch ist.
          In jedem fall ist mir kein besseres Begriff dafür ins Kopf gekommen.
          EDIT:
          das war falsch von mir die "seter" und "geter" Methoden als hilfsmethoden zu bezeichnen, da diese Methoden public sind und bei Benutzen von dem Object eine rolle spielen.
          mit hilfsmethoden meine ich kleine funktionen, die man intern bei realisierung von public methoden benutzt.
          Da ich früher mehr mit Java programmierte, habe ich schon bei PHP4 diese Methoden in Kommentar als privat bezeichent /*private*/ , damit ich bei Benutzen von der Klasse nach 2 Wochen, garr nicht auf die idee komme diese methoden aufzurufen.
          Ausserdem bei Lesen von Code, ist das sehr bequem, sieht man "privat", dann springt man einfach weiter, so lange du kein Public siehst.
          Erst , wenn du die Klasse erweitern (vererben) möchtest, beginnt auch "protected" und "final"(<-da kannst du vererbung einfach vergessen) eine rolle zu spielen.

          Zuletzt geändert von Slava; 10.02.2007, 23:16.
          Slava
          bituniverse.com

          Kommentar


          • #20
            Hi,

            ja der ausdruck hilfsmethode ist durchaus gängig.
            Natürlich sind das nicht nur methoden, die eigenschaften ändern
            oder ausgeben sondern jede methode die bei der implementierung
            einer anderen methode helfen.


            Der begriff leitet sich direkt aus der englischen literatur ab.
            Dort wird bereits bei einer der ältesten sprachen namens lisp
            von "helper-procedures" geschrieben.
            Auf einem anderen gebiet, das eng mit lisp verbunden ist, trifft
            man besonders häufig auf hilfsmethoden, nämlich im bereich rekursion.


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

            Kommentar


            • #21
              Methoden, die etwas verändern, nennt man auch einfach nur "verändernde Methoden".

              Methoden, die nichts zurückgeben, nennt man auch "sondierende Methoden". Vielleicht bringt dir das ja auch was.
              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


              • #22
                ich glaube das wird zuviel für Anfänger. Werde jetzt die nächsten Tage sowieso ein klein wenig kürzer treten. Meine Träume laufen schon in Form von Quellcode vor mir ab.

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

                Kommentar


                • #23
                  OffTopic:

                  Sollange dich isset nicht fragt ob du TRUE bist ist doch alles in ordnung


                  Bitte Beachten.
                  Foren-Regeln
                  Danke

                  Kommentar


                  • #24
                    Original geschrieben von Wyveres
                    OffTopic:

                    Sollange dich isset nicht fragt ob du TRUE bist ist doch alles in ordnung


                    OffTopic:
                    also wenn ein erotischer traum so abläuft, dann solte das einem zu denken geben
                    PHP-Code:
                    class ************ extends vorspiel implements vorher_essen_gehen
                    {
                       public function 
                    beischlaf ()
                       ...

                    nicht lachen! habe ich tatsächlich geträumt! so in der art.

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

                    Kommentar


                    • #25
                      Original geschrieben von Kropff
                      [OT]

                      nicht lachen! habe ich tatsächlich geträumt! so in der art.

                      peter
                      Tut mir leid... anders geht's nicht:
                      Nieder mit der Camel Case-Konvention

                      Kommentar


                      • #26
                        OffTopic:

                        Sorry aber ...
                        Ich hau mich hier gerade wech vor lachen ...
                        Ok dann ist es schon sehr ernst.
                        du solltest echt Urlaub machen

                        Bitte Beachten.
                        Foren-Regeln
                        Danke

                        Kommentar


                        • #27
                          Original geschrieben von Wyveres
                          OffTopic:

                          Sorry aber ...
                          Ich hau mich hier gerade wech vor lachen ...
                          Ok dann ist es schon sehr ernst.
                          du solltest echt Urlaub machen

                          OffTopic:
                          noch drei tage, dann habe ich meinen alljährlichen "flucht-vor-dem-kölner-karneval-ab-ins-sauerland"-urlaub. da werde ich mich erholen


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

                          Kommentar


                          • #28
                            Original geschrieben von Kropff
                            OffTopic:
                            noch drei tage, dann habe ich meinen alljährlichen "flucht-vor-dem-kölner-karneval-ab-ins-sauerland"-urlaub. da werde ich mich erholen


                            peter
                            OffTopic:

                            Stimmt ihr feiert ja sowas ...

                            Da fällt mir gerade auf das ich ja -.- och nö f***
                            ich bin während der Zeit im Ruhpott. Ich glaub ich verkrümel mich in irgendeine ecke ...

                            aber bevor es hier zuviel OT wird beenden wir das lieber

                            Bitte Beachten.
                            Foren-Regeln
                            Danke

                            Kommentar


                            • #29
                              so, wollen wir wieder zum thema kommen.

                              Es bleiben uns also 2 richtige einsätze
                              1) neue classe, die Mitarbeiter bearbeitet und die Methode mitarbeiter_feuern() hat.
                              oder
                              2)statische Methode innerhalb von classe Mitarbeiter selbst zu packen.
                              zu 1.
                              wir definieren eine klasse personalchef mit der methode feuern. das ist meines erachtens nach der saubere und richtige weg

                              zu 2.
                              was geschieht, wenn diese methode als protected definiert wurde?
                              dann können auch andere klassen wie zum sekretärin die methode feuern ausüben. ich weiss nicht, aber das macht auf mich keinen sauberen eindruck. täusch ich mich, oder habe ich recht?


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

                              Kommentar


                              • #30
                                Original geschrieben von Kropff
                                wir definieren eine klasse personalchef mit der methode feuern. das ist meines erachtens nach der saubere und richtige weg
                                M.E. nicht. Der Mitarbeiter wird gefeuert - also ist das auch seine Methode.
                                Oder wie ist das mit gehPinkeln - ist das auch eine Methode des Personalchefs, die dieser alle halbe Stunde mit seinen Mitarbeitern als Argument aufrufen muss, damit diese sich nicht in die Hose machen ...?

                                (Oder noch mal etwas realitätsnäher: erledigeAufgabe() ist auch eine Methode des Mitarbeiters, die von $vorgesetzter mit einer Aufgabe als Argument aufgerufen wird - und dann macht $mitarbeiter, was er machen soll.
                                Und ganz analog ist packYourShitTogetherAndGetLostYouReFired() für mich auch eine Methode des Mitarbeiters.)
                                dann können auch andere klassen wie zum sekretärin die methode feuern ausüben. ich weiss nicht, aber das macht auf mich keinen sauberen eindruck. täusch ich mich, oder habe ich recht?
                                Sich nicht von jeder kaffeekochenden Tippse feuern zu lassen, ist Sache des Mitarbeiters - der hat zu prüfen, ist der, der mich da gerade auf die Strasse setzen will, überhaupt dazu berechtigt, oder lasse ich mir von der Pfeiffe nichts sagen?
                                I don't believe in rebirth. Actually, I never did in my whole lives.

                                Kommentar

                                Lädt...
                                X