Seite 1 von 8 1234 ... LetzteLetzte
Ergebnis 1 bis 15 von 115

Thema: [Workshop] Objektorientierte Programmierung in PHP

  1. #1
    TP-Greis
    Registriert seit
    Jun 2001
    Beiträge
    5.468

    [Workshop] Objektorientierte Programmierung in PHP

    (Dieser Thread ist der zweite Teil eines Workshops, der hier begonnen hat.)

    Objektorientierte Programmierung in PHP
    Was sind Objekte?

    In der Programmierung sind Objekte Einheiten aus Methoden und Eigenschaften. Diese Eionheiten bezeichnet man als Klasse. Bei einer Klasse handelt es sich um eine nach aussen hin geschlossene Sammlung von Funktionen. Als Schnittstelle nach aussen dienen die Methoden. Sie werden im inneren der Klasse definiert.

    Das klingt erst mal verwirrend, ist aber vollkommen logisch aufgebaut. Als Beispiel wollen wir uns eine Klasse namens bier basteln, die einige Grundlegende Funktionalitäten einer richtigen Bier-Flasche besitzt. Das Grundschema einer Klasse ist recht simpel:

    PHP-Code:
    class bier{
        
    // Zeugs

    Das ist die Basisklasse. Die Objektinstanzen werden mit dem SChlüsselwort new erzeugt (stellt Euch das einfach so vor, als wenn wir Flaschen in eine leere Bierkiste stecken):

    PHP-Code:
    class bier{
        
    // Zeugs
    }

    $bier1 = new bier();
    $bier2 = new bier();  
    $bier3 = new bier(); 
    Die Klasse hat bislang aber immer noch keine Funktionalitäten, deswegen werden wir ihr nun einige Eigenschaften verpassen:

    PHP-Code:
    class bier{
        var 
    $voll 1;
    }

    $bier1 = new bier();
    $bier2 = new bier();
    $bier3 = new bier();  

    $bier1->voll 1;
    $bier2->voll 0;
    $bier3->voll 0
    So, jetzt haben wir eine volle und zwei leere Flasche Bier in unserem Kasten. Innerhalb der Klasse wurde die Variable $voll per Schlüsselwort var definiert. Somit kennen alle Instanzen diese Variable (= Eigenschaft). In unserem Beispiel steht sie standardmässig auf "1", also TRUE, damit sind alle erzeugten Instanzen also ersteinmal voll. Die Eigenschaften werden den Instanzen mit dem Operator "->" zugewiesen (Scope).

    So, jetzt gehen wir aber mal in die Tiefen. Bislang haben wir gelernt, dass beliebig viele autarke Instanzen erzeugt werden können, die alle den gleichen Namen haben und alle auf die gleichen Eigenschaften zugreifen können. Innerhalb einer Klasse können wir natürlich auch "normale" Funktionen einbauen:

    PHP-Code:
    class bier{
        var 
    $voll 1;
        function 
    austrinken(){
            
    $this->voll 0;
        }
    }

    $bier1 = new bier();
    $bier1->austrinken(); 
    Das Schlüsselwort "this" ist so etwas wie ein Platzhalter (Referenz) für die jeweilige Instanz, welche die Funktion aufruft, auch die Funktionen einer Klasse werden mit dem Scope angesprochen.

    Innerhalb einer Klasse können auch Funktionen definiert werden, die den gleichen Namen tragen, wie die Klasse selbst. Diese nennt man dann Konstruktor (an alle C++ und Co. Spezies: PHP kennt keine Destruktoren ). Sie wird beim erzeugen einer neuen Instanz automatisch aufgerufen.

    PHP-Code:
    class bier{
        var 
    $geoeffnet 0;
        var 
    $voll 1;
        function 
    austrinken(){
            
    $this->voll 0;
        }
        function 
    oeffnen(){
            
    $this->geoeffnet 1;
        }
        function 
    bier(){
            
    $this->oeffnen();
        }
    }

    $bier1 = new bier(); 
    Dieses Beispiel öffnet also alle Bierflaschen, die aus dem Kasten entnommen werden, automatisch.

    Gibt es bis hier hin irgendwelche Fragen?
    Geändert von Lars (29.03.2002 um 22:48 Uhr)

  2. #2
    TP-Moderator
    Registriert seit
    Jul 2001
    Beiträge
    2.640

    Thumbs up

    Also ich glaube ich habs verstanden.
    Eine kleine Verständnisaufgabe:
    PHP-Code:
    class bier{
        var 
    $geoeffnet 0;
        var 
    $voll 1;
        function 
    austrinken(){
            
    $this->voll 0;
        }
        function 
    oeffnen(){
            
    $this->geoeffnet 1;
        }
        function 
    bier(){
            
    $this->oeffnen();
        }
        function 
    zapfen(){
            
    $this->voll 1;
        }
    }

    $bier1 = new bier(); // Bier: geschlossen, voll
    $bier1->oeffnen(); // Bier: offen, voll
    $bier1->austrinken(); //Bier: offen, leer
    $bier1->zapfen(); //Bier: offen, voll 
    Stimmen die Kommentare, die ich neben meinen Code geschrieben habe?
    Auf die Funktionen, die in der Klasse "bier" definiert wurden, können aber doch nur diejenigen Variablen zugreifen, die mit "$xx = new bier()" definiert wurden, oder?
    Und was passiert, wenn ich jetzt wieder "$bier1 = new bier();" ausführe? Gibts einen Fehler, oder ist das alte Bier überschrieben?
    Geändert von Levis (29.03.2002 um 23:56 Uhr)
    ............................

  3. #3
    TP-Moderator
    Registriert seit
    Jul 2001
    Beiträge
    2.640

    Question noch eine...

    PHP-Code:
    class bier{
        var 
    $geoeffnet 0;
        var 
    $voll 1;
        function 
    austrinken(){
            
    $this->voll 0;
        }
        function 
    oeffnen(){
            
    $this->geoeffnet 1;
        }
        function 
    bier(){
            
    $this->oeffnen();
        }
    }

    $bier1 = new bier(); 
    das "bier" bei "$bier1 = new bier();" bezieht sich doch auf das "bier" in der ersten Zeile, oder?
    Geändert von Levis (29.03.2002 um 23:56 Uhr)
    ............................

  4. #4
    TP-Greis
    Registriert seit
    Jun 2001
    Beiträge
    5.468
    1)
    Deine Kommentare sind fast richtig. Lediglich der erste ist falsch, denn innerhalb der Klasse sind zwar alle Flaschen zu ($geoeffnet = 0), aber beim Erzeugen einer Instanz (new), wird automatisch der Konstruktor aufgerufen, die Flasche wird also geöffnet.

    Ja, nur die Objektinstanzen können auf die Klasse zugreifen.

    Beim erzeugen einer neuen Instanz wird die alte überschrieben.

    2)
    Ja, es bezieht sich auf die erste Zeile, den Namen der Klasse.

  5. #5
    TP-Veteran Avatar von holunda
    Registriert seit
    Oct 2001
    Ort
    Oberau
    Beiträge
    1.867
    jo soweit alles kapiert. Mir fehlt nur bei solchen Sachen immer der Bezug zur Realität (???). Für was braucht man solchen stuff. Nur ein kleines Beispiel bitte dass ich mich da ein wenig hineindenken kann.

  6. #6
    TP-Greis
    Registriert seit
    Jun 2001
    Beiträge
    5.468
    Ich habe extra versucht, realitätsnah zu bleiben. Lies den ersten Teil noch mal, und stell Dir vor, Du sitzt vor einem Kasten Bier.

  7. #7
    TP-Moderator
    Registriert seit
    Jul 2001
    Beiträge
    2.640
    Original geschrieben von schmobi
    Ich habe extra versucht, realitätsnah zu bleiben. Lies den ersten Teil noch mal, und stell Dir vor, Du sitzt vor einem Kasten Bier.
    Ja, ich finde auch, dass dieses Beispiel super ist! So konnte man sich wirklich gut in die Sache hineinversetzen.

    Zu meiner Frage nochmal:
    Gut, dann habe ich das mit dem Konstruktor auch kapiert.
    Aber man könnte dann doch gleich
    PHP-Code:
    var $geoeffnet 0
    schreiben, oder?
    Aber das war wohl nur zur Demo, oder?
    ............................

  8. #8
    TP-Greis
    Registriert seit
    Jun 2001
    Beiträge
    5.468
    Die ganze Klasse ist natürlich purer Schwachsinn, es macht auch keinen grossen Sinn, nur Methoden für TRUE und FALSE zu schreiben. Es soll lediglich der Anschauung dienen.

  9. #9
    TP-Veteran Avatar von holunda
    Registriert seit
    Oct 2001
    Ort
    Oberau
    Beiträge
    1.867
    k ich versuchs mal auf eigene faust bzw anderes beispiel

    PHP-Code:
    <?

    class eis {
        var 
    $gefuellt 1;
        function 
    essen(){
            
    $this->gefuellt 0;
        }
        function 
    fuellen(){
            
    $this->gefuellt 1;
        }
    }

    $eis1 = new eis();  //müsste doch gefüllt sein oder?????
    $eis1->essen();     //Jetz dürfte es nicht gefüllt sein

    ?>
    1) ist das so richtig?
    2) muss man unten bei "$eis1" den einser hinten dran hängen ? für was isn der?

  10. #10
    TP-Moderator
    Registriert seit
    Jul 2001
    Beiträge
    2.640
    Original geschrieben von holunda

    1) ist das so richtig?
    2) muss man unten bei "$eis1" den einser hinten dran hängen ? für was isn der?
    Ich denke schon, dass es so richtig ist...
    $eis müsste doch auch gehen, oder?
    Trinkt Ihr in Österreich kein Bier? Esst Ihr nur Eis?
    ............................

  11. #11
    TP-Veteran Avatar von holunda
    Registriert seit
    Oct 2001
    Ort
    Oberau
    Beiträge
    1.867
    Ich denke schon, dass es so richtig ist...
    $eis müsste doch auch gehen, oder?
    Trinkt Ihr in Österreich kein Bier? Esst Ihr nur Eis?
    neinnein - wir vom berg sind auch ganz "normale" mensch wieder jeder andere auch (oder auch nicht). Wollte mit dem Beispiel nur selbst schnell was machen damit ichs besser kapier'!

    Hinten die Zahlen sind doch nur wenn man die klasse öfters aufruft oder täusch ich mich da?

  12. #12
    TP-Greis
    Registriert seit
    Jun 2001
    Beiträge
    5.468
    Yepp, alles richtig.

    Der Name der Instanzen ist natürlich egal, man kann ganeuso gut $karl_heinz = new eis() nehmen.

    Was trinkt Ihr denn in Österreich ausser Melange?

  13. #13
    TP-Veteran Avatar von holunda
    Registriert seit
    Oct 2001
    Ort
    Oberau
    Beiträge
    1.867
    Was trinkt Ihr denn in Österreich ausser Melange?
    ich persönlich greif da auf die höllander (Heineken) und auf die deutschen (becks) zurück. Die Aut-Biere sind nicht zu genießen

    erzählt das aber bitte keinem weiter ....

  14. #14
    TP-Greis
    Registriert seit
    Jun 2001
    Beiträge
    5.468
    Did I mention, that my surname is Beck?

  15. #15
    TP-Veteran Avatar von holunda
    Registriert seit
    Oct 2001
    Ort
    Oberau
    Beiträge
    1.867
    i know - bin mal durch irgendein thread auf deine Abi (??)-Page geraten - sieht klasse aus .

    schmobi hats also schon länger drauf

Seite 1 von 8 1234 ... LetzteLetzte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51