PHP - Objektorientiert
PHP - Objektorientiert
- php
0 Henryk Plötz0 ralf
Hallo zusammen
Bisher habe ich meine Scripts immer Nicht-Objektorientiert geschrieben, also ohne Klassen&Co.
Nun interessiert mich trotzdem, wie man objektorientiert programmiert. Beim durchlesen von Anleitungen bin ich immer wieder am Verständnis gescheitert (Was heisst z.B. "vererben", "extends"...)
Wie kann ich mir das vorstellen, bzw. umdenken?
Gibt es Anleitungen für Anfänger?
Ist es vergleichbar mit Visual Basic, VBA, VBS...?
Kann jemand ein einfaches Beispiel machen?
Für eure Hilfe im Voraus besten Dank.
Gruss Daniel
Moin,
Nun interessiert mich trotzdem, wie man objektorientiert programmiert. Beim durchlesen von Anleitungen bin ich immer wieder am Verständnis gescheitert (Was heisst z.B. "vererben", "extends"...)
Vererben heisst der Vorgang bei dem eine Kindklasse alle Methoden und Eigenschaften einer Elternklasse erbt. Üblicherweise ist dabei die Elternklasse allgemeiner und die Kindklasse spezieller.
Das allseits beliebte Beispiel: Eine Klasse Fahrzeug hat Eigenschaften wie Geschwindigkeit, Anzahl_beförderter_Personen, etc. und die Methoden von_a_nach_z_fahren, anhalten usw. Jedes Objekt das du nun aus dieser Klasse erzeugst hat diese Eigenschaften und Methoden.
Jetzt leitest du zum Beispiel die Klasse Fahrrad von der Klasse Fahrzeug ab. Da kommen dann zusätzliche Eigenschaften wie hat_platten und ist_verkehrssicher und zusätzliche Methoden wie klingeln hinzu. Du kannst auch die Klasse Auto von Fahrzeug ableiten und erhältst zusätzlich die Eigenschaften anzahl_räder, karosseriefarbe und Methoden hupen und motorhaube_öffnen hinzu.
Sachen die man mit Objekten der Klasse Fahrzeug anstellen kann, kann man selbstverständlich auch mit allen Objekten der Klassen Auto oder Fahrrad machen. Jedes Auto ist ein Fahrzeug, aber nicht alle Fahrzeuge sind Autos.
Hi,
na was soll ich sagen, oo muss in deinem kopf passieren. Wenn man bisher "spagetti"-Code produziert hat, fällt einem das besonder schwer (Hab das auch schon mitgemacht)
Ich probier die hier n beispiel zu geben:
Wir haben eine Klasse Auto:
class Auto {
// Eigenschaften
var $curSpeed;
var $maxSpeed;
// Konstruktor
function Auto ($maxSpeed) {
$this->curSpeed=0;
$this->maxSpeed=$maxSpeed;
}
}
Als erstes haben wir der Klasse Eigenschaften zugefügt (Das Auto hat eine maximale und aktuelle Geschwindigkeit)
Der Konstruktor ist die Methode die genauso heisst wie die Klasse. Der Konstruktor wird automatisch beim erzeugen eines Objektes (das kommt später) aufgerufen um die Klasse mit Startwerten zu versorgen.
Fügen wir nun neue Methoden hinzu:
class Auto {
[...]
function accelerate () {
if($this->curSpeed<$this->maxSpeed) {
$this->curSpeed+=1;
} else {
$this->curSpeed=$this->maxSpeed;
}
}
function decelerate () {
if($this->curSpeed>0) {
$this->curSpeed-=1;
} else {
$this->curSpeed=0;
}
}
}
Hier haben wir nun Methoden hinzugefügt welche die Geschwindigkeit des Autos erhöhen bzw. drosseln. Die Kontrollstrukturen innerhalb der Methode erklären sich von selbst denke ich.
Um nun fahren zu können müssen wir ein neue Objekt erzeugen:
$car=new Auto(250);
Das erzeugt ein neues Objekt ($car) aus der Klasse Auto, wobei das Auto eine maximale Geschwindigkeit von 250 hat, dies setzt der Konstruktor.
Kommen wir zur Vererbung:
class Auto2 extends Auto {
// Konstruktor
function Auto2($maxSpeed) {
parent::Auto($maxSpeed);
}
function GetCurSpeed() {
return $this->curSpeed;
}
function GetMaxSpeed() {
return $this->maxSpeed;
}
}
Mit extends Vererben wir der Klasse Auto2 alle Eigenschaften und Methoden der Klasse Auto, d.h. Auto2 kann und hat genau das was Auto auch hat.
Der aufruf parent::Auto($maxspeed) ruft der Konstruktor der Elternklasse auf. Dies alles nennt man Polymorphismus. Die neuen Funktionen geben nun die Daten der alten Klasse Auto zurück:
$car=new Auto2(250); // neues Objekt
for ($i=1; $i==100; $i++) {
$car->accelerate(); // Funktion accelerate wird 100 mal aufgerufen (FUNKTION AUS ALTER KLASSE)
}
echo $car->GetCurSpeed(); // Wird 100 zurückgeben, da das Auto auf 1000 beschleunigt wurde (FUNKTION AUS 2. KLASSE)
Ich hoffe das hilft Dir weiter
Gruß
Ralf