[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
    <?php
    class Mensch {
    
    
    }
    ?>

    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
    <?php
    class Mensch {
    	var $name;
    	var $geschlecht;
    }
    ?>

    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.

    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
    <?php
    $felix = new Mensch;
    $felix->name = $felix->name("Felix");
    $felix->geschlecht = $felix->gender("Männlich!");
    ?>

    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
    <?php
    $felix = new Mensch;
    $felix->name = $felix->name("Felix");
    $felix->geschlecht = $felix->gender("Männlich!");
    
    
    $lolita = new Mensch;
    $lolita->name = $lolita->name("Lolita");
    $lolita->geschlecht = $lolita->gender("Weiblich");
    ?>

    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.

    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.

  • 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 ;)

    Zitat

    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
    <?php 
    $felix = new Mensch; 
    $felix->name = name("Felix"); 
    $felix->geschlecht = gender("Männlich!"); 
    
    
    $lolita = new Mensch; 
    $lolita->name = name("Lolita"); 
    $lolita->geschlecht = gender("Weiblich");
    ?>


    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
    <?php 
    $felix = new Mensch; 
    $felix->name = $felix->name("Felix"); 
    $felix->geschlecht = $felix->gender("Männlich!");
    ?>


    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?


    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
    [Klassenbeginn, Variablen]
    public function setGender($gender)
    {
      $this->gender = (($gender == "Maenlich") || ($gender == "Weiblich")) ? $gender : $this->gender;
    }
    [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:

    Nicht mehr nicht weniger. ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!