hallo Leute,
Dieses Tutorial setzt Grundwissen voraus - ich werde hier keine Grundkenntnisse vermitteln!
Inhalt
1. Der Unterschied zwischen var, public, private und protected
2. Zugriff auf die eigene Klasse
2.1 Der Konstruktor
2.2 Der Destruktor
2.3 Methoden
2.3.1 Getter Methoden
2.3.2 Setter Methoden
3. Vor- und Nachteile der Objektorientierten Programmierung
4. Anwendungsfall
1. Der Unterschied zwischen var, public, private und protected
Hier gehe ich kurz auf die Unterschiede bzw. Gemeinsamkeiten zwischen var, public, private und protected ein.
Fangen wir an mit var und public. Die Gemeinsamkeit ist, dass es einfach das gleiche ist.
Der Unterschied: Var wird in PHP4 verwendet und public wird in PHP5 (aktuell) verwendet.
Weiter geht es also mit public und private. Deklariert man eine Variable als "public", so kann man außerhalb der Klasse auf diese zugreifen und sie "manipulieren".
Bei private ist eine Veränderung dieser Variablen von außen nicht möglich (dann gibt es eine Fehlermeldung, wenn man das versucht - dazu kommen wir aber weiter unten noch).
Protected wird anstatt private verwendet, wenn abgeleitete Klassen Variablen und/oder Methoden erben sollen, da dies mit private nicht möglich ist. Darauf gehe ich aber in diesem Tutorial nicht ein (siehe Teil 2).
2. Zugriff auf die eigene Klasse
Will man auf Objekte oder Methoden zugreifen, die sich innerhalb der Klasse befinden, in der man arbeitet, so bezieht sich $this immer auf diese Klasse.
Will man beispielsweise die Variable a in einem Objekt verändern, so kann dies durch passieren.
Will man eine Funktion des Objekts aufrufen, so geschieht dies durch
Beispiel:
2.1 Der Konstruktor
Der sogenannte "Konstruktor" ist eine Methode, die beim initialisieren des Objektes automatisch ausgeführt wird. Da der Konstruktor innerhalb des Objektes deklariert ist, kann er logischerweise (wie andere Funktionen der Klasse auch) auf Klassenvariablen zugreifen. Dies geschieht mit der Funktion namens __construct.
Hinweis: Eine Funktion, die genauso heißt, wie die Klasse, kann auch als Konstruktor eingesetzt werden
Ein kleines Beispiel:
2.2 Der Destruktor
Destruktoren sind in der Regel dafür verantwortlich vom Objekt benutzte Ressourcen freizugeben. Dies findet vor allem in C++ Anwendung, um beispielsweise Speicher freizugeben.
Dies geschieht mit der Funktion namens __destruct.
2.3 Methoden
Eine Methode ist eine Funktion, die innerhalb der Klasse verwendet werden kann.
2.3.1 Getter-Methoden
Eine Getter-Methode ist eine Methode, um an Variablen des Objektes heranzukommen.
Ein Beispiel:
Die Methode __get($name) wird aufgerufen, wenn versucht wird, auf eine Eigenschaft eines Objektes zuzugreifen, die nicht gesetzt oder nicht öffentlich zugänglich ist. Im Parameter $name befindet sich in diesem Fall der Name des Propertys.
Innerhalb eines Objektes wird diese Methode nur aufgerufen, wenn versucht wird auf eine nicht existierende oder private Eigenschaft der Elternklasse zuzugreifen.
2.3.2 Setter-Methoden
Eine Setter-Methode ist eine Methode, um Variablen des Objektes zu setzen.
Dies kann man zum Beispiel dann anwenden, wenn die Variablen private oder protected (von außen nicht veränderbar) sind.
Beispiel:
Die Methode __set($name, $value) wird aufgerufen wenn versucht wird, nicht verfügbare Eigenschaften zu setzen. Dabei enthält $name den Namen der Eigenschaft und $value den entsprechenden Inhalt. __set spielt hier natürlich gut mit __get zusammen.
3. Vor- und Nachteile der Objektorientierten Programmierung
Vorteile
-OoP ist ein sehr hilfreiches Mittel, um Logik zu verdeutlichen
-Eine gute Strukturierung kann große Performance-Verbesserungen bringen
-Webanwendungen können beispielsweise schnell in Windowsanwendungen portiert werden -> Dies spart viel Zeit und Geld
-Man kann Aufgaben am Objekt gut aufteilen
-Wie Well weiter unten beschrieben hat, kann man sich ein Basisobjekt für seine Zwecke aufbauen und davon dann beliebig viele Objekte erzeugen und diese mit Werten füllen und damit arbeiten (ein Objekt ist also so etwas wie ein Grundgerüst)
Nachteile
-Bei kleineren Programmen ist OoP zu aufwendig
-Wenn man das Prinzip nicht versteht, kann es zu Performance- und/oder Übersichtlichkeitsproblemen kommen
-Es ist am Anfang schwer zu verstehen und macht auf Anhieb keinen Sinn
4. Anwendungsfall
So, jetzt haben wir den Grundlagen Kram.
In meinem Beispiel werde ich ein Auto als Vorlage nehmen.
Ein kleiner Programmcode vorweg:
Alles anzeigen
So, relativ einfach gehalten. Wir sagen unsere Klasse heißt Auto, kann die Variablen Bezeichnung und Tankinhalt speichern. Man kann einen Namen setzen, sich den Namen ausgeben lassen, tanken und sich den Tankinhalt ausgeben lassen. Mehr habe ich erstmal nicht eingebaut, da es hier den Rahmen sprengen würde.
Wir erstellen uns also per
ein neues Auto, setzen dann den Namen auf Golf
und tanken 100 Liter
Als letztes prüfen wir noch, ob alles geklappt hat, indem wir uns einmal den Namen und die getankten Liter ausgeben.
Da dies jetzt aber ziemlich banal ist und wir in der OoP so denken, wie ein Mensch, muss es natürlich ein Limit für den Tank geben und natürlich darf auch an der Tankstelle keiner kommen, der einfach mal sagt, ich mach den Tankdeckel auf und lasse mal 10 Liter ab. Dagegen gehen wir vor (dazu später etwas).
An dieser Stelle verwendet man statt dem Schlüsselwort "public", "private".
Mit dem Schlüsselwort "private" kann man der Klasse sagen, dass diese Variable für Zugriff außerhalb der Klasse geschützt ist, also genau das, was wir haben wollen.
Genau die gleiche Überlegung gilt auch für die Bezeichnung, also ersetzen wir
durch
Wer das ausprobiert, wird allerdings schnell feststellen, dass es beim Namen setzen und Tankinhalt setzen von PHP Seite aus einen Fehler gibt (wie bereits in 1 beschrieben).
An dieser Stelle möchte ich also den sogenannten "Konstruktor" verwenden. Wofür er gut ist, steht ja weiter oben beschrieben.
Wir fügen also hinter unseren private Deklarationen noch hinzu:
Wichtig: Man sollte $this->name nicht mit $name verwechseln!
$this->name bezieht sich auf die Variable Name der Klasse Auto. $name bezieht sich auf den Übergabeparameter, der beim Erzeugen des Objektes gefüllt wird.
Also: Setze den Namen auf das, was übergeben wurde und verfahre genauso beim maximalen Tankinhalt.
Damit wäre unser Konstruktor fertig. Eine Kleinigkeit fehlt uns aber noch, nämlich die Attribute.
ersetzen wir durch
Durch das new wird jetzt also ein neues Objekt (Auto) ersellt und unser Konstruktor wird ohne weiteres zutun ausgeführt. Wir haben hier als Parameter die Bezeichnung und das Tanklimit gesetzt.
Der Konstruktor setzt hiermit die Bezeichnung auf Golf und das Tanklimit auf 50 Liter.
Wir erweitern jetzt noch unsere Funktion "Refuel" (Tanken)
Damit sagen wir, wenn man mehr tanken will, als das Limit des Autos ist, dann tank nur voll, sonst würde der Tank ja überlaufen.
Auch haben wir damit gesagt, wenn negative Liter getankt werden wollen (also Sprit rausnehmen), dann mach gar nichts. Es kann also an der Tanke keiner mehr kommen, der etwas Sprit abzapft :XD: Mehr als volltanken geht auch nicht, also haben wir alles bedacht.
In diesem Sinne hf & gl.
PS: Teil 2 gibt es hier.
Greetz
~Leeecher
Dieses Tutorial setzt Grundwissen voraus - ich werde hier keine Grundkenntnisse vermitteln!
Inhalt
1. Der Unterschied zwischen var, public, private und protected
2. Zugriff auf die eigene Klasse
2.1 Der Konstruktor
2.2 Der Destruktor
2.3 Methoden
2.3.1 Getter Methoden
2.3.2 Setter Methoden
3. Vor- und Nachteile der Objektorientierten Programmierung
4. Anwendungsfall
1. Der Unterschied zwischen var, public, private und protected
Hier gehe ich kurz auf die Unterschiede bzw. Gemeinsamkeiten zwischen var, public, private und protected ein.
Fangen wir an mit var und public. Die Gemeinsamkeit ist, dass es einfach das gleiche ist.
Der Unterschied: Var wird in PHP4 verwendet und public wird in PHP5 (aktuell) verwendet.
Weiter geht es also mit public und private. Deklariert man eine Variable als "public", so kann man außerhalb der Klasse auf diese zugreifen und sie "manipulieren".
Bei private ist eine Veränderung dieser Variablen von außen nicht möglich (dann gibt es eine Fehlermeldung, wenn man das versucht - dazu kommen wir aber weiter unten noch).
Protected wird anstatt private verwendet, wenn abgeleitete Klassen Variablen und/oder Methoden erben sollen, da dies mit private nicht möglich ist. Darauf gehe ich aber in diesem Tutorial nicht ein (siehe Teil 2).
2. Zugriff auf die eigene Klasse
Will man auf Objekte oder Methoden zugreifen, die sich innerhalb der Klasse befinden, in der man arbeitet, so bezieht sich $this immer auf diese Klasse.
Will man beispielsweise die Variable a in einem Objekt verändern, so kann dies durch passieren.
Will man eine Funktion des Objekts aufrufen, so geschieht dies durch
Beispiel:
2.1 Der Konstruktor
Der sogenannte "Konstruktor" ist eine Methode, die beim initialisieren des Objektes automatisch ausgeführt wird. Da der Konstruktor innerhalb des Objektes deklariert ist, kann er logischerweise (wie andere Funktionen der Klasse auch) auf Klassenvariablen zugreifen. Dies geschieht mit der Funktion namens __construct.
Hinweis: Eine Funktion, die genauso heißt, wie die Klasse, kann auch als Konstruktor eingesetzt werden
Ein kleines Beispiel:
2.2 Der Destruktor
Destruktoren sind in der Regel dafür verantwortlich vom Objekt benutzte Ressourcen freizugeben. Dies findet vor allem in C++ Anwendung, um beispielsweise Speicher freizugeben.
Dies geschieht mit der Funktion namens __destruct.
2.3 Methoden
Eine Methode ist eine Funktion, die innerhalb der Klasse verwendet werden kann.
2.3.1 Getter-Methoden
Eine Getter-Methode ist eine Methode, um an Variablen des Objektes heranzukommen.
Ein Beispiel:
Innerhalb eines Objektes wird diese Methode nur aufgerufen, wenn versucht wird auf eine nicht existierende oder private Eigenschaft der Elternklasse zuzugreifen.
2.3.2 Setter-Methoden
Eine Setter-Methode ist eine Methode, um Variablen des Objektes zu setzen.
Dies kann man zum Beispiel dann anwenden, wenn die Variablen private oder protected (von außen nicht veränderbar) sind.
Beispiel:
3. Vor- und Nachteile der Objektorientierten Programmierung
Vorteile
-OoP ist ein sehr hilfreiches Mittel, um Logik zu verdeutlichen
-Eine gute Strukturierung kann große Performance-Verbesserungen bringen
-Webanwendungen können beispielsweise schnell in Windowsanwendungen portiert werden -> Dies spart viel Zeit und Geld
-Man kann Aufgaben am Objekt gut aufteilen
-Wie Well weiter unten beschrieben hat, kann man sich ein Basisobjekt für seine Zwecke aufbauen und davon dann beliebig viele Objekte erzeugen und diese mit Werten füllen und damit arbeiten (ein Objekt ist also so etwas wie ein Grundgerüst)
Nachteile
-Bei kleineren Programmen ist OoP zu aufwendig
-Wenn man das Prinzip nicht versteht, kann es zu Performance- und/oder Übersichtlichkeitsproblemen kommen
-Es ist am Anfang schwer zu verstehen und macht auf Anhieb keinen Sinn
4. Anwendungsfall
So, jetzt haben wir den Grundlagen Kram.
In meinem Beispiel werde ich ein Auto als Vorlage nehmen.
Ein kleiner Programmcode vorweg:
PHP-Quellcode
- <?php
- class Auto {
- public $name;
- public $fuel;
- function Refuel($litres) {
- $this->fuel = $this->fuel + $litres;
- }
- function GetName() {
- return $this->name;
- }
- function GetFuel() {
- return $this->fuel;
- }
- }
- $meinAuto = new Auto();
- $meinAuto->name = "Golf";
- $meinAuto->Refuel(100);
- echo $meinAuto->GetName()."<br>";
- echo $meinAuto->GetFuel();
- ?>
Wir erstellen uns also per
ein neues Auto, setzen dann den Namen auf Golf
und tanken 100 Liter
Als letztes prüfen wir noch, ob alles geklappt hat, indem wir uns einmal den Namen und die getankten Liter ausgeben.
Da dies jetzt aber ziemlich banal ist und wir in der OoP so denken, wie ein Mensch, muss es natürlich ein Limit für den Tank geben und natürlich darf auch an der Tankstelle keiner kommen, der einfach mal sagt, ich mach den Tankdeckel auf und lasse mal 10 Liter ab. Dagegen gehen wir vor (dazu später etwas).
An dieser Stelle verwendet man statt dem Schlüsselwort "public", "private".
Mit dem Schlüsselwort "private" kann man der Klasse sagen, dass diese Variable für Zugriff außerhalb der Klasse geschützt ist, also genau das, was wir haben wollen.
Genau die gleiche Überlegung gilt auch für die Bezeichnung, also ersetzen wir
durch
Wer das ausprobiert, wird allerdings schnell feststellen, dass es beim Namen setzen und Tankinhalt setzen von PHP Seite aus einen Fehler gibt (wie bereits in 1 beschrieben).
An dieser Stelle möchte ich also den sogenannten "Konstruktor" verwenden. Wofür er gut ist, steht ja weiter oben beschrieben.
Wir fügen also hinter unseren private Deklarationen noch hinzu:
$this->name bezieht sich auf die Variable Name der Klasse Auto. $name bezieht sich auf den Übergabeparameter, der beim Erzeugen des Objektes gefüllt wird.
Also: Setze den Namen auf das, was übergeben wurde und verfahre genauso beim maximalen Tankinhalt.
Damit wäre unser Konstruktor fertig. Eine Kleinigkeit fehlt uns aber noch, nämlich die Attribute.
ersetzen wir durch
Durch das new wird jetzt also ein neues Objekt (Auto) ersellt und unser Konstruktor wird ohne weiteres zutun ausgeführt. Wir haben hier als Parameter die Bezeichnung und das Tanklimit gesetzt.
Der Konstruktor setzt hiermit die Bezeichnung auf Golf und das Tanklimit auf 50 Liter.
Wir erweitern jetzt noch unsere Funktion "Refuel" (Tanken)
Auch haben wir damit gesagt, wenn negative Liter getankt werden wollen (also Sprit rausnehmen), dann mach gar nichts. Es kann also an der Tanke keiner mehr kommen, der etwas Sprit abzapft :XD: Mehr als volltanken geht auch nicht, also haben wir alles bedacht.
In diesem Sinne hf & gl.
PS: Teil 2 gibt es hier.
Greetz
~Leeecher