PHP 5 und die Objektorientierung

Therapiesitzung vom Juni 14, 2009 Aktenschrank: Programmierung 0 Diagnosen
Gefällt mir

Seit PHP 5 ist die „Hypertext Preprocessor“ Scriptsprache Objektorientiert. Grundsätzlich muss für PHP ein Webserver installiert sein. Hierzu eignet sich am Anfang am besten XAMPP. Anleitung dazu steht im Google, aber die Hauptaufgabe ist herunterladen und installieren ;) Sollte ja noch jeder schaffen…

Objektorientierung selbst ist ein großes Thema, dazu kommt noch mal ein eingenständiger Beitrag. Hier geht es erst mal um PHP 5 und Klassen.

Eine Klasse in PHP sieht wie folgt aus (Ich verwende mal ein bisschen was aus meinem Browsergame Teradrag um es zu verdeutlichen.)

Wir nehmen uns zuerst mal die Klasse “Drache” vor:

	// Die Klasse Drache
	class drache {
		// Allgemeine Variablen in der gesamten Klasse gültig
		var $HP;
		var $HPMax;
		var $Name;

		// Der Konstruktor ( geht auch mit dem Klassennamen also function Drache()
		function __construct($id,$db) {
			$this->db = $db;
			$sql_auslesen = "mysql_abfrage_string";
			$auslesen = mysql_query($sql_auslesen,$this->db);
			$reihe = mysql_fetch_array($auslesen);
			echo mysql_error($db);
			$this->Name = $reihe[0];
			$this->HP = $reihe[1];
			$this->HPMax = $reihe[2];
		}

		// Der Destruktor
		function __destruct() {
			// Der Drache wird ge-destruktort, Bitte Daten speichern...
			$this->saveThis();
		}

		// Speichere den Drachen in die SQL Datenbank
		function saveThis() {
			if($this->mustSave) {
				$sql_update = "Dtanbank Updaten";
				mysql_query($sql_update);
				echo mysql_error($this->db);
			}
		}
	}

Wir sehen hier grundsätzlich erst mal die Klasse “Drachen”. Diese liegt in den ersten zwei “{“. Diese Klasse hat keine Vererbung oder sonstiges.

Wir haben 3 Variablen namens HP, HPMax, und Name. Für was die bei einem Drachen stehen sollte ja klar sein :)

Wenn wir nun von dieser Klasse ein Objekt erstellen, wir der Konstruktor aufgerufen. Hierzu kann der Klassenname genommen werden, aber auch die __construct Methode wie oben angegeben.

Wenn wir innerhalb oder ausserhalb des Objektes auf eine Methode oder eine Variable zugreifen wollen die nicht “private” sind funktioniert das mit “->” Also quasi ein Pfeil auf die Funktion. Also heißt das in Code ausgedrückt $Objekt->Methode(“Uebergabestring”).

Wenn wir innerhalb eines Objekts auf sich selbst zugreifen wollen nutzen wir die Variable $this. Das bedeutet $this->Methode(“Uebergabestring”). Bei beiden Funktioniert das auch mit Variablen, die nicht private sind (bei private kann man nur mit $this im selben Objekt drauf zugreifen.) Also $objectOderThis->Name = “Drachen 1″;

Wir können Variablen wie folgt deklarieren:

// Die öffentliche Variable
var $name;

// Die private Variable
private $name;

und wir können diesen auch direkt Werte zuweisen:

var $name = “Drachen 1″;

Eine Methode oder auch Funktion genannt kann, muss aber nie einen Wert zurückgeben.
Die Funktion saveThis() im oben genannten Beispiel gibt zum Beispiel nichts zurück. Es gibt aber auch Methoden die was zurückgeben zum Beispiel folgende:

	function getHP() {
		return $this->HP;
	}

Hier wird der Wert HP aus der Variablen HP zurückgegeben. Diese Funktion wäre oben nicht notwendig, da die HP-Variable nicht “private” ist.

Wir könnten auf HP dann also mit 2 verschiedenen Möglichkeiten zugreifen:

	$drache->HP = 10;         // Setzt die HP auf 10;
	$HP = $drache->getHP();   // Die Variable HP wird mit dem HP-Wert des Drachen gefüllt.
	echo $drache->HP;         // Schreibt die HPAnzahl in das Dokument (Hier: 10)

Wenn man das genau so in ein Script schreiben würde, würde in der Variablen HP 10 stehen. Diese haben wir vorher ja festgelegt.

Kommen wir nun dazu, wie man aus einer Klasse ein Objekt macht. Dazu nimmt man eine Variable ($drache) und schreibt dort ein neues Objekt rein.

	$drachenid = 1;
	$drache = new drache($drachenid, $datenbankhandler);

Vererbung:

Wie vererbe ich eine Klasse? Dazu nehmen wir die Klasse Questdrache, die sich von der Klasse Drachen ableitet.

	class questdrache extends drache {
		function __construct($level) {
			$this->Name = "Questdrache";
			$this->HP = $level * 10;
			$this->HPMax = $level * 10;
		}

		function __destruct() {
			// Der Drache wird ge-destruktort, aber Questdrachen müssen nicht gespeichert werden.
		}
	}

Wir haben hier alle Methoden der Klasse Drache, aber wir schreiben die Werte nicht aus einer Datenbank rein sondern errechnen sie aus dem Level der Drachen. Den Destruktor haben wir überschrieben, damit PHP nicht versucht die überliegenden Konstruktoren zu verwenden und damit versuchen würde den Questdrachen zu speichern, der aber NICHT in der Datenbank liegt.

Wer sich das in der Praxis ansehen will kann unter
www.teradrag.de
nachsehen. Hier kann der Spieler Drachen anlegen, die in der Drachentabelle in einer Datenbank gespeichert wird oder gegen Questdrachen, deren Werte sich aus den Level errechnen kämpfen.

Wer Fragen hat, kann sie hier gerne stellen!

Hinterlasse eine Antwort