1. Trang chủ
  2. » Công Nghệ Thông Tin

PHP – Endlich objektorientiert- P9

30 233 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

3 Vorgehensweise bei der Softwareentwicklung 210 Herr Müller erhält abschließend eine Bestätigung, dass die Buchung erfolgreich vorge- nommen wurde. Was haben Sie gelernt und wie geht es weiter? In diesem Kapitel wurden zu Beginn verschiedene Vorgehensweisen dargestellt, wie Sie bei der Abwicklung eines Projekts vorgehen können. Es existiert keine ultimativ sinn- volle Vorgehensweise. Vielmehr ist die gewählte Vorgehensweise von der Größe der Pro- jekte abhängig. Die Objektorientierung eignet sich insbesondere für größere Projekte, da sonst ein „Over-Design“ droht. Dazu existieren der Rational Unified Process als schwergewichti- ges Modell sowie die agilen Methoden als dynamische, kommunikationsintensive Vari- ante. Im Anschluss daran wurden die Idee und die Grundbegriffe der Objektorientierung vor- gestellt, die eine neue Denkweise bei der technischen Lösung von fachlichen Problemen implizieren. Im letzten Teil dieses Kapitels wurden die wichtigsten Diagramme der UML vorgestellt, mit deren Hilfe Sie die Aspekte der objektorientierten Softwareentwicklung beschreiben können. Die UML-Diagramme bieten dabei eine Diskussionsgrundlage für die iterativ- inkrementelle Entwicklung und dienen zusätzlich zur Dokumentation der Entstehung einer Lösung. Die einzelnen Diagramme bieten verschiedene Sichtweisen auf das Prob- lem und auf die Lösung. Sie geben zusätzlich durch die Reihenfolge ihrer Anwendung eine Anleitung, damit Sie sich der Problemlösung nähern können. Alle in diesem Kapitel skizzierten Beispiele können Sie als Aufträge für die Implementie- rung von PHP-Anwendungen sehen, die Sie mit den neuen Möglichkeiten von PHP 5 umsetzen können. Im nächsten Kapitel werden Sie erfahren, wie Sie die vorgestellten Konzepte der Objekt- orientierung und der Spezifikation der einzelnen UML-Diagramme in PHP implemen- tieren können. Meinung Die eher am technischen Design orientierten Sequenzdiagramme können sehr gut mit den eher an der fachlichen Analyse ausgerichteten Aktivitätsdiagrammen abge- glichen werden. Dies gibt einen guten Anhaltspunkt, ob die fachlichen Vorgaben sinnvoll technisch umgesetzt wurden oder nicht. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. PHP Endlich objektorientiert 211 PHP objektorientiert Im zweiten Kapitel dieses Buches wurde die grundlegende Syntax der Sprache PHP vor- gestellt. Diese Syntax und alle vorgestellten Befehle können natürlich auch im Rahmen der Objektorientierung verwendet werden. Verzweigungen, Schleifen, Session-Hand- ling, der Versand von E-Mails und auch die Befehle zur Datenbankanbindung stehen nach wie vor zur Verfügung. In großen Projekten sollte der gesamte Zugriff auf solche Ressourcen jedoch nur einmalig implementiert und in Objekte gekapselt werden. Das dritte Kapitel präsentierte Vorgehensweisen bei der Abwicklung von Projekten unterschiedlicher Größe und stellte im Anschluss die grundlegenden Begriffe objektori- entierter Denkweise vor. Mit der UML 2 wurde eine Sprache vorgestellt, die als Diskus- sionsgrundlage und zur Dokumentation von allen Beteiligten über das gesamte Projekt hinweg angewendet werden kann. Bis zu diesem Punkt ist es noch unerheblich, welche objektorientierte Sprache zur Implementierung eingesetzt wird. Anstelle von PHP kön- nen ebenso ASP.NET oder JSP/Servlets zum Einsatz kommen. In diesem Kapitel wird nun vorgestellt, wie man die bislang theoretisch beschriebenen Konzepte der Objektorientierung mit PHP 5 umsetzen kann. 4.1 Umsetzung objektorientierter Grundlagen Damit Sie die Umsetzung der objektorientierten Grundlagen, die in Kapitel 3.2.2 vorge- stellt wurden, in PHP leicht nachvollziehen können, wird in diesem Kapitel eine Vielzahl von kleinen Beispielen vorgestellt, die jeweils einzelne Aspekte der objektorientierten Programmierung beschreiben. Im fünften Kapitel dieses Buches werden dann komple- xere zusammenhängende Beispiele skizziert. 4.1.1 Die erste PHP-Klasse Am Sinnvollsten ist es, direkt mit der Programmierung einer vollständigen Klasse zu beginnen und diese Klasse dann in einer anderen PHP-Datei mit Objekterzeugung und Ausgabe zu testen. Eine private Eigenschaft Die erste Klasse erzeugt einen Stift, der nur eine einzelne Eigenschaft besitzt. Er hat eine Farbe, die als Zeichenkette festgehalten wird und nicht außerhalb des Objekts zugäng- lich ist (private). Diese Datenkapselung unterscheidet die Objektorientierung von proze- duralen Ansätzen und erhöht die Wartbarkeit und Modularität. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 4 PHP objektorientiert 212 In der Realität würde man auch eine Farbe als Objekt repräsentieren, das seinerseits drei Eigenschaften hat. Dies könnten beispielsweise die Rot-, Grün- und Blauanteile der Farbe sein. So würde man sicherstellen, dass man stets eine gültige Farbe erhält. In einer Zeichenkette könnte die Farbe auch „Frank“ lauten, was jedoch keinen Sinn macht. Konstruktor und Destruktor Die Klasse besitzt außerdem einen Konstruktor, der zwingend einen Parameter erhält. Dieser Parameter gibt eine Farbe von außen vor, die intern im Objekt abgelegt wird. Ein Default-Konstruktor ist in diesem Beispiel nicht vorgesehen. Sie müssen bei der Objekterzeugung also den Farbparameter angeben. In PHP 5 lauten alle Methoden, die Konstruktoren für ein Objekt sind, __construct. Sie können diese Methode mehrmals mit einer unterschiedlichen Anzahl an Parametern verwenden, sodass Sie mehrere mögliche Konstruktoren für ein Objekt definieren können. Zusätzlich besitzt die Klasse einen Destruktor, der beim Entfernen des Objekts aus dem Arbeitsspeicher des Servers automatisch aufgerufen wird. Ein Destruktor wird über den Aufruf __destruct definiert und ist stets parameterlos. Get- und Set-Methoden Zusätzlich erhält ein Stift zwei Methoden, die als Dienste von anderen Klassen aus ange- sprochen werden können (public). Die erste Methode kann dem Stift eine neue Farbe geben; es handelt sich um einen so genannten „Setter“, der eine Eigenschaft neu setzt. Ob das Setzen des übergebenen Parameters erlaubt ist, kann die Klasse selbst in der Pro- grammierung der Set-Methode entscheiden. Damit wird die Datenkapselung der Objek- torientierung gewährleistet. Die zweite Methode gibt den Wert der Eigenschaft zurück. Es handelt sich also um eine Get-Methode. Abbildung 4.1 skizziert zunächst auf der linken Seite ein Stiftobjekt und auf der rechten Seite das UML Klassendiagramm der Designphase. Abbildung 4.1: Das erste zu erstellende Objekt und das passende Klassendiagramm Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Umsetzung objektorientierter Grundlagen PHP Endlich objektorientiert 213 Dieses Klassendiagramm wird nun direkt in PHP-Code umgesetzt. Die UML-Klassen- diagramme in der Designphase sollten so präzise sein, dass Sie keine Möglichkeit zur Interpretation mehr zulassen. Da es keinen Sinn macht, eine Klassendefinition direkt zu verwenden und diese stets von anderen PHP-Dateien eingebunden wird, sollte die Datei stift.inc.php genannt werden. Was ist $this? Bei allen Methoden fällt eine Variable $this auf, die in dieser Klasse nie definiert wird. Die so genannte $this-Referenz existiert bei jedem Objekt und ist ein Zeiger auf sich selbst. Da wir uns in der Klasse Stift befinden, können Sie über den Befehl $this->setFarbe($farbe) im Meinung Aus Erfahrung und zur Vergleichbarkeit mit anderen objektorientierten Sprachen sollte jede Klasse in eine separate Datei geschrieben werden. Diese Datei sollte genauso heißen wie der Name der Klasse. <?php class Stift{ private $farbe; // Eigenschaft des Stiftes // Konstruktor public function __construct($farbe){ echo('Ein Stift der Farbe '.$farbe.' wird erzeugt .<br>'); $this->setFarbe($farbe); } // Destruktor public function __destruct(){ echo('Der Stift der Farbe '.$this->farbe.' ist jetzt zerstört.<br>'); } public function getFarbe(){ return $this->farbe; } public function setFarbe($farbe){ $this->farbe=$farbe; } } ?> Listing 4.1: Die erste Klasse stift.inc.php Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 4 PHP objektorientiert 214 Konstruktor auf dem Objekt selbst einen Methodenaufruf tätigen. Dieser Selbstaufruf wurde in den Sequenzdiagrammen (Kap. 3.2.6; Abläufe im technischen Modell: Sequenzdiagramme) beschrieben. Im zweiten Kapitel haben Sie bereits erfahren, dass Sie Variablen in PHP nicht vor der Verwendung deklarieren müssen. Bei der prozeduralen Programmierung ist dies ein angenehmes Verhalten, das Codezeilen einspart. Bei der Methode setFarbe führt sie jedoch zu einem Problem. Sie müssen hier die Eigen- schaft des Objekts, die privat deklariert ist, mit einem von außen übergebenen Parameter $farbe überschreiben. PHP kann aber eine in der Methode lokal definierte Variable erst einmal nicht von dem Zugriff auf eine deklarierte Eigenschaft des Objekts unterschei- den. Wenn Sie auf die Eigenschaft zugreifen wollen, müssen Sie daher auch die $this- Referenz verwenden, indem Sie mit dem Befehl $this->farbe=$farbe der Eigenschaft des Objekts den von außen übergebenen Wert zuweisen. Der Zugriff auf die private Eigen- schaft ist an dieser Stelle möglich, da Sie sich ja in der Klasse selbst befinden. Die Objekterzeugung Nachdem die Klasse als Bauplan für Objekte erstellt wurde, können Sie nun versuchen, ein erstes Objekt dieser Klasse anzulegen. Dies funktioniert sehr leicht, indem Sie im ers- ten Schritt eine zusätzliche PHP-Datei erstellen und die Klassendatei über require_once einbinden. Eine mögliche mehrfache Einbindung würde zu einer mehrfachen Klassende- klaration mit demselben Namen und damit zu einem Fehler führen. Im HTML-Rumpf der PHP-Datei kann nun das erste Objekt angelegt werden. Für die Erzeugung von neuen Objekten bietet PHP, wie auch die meisten anderen objektorien- tierten Sprachen, das Schlüsselwort new an. Hinter diesem Schlüsselwort müssen Sie den Namen der Klasse angeben, von der Sie ein neues Objekt anlegen wollen. Wenn Sie keine Parameter angeben, wird der parameterlose Default-Konstruktor der Klasse aufgerufen. Dieser existiert jedoch bei unserer Klasse nicht. Stattdessen müssen Sie eine Zeichenkette als Parameter übergeben, der die Farbe des zu erstellenden Stiftes darstellt. In diesem Fall wird ein schwarzer Stift erzeugt. Der new-Operator gibt als Ergebnis eine Referenz auf das gerade erzeugte Objekt zurück, die man wiederum in einer Variablen abspeichern kann. Diese Variable heißt hier $ein- Stift. <?php require_once("stift.inc.php"); ?> <html><body> <?php // kein Default-Konstruktor erlaubt // $einStift=new Stift(); $einStift=new Stift('schwarz'); echo('Farbe: '.$einStift->getFarbe().'<br>'); $einStift->setFarbe('blau'); echo('Farbe: '.$einStift->getFarbe().'<br>'); Listing 4.2: Die erste Objekterzeugung ein Stift wird geboren Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Umsetzung objektorientierter Grundlagen PHP Endlich objektorientiert 215 Das gerade erzeugte Objekt hat also seinen Konstruktoraufruf erfolgreich abgeschossen und besitzt nun eine Farbe. Da die PHP-Datei aus Listing 4.2 eine Referenz auf dieses Objekt besitzt, kann man von hier aus auf alle öffentlich zugänglichen Methoden zugrei- fen. Sie können das Objekt mit dem Befehl $einStift->getFarbe() fragen, welche Farbe es besitzt. Das Ergebnis wird dann ausgegeben. In der nächsten Zeile bekommt der Stift dann über $einStift->setFarbe('blau') eine neue Farbe zugewiesen. Auch diese neue Farbe können Sie wieder abfragen. Interessant ist auch, wenn Sie mithilfe des aus dem zweiten Kapitel bekannten Befehls var_dump das Objekt ausgeben. Sie erhalten dann eine detaillierte Ausgabe der internen Eigenschaften und deren aktueller Ausprägung. Dies entspricht genau den Daten eines Objektdiagramms. Die erste Zeile ist die Ausgabe des Konstruktors; in der letzten Zeile wird der Stift durch den Destruktor-Aufruf zerstört. Das Objekt „lebt“ also nur während des Aufrufs der PHP-Datei aus Listing 4.2. Die Ausgabe des Listings lautet Ein Stift der Farbe schwarz wird erzeugt . Farbe: schwarz Farbe: blau object(Stift)#1 (1) { ["farbe:private"]=> string(4) "blau" } Der Stift der Farbe blau ist jetzt zerstört. 4.1.2 Objekte in einer Session übergeben Die ganze Theorie der Objektorientierung und der Aufwand der Implementierung wür- den sich nicht lohnen, wenn die Objekte und deren Beziehungen nur während eines PHP-Aufrufs bestehen würden. Sie müssen also dafür sorgen, dass die Objekte über einen längeren Zeitraum bestehen können. Das erste Ziel besteht darin, Objekte in einer Session abzulegen, um die Referenzen im nächsten Aufruf einer PHP-Seite weiterver- wenden zu können. Um das Speichern eines Objekts in einer Session zu testen, muss der Anwender zunächst in einem Eingabeformular die Farbe eines Stifts in einem Textfeld eingeben. In diesem Formular wird auch die Session gestartet. Der Quellcode des Formulars ist in Listing 4.3 dargestellt. var_dump($einStift);echo('<br>'); ?> </body></html> <?php session_start(); ?> <html><body> <h1>Willkommen in der Stift-Herstellung</h1> Listing 4.3: Quellcode des Eingabeformulars Listing 4.2: Die erste Objekterzeugung ein Stift wird geboren (Forts.) Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 4 PHP objektorientiert 216 In der Datei, die über HTTP-Post aufgerufen wird, wird nun der Stift erzeugt und in die Session übergeben. Der Quellcode der Datei ist in Listing 4.4 aufgeführt. Die Ausgabe des Listings lautet überraschenderweise Ein Stift der Farbe rot wird erzeugt . Ein Stift der Farbe rot wurde erzeugt. Weiter gehts . Der Stift der Farbe rot ist jetzt zerstört. Es stellt sich die Frage, warum der Destruktor des Stifts aufgerufen wird, obwohl das Stiftobjekt doch in der Session persistent gehalten werden soll? Ist das Stiftobjekt in der Session jetzt verloren? Die Antwort lautet: Nein, das Stiftobjekt in der Session ist noch vorhanden! Die Session- datei befindet sich auf dem Dateisystem des PHP-Servers. In diese Datei wurde das Objekt „hineinserialisiert“ siehe dazu auch das nächste Kapitel zur Serialisierung. Lediglich das Stiftobjekt aus dem Arbeitsspeicher des PHP-Servers wurde wieder freige- geben. Die Daten der Session können Sie sich übrigens ansehen. Wenn Sie das XAMPP-Paket installiert haben, wurde in dessen Unterverzeichnis tmp mit dem ersten Start der Session eine Datei angelegt. Falls die Session mit der ID 3217d032e41dfe5fa52a481b35391302 ange- legt wurde, so heißt die Datei sess_3217d032e41dfe5fa52a481b35391302. Diese Datei kön- <form action="stifterzeugung.php" method="post"><pre> Farbe: <input name="frmFarbe" type="text"><br> <input value="Herstellen ." type="submit"><br> Sie haben die Session-ID <?php echo session_id()?> vom Server erhalten. </pre></form> </body></html> <?php session_start(); require_once("stift.inc.php"); $frmFarbe=$_POST[frmFarbe]; $einStift=new Stift($frmFarbe); $_SESSION[StiftContainer]=$einStift; ?> <html><body> Ein Stift der Farbe <?php echo $einStift->getFarbe()?> wurde erzeugt.<br> <a href="weiter.php">Weiter gehts .</a><br> </body></html> Listing 4.4: Objekterzeugung und Speicherung in der Session Listing 4.3: Quellcode des Eingabeformulars (Forts.) Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Umsetzung objektorientierter Grundlagen PHP Endlich objektorientiert 217 nen Sie mit einem Texteditor öffnen und finden das serialisierte Objekt mit seiner Eigen- schaft: StiftContainer|O:5:"Stift":1:{s:12:" Stift farbe";s:3:"rot";} Das O bedeutet, dass im Folgenden ein Objekt abgespeichert ist. Dann kommt die Anzahl der Zeichen für den Klassennamen. Die 1 ist die erste Eigenschaft, die aus einer Zeichenkette (s für String) besteht. Dem folgt der Name der Eigenschaft in 12 Zeichen, wobei der Name aus dem Namen der Klasse und dem Namen der eigentlichen Eigen- schaft zusammengesetzt ist. Der Wert der Eigenschaft folgt dann hinter dem Semikolon. Es ist eine Zeichenkette mit drei Zeichen und der Wert lautet rot. Mit einem Klick auf den Link der weiter.php sehen Sie nun, dass man immer noch auf das entstandene Objekt zugreifen kann. Listing 4.5 zeigt den Quellcode dieser Datei. In dieser Datei wird zunächst wieder die Klassendefinition eingebunden. Im Anschluss daran wird die Session wieder gestartet und das Stiftobjekt aus der Session heraus in den Arbeitsspeicher kopiert. Man spricht in diesem Zusammenhang von einer Deserialisie- rung. Im Folgenden sehen Sie die Ausgabe der PHP-Datei: Sie besitzen einen Stift der Farbe rot. Der Stift der Farbe rot ist jetzt zerstört. Da der Stift bereits existierte und nur noch vom Dateisystem in den Arbeitsspeicher gela- den wird, erfolgt kein erneuter Aufruf des Konstruktors. Die zweite Ausgabe zeigt wie- derum den Aufruf des Destruktors des Objekts im Arbeitsspeicher des Servers. Die seri- alisierte Kopie existiert jedoch solange, wie die Session existiert. Beim Löschen der Session wird jedoch der Destruktor nicht aufgerufen, da das Objekt im Dateisystem lediglich in Textform vorliegt und nicht aktiv ist. <?php session_start(); require_once("stift.inc.php"); $einContainerStift=$_SESSION[StiftContainer]; ?> <html><body> Sie besitzen einen Stift der Farbe <?php echo $einContainerStift->getFarbe()?>.<br> </body></html> Listing 4.5: Objekterzeugung und Speicherung in der Session Hinweis In der Realität werden natürlich keine Stifte gespeichert, sondern Warenkörbe oder Objekte in einer Datenbank. Die Erzeugung von einfachen Objekten ist aber für das Erlernen der Objektorientierung sehr hilfreich, um deren Prinzipien kennen zu ler- nen. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 4 PHP objektorientiert 218 4.1.3 Objekte speichern und laden: (De-)Serialisierung Die im vorherigen Kapitel besprochene Serialisierung in einer Session kann auch manu- ell durch den Befehl serialize angestoßen werden. Sie erhalten dadurch ein serialisiertes Objekt in einer Zeichenkette. Dieses Objekt können Sie dann in einem versteckten Text- feld über mehrere Formulare übertragen oder auch in einer Datei ablegen. Der Quellcode aus Listing 4.6 zeigt in einer veränderten stifterzeugung.php das Serialisie- ren des Stiftobjekts und das Festhalten der serialisierten Daten in der Variable $ser. Die serialisierte Zeichenkette des Objekts wird dann in die Datei objekt.txt abgelegt. Diese Datei wird in Listing 4.7 in der veränderten weiter.php wieder ausgelesen, das Objekt mit dem Befehl unserialize wieder hergestellt und eine Methode des Objekts auf- gerufen. Die Daten des Objekts werden in der objekt.txt in der gleichen Form gespeichert wie in der Session. Beim Speichern in eine Session und dem Laden aus einer Session wird also automatisch eine Serialisierung bzw. Deserialisierung durchgeführt. <?php require_once("stift.inc.php"); $frmFarbe=$_POST[frmFarbe]; $einStift=new Stift($frmFarbe); $ser=serialize($einStift); $datei=@fopen("objekt.txt","w"); @fwrite($datei, $ser); @fclose($datei); ?> <html><body> Ein Stift der Farbe <?php echo $einStift->getFarbe()?> wurde erzeugt.<br> <a href="weiter.php">Weiter gehts .</a><br> </body></html> Listing 4.6: Speicherung eines serialisierten Objekts in einer Datei <?php require_once("stift.inc.php"); $datei=@fopen("objekt.txt","r"); $deser = unserialize(@fgets($datei)); @fclose($datei); ?> <html><body> Sie besitzen einen Stift der Farbe <?php echo $deser->getFarbe()?>.<br> </body></html> Listing 4.7: Laden und Deserialisieren des Objekts aus der Datei Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Umsetzung objektorientierter Grundlagen PHP Endlich objektorientiert 219 4.1.4 PHP-eigene Methoden der Objektorientierung Auf Grund der historischen Entwicklung der Sprache PHP von den „Personal Home- page Tools“ hin zu einer objektorientierten Programmiersprache sind einige besondere Funktionen entstanden, die für andere objektorientierte Programmiersprachen eher unüblich sind. Diese Funktionen werden verstärkt in diesem Kapitel behandelt und ihre Bedeutung für die Umsetzung der Konzepte der Objektorientierung wird herausgestellt. Automatisches Nachladen von Klassen Wenn Sie ein Objekt einer Klasse erzeugen wollen, muss der PHP-Datei, in der das Objekt erzeugt werden soll, die Definition der Klasse bekannt sein. Nach diesem Bau- plan wird das Objekt dann angelegt. So sehen Sie unter anderem in Listing 4.7 des letzten Kapitels die Einbindung der Klassenbeschreibung für Stifte durch den Befehl require_ once("stift.inc.php"). Da die Objektorientierung sich gerade für große Projekte mit komplexen Objektgeflech- ten eignet, ist diese Deklaration jeder einzelnen Klasse zu Beginn jeder PHP-Datei sehr wartungsaufwändig. Um diesen Aufwand zu minimieren, bietet PHP die __autoload-Methode. Wie der Konst- ruktor und der Destruktor sind die Spezialmethoden der Objektorientierung bei PHP durch den Beginn mit zwei Unterstrichen gekennzeichnet. Die __autoload-Methode wird dann aufgerufen, wenn ein Objekt einer Klasse erzeugt werden soll, die Definition der Klasse aber noch nicht bekannt ist. Wenn Sie diese Methode einmalig programmieren, können Sie das Einbinden von Klassendefinitionen durch den Aufruf von require_once automatisieren. Dabei können Sie auch Ihren Stan- dardpfad angeben, in dem Sie alle Klassendefinitionen verwalten. So zeigt Listing 4.8 einen einfachen Klassenlader, der beim Fehlen der im Eingabepara- meter übergebenen Klasse $klasse automatisch die entsprechende .inc.php-Datei nach- lädt, die sich in diesem Fall im selben Verzeichnis befinden muss. Diesen kleinen Klassenlader können Sie nun in jede PHP-Datei einbauen, die Objekte Ihrer eigenen Klassen anlegt. Listing 4.9 zeigt die Anwendung des Klassenladers auf das bereits beschriebene Listing 4.6, bei dem ein Stiftobjekt angelegt wird. Wenn Sie statt eines Objekts 50 Objekte unterschiedlicher Klassen anlegen wollen, wer- den Sie das automatische Laden der Klassen zu schätzen wissen und 49 Zeilen PHP- Code einsparen. <?php function __autoload($klasse){ require_once($klasse.".inc.php"); } ?> Listing 4.8: Ein einfacher Klassenlader classloader.inc.php Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. [...]... dieser Rechnung abgefragt < ?php require_once("classloader.inc .php" ); ?> < ?php $r1=new Rechnung(100.0); echo 'get_class:'; echo var_dump(get_class($r1)); echo 'get_parent_class:'; Listing 4.22: Testen der Metainformationen eines Objekts PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 233 4 PHP objektorientiert echo... des PHP- Skripts ausgeführt wird, kann das Dekrementieren der Anzahl nicht dargestellt werden < ?php require_once("classloader.inc .php" ); ?> < ?php echo 'Anzahl: '.Bruch::getAnzahl().''; $a=new Bruch(1,2); echo 'a: '.$a.''; echo 'Anzahl: '.Bruch::getAnzahl().''; $b=new Bruch(3,2); echo 'b: '.$b.''; Listing 4.16: Zugriff auf die statische Klassenmethode von außen PHP Endlich. .. Objekt mittels echo $a; im PHP- Code ausgeben? Eine Zahl können Sie ja auch auf diese Art und Weise ausgeben Wenn Sie eine solche Ausgabe bei einem Objekt versuchen, liefert PHP seit der Version 5.2 jedoch die folgende Ausgabe: Catchable fatal error: Object of class Bruch could not be converted to string in C:\EigeneDateien\ HTTP\klassen1c\bruchrechnen2 .php on line 7 PHP Endlich objektorientiert Please...4 PHP objektorientiert < ?php require_once("classloader.inc .php" ); $frmFarbe=$_POST[frmFarbe]; $einStift=new Stift($frmFarbe); $ser=serialize($einStift); $datei=@fopen("objekt.txt","w"); @fwrite($datei, $ser); @fclose($datei); ?> Ein Stift der Farbe < ?php echo $einStift->getFarbe()?> wurde erzeugt. Weiter gehts ... werden, indem man eine neue Klasse von einer existierenden Klasse ableitet und eine Methode überschreibt PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 229 4 PHP objektorientiert (Kap.3.2.2) Die Umsetzung des Überschreibens von Methoden in PHP wird in Kapitel 4.2.1 beschrieben Dieses Überschreiben können Sie jedoch verhindern, indem Sie eine... Datentyp des Eingabeparameters mithilfe von instanceof geprüft wird < ?php class Lager{ public function ausliefern($r){ if ($r instanceof Rechnung){ $r->setAusgeliefert(TRUE); } Listing 4.20: Eine einfache Lagerklasse PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 231 4 PHP objektorientiert } } ?> Listing 4.20: Eine einfache Lagerklasse (Forts.)... Inhalt persistent, also dauerhaft, gespeichert werden PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 221 4 PHP objektorientiert Aufrufen nichtdeklarierter Methoden und Identifikation von Objekten Ähnlich wie der Zugriff auf Eigenschaften können sogar Methodenaufrufe von einer besonderen PHP- Funktion manipuliert werden Diese Funktion nennt... einigen Eigenschaften und einer Methode abgebildet PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 237 4 PHP objektorientiert Abbildung 4.4: Klassendiagramm mit Vererbung und abstrakter Klasse Es ist nun die Frage zu stellen, wie Sie das existierende Klassendiagramm aus der OOA und OOD in PHP 5 umsetzen können Mit der Vererbung und abstrakten... string(7) "DOMNode" [33]=> string(16) "DOMNameSpaceNode" [34]=> string(19) "DOMDocumentFragment" [35]=> string(11) "DOMDocument" [36]=> string(11) PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 235 4 PHP objektorientiert "DOMNodeList" [37]=> string(15) "DOMNamedNodeMap" [38]=> string(16) "DOMCharacterData" [39]=> string(7) "DOMAttr" [40]=> string(10)... return $this->getZähler()."/".$this->getNenner(); } public function call($func,$data){ if ($func=="add"){ Listing 4.12: Die erste Bruchklasse PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 223 4 PHP objektorientiert if (is_integer($data[0])){ $this->add_int($data[0]); } else{ if ($data[0] instanceof Bruch){ $this->add_bruch($data[0]); } . watermark. PHP – Endlich objektorientiert 211 PHP objektorientiert Im zweiten Kapitel dieses Buches wurde die grundlegende Syntax der Sprache PHP vor- gestellt Grundlagen PHP – Endlich objektorientiert 219 4.1.4 PHP- eigene Methoden der Objektorientierung Auf Grund der historischen Entwicklung der Sprache PHP von

Ngày đăng: 24/10/2013, 19:15