Matthias Kannengiesser PHP5 2. aktualisierte Auflage irammierung Mit 144 Abbildungen FRANZIS
Inhaltsverzeichnis 1 Softwareentwicklung 19 1.1 Programmierung 19 1.1.1 Programmierer und Entwickler 19 1.1.2 Was bedeutet Programmieren für den Entwickler? 20 1.1.3 Was ist ein Programm? 23 1.1.4 Was ist Abstraktion? 23 1.1.5 Welche Regeln sind beim Programmieren zu beachten? 24 1.2 Programmiersprache 24 1.2.1 Syntax (Semiotik) 26 1.2.2 Historie 27 1.2.3 Die Komponenten 30 1.2.4 Sprachgenerationen 32 1.2.5 Imperative und deklarative Programmiersprachen 34 1.2.6 Objektorientierte Programmiersprachen 35 1.2.7 Klassifizierungen 35 1.2.8 Programmierparadigmen 36 1.3 Phasen der Softwareentwicklung 39 1.3.1 Phasenmodell 40 1.3.2 Planungsphase 42 1.3.3 Analysephase 45 1.3.4 Entwurfsphase 48 1.3.5 Programmierung 58 1.3.6 Validierung und Verifikation 60 1.3.7 Projektmanagement 62 1.3.8 Qualitätsmanagement 64 1.3.9 Konfigurationsmanagement 66 1.3.10 Dokumentation 68 1.4 V-Modell 68 1.4.1 V-Modell XT 70 1.5 Extreme Programming 70 1.5.1 Werte 70 1.5.2 Prinzipien 71 1.5.3 Praktiken 72
Inhaltsverzeichnis 1.5.4 Flexibilität oder Steifheit 78 1.5.5 Rollenverteilung beim Extreme Programming 79 1.5.6 Abgrenzung zu traditionellen Vorgehensmodellen 80 1.5.7 Zusammenfassung 81 1.6 Webanwendungen 82 1.6.1 Wie alles begann 85 1.6.2 Architektur einer Webanwendung 86 1.6.3 Arbeitsweise von Webanwendungen 86 1.6.4 Alternative Technologien 87 1.6.5 Sicherheitsrisiken und Webanwendungen 88 1.6.6 Web-Engineering 89 1.6.7 Webanwendungen im Vergleich 89 Prozedurale und objektorientierte Programmierung 93 2.1 Prozedurale Programmierung 93 2.1.1 Funktionen - Definition und Anwendung 94 2.1.2 Geltungsbereich von Variablen 96 2.1.3 Konstanten in Funktionen 98 2.1.4 Funktionen und Parameter 99 2.1.5 Rückgabewerte von Funktionen 108 2.1.6 Funktionen als Referenzen 111 2.1.7 Verschachtelte Funktionsaufrufe 112 2.1.8 Funktionsnamen zur Laufzeit 114 2.1.9 Dynamisch Funktionen erzeugen 115 2.1.10 Bedingte Funktionen 116 2.1.11 Fazit 116 2.2 Rekursion und Iteration 116 2.2.1 Grundlagen - Rekursion und Iteration 117 2.2.2 Fakultät einer Zahl n (n!) rekursiv 117 2.2.3 Türme von Hanoi 120 2.2.4 Anwendung bei hierarchischen Strukturen 122 2.2.5 Anwendung bei Verzeichniszugriffen 130 2.2.6 Iteration oder Rekursion? 137 2.3 Objektorientierte Programmierung 138 2.3.1 Evolution der Objektorientierung 138 2.3.2 Bestandteile der Objektorientierung 139 2.3.3 Begriffe der objektorientierten Programmierung 142 2.3.4 Was genau bedeutet objektorientiert? 142 2.3.5 Welche Sprachen ermöglichen Objektorientierung? 145 2.4 Modularisierung - Einbindung externer Skripte 146 2.4.1 Einbinden von Modulen 146 2.4.2 Module und HTML 147
Inhaltsverzeichnis 2A3 Optimierung der Pfadangaben von Modulen 147 2.4.4 Mehrfachverwendung von Modulen verhindern 148 2.4.5 Informationen über Module ermitteln.. 149 2.4.6 Module automatisch einbinden mit autoload 150 2.4.7 Tipps im Umgang mit Modulen 150 2.5 Arrays 151 2.5.1 Was sind Arrays? 151 2.5.2 Terminologie 152 2.5.3 Arrays erzeugen 152 2.5.4 Arrays löschen 155 2.5.5 Mehrdimensionale Arrays 156 2.5.6 Arrayfunktionen 161 PHP und OOP 171 3.1 PHP und Objektorientierung 171 3.1.1 Was sind Objekte? 171 3.1.2 Objektorientierte Programmierung (OOP) 174 3.1.3 Wie entwickeln Sie objektorientiert? 175 3.1.4 Zusammenfassung 176 3.2 OOP und PHP 177 3.2.1 Klassen in PHP 177 3.2.2 Vererbung in PHP 181 3.2.3 Konstruktoren und Destruktoren 183 3.2.4 Erweiterungen des OOP-Konzepts in PHP 4 185 3.2.5 Meta-Informationen über Klassen und Objekte 188 3.2.6 PHP-Objekte sind assoziative Arrays 192 3.2.7 Optimierung durch parent 193 3.2.8 Mehrfachvererbung durch Aggregation 194 3.2.9 Überladen von Klassen durch Overloading 196 3.2.10 Nützliche OOP-Codeschnipsel 197 3.3 OOP und PHP 5 200 3.3.1 Klassendefinition in PHP 5 202 3.3.2 Objekte erzeugen und verwenden 203 3.3.3 Konstruktoren und Destruktoren 203 3.3.4 Zugriffsbeschränkung (Datenkapselung) 206 3.3.5 OOP - Ein Rundgang 209 3.3.6 Objekte - Referenzen und Kopien 213 3.3.7 Objekte klonen 214 3.3.8 Klassenvererbung in PHP 5 219 3.3.9 Überladen und Überschreiben von Methoden 220 3.3.10 Finale Klassen und Methoden 224 3.3.11 Abstraktion von Klassen und Methoden 225
1 Inhaltsverzeichnis 3.3.12 Interface - Objektschnittstellen 228 3.3.13 Statische Eigenschaften und Methoden 233 3.3.14 Verweisoperator/Gültigkeitsbereichsoperator (::) 235 3.3.15 Klassenkonstanten 237 3.3.16 Interzeptormethoden (Magische Methoden) 238 3.3.17 Typ-Hinweise (class type hints) 244 3.3.18 Dereferenzierung von Objekten 247 3.3.19 Einsatz von instanceof 249 3.3.20 Objekte von Unterklassen 250 3.3.21 Neue Konstante _METHOD_ 252 3.3.22 Serialisierungvon Objekten 253 3.3.23 Praxisbeispiel- Lebewesen 255 3.3.24 OOP-Codepool 259 3.4 Klassensyntax in PHP 4 und PHP 5 262 3.4.1 Syntaxvergleich 263 3.5 Anwendung der Objektorientierung 269 3.5.1 Klassen und Objekte 269 3.5.2 Vererbung 270 3.5.3 Überschreiben von Methoden 272 3.6 Einfachvererbung und Mehrfachvererbung 276 3.6.1 Mehrfachvererbung bei Schnittstellen 278 3.7 Standard PHP Library (SPL) 280 3.7.1 ArrayAccess-Interface 283 3.7.2 Iterator-Interface 292 3.7.3 IteratorAggregate-Interface 302 3.7.4 Übersicht über die SPL-Iteratoren 307 3.7.5 Anwendungsbeispiel zum Einsatz von Iteratoren 309 3.8 Reflection-API 315 3.8.1 Reflection-API als Objektmodell 315 3.8.2 Reflection-Klassen im Detail 317 3.8.3 Erweiterung der Reflection-Klassen 328 Entwurfsmuster 331 4.1 Einführung zu Entwurfsmustem 331 4.1.1 OOP und Entwurfsmuster 331 4.1.2 OOP für Fortgeschrittene 333 4.1.3 Sinn und Zweck 335 4.1.4 Entwurfsmusterkatalog 338 4.1.5 Übersicht der Entwurfsmuster 340 4.1.6 Was Entwurfsmuster nicht sind...344 4.1.7 Andere Arten von Mustern 344 4.2 Anwendungsbeispiele für Entwurfsmuster 345
Inhaltsverzeichnis 4.2.1 Singleton-Entwurfsmuster 345 4.2.2 Factory-Methode-Entwurfsmuster 351 4.2.3 Composite-Entwurfsmuster 358 4.2.4 Subject/Observer-Entwurfsmuster 364 4.3 Enterprise-Anwendungen und Entwurfsmuster 372 4.3.1 Schichten einer Anwendung 372 4.3.2 Datenschicht - Speicherung von Daten 374 4.3.3 Business-Logikschicht - Geschäftsprozesse 375 4.3.4 Präsentationsschicht - Darstellung der Daten 375 4.3.5 Übersicht der Entwurfsmuster in der Business-Logikschicht 376 4.3.6 Model-View-Controller 377 4.4 Fazit 380 Fehlerbehandlung und Exceptions 381 5.1 Fehlerarten 381 5.1.1 Übersicht über die Fehlerkategorien 384 5.1.2 Strategien und Fehlerbehandlung 385 5.2 Fehlerbehandlung 386 5.2.1 Konventionelle Fehlerbehandlung 386 5.2.2 Fehlerkontrolloperator (@) 387 5.2.3 Error-Handler - Laufzeitfehler selbst erzeugen 388 5.2.4 Fehlerverwaltung 395 5.2.5 Error-Handler in Bibliotheken 403 5.3 Exceptions - Ausnahmebehandlung 415 5.3.1 Anwendungsbeispiel - CSV-Dateienverarbeitung 421 5.3.2 Methoden der Exceptions 429 5.3.3 Exceptions der SPL (Standard PHP Library) 430 5.3.4 Benutzerdefinierte Exception-Klassen 433 5.3.5 Globale Verarbeitung von Exceptions 436 5.3.6 Built-in Backtracing 437 5.3.7 Sinnvoller Einsatz von Exceptions 437 5.4 Fehler für Statuscodes 437 Qualitätssicherung und Dokumentation 443 6.1 Qualitätskriterien 443 6.2 Reviews 444 6.2.1 Nutzen von Reviews 444 6.2.2 Review-Prozess 445 6.2.3 Review-Arten 445 6.2.4 Erfolgsfaktoren 446 6.2.5 Code Review (Peer Rating) 446 6.3 Debugging - Fehlersuche 447
14 Inhaltsverzeichnis 6.3.1 Einführung 447 6.3.2 PHP-Fehlerkonzept 447 6.3.3 Syntaxanalyse 448 6.3.4 Fehlerprävention 449 6.3.5 Fehlerarten 450 6.3.6 Fehlersuche und Fehlerfinden 452 6.3.7 Debugging 454 6.4 Codekonventionen 464 6.4.1 Was sind Codekonventionen? 464 6.4.2 Wie sollen sie eingesetzt werden? 465 6.4.3 Coderegelsammlung 469 6.4.4 Codeformatierung (Beautifier) 474 6.5 Codeprogrammierstil 476 6.5.1 Codeformulierung 477 6.5.2 Arbeiten ohne Short Tags 478 6.5.3 Umbrüche und Zeilenlänge 478 6.5.4 Leerstellen 480 6.5.5 HTML ohne echo konstruieren 480 6.5.6 Optimaler Einsatz von Klammern 481 6.5.7 Vermeiden von Magic Numbers 482 6.5.8 Ressourcen und Ordnung 483 6.5.9 SQL-Konventionen 484 6.6 Dokumentation 485 6.6.1 Dokumentationsanforderungen 485 6.6.2 Programm ablaufe und Struktogramme 488 6.6.3 Dokumentationstools 490 6.7 Encoder und Obfuscatoren 509 6.7.1 Encoder 509 6.7.2 Obfuscator 510 6.7.3 Sammlung von Encodern und Obfuscatoren 510 7 OOP-Praxis 513 7.1 MySQLiundOOP 513 7.1.1 MySQLi-lnstallation 514 7.1.2 MySQLi -erste Gehversuche 515 7.1.3 MySQLi und SQL-Abfragen 517 7.1.4 Referenz zur MySQLi-Unterstützung 520 7.1.5 Fehlerund Fehlerbehandlung 524 7.1.6 Prepared Statements (Vorgefertigte Abfragen) 526 7.2 PDOundOOP 528 7.2.1 Datenbankabstraktion 529 7.2.2 Datenbankabfragen via PDO 530
Inhaltsverzeichnis 7.2.3 PDOStatement - Vorgefertigte Abfragen 534 7.2.4 Verwendung von Transaktionen 539 7.2.5 Fehler und Fehlerbehandlung 541 7.3 GD und OOP 542 7.3.1 MIME-Typen und PHP 543 7.3.2 Festlegung des MIME-Typs 543 7.3.3 Aufbau und Grundlagen 544 7.3.4 Dynamische Bilderzeugung 546 7.3.5 Anwendungsbeispiel - Dynamische Banner 548 7.3.6 Anwendungsbeispiel - Dynamische Diagramme 555 7.4 Mail und OOP 565 7.4.1 Protokolle und Grundlagen 565 7.4.2 Anwendungsbeispiel - Mailversand und Attachments 566 7.5 Captcha und OOP 572 7.5.1 Captcha-Merkmale 573 7.5.2 Anwendungsgebiete 573 7.5.3 Umgehungvon Captchas 573 7.5.4 Anwendungsbeispiel - Dynamisches Captcha 574 7.6 Verzeichnisse und OOP 581 7.6.1 Aufbau der Klasse 581 7.6.2 Anwendungsbeispiel - Dynamische Bildgalerie 586 Codegeneratoren 589 A.l Automatisierte Codegeneratoren 589 A.2 Manuell gesteuerte Codegeneratoren 589 A.3 Codegenerierung 590 A.4 Generative Programmierung 590 A.5 Codegeneratoren - Software 593 A.6 Code Generation Network 597 Framework - API 599 B.l White-Box- und Black-Box-Frameworks 599 B.2 Framework-Typen 600 B.3 Frameworks in der Praxis 601 B.4 Frameworks in PHP 602 B.5 Symfony 604 B.6 Cake PHP 605 B.7 Prado 606 B.8 Seagull 608 B.9 Zend-Framework 609 B.10 Code Igniter 611 B.ll Zusammenfassung 612
16 Inhaltsverzeichnis С Sicherheit 613 C.l Schwachstellen und Gefahren 613 C.l.l Cross-Site Scripting (XSS) 613 C.1.2 Cross-Site Request Forgery (CSRFoderXSRF) 613 C.1.3 Information Disclosure 614 C.1.4 HTTP Response Splitting 614 C.l.5 Remote Command Execution 614 C.1.6 SQL-Injection 614 C.2 Webanwendungen und Sicherheit 615 C.3 Sicherheit - SQL-Injection 617 C.3.1 Angriffsszenario 617 C.3.2 Abwehrmöglichkeiten 618 C.3.3 Anti-SQL-Injection - Funktionen 621 C.4 Sicherheit - Cross-Site Scripting 624 C.4.1 Daten filtern via daten_reinigero 629 D ArgoUML - Crashkurs 631 D.l Voraussetzungen 631 D.2 Ausführen von ArgoUML 632 D.3 Anlegen eines Projekts 633 D.4 Entwurfvon PHP-Klassen 634 D.5 Erzeugen von PHP-Klassen 637 E Vordefinierte Variablen 641 E.l Register Globals- Systemarrays in PHP 641 E.2 Server- und Umgebungsvariablen 641 E.3 Fehlercodes in PHP 643 F Tools 645 F.l Gruppen 645 F.2 Installations-Kits 645 F.3 PHP und MySQL 645 F.4 PHP-Entwicklungs-Studios 645 F.5 MySQL-Editoren 645 F.6 Frameworks 646 F.7 Code Beautifier 646 F.8 Encoder und Obfuscatoren 646 F.9 PHP-Debugger 646 F.10 Tools 647
Inhaltsverzeichnis 17 G Informationsquellen 649 H Nachwort 651 Stichwortverzeichnis 653