[PHP5] OOP - Objektorientierte Programmierung

[Update]28.03.05
- Vorschaubild gechanged. (hat net so funktioniert :/ )
- "Allgemeines in OOP" gechanged.

#####
[ Was sind Objekte ?]
Nun einigen werden nun diese Frage stellen, was ist eigentlich ein Objekt? Ein Objekt kann praktisch alles sein. z.B. Aprikose ist ein Frucht. Nun betrachte das ganze mal nicht aus der Biologie sondern aus der Ansicht des Programmierens. Ein Apfel ist nun ein Objekt, also ein Gegestand. Dieser hat eine Farbe, Form und so weiter.
Dieses haben auf die Klassen (ähnlich).
Ich hoffe das sich die Frage damit nun geklärt hat.


[ Allgemeines in OOP ]
Eigentlich war PHP früher keine objektorientierte Sprache (OOP). Diese möglichkeiten wurde auch erst später einprogrammiert.
PHP ist keine Objektorientiere Sprache, sie ist eine prozedurale Sprache! C++ oder Java sind im Kern auf OOP aufgebaut. Die OOP ist dazu da komplexere, übersichtlichere und dauernt wiederverwendenbare Funktionen zu erstellen. Mal ein Beispiel. Man hat 5 Querys die die Mysql Tabelle updatet, und das in jeder Datei. Normalerweise würde man das jedes mal in die datei 5 mal reinschreiben. Aber was nun wenn man eines ändert? Dann muss man alle ändern. Gut mit OOP wird abhilfe geschafft ;) Man kann dars eine Klasse machen und diese dann immer wieder neu aufrufen, und wenn man was ändert, ändert man es sozusagen in allen Datein.
Die Anwenungsbereiche sind riesig!
OOP wird benutz in
- User Systemen
- Template Systemen
- In Kompletten MYSQL Bereichen
- Gästebüchern, Newssystemen......
und das ganze kannst du ver5achen dann hast du einen Hauch davon wie oft und verschieden es benutzt werden kann!


[ OOP - Klassen ]
Der Hauptbestandteil in der OOP, füh5t über das Schlüsselwort "class".
Mit der Hilfe von "class" ist man in der Lage, Klassen zu erstellen / erzeugen und aus diesen später sogennante Instanzen abzuleiten, mit denen sie arbeiten wollen.

Das Schema einer Klassendefiniton seht so aus:

// Klasse
class auto
{
var $car; // Eigenschaft 1
var $farbe; // Eigenschaft 2
...................................................

//Konstruktor
function classname() {
$this->car = car_1;
..................
}

// Methode
function funktionsname() {
$this->farbe = farbe_1;
......................
}
}



[ - Einsatz von class]
Die Klassendefiniton wird mit dem Schlüsselwort "class" eingeleitet und im vorliegendem Beispiel "class auto" getauft.
Die gesamte Klasse ist von geschweiften Klammern ({,}) umgeben.

[- Einsatz von this]
Um inerhalb der Klasse auf sich selb verweisen zu können, wird das Schlüsselwort "this" eingesetzt. Beachchte die Schreibweise beim Zugriff auf die Variable der Klasse diese können die Eigenschaften der Instanz bilden.


$this->stueckzahl[$artlnummer] += $stueck;

Das "$" Zeichen steht vor "this", anschliesend wird der Verweis mit dem speziellen Operator "->" gebildet. Achte sets darauf die korrekte Synatax zu benutzen. Problematisch ist, das PHP des nicht immer mit einer Fehlermeldung quittiert, sonder oft wird das Script einfach weiter verarbeitet.

[ - Einsartz von var]
Mit Hilfe des Wortes "var" werden Variablem im Objekt angelegt, diese ergeben wiederum die Eigenschaften des Objektes.

var $car;
var $farbe;

Die Namen sind in dieser Klasse lokal. Abgesehn von der Verwenung in den Methoden können sie auch aös Eigenschaften dienen. Es schliesen sich zwei Medthoden an, die als normale Funktionen defniert werden.
Wird auf die Klasse selbst zugeriffen, dient das Schlüsselwort "this" aös Indikatior.

[- Einsatz von new]
uch der Einsatz der Klasse unterscheid sich von der normalen Funktionen. Um die Klasse nutzen zu können muss zuerst eine Instanz der Klasse gebildet werden.

$meinauto = new auto;

Die Variable "$meinauto" ist nun ein Objekt. Die eigentliche Instanzierung nimmt das Schlüsselwort "new" vor, der Parameter ist der Name des Objekts der zuvor in der Klasse definiert wurde.

[- Die Verbung]
Mit PHP ist man auch in der Lage eine einfache Verbung von Klassen vorzunehmen. Angenommen, sie möchten in einer anderen Webanwendung die Klasse "warenkorb" verwenden, jedoch weiter Methoden und Eigenschaften einfügen. Es ist ein Grundgedanke der OOP, sich die bereits vorhanden Klassen zunutze zu machen. sie können in ihrem Code als leicht Klassen erstellen, die lediglich erweiter werden, anstatt diese neu anzulegen.

// Klasse 1
class classname1
{
var $abc;
.....................
}
// Erweiterte Klasse 2 . erbt von Klasse 1
class classname 2 extends classname1
{
var $abcde;
var $abdef;



[ - Einsatz von extends]
Abgeleitet Klassen werdne mit Hilfe des Schlüsselworts "extends" erzeugt. Der Folgende Code erweitert z.b eine bereits erstelle Klassel um eine Methode "artikelEntfernen()":


class ext_meineautos extends autos
{
function artikelEntfernen($artnr){
unset($this->artikel[$artnr]);
unset($this->stueckzahl[$artnr]);
}
}


Man kann nun auch eine Instanz der erweiteren Klasse erzugen, die sämtlichen Eigenschaften der alten und neuen Klasse in sich vereint:


$meinauto = new ext_meineautos


und die Funktion "artikelEntfernen()" einsetzen:


$meinauto->artikelEntfernen("1002");


-------------------->
Ich hab nun die Konstruktoren und Destruktioren wegelassen da es glaub ich für den Anfänger nicht wirklich Hilfreich ist. Ich werde es wenn die Nachfrage besteht, noch einfügen.

Ich hoffe es war nicht allzu kompleziert, am besten ihr macht das ganze im Learning by Doing Prozess, die nötigen Informationen habt ihr ja num.


Stoke

Kommentare

evo
evo am Samstag, 26. März 2005 um 09:51

Nettes Tutorial :) Ich habe es nur mal kurz überflogen und einen Fehler entdeckt "class classname 2 extemds classname", extemds müsste extends heissen :D

malo
malo am Samstag, 26. März 2005 um 10:13

'updatet' - habs um 4 uhr bis 5 uhr geschriebn warscheinlich liegts daran :D

blackfeet
blackfeet am Sonntag, 27. März 2005 um 16:24

Eigentlich ein ganz gutes Tutorial, nur für den Anfänger denke ich nicht geeignet, da über die grundlegenden Prinzipien der Objektorientierung nicht gesprochen wird.
Wenn du mal zeit hättest wär es super, wenn du das ganze noch um diesen Teil erweiterst, also erklärst was eine Klasse ist, warum man Objektorientiert Programmieren sollte usw.

Ansonsten ganz gut, danke!

cruz
cruz am Mittwoch, 30. März 2005 um 22:48

kein php5. ist stink-normales php4 oop. erklärung von objekten etwas schwach aber geht. sonst in ordnung.

Markus René Einicher
Markus René Einicher am Freitag, 1. April 2005 um 16:05

Ich kapier hier gar nix. Du erklärst nur wie man Klassen handhabt, was daran ist OOP? Und die Artikulation ist wirklich schwach. gechanged? Was stört dich an verändert?

Spielgrips
Spielgrips am Samstag, 23. April 2005 um 19:01

Hi Stoke, das ist noch das alte Klassensystem mit "var" ;)! Ist aber nicht falsch :)! Also protected, public, private musste mit erwähnen und die neueren Dinge.

Warden
Warden am Samstag, 26. November 2005 um 10:27

Danke dir, das Tutorial is echt top ;) Mach weiter so... wenn net dann schreib ich mal irgendwann eins auf meiner Seite ;)