Objektorientiertes Programmieren (kurz OOP) macht viele Sachen einfacher bzw. übersichtlicher. Sprachen wie Java oder C++ bauen gar ganz auf diesem Prinzip auf. PHP untersützt OOP nur teilweise, aber die Grundzüge sind vorhanden. In diesem Artikel werden Sie zuerst lernen, wie man objektorientierte Programme aufbaut und zum Schluss werden Sie deren Vorteile anhand einer kompletten MySQL Klasse kennenlernen.
Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform,
sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc
zu kontaktieren.
Ziel dieses Tutorials ist es, am Ende eine Datei zu haben, die eine MySQL Klasse
enthält, mit der sich die Operationen "connect" und "close"
durchführen lassen. Natürlich kann die Klasse danach beliebig erweitert
werden. Die Datei wird einfach in ein bestehendes Projekt hinzugeladen (include)
und stellt ein viel benutzerfreundlicheres Interface zwischen Programmierer und
MySQL Datenbank dar.
Grundlagen der OOP
Ich habe aus persönlichen Erfahrungen feststellen können, dass zu viel
praxisferne Theorie den Leser langweilt oder am weiterlesen hindert. Also beginnen
wir mit einem Beispiel aus dem Alltag: Das Objekt (Klasse) Auto. Es besitzt verschiedene
Eigenschaften (Variabeln). Außerdem kann man mit einem Auto z.B. bremsen
oder beschleunigen (Methoden bzw. Funktionen). In PHP würde das ganze dann
wie folgt aussehen.
Datei auto.class.php:
<?php
// Klasse (Objekt) initialisieren
class Auto {
// Variablen (Eigenschaften) initialisieren - evt. festlegen
var $farbe = "rot";
var $momentane_geschwindigkeit;
var $maximale_geschwindigkeit = 200;
// Funktion (Methode) zum Bremsen
function bremsen($staerke) {
Klassen beginnen in PHP immer mit "class" und dann dem Namen der Klasse.
Der Inhalt der Klasse steht in geschweiften Klammern. Variablen der Klassen werden
mit "var" initialisiert. Es gibt hier auch Variablen, die nicht unbedingt
geändert werden müssen, wie z.B. die Farbe des Autos oder die maximale
Geschwindigkeit. Die momentane Geschwindigkeit kann sich jedoch zu jedem Zeitpunkt
ändern also wird ihr vorerst kein Wert zugeschrieben.
Funktionen werden mit "function" und dann dem Namen der Funktion eingeleitet.
Auch hier wird der Inhalt der Funktionen in geschweifte Klammern gesetzt. Nach
dem Namen der Funktion folgen in Klammern die Werte, die für die Verwendung
der Funktion erforderlich sind. Sie müssen ja auch festlegen, wie stark Sie
die Bremsen betätigen. Der Befehl "return" bestimmt den Rückgabewert
der Funktion. In diesem Fall die Geschwindigkeit nach dem Bremsen. Variablen,
die zuvor als "Klassenvariablen" initialisiert wurden, werden mit "$this->variabelname"
aufgerufen. "$this" steht für die aktuelle Klasse - also "Auto".
Die zweite Funktion zum Beschleunigen ist im Prinzip das Gleiche, außer,
dass zu beachten gilt, dass das Auto nicht über seine maximale Geschwindigkeit
hinaus beschleunigen kann.
Verwendung von Objekten in PHP:
Um dies praktisch anzuwenden, muss man zuerst in PHP ein Objekt mit dem Inhalt
der Klasse erstellen.
Objekte sind einfach nur spezielle Variabeln, also ist ihr Anlegen sehr simpel:
// Zugriff auf eine Variabel
$color = $Objekt_Auto->farbe;
echo "Das Auto har die Farbe" . $color . ".";
// Zugriff auf eine Methode (Funktion) des Objekts
$Objekt_Auto->bremsen(10);
?>
Neue Objekte erzeugt man also mit "new" und dem Namen der Klasse. Der
Vollständigkeit halber sei hier auch das "Konstrukt" erwähnt.
Das Konstrukt ist eine Funktion in einer Klasse, die den gleichen Namen trägt.
Man kann direkt beim Erzeugen des Objekts das Konstrukt laden, indem man hinter
dem Klassennamen die erforderlichen Werte der Funktion in Klammern angibt. Wie
dies in der Praxis aussieht werden Sie bei der MySQL Klasse erfahren.
MySQL Klasse
Inzwischen wissen Sie schon sehr viel über objektorientiertes Programmieren
in PHP. Genug um die folgende Klasse zu verstehen und zu erweitern.
Die Klasse enthält in ihrer jetzigen Version nur 2 Funktionen, allerdings
ist sie doch recht komplex geraten, durch die Kontrollmechanismen und die Option
eventuelle Fehler auszugeben.
Datei mysql.class.php:
<?php
class mysql {
var $host = "";
var $user = "";
var $pass = "";
var $database = "";
var $persistency = false;
var $serverid = "";
var $error = array();
function mysql($host, $user, $pass, $database, $persistency = false) {
Als Einstieg in die Verwendung und Erstellung von Klassen ist es ein guter Beitrag. Ich selbst stufe mich nicht als Anfänger aber auch nicht als Profi ein. Als "Fortgeschrittener" fehlen mir wichtige bzw. interessante Informationen, die nur schwer zu ergooglen sind. Z.B. (wie auch bei detaillierten Beschreibung der mySQL-Klasse) der Hinweis auf das &-Zeichen (&$anzahl) - was bewirkt das und warum ist das sowichtig?
Auch die Unterschiede beim verwenden der Klasse fehlt hier noch:
Variante 1:
<?php
include("auto.class.php");
$Objekt_Auto = new Auto;
$color = $Objekt_Auto->farbe;
?>
Variante 2:
<?php
include("auto.class.php");
Auto::bremsen(10);
?>
Da sich mir die Unterschiede noch nicht wirklich erschlossen haben und welche Konsequenzen in folge daraus entstehen, wäre es super, wenn dieses Tutorial noch erweitert werden würde.
Nein, das liegt nicht an mir. Jede Anweisung in einem IF-Block bekommt bei mir einen Zeilenvorschub.
Die Dateien highlighte ich immer mit der PHP Funktion, die dann pro Vorschub 5 No-Breaking-Spaces einfügt. Allerdings scheint die Datengröße von dann mehreren Kilobyte den Admins einfach zu groß, sodass die No-Breaking-Spaces gelöscht werden.
Soll keine Kritik darstellen, ich bin mir selbst dessen bewusst, dass man der Performace zuliebe auf sowas verzichten kann.
Den Artikel finde ich recht gelungen, ich finde es auch gut, dass du direkt mit einem Beispiel einsteigst. Die mySQL-Klasse wird sicherlich sehr nützlich sein.
Die mySQL Klasse hättest du vielleicht noch etwas stärker erläutern können.
Der Code sieht ausserdem sehr schlecht strukturiert aus. Man kann sich kaum orientieren, ob z.B. ein if-Block einem anderen untergeordnet ist oder nicht, das Lesen des Codes ist eher anstrengend. Ob der Fehler bei dir oder beim Portal liegt sei dahingestellt....