[Tutorial] Kleiner Einblick in die OOP

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [Tutorial] Kleiner Einblick in die OOP

      Einblick in die OOP

      In diesem Tutorial will ich euch einen kleinen Einblick in die
      Objekt Orientierte Programmierung in PHP verschaffen. Ich werde hier
      hauptsächlich nur die Grundlagen beschreiben, da wenn ich hier jede
      einzelheit abarbeiten würde ein ganzes Buch mit stumpfen Theorie
      Kram füllen könnte.

      Zunächst stellt sich sicher die Frage warum man eine zu Anfangs
      solch verwirrende Technick lernen sollte wo sie doch nicht zwingend
      notwendig ist. Die Antwort ist in meinen Augen so einfach wie Genial,
      wenn man es erstmal versteht kann man sich dadurch Berge von Programmier -
      und Freizeit ersparen. Die Vorteile der OOP liegen ganz klar darin das
      man ihre innere Logik nicht wirklich kennen muss um sie verwenden zu
      können hinzu. Es gibt natürlich noch viel mehr Vorteile, aber für den
      passendesten ist mir einfach nichts in eigenen Worten eingefallen,
      deshalb zitiere ich an dieser Stelle einfach mal einen Satz aus dem
      Artikel mit dem ich meinen Einstieg in die OOP gewagt habe.

      "Sie ermöglicht es, immer wiederkehrende Aufgaben in so genannten Klassen zu bündeln."

      Wenn man ein absoluter Anfänger ist sollte man an dieser Stelle wohl
      das lesen aufhören, es gibt zwar Leute die sagen das besonders Anfänger
      die OOP leicht lernen aber deren Meinung Teile ich keinesfalls. Ich selbst
      gebe mich nun seit einer geraumen Zeit damit ab und habe trotzdem noch an
      der ein oder anderen Stelle Probleme damit. Obwohl die Vorteile der OOP klar sind,
      empfehle ich euch allerdings sie nicht an jeder Ecke zu verwenden.

      Ganz ehrlich ich musste lange grübeln um ein passendes Beispiel zu finden wie
      ich euch das ganze erklären kann. Gut, ich versuche es einfach mal so. Es gibt
      vier ausschlaggebende Begriffe und das sind folgende: Das Objekt, die Klasse, die
      Methode und die Eigenschaft.

      Objekt:
      Ein Objekt, es sollte einem eigentlich sofort klar sein was das ist. Ich nenne
      euch hier ein ganz banales Beispiel. Ihr seit eine Person, und zu dieser Zeit
      esst ihr Gummibärchen. Das Objekt seit ihr, und die Packung Gummibärchen.

      Klasse:
      Für die Klasse hatte ich auch nicht wirklich eine Idee wie ich sie euch
      beschreiben soll, von daher mach ich das Genau so wie ich es auch Gelernt
      habe. "Sie sind eine Art von Entwurfsmuster oder Bauplan, nach denen das Objekt aufgebaut ist".
      Durch Klassen werden also Objekte erzeugt. Das heißt wenn wir einen "Felix"
      erzeugen möchten benötigen wir erstmal eine Klasse für meine Eltern und
      dessen Akt sie vollzogen haben um mich zu zeigen *hust* ;)

      Methode:
      Die Methode schon selbst erklärt, das was die Objekte machen können. Wenn
      man zum Beispiel die Eigenschaft eines Objektes modifizieren möchte, so
      ist eine Methode notwendig.

      Die Eigenschaft:
      Die Eigenschaft, oder auch Instansvariable genannt. Nehmen wir mal mein oben
      genanntes Beispiel. Nehmen wir an ihr seit ein Junger Mann der
      eine Packung Gummibärchen essen will. Nun kommt eure Schwester hinzu
      und möchte ebenfalls welche haben. Der Unterschied zwischen dir und
      deiner Schwester ist ganz klar - du bist ein Junge sie ist ein
      Mädchen. Oder umgekehrt, wie ihr wollt.


      1. Kapselung.

      Wie in meinem oben genannten Zitat werden Inerhalb von Klassen Einheiten
      und Methoden zu einer Einheit gebildet. Dies wird Kapseulung genannt
      und ist wohl das A und O der Objekt Orientierten Programmierung.

      Um euch die Sache einfacher zu gestalten werde ich hier konsequent ein
      Beispiel verwenden, und das ist die mit den Gummibärchen etc. ;)

      Als erstes erzeugen wir einen "Entwurd" Mensch, also euch und später
      die böhse Schwester die euch die Süßigkeiten abziehen möchte. das Zauberwort
      hier heißt "class".

      PHP-Quellcode

      1. <?php
      2. class Mensch {
      3. }
      4. ?>


      Nun haben wir eine Klasse erzeugt. Nun werden wir uns der Eigenschaft widmen.
      Nun gut, wir haben dich und deine Schwester, also brauchen wir die Eigenschaft
      "Geschlecht" und "Name". Diese Eigenschaften deklarieren wir mit "var".

      PHP-Quellcode

      1. <?php
      2. class Mensch {
      3. var $name;
      4. var $geschlecht;
      5. }
      6. ?>


      Da wir dies auch geschafft haben werde ich euch hier die Methode vorstellen. Im
      Grund genommen sind Methoden nichts weiter als einfache Funktionen. Sie sehen
      genauso aus und funktionieren prinzipiell genauso.

      PHP-Quellcode

      1. <?php
      2. class Mensch {
      3. var $name;
      4. var $geschlecht;
      5. // Die Methode in der wir den Namen festlegen
      6. function name($value) {
      7. $this->name = $value;
      8. }
      9. // Die Methode in der Wir das Geschlecht unseres
      10. // Menschen festlegen
      11. function gender($value) {
      12. $this->geschlecht = $value;
      13. }
      14. }
      15. ?>
      Alles anzeigen


      Wie ihr seht verwende ich hier die Variable $this. Ihr werdet euch sicher wundern
      was sie ist und was sie zu bedeuten hat, da ich sie ja nirgents zuvor deklariert
      habe. Nun $this ist eine so genannte Pseudovariable. Mit dieser Pseudovariable
      kann ein Objekt auf seine eigenen Variablen und Funktionen ( Eigenschaften und
      Methoden ) zugreifen.

      Nun sind wir soweit die Objekte zu erzeugen. Dies tun wir mir "new". Natürlich
      werden wir das Objekt nicht in seiner eigenen Klasse definieren.

      PHP-Quellcode

      1. <?php
      2. $felix = new Mensch;
      3. $felix->name = $felix->name("Felix");
      4. $felix->geschlecht = $felix->gender("Männlich!");
      5. ?>


      Nun habeb wir das Objekt Felix erzeugt. Ich habe hinter das Männlich nochmal ein
      Ausrufezeichen platziert damit das meine überaus tolle Männlichkeit nocheinmal
      unterstreicht =D. So weit, so gut. Aber wir müssen natürlich noch eure Schwester
      (er)zeugen. Dies tun wir genauso wie im obigen Beispiel, nur das das Geschlecht
      eben Weiblich, und der Name eben "Lolita" sein wird.

      PHP-Quellcode

      1. <?php
      2. $felix = new Mensch;
      3. $felix->name = $felix->name("Felix");
      4. $felix->geschlecht = $felix->gender("Männlich!");
      5. $lolita = new Mensch;
      6. $lolita->name = $lolita->name("Lolita");
      7. $lolita->geschlecht = $lolita->gender("Weiblich");
      8. ?>


      So, an dieser Stelle möchte ich betonen das hier wohl der erste Teil meinese
      Tutorials vorbei ist. Ich denke für heute hab ich wirklich genug geschrieben,
      hauptsächlich weil ich finde das die PHP eine reine Geisterstadt ist und ich
      einfach mal wieder etwas posten wollte um etwas Leben in die ganze Sache zu
      bringen. Zu guter letzt bleibt noch eins zu sagen. Ihr könnt euch das ganze
      Natürlich auch per Echo ausgeben.

      PHP-Quellcode

      1. <?php
      2. $felix = new Mensch;
      3. $felix->name = $felix->name("Felix");
      4. $felix->geschlecht = $felix->gender("Männlich!");
      5. echo "Mein Name ist".$felix->name;
      6. $lolita = new Mensch;
      7. $lolita->name = $lolita->name("Lolita");
      8. $lolita->geschlecht = $lolita->gender("Weiblich");
      9. echo "Mein Name ist".$lolita->name;
      10. ?>
      Alles anzeigen


      Ich weiß das der großteil noch unbehandelt ist, gegebenenfalls werde ich aus
      langeweile dieses Tutorial noch fortführen und die einzelnen Dinge noch
      etwas näher beschreiben. Für den Anfang sollte dies allerdings reichen.
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • nett...
      finde es nur schade, dass du immer nur das schlüsselwort var verwendest anstelle von public/private/protected bzw. bei methoden gar keine sichtbarkeit angibst... denn wenn man gewöhnt ist, immer nur var / methoden keine sichtbarkeit zuzuweißen (sprich alles ist public) gibt es bei einigen entwurfsmustern probleme :) (zb singleton -> zumindest da sollte man z.b den konstruktur privat machen, denn sonst hat das ganze design keinen zweck mehr. :D (zumindest wenn man nicht mehr alleine arbeitet sondern in nem team -> woher soll jeder wissen wie deine klasse anzusprechen ist ? im zweifelsfall erstellt man eben ein neues objekt, einmalige instance = fehlschlag. :))

      und ich finde auch nicht, dass diese drei schlüsselwörter einen anfänger überfordern :)
    • Hier mal ein kleines Zitat von mir selbst ;)

      Ich weiß das der großteil noch unbehandelt ist..


      Ich wollte einfach mal einen kleinen Einblick in die OOP liefern. Vollständig
      ist dieses Tutorial keinesfalls. Ich hatte eigentlich vor erstmal das
      eigentlich kleine Thema klonen zu behandeln, aber wie du vielleicht
      gelesen hast ging mir nach ca 1ner Stunde schreibarbeit vorerst einfach
      die Lust an der Sache aus.

      Danke für deine Antwort und Kritik. Wenns dich beruhigt werde ich
      das vielleicht noch im späteren Verlauf des Tages wenn mich die Langeweile
      packt noch weiterschreiben =D

      EDIT: Um Ehrlich zu sein hatte ich anfangs probleme mit den drei Schlüßelwörtern ;)
    • so... was mir gerade erst aufgefallen ist...

      PHP-Quellcode

      1. <?php
      2. $felix = new Mensch;
      3. $felix->name = name("Felix");
      4. $felix->geschlecht = gender("Männlich!");
      5. $lolita = new Mensch;
      6. $lolita->name = name("Lolita");
      7. $lolita->geschlecht = gender("Weiblich");
      8. ?>

      Was soll denn das sein?
      Du rufst eine Funktion auf, die es in PHP aber gar nicht gibt und auch nicht erstellt wurden?
      Möchtest du etwa die beiden Methoden der Klasse damit ansprechen? Dann würde die Syntax aber so lauten:

      PHP-Quellcode

      1. <?php
      2. $felix = new Mensch;
      3. $felix->name = $felix->name("Felix");
      4. $felix->geschlecht = $felix->gender("Männlich!");
      5. ?>

      Und auch das hat keinen Sinn... Denn die Methode name und gender besitzen keinen Rückgabewert, sprich: Du änderst den Wert von name/geschlecht mit den Methodenaufrufen ab (also auf Felix/Männlich!), überschreibst es danach aber gleich wieder mit null, da die beiden Methoden ja keinen Rückgabewerd besitzen, du diesen jedoch den Variablen wieder zuweißt. :OSMILEY:

      Möchtest du evtl. soetwas schreiben?

      PHP-Quellcode

      1. <?php
      2. class Mensch
      3. {
      4. private $name;
      5. private $gender;
      6. public function setName($name)
      7. {
      8. $this->name = $name;
      9. }
      10. public function setGender($gender)
      11. {
      12. $this->gender = $gender;
      13. }
      14. }
      15. $felix = new Mensch;
      16. $felix->setName("Felix");
      17. $felix->setGender("Maenlich");
      18. ?>
      Alles anzeigen

      Das wäre schon um einiges Sinnvoller und Funktionstüchtiger.
      Im übrigen, als Erklärung wieso man soetwas (in manchen Fällen) über Setter und Getter (so nennt man die Methoden, die einer privaten Variable der Klasse einen übergebenen Wert übergibt bzw deren Wert zurückgibt, heißen Normalweiße setVariable bzw getVariable) macht:
      Man könnte die Variablen natürlich auch gleich public machen (sprich, man kann auf die Variable auch von außen zugreifen, private bedeutet dann dass man nur innerhalb der Klasse darauf zugreifen kann, so viel zur Erklärung von private/public), jedoch was wäre, wenn man möchte, dass die Variable nur bestimme Werte annehmen kann? Richtig, hier kommt die Methode über Setter und Getter ins Spiel. Möchte man z.B.: dass die Variable gender der Klasse Mensch und den String "Maenlich" bzw. "Weiblich" annehmen kann, könnte die Setter Methode z.B.: so aussehen:

      PHP-Quellcode

      1. [Klassenbeginn, Variablen]
      2. public function setGender($gender)
      3. {
      4. $this->gender = (($gender == "Maenlich") || ($gender == "Weiblich")) ? $gender : $this->gender;
      5. }
      6. [Klassenschluss]


      Sprich, man kann nun auserhalb der Klasse der Klassenvariable gender NUR NOCH den String "Maenlich" oder "Weiblich" zuweißen. ;)
      Ein anderer String ist nicht möglich. Solch einen Effekt könnte man wenn die Variable public wäre nicht erreichen.
    • Du hast im ersten Teil mit den Funktionen vollständig recht. Tut mir Leid
      das ichs erst jetzt korrigieren kann, hab deinen Post nie gelesen bzw
      gesehen. Jedem unterlaufen mal Fehler, vorallem mir. Besonders in der
      OOP unterlaufen mir noch häufig Angänger/Flüchtigkeitsfehler.Ist immer etwas
      schwer in einem Forum wirklich einen übersichtlichen und Fehlerfreien Code
      zu schreiben ;)
    • Sorry, dein Code ist so aber noch immer fehlerhaft.

      $felix->name = "Felix";

      das würde der Variable name den Wert Felix zuweißen. Die Methode name der Klasse Mensch jedoch hat genau den gleichen Effekt, sie weißt der Variable name den entsprechenden Wert zu. Soweit ok. (Abgesehen vom Methodennamen, denn wie gesagt, Setter Methoden nennen sich im Normalfall setName, in diesem Fall. Zudem sind Variablen, an diese man nur via Setter/Getter Methoden kommt auch private, aber das ist ja gerade mehr oder weniger egal)
      So doch nun zu dem was zu machst:

      $felix->name = $felix->name("Felix");

      Auch deutsch: Weiße der Variable name des Objektes felix der Klasse Mensch den Rückgabewert der Methode name des Objektes felix der Klasse Mensch zu.
      Diese Methode hat aber keinen Rückgabewert. Sprich: Durch den Methodenaufruf setzt du der Variable zwar einen Wert, überschreibst ihn jedoch wieder.

      Richtig wäre es so:

      PHP-Quellcode

      1. class Mensch
      2. {
      3. private $name;
      4. public function setName($name)
      5. {
      6. $this->name = $name;
      7. }
      8. }
      9. $felix = new Mensch;
      10. $felix->setName("Felix");
      Alles anzeigen


      Nicht mehr nicht weniger. ;)