Shop-Hilfe.com
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 29.03.2002, 23:26   #1
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein

[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?
__________________
Give up yourself into the moment — The time is now.

Geändert von Lars (29.03.2002 um 23:48 Uhr).
Lars ist offline   Mit Zitat antworten


Alt 29.03.2002, 23:43   #2
TP-Moderator
 
Benutzerbild von Levis
 
Registriert seit: Jul 2001
Ort: Regensburg / Landshut
Levis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKE
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?
__________________
"Programmieren ist eine Kunst"

» Fahrtenbuch genial! ist endlich da! Steuern sparen so einfach wie noch nie!
» QuickShot 3.0 ist endlich da!
» Schöner einkaufen


Red Gold Green - good things come to those who wait...

Geändert von Levis (30.03.2002 um 00:56 Uhr).
Levis ist offline   Mit Zitat antworten
Alt 29.03.2002, 23:46   #3
TP-Moderator
 
Benutzerbild von Levis
 
Registriert seit: Jul 2001
Ort: Regensburg / Landshut
Levis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKE
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?
__________________
"Programmieren ist eine Kunst"

» Fahrtenbuch genial! ist endlich da! Steuern sparen so einfach wie noch nie!
» QuickShot 3.0 ist endlich da!
» Schöner einkaufen


Red Gold Green - good things come to those who wait...

Geändert von Levis (30.03.2002 um 00:56 Uhr).
Levis ist offline   Mit Zitat antworten
Alt 29.03.2002, 23:56   #4
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
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.
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 29.03.2002, 23:56   #5
TP-Veteran
 
Benutzerbild von holunda
 
Registriert seit: Oct 2001
Ort: Oberau
holunda macht alles soweit korrekt
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.
__________________
Gruß vom holu
holunda ist offline   Mit Zitat antworten
Alt 29.03.2002, 23:59   #6
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
Ich habe extra versucht, realitätsnah zu bleiben. Lies den ersten Teil noch mal, und stell Dir vor, Du sitzt vor einem Kasten Bier.
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 30.03.2002, 00:04   #7
TP-Moderator
 
Benutzerbild von Levis
 
Registriert seit: Jul 2001
Ort: Regensburg / Landshut
Levis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKE
Zitat:
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?
__________________
"Programmieren ist eine Kunst"

» Fahrtenbuch genial! ist endlich da! Steuern sparen so einfach wie noch nie!
» QuickShot 3.0 ist endlich da!
» Schöner einkaufen


Red Gold Green - good things come to those who wait...
Levis ist offline   Mit Zitat antworten
Alt 30.03.2002, 00:07   #8
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
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.
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 30.03.2002, 00:14   #9
TP-Veteran
 
Benutzerbild von holunda
 
Registriert seit: Oct 2001
Ort: Oberau
holunda macht alles soweit korrekt
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?
__________________
Gruß vom holu
holunda ist offline   Mit Zitat antworten
Alt 30.03.2002, 00:18   #10
TP-Moderator
 
Benutzerbild von Levis
 
Registriert seit: Jul 2001
Ort: Regensburg / Landshut
Levis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKELevis ist ein richtiges Arbeitstier - DANKE
Zitat:
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?
__________________
"Programmieren ist eine Kunst"

» Fahrtenbuch genial! ist endlich da! Steuern sparen so einfach wie noch nie!
» QuickShot 3.0 ist endlich da!
» Schöner einkaufen


Red Gold Green - good things come to those who wait...
Levis ist offline   Mit Zitat antworten
Alt 30.03.2002, 00:21   #11
TP-Veteran
 
Benutzerbild von holunda
 
Registriert seit: Oct 2001
Ort: Oberau
holunda macht alles soweit korrekt
Zitat:
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?
__________________
Gruß vom holu
holunda ist offline   Mit Zitat antworten
Alt 30.03.2002, 00:22   #12
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
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?
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 30.03.2002, 00:25   #13
TP-Veteran
 
Benutzerbild von holunda
 
Registriert seit: Oct 2001
Ort: Oberau
holunda macht alles soweit korrekt
Zitat:
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 ....
__________________
Gruß vom holu
holunda ist offline   Mit Zitat antworten
Alt 30.03.2002, 00:26   #14
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
Did I mention, that my surname is Beck?
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 30.03.2002, 00:30   #15
TP-Veteran
 
Benutzerbild von holunda
 
Registriert seit: Oct 2001
Ort: Oberau
holunda macht alles soweit korrekt
i know - bin mal durch irgendein thread auf deine Abi (??)-Page geraten - sieht klasse aus .

schmobi hats also schon länger drauf
__________________
Gruß vom holu
holunda ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik > Workshops und Tutorials
[Workshop] Objektorientierte Programmierung in PHP [Fortgeschrittene] [Workshop] Objektorientierte Programmierung in PHP
« [Tutorial] Mozillas Javascript 1.6 - Die neuen Methoden | [PHP] Fallbeispiel für die Zerlegung eines Strings »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir