Tài liệu PHP – Endlich objektorientiert- P15 doc

30 390 0
Tài liệu PHP – Endlich objektorientiert- P15 doc

Đ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

5 Projektpraxis 390 Abbildung 5.33: Ein frisch erstellter Bestand Ausgangspunkt der Betrachtung ist ein gerade angelegter Datenbestand, der nun persis- tent (also dauerhaft) in der Datenbank untergebracht werden soll. Dieser Datenbestand ist in Abbildung 5.33 dargestellt. Bei der Erstellung der Menüführung wurde bereits eine Schaltfläche speichern vorgesehen, die aus der Anwendungsfallbeschreibung unseres Auftraggebers stammt. Diese Funktion wurde bislang jedoch noch nicht realisiert. Listing 5.25 beschreibt die Datei speichern.php, die bei einem Klick auf die Schaltfläche ausgeführt wird. Dabei wird zuerst geprüft, ob sich überhaupt Aktien im Bestand befin- den. Ist dies nicht der Fall, wird eine entsprechende Meldung ausgegeben. Andernfalls wird ein neues MySQL-Datenbankzugriffsobjekt erzeugt und eine Parame- ter-Liste gefüllt, die die Zugangsdaten zum Datenbankserver enthält. Im Anschluss daran wird eine Verbindung zum Server aufgebaut. Ist dies erfolgreich, so wird zunächst ein eventuell bestehender Inhalt in der Tabelle ent- fernt, um den aktuellen Bestand bzw. die aktuellen Bestände abzulegen. Die Anwen- dung ist also noch nicht dafür geeignet, Bestände mehrerer Benutzer zu verwalten. In der anschließenden for-Schleife wird die Liste der Aktienbestände durchlaufen und jeder einzelne Bestand deserialisiert. Dann wird die aktuelle Bilanz des gerade deseriali- sierten Bestands erstellt, die ja alle notwendigen Informationen enthält. Alle Basisdaten, die zur Erstellung der Bilanz notwendig sind, werden dann in einem SQL-INSERT-State- ment verpackt und über ein weiteres Parameterobjekt an die Datenbank gesendet. War der Schreibvorgang erfolgreich, wird ein Zähler für die erfolgreich archivierten Bestände hochgesetzt, ansonsten ein Zähler für die nicht erfolgreich archivierten Bestände. Abschließend werden beide Zähler im Kontext einer HTML-Ausgabe ausge- geben, sofern sie Werte größer als 0 enthalten. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Das Fallbeispiel der Depotverwaltung PHP Endlich objektorientiert 391 Die OK-Schaltfläche führt dann wieder auf die Übersicht der Bestände, die in der ueber- sicht.php aufbereitet werden. <?php require_once("header.inc.php"); ?> <center> <h3> <?php if ($_SESSION[BestandAnzahl]<1){ echo 'Es sind KEINE Daten zum Speichern vorhanden!'; } else{ $db=new mysqlDZ(); $p_öffnen=new ParameterListe(); $p_öffnen->add('host','localhost'); $p_öffnen->add('user','root'); $p_öffnen->add('pass',''); $p_öffnen->add('db','boerse'); if ($db->öffnen($p_öffnen)==FALSE){ echo 'FEHLER beim Öffnen der Datenbank!'; } else{ $p_schreiben=new ParameterListe(); $p_schreiben->add('sql','TRUNCATE aktien'); $db->schreiben($p_schreiben); $erfolg=0; $fehler=0; for ($i=0;$i<$_SESSION[BestandAnzahl];$i++){ $bestand=unserialize($_SESSION[Bestand][$i]); $data=$bestand->getBilanz(); $p_schreiben=new ParameterListe(); $sql="INSERT INTO aktien VALUES ("; $sql.=($i+1).",'".$data[Aktienname]."','".$data[AktienISIN]. "','".$data[AktienURL]."'"; $sql.=",".$data[anzahl].",".$data[ekEinzelpreis]. ",'".date_format(new DateTime($data[ekDatum]),"Y-m-d"). "',".$data[ekGebühr]; if ($bestand->isVerkauft()){ $sql.=",".$data[aktEinzelpreis].",'".date_format( new DateTime($data[aktDatum]),"Y-m-d")."',".$data[aktGebühr]; } else{ $sql.=",0,'0000-00-00',0"; } $sql.=",".$data[dividenden].")"; $p_schreiben->add('sql',$sql); if ($db->schreiben($p_schreiben)==FALSE) $fehler++; else Listing 5.25: Speichern der Aktienbestände der PHP-Session Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 5 Projektpraxis 392 In unserem Beispiel erfolgt die Meldung, dass ein Datensatz erfolgreich archiviert wurde. Abbildung 5.34: Meldung nach erfolgreicher Speicherung $erfolg++; } $db->schliessen(); } } if ($erfolg>0){ echo 'Es wurden '.$erfolg.' Datensätze erfolgreich geschrieben.<br>'; } if ($fehler>0){ echo 'Das Schreiben von '.$fehler.' Datensätzen ist FEHLGESCHLAGEN.<br>'; } ?> </h3> <form action="uebersicht.php" method="post"> <input type="submit" value=" OK "/></form> </center> <?php require_once("footer.inc.php"); ?> Hinweis Testen Sie einen Fehlerfall, indem Sie den MySQL-Server im XAMPP Control Panel deaktivieren, bevor Sie auf die Schaltfläche speichern klicken. Listing 5.25: Speichern der Aktienbestände der PHP-Session (Forts.) Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Das Fallbeispiel der Depotverwaltung PHP Endlich objektorientiert 393 Den Erfolg können Sie prüfen, indem Sie über phpMyAdmin nochmals die Verwaltung des Datenbankservers aufrufen und sich dort den Inhalt der Aktientabelle anzeigen las- sen. Abbildung 5.35: Inhalt der Datenbanktabelle nach erfolgreicher Speicherung Im zweiten Teil soll jetzt der bestehende Datenbestand wieder ausgelesen werden. Dazu werden alle Fenster des Internetbrowsers beim Client geschlossen, um die PHP-Session zu beenden. Nach einem erneuten Öffnen erscheint dann wieder der in Abbildung 5.36 dargestellte Willkommensbildschirm. Abbildung 5.36: Willkommensbildschirm nach neuer Session Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 5 Projektpraxis 394 Es wurde bereits programmiert, dass die Schaltfläche speichern inaktiv ist, wenn keine Bestände vorliegen. Statt neue Bestände manuell anzulegen, sollen Sie über die Schalt- fläche laden auch existierende Bestände aus der Datenbank einlesen können. Die Funktion der laden.php, die durch das Klicken auf die gleichnamige Schaltfläche aus- geführt wird, ist in Listing 5.26 beschrieben. Wie schon beim Speichern, wird ein neues Datenbankzugriffsobjekt erstellt und die Verbindung zur Datenbank über die Angabe der Parameter host, user, passt und db hergestellt. Über den SQL-Befehl SELECT * FROM aktien ORDER BY ID werden dann alle Bestände aus der Datenbanktabelle ausgelesen. Ist dies erfolgreich, so ergibt sich eine mit den Beständen gefüllte Ergebnismenge $ausgabe. Diese Menge wird in der foreach-Schleife Datensatz für Datensatz und damit Bestand für Bestand durchgegangen. Für jeden Bestand wird dann ein Kauforderobjekt erstellt, mit dessen Hilfe ein neues Bestandsobjekt angelegt wird. Dann werden eventuell gezahlte Dividenden zum Bestand hinzugefügt. Wurde der Bestand bereits verkauft, so wird anschließend ein Ver- kaufsorderobjekt erstellt und dem Bestand hinzugefügt. Dies sind dieselben Schritte, die auch ein Anwender in der Benutzeroberfläche tätigen kann. Es werden dabei dieselben Methoden der Fachlogik aufgerufen. Die Daten stammen diesmal lediglich aus der Datenbank und nicht aus gefüllten HTML-Formularen. Der Bestand wird abschließend in die PHP-Session serialisiert und der Zähler der Objekte in der Session inkrementiert. Der Benutzer enthält dann als HTML-Antwort die Anzahl der erfolgreich ausgelesenen Aktienbestände. <?php require_once("header.inc.php"); ?> <center> <h3> <?php $db=new mysqlDZ(); $p_öffnen=new ParameterListe(); $p_öffnen->add('host','localhost'); $p_öffnen->add('user','root'); $p_öffnen->add('pass',''); $p_öffnen->add('db','boerse'); if ($db->öffnen($p_öffnen)==FALSE){ echo 'FEHLER beim Öffnen der Datenbank!'; } else{ $p_lesen=new ParameterListe(); $p_lesen->add('sql','SELECT * FROM aktien ORDER BY ID'); $ausgabe=$db->lesen($p_lesen); if ($ausgabe==FALSE){ $db->schliessen(); echo 'FEHLER beim Zugriff auf die Datenbank!'; } Listing 5.26: Laden der Aktienbestände in die PHP-Session Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Das Fallbeispiel der Depotverwaltung PHP Endlich objektorientiert 395 Abbildung 5.37 zeigt, dass in diesem Beispiel genau ein Bestand ausgelesen wurde, der auch direkt gewählt wird. else{ $i=0; foreach($ausgabe as $index => $data){ $aktie=new Aktie($data[name],$data[isin],$data[url]); $kauf=new Kauforder($aktie,$data[anzahl],date_format( new DateTime($data[kaufdatum]),"d.m.Y"),$data[kaufkurs], $data[kaufgebuehr]); $bestand=new Aktienbestand($aktie,$kauf,$data[verkaufgebuehr]); $bestand->addDividende($data[dividenden]); if ($data[verkaufkurs]>0){ // bereits verkauft $verkauf=new Verkauforder($aktie,$data[anzahl],date_format( new DateTime($data[verkaufdatum]),"d.m.Y"),$data[verkaufkurs], $data[verkaufgebuehr]); $bestand->addVerkauforder($verkauf); } $_SESSION[Bestand][$i]=serialize($bestand); $i++; } // Anzahl der Datensätze $_SESSION[BestandAnzahl]=count($ausgabe); if (count($ausgabe)>0){ $_SESSION[BestandGewählt]=0; echo 'Es wurden '.count($ausgabe).' Aktienbestände geladen.'; } else{ $_SESSION[BestandGewählt]=-1; echo 'ACHTUNG: Es wurde KEIN Bestand geladen.'; } $db->schliessen(); } } ?> </h3> <form action="uebersicht.php" method="post"> <input type="submit" value=" OK "/></form> </center> <?php require_once("footer.inc.php"); ?> Listing 5.26: Laden der Aktienbestände in die PHP-Session (Forts.) Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 5 Projektpraxis 396 Abbildung 5.37: Erfolgsmeldung nach erfolgreichem Laden Der Klick auf die OK-Schaltfläche führt wie immer in die Übersicht, sodass der Benutzer die Bilanz des aus der Datenbank geladenen Aktienbestands betrachten kann. Abbildung 5.38: Der geladene Aktienbestand 5.1.5 Die nächsten Schritte In diesem Kapitel haben Sie bisher erfahren, wie Sie auf der Grundlage einer kurzen fachlichen, objektorientierten Analyse mit anschließendem technischen Design einen Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Das Fallbeispiel der Depotverwaltung PHP Endlich objektorientiert 397 PHP-Prototypen erstellen, der über die MySQL-Datenzugriffsschicht und die objektori- entierte Fachlogik bis hin zu einem Bedieninterface auf Grundlage von HTML-Formula- ren reicht. Dies entspricht einem Zyklus in der iterativ-inkrementellen Softwareentwick- lung. Nachdem Sie das Vorgehen von der Idee unseres Auftraggebers bis hin zu der Fertigstel- lung dieses Prototyps gelesen und verstanden haben, können Sie Ihre ursprüngliche Ein- schätzung für den Aufwand dieser Entwicklung mit der tatsächlichen Dauer bzw. mit den tatsächlichen Kosten vergleichen. Lagen Sie in Ihrer Einschätzung richtig? Hatten Sie mehr oder weniger Zeit bzw. Kosten vorgesehen? In der Regel kalkuliert man als Anfänger weniger Zeit bzw. Kosten als tatsächlich benötigt werden. Wie könnten nun die nächsten Schritte in dem Szenario dieses Entwicklungsprozesses aussehen? Zunächst einmal ist spätestens nun ein Review durch den Auftraggeber anzu- setzen mit den folgenden Fragestellungen: ࡯ Wurden die realisierten Funktionen fachlich korrekt realisiert? ࡯ Wie sind Sie mit der Bedienung zufrieden? ࡯ Was wünschen Sie sich als Nächstes für Funktionen? Auf Basis der Antworten kann eine Kostenabschätzung und eine Priorisierung für die nächste Iteration vorgenommen werden. Diese bislang realisierten Funktionen können dem Kunden bereits in Rechnung gestellt werden. Für den Fall, dass Sie den Aufwand falsch eingeschätzt haben, ist Ihr Risiko bei dieser Vorgehensweise geringer als bei einer Gesamtabschätzung. Außerdem könnte ein Refactoring für die bisherige Anwendung erfolgen. Dabei sind drei Punkte zu diskutieren: 1. Die Klassen Bestand und Bilanz sind sehr eng miteinander verbunden. Es könnte sinn- voller sein, diese beiden Klassen zu vereinigen. 2. Wenn der Kunde davon ausgeht, dass diese Anwendung noch wesentlich größer wird, sollte über die Erstellung von Template-Klassen für die Darstellung (View) und für den Controller nachgedacht werden. Dies führt zu einer verbesserten Wartbarkeit der Gesamtanwendung an der Benutzerschnittstelle. 3. An vielen Stellen werden Benutzereingaben noch nicht auf Gültigkeit geprüft. Ebenso ist die Datenbankanbindung idealisiert und kann eine Vielzahl von Fehlern verursachen. An dieser Stelle kann durch das Erstellen eigener Exception-Klassen ein Fehlermanagement eingeführt werden, das in die Bedienung integriert wird. Zusätz- lich dazu könnten Benutzereingaben clientseitig über JavaScript-Prüfroutinen verifi- ziert werden, noch bevor das HTML-Formular zum Server zurückgesendet wird. Zusätzlich dazu sind bei der Entwicklung des ersten Prototyps einige Erweiterungsmög- lichkeiten aufgefallen, die in den nächsten Iterationen realisiert werden könnten. Dies sind: ࡯ Die Erstellung eines Logins mit Benutzernamen und Kennwort sowie eine benutzer- abhängige Speicherung der Aktienbestände. So hat jeder Aktionär Zugriff auf seine persönlichen Bestände. Diese Idee hat bereits unser Auftraggeber bei der Analyse geäußert (Abb. 5.1). Er hat die Umsetzung jedoch damals zurückgestellt. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. 5 Projektpraxis 398 ࡯ Die Anbindung eines realen Depots im Onlinebanking. Die PHP-Anwendung würde dann für den Depotbesitzer einen Mehrwert durch die Bilanzierung darstellen. ࡯ Die Integration mehrerer Depots für einen Benutzer. Somit könnten Aktienbestände gruppiert werden. ࡯ Die Funktion, auch Teile eines Bestands zu verkaufen. Die dabei erzielten Gewinne bzw. Verluste würden dann separat in der Bilanz verwaltet. ࡯ Eine grafische Statistik, die eine Historie des Depotwerts anzeigt über einen Tag, eine Woche, einen Monat und ein Jahr. ࡯ Die Verwaltung laufender Depotkosten. Manche Depotanbieter verlangen zusätzlich zu den Transaktionsgebühren jährliche Gebühren für die Verwaltung eines Depots. Diese Gebühren reduzieren natürlich den Gewinn und sollten in die Bilanz mit einge- pflegt werden können. ࡯ Die Möglichkeit, einzelne Bestände in die Datenbank zu laden und zu speichern. Bis- lang ist nur ein Laden und Speichern der gesamten Bestände möglich. 5.2 Erstellung von gutem Quellcode Abschließend werden in diesem Buch Regeln und Werkzeuge vorgestellt, die bei der Entwicklung einer PHP-Anwendung behilflich sind und zu einer Verbesserung der Qua- lität der erstellten Skripte beitragen sollen. 5.2.1 Ein Styleguide für guten Quellcode Im ersten Schritt werden dabei Regeln für die Erstellung von PHP-Quellcode aufgestellt. Diese Regeln müssen nicht zwingend eingehalten werden (Sie können auch ohne diese Regeln lauffähige PHP-Skripte schreiben), jedoch hat die Praxis gezeigt, dass gerade bei einer größeren Anzahl an Skripten die Wartung und Fehlerkorrektur wesentlich schwie- riger wird. Dies gilt auch für den Fall, dass sich andere Entwickler in Ihren Quellcode einarbeiten müssen. Im Folgenden werden 16 „goldene Regeln“ für guten PHP-Quell- code vorgestellt: 1. Schreiben Sie für jede PHP-Klasse eine Datei, die genauso heißt wie die Klasse selbst. Dies erleichtert die Übersicht im Dateisystem und ermöglicht die Programmierung eines automatischen Klassenladers. Dies ist auch bei anderen Sprachen wie Java ver- Hinweis Als Übung können Sie den bislang vorgestellten Prototyp realisieren und sich im Anschluss daran eine oder mehrere der oben skizzierten Funktionen vornehmen. Schätzen Sie den Aufwand für die Realisierung der Funktionen und binden Sie die Funktionalität in die Anwendung mit ein. Wie präzise können Sie die Aufwand- schätzungen vornehmen? Wie nahe liegen Sie an den benötigten Ressourcen der rea- len Umsetzung? Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Erstellung von gutem Quellcode PHP Endlich objektorientiert 399 breitet. Da Klassen immer von anderen Skripten eingebunden werden, sollte die Dateiendung einer Klasse stets .inc.php lauten. 2. Schreiben sie den ersten Buchstaben des Klassennamens stets groß, sowohl im Datei- namen als auch in der Klassendefinition. Erstellen Sie also eine Aktie.inc.php mit der Deklaration class Aktie{ .}. Verwenden Sie stets die Singularform bei der Namensge- bung. 3. Schreiben Sie den ersten Buchstaben von Eigenschaften und Methoden stets klein. Wenn es sich um ein zusammengesetztes Wort handelt, schreiben Sie zur besseren Lesbarkeit die ersten Buchstaben der Teilwörter groß, beispielsweise $farbe oder $akti- enListe für die Bezeichnung der Eigenschaften und berechneGewinn() für eine Methode. 4. Deklarieren Sie alle Eigenschaften als private zur Datenkapselung und alle Methoden, die Dienste eines Objekts dieser Klasse darstellen, als public. 5. Schreiben Sie zu jeder Eigenschaft eine entsprechende Get- und Set-Methode. So gehören in einer Stifteklasse beispielsweise zu der Eigenschaft $farbe die Methoden getFarbe() und setFarbe($f). Prüfen Sie innerhalb der Set-Methode, ob der übergebene Wert $f gültig ist und im aktuellen Zustand des Objekts gesetzt werden darf. In der Get-Methode können Sie eine Formatierung für die Ausgabe vorsehen. 6. Sind Eigenschaften schreibgeschützt, so setzen Sie die Set-Methode private und grei- fen nur innerhalb der Klasse zu. Dürfen Eigenschaftswerte (z. B. aus Datenschutz- gründen) nicht ausgelesen werden, so setzen Sie die Get-Methode private. 7. Fragen Sie einen Wahrheitswert ab, so schreiben Sie nicht die Methode getVerkauft(), sondern isVerkauft(). Dies macht dem Benutzer dieser Klasse, der ja auch ein Pro- grammierer sein kann, die Handhabung leichter. 8. Wenn Sie einen Wert zu einer kumulierenden Eigenschaft hinzufügen wollen, schrei- ben Sie nicht setDividende($d), sondern addDividende($d). Dies verdeutlicht, dass etwas aufaddiert wird und gilt auch für Objekte. Meldet sich ein Student zu einem Praktikum an, deklarieren Sie im Praktikum die Methode addStudent($s). 9. Schreiben Sie Konstanten immer komplett groß. Trennen Sie zusammengesetzte Wör- ter in Konstanten stets mit einem Unterstrich. Beispiele sind PI oder MAX_STUDEN- TEN. 10. Eine Klasse hat prinzipiell den folgenden Aufbau: ̈ (statische) Konstanten ̈ Klasseneigenschaften ̈ Eigenschaften jedes Objekts ̈ Konstruktoren ̈ alle Get- und Set-Methoden der Eigenschaften, jeweils Get und Set zu jeder Eigen- schaft abwechselnd ̈ alle öffentlichen Dienste bzw. Methoden dieser Klasse ̈ alle privaten Hilfsmethoden 11. Rücken Sie jeden Funktionsblock, z. B. innerhalb einer Klasse, einer Methode, einer if- Verzweigung oder einer Schleife einheitlich mit zwei Leerzeichen ein. Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. [...]... Kontext, in dem die zu testende Klasse eingesetzt wird PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 415 5 Projektpraxis Nach der Installation über den bereits in PHP integrierten PEAR-Installer (PHP Extension and Application Repository), der die Verwaltung von PHP- Zusatzmodulen übernimmt, steht PHPUnit als Kommandozeilenwerkzeug zur Verfügung... Kommandozeile oder auch über Webinterface bedienbare Werkzeug PHPDocumentator ist auf der englischsprachigen Internetseite http://www.phpdoc.org/ kostenfrei erhältlich und kann ebenso wie PHPUnit unter Verwendung des PEAR-Installers installiert werden Neben einem Handbuch finden Sie auf dieser Homepage auch umfangreiche Tutorials zur Verwendung des PHPDocumentators Hinweis Eine Quellcodedokumentation ist selbstverständlich... Rückgabewerts der Methode Tabelle 5.1: Einige Schlüsselworte für die Kommentierung mit PHPDocumentators Das Werkzeug PHPDocumentator interpretiert nun die Kommentare und erstellt neue Dokumente, die den Quellcode dokumentieren Die Dokumentation kann erstellt werden ࡯ in verschiedenen HTML-Versionen ࡯ im PDF-Format PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove... Eine eigene PHP- Funktion mit Kommentierung für PHPDocumentators Die Metabefehle werden also stets durch ein vorangestelltes @-Zeichen eingeleitet Der Kommentar wird als Block-Kommentar eingefügt, wobei ein Stern mehr verwendet wird, als für den eigentlichen PHP- Kommentar notwendig ist (/**) Die so erstellten speziellen Kommentare werden als DocBlocks bezeichnet Die wichtigsten Meta-Befehle der DocBlocks... die UML-Syntax kennengelernt haben und im vierten Kapitel dieses Buches erfahren haben, wie man die PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 401 5 Projektpraxis UML-Syntax mit PHP 5 umsetzt, sollten Sie in der Lage sein, diese Muster mit PHP zu realisieren Abbildung 5.39: Gliederung der Design Patterns und exemplarische Vorstellung Eine... verboten werden Listing 5.27: Implementierung des Singletons in PHP PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 403 5 Projektpraxis private function clone() {} } // Aufruf der Instanz $singleton = Singleton::getInstance(); ?> Listing 5.27: Implementierung des Singletons in PHP (Forts.) Zwei Schnittstellen zusammenbringen mit einem Adapter... ist der Test fehlgeschlagen < ?php require_once 'PHPUnit/Framework .php' ; class StackTest extends PHPUnit_Framework_TestCase{ public function test01(){ $metro=new Aktie("METRO AG Stammaktien o.N.","DE0007257503", "http://www.boerse- ISIN=DE0007257503"); $this->assertEquals("METRO AG Stammaktien o.N.", $metro->getName()); } } ?> Listing 5.28: Der Test aus Listing 5.1 als PHPUnit Test Die wichtigsten Prüfmethoden... Quellcode-Dateien Sobald ein Entwickler fertig ist mit der Bearbeitung seiner Dateien, werden zunächst die PHPUnit-Tests durchgeführt Im Anschluss daran checkt der Entwickler die geänderten PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 417 5 Projektpraxis Dateien über das SVN-System wieder ein Dabei werden nur die geänderten Dateien auf den... Methode getState nur die Daten von dem Datenquellenobjekt an, die sie interessieren PHP Endlich objektorientiert Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark 407 5 Projektpraxis Abbildung 5.46: Das Design Pattern „Kompositum“ als Sequenzdiagramm 5.2.3 Wie man es nicht machen sollte Anti-Pattern Als Gegenbewegung zu den Design Patterns wurden in den letzten Jahren... PHP- Anwendung zu erstellen, bleibt Ihnen natürlich nicht erspart 418 Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark Erstellung von gutem Quellcode Um Kommentare interpretieren zu können, ist eine entsprechende Metasprache erforderlich, die bei PHPDocumentator eng an die Java -Doc angelehnt ist Listing 5.29 zeigt beispielhaft die Kommentierung einer selbstgeschriebenen PHP- Funktion . Depotverwaltung PHP – Endlich objektorientiert 391 Die OK-Schaltfläche führt dann wieder auf die Übersicht der Bestände, die in der ueber- sicht .php aufbereitet. der PHP- Session (Forts.) Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark. Das Fallbeispiel der Depotverwaltung PHP – Endlich

Ngày đăng: 15/12/2013, 13:15

Tài liệu cùng người dùng

Tài liệu liên quan