Transcription
pdf
Literatur [14-1] Möhrke, Carsten: PHP Pear. Galileo Computing, 2005 [14-2] Bergmann, Sebastian: PHPUnit - kurz & gut. O'Reilly, 2006 [14-3] Priebsch, Stefan: PHP 5.3 Die Neuerungen. entwickler.press, 2009 [14-4] Samar, Richard et al.: PHP de Luxe. mitp, 2. Auflage, 2004 Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 2 Links PEAR http://pear.php.net http://go-pear.org PECL http://pecl.php.net phpDocumentor http://www.phpdoc.org PHPUnit http://pear.phpunit.de/ Tutorials http://www.php-homepage.de FAQ http://www.php-faq.de Dokumentation http://www.phpdoc.org Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 3 Übersicht • • • • • Konstanten Guter Programmierstil Fehlerbehandlung Assertions PEAR Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 4 Konstanten I • Konstanten werden mit define('Konstante',Wert); definiert. • Sie werden ohne ein beginnendes $-Zeichen benutzt. • Sie können nicht umdefiniert werden. • Beispiel für eine Abfrage, ob eine Definition vorhanden ist: if (!defined('Konstante')) { include('Dateiname'); } Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 5 Konstanten II - Vordefiniert (Beispiele) Name Erläuterung PHP_VERSION Version von PHP PHP_OS Betriebssystem PHP_EOL End-Of-Line-Zeichen TRUE 1 FALSE 0 Siehe dazu: http://php.net/manual/en/reserved.constants.php Mit get_defined_constants() lassen sich alle Konstanten in einen Hash laden. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 6 == und === • Wenn Funktionen nicht eindeutige Returnwerte liefern: – Integer als Resultat im positiven Fall – false(!) als Resultat im negativen Fall dann sollte mit $RetValue= func(.....); if (false===$RetValue) {… abgefragt werden. 7 Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps Geschweifte Klammern if (expression) { statements; } elseif (expression) { statements; } else { statements; } • • if (expression) { statements; } elseif (expression) { statements; } else { statements; } Pro Ebene ein Tabulator-Sprung, der mit 4 Zeichen belegt ist Die Tabs sollten nach Blanks konvertiert sein. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 8 Namensgebung (Vorschläge) • Die reine Lehre sagt: Sprechende Namen. • Aber – Es gibt immer wieder vorkommende Konstruktionen, die auch ohne sprechende Namen klar sind, z. B. kurze For-Schleifen. – Temporäre Variablen mit kurzzeitigem Gebrauch – Sinnvolle Abkürzungen, die aber konsistent benutzt werden • Groß/Kleinschreibung – – – – Konstanten komplett groß mit '_' als Trenner Variablen/Funktionen klein in Camel Caps Klassen groß mit Camel Caps Lokale Attribute nicht mit '_' einleiten Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 9 Verschachteln und continue/break • Keine Schachtelungen tiefer als – bei IF: 2 – bei SWITCH: 2 – bei FOR/WHILE/DO: 3 • Kein break/continue über eine Schleife hinweg • Kein goto Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 10 Fehlerbehandlung • Funktionen sollten nichts ausgeben, es sei denn dies ist ihre Funktion - also auch keine Fehlermeldungen ausgeben. • Als Return-Wert wird neben dem Resultat auch der Erfolg dem Aufrufer per false mitgeteilt. • Funktionen sollten das Skript auch nicht beenden, z. B. mit die() o.ä. - dies sollte der Aufrufer entscheiden. • Durch ein vorangestelltes @ wird die Ausgabe von Fehlermeldungen unterdrückt. • Ausgabe der letzten Fehlermeldung: echo $php_errormsg; falls in php.ini der Parameter track_errors auf 1 gesetzt ist. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 11 Schweregrade von Fehlern I Name Erläuterung E_ERROR Schwerer Laufzeitfehler E_WARNING Laufzeitwarnung E_PARSE Problem mit der Syntax E_NOTICE Hinweis auf mögliches Problem E_STRICT E_DEPRECATED Hinweis auf veraltete Konstrukte E_CORE_ERROR E_CORE_WARNING Probleme des Kerns bzw. der ZEND-Maschine E_COMPILE_ERROR E_COMPILE_WARNING E_USER_ERROR E_USER_WARNING Vom Programmierer selbst festgestellte Probleme E_USER_NOTICE E_ALL Alles zusammen, aber ohne E_STRICT Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 12 Schweregrade von Fehlern II • NOTICE-Fehler werden üblicherweise nicht gemeldet, da diese standardmäßig in der Datei php.ini auskonfiguriert sind. • Verändern eines Parameters aus der php.ini-Datei in PHP: – ini_set('Parametername', Wert); Diese Veränderungen gelten nur für den Lauf eines Skripts. • Abfragen eines php.ini-Wertes aus der php.ini-Datei: – ini_get('Parametername'); Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 13 Schweregrade von Fehlern III Entwicklungsmaschine (in php.ini): error_reporting = E_ALL | E_STRICT display_errors= On log_errors= On error_log= Pfad-zu-einer-Datei-ausserhalb-DocumentRoot Produktionsmaschine (in php.ini): error_reporting = E_ALL display_errors= Off log_errors= On error_log= Pfad-zu-einer-Datei-ausserhalb-DocumentRoot Die Konstanten der Schweregrade der Fehler sind Bitwerte, die per Oder zusammengefasst werden können (Oder = |) Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 14 Eigene Error-Handler I • Das Schreiben eigener Error-Handler ist zu empfehlen, da dann Fehler gezielt in Dateien ausgegeben werden können (und nicht die zu generierende HTML-Seite zerstören). function MyError($Type, $Message, $File, $Line) { ..... } ..... set_error_handler("MyError"); ..... Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 15 Eigene Error-Handler II • Die Routine set_error_handler() schreibt die alte Definition des Handlers auf einen internen Stack, so dass sie mehrfach aufgerufen werden kann (push-Operation). • Mit restore_error_handler() wird der jeweils vorherige Zustand anhand des Stack wiederhergestellt (pop-Operation). • Mit trigger_error("Meldung", Fehlertyp); werden selbst definierte Fehler ausgelöst. Fehlertyp ist eine der obigen Konstanten über den Schweregrad: E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 16 Eigene Error-Handler III Was sollte der eigene Error-Behandler tun? • Gute Fehlermeldung als String generieren, • Ausgabe in einer speziellen Seite bzw. Fenster, • Meldung ins Logfile Wenn eine sinnvolle Reparatur möglich ist, wird das Skript weiter ausgeführt, ansonsten beendet. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 17 assert() I • assert(expression) prüft den übergebenen Ausdruck auf True • Ist er es, geschieht nichts, falls nicht: Meldung $i= 5; assert( $i==0 ); assert('$i==0'); assert("$i==0"); Warning: assert(): Assertion failed in … on line … Warning: assert(): Assertion "$i==0" failed in … on line … Warning: assert(): Assertion "5==0" failed in … on line … Alle Aufrufe sind äquivalent, nur dass beim zweiten die Bedingung nach dem Einsetzen der Parameter ausgegeben wird. Beim ersten und zweiten Aufruf gibt es bedeutungslose Ausgaben. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 18 assert() II Mit assert_options() wird das Verhalten von assert() gesteuert. Aufruf: assert_options(Konstante, Wert); assert_options(ASSERT_CALLBACK,"Name der Funktion"); Option Standard Erläuterung ASSERT_ACTIVE 1 Schaltet Überprüfung ein/aus ASSERT_WARNING 1 Schaltet Warnungen ein/aus ASSERT_QUIET__EVAL 0 Unterdrückt Fehlermeldungen bei 1 ASSERT_BAIL 0 Beendigung des Script bei Fehler ASSERT_CALLBACK NULL Aufruf einer Callback-Funktion Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 19 assert() III function AssertFunc($File, $Line, $Assertion) { ..... } assert_options(ASSERT_CALLBACK, "AssertFunc"); .... assert("$bla!=='Name'; //$bla!=='Name'"); Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 20 Auslesen des Call-Stacks • Die Routine debug_backtrace() liefert die Informationen des aktuellen Stacks in einem Array. – Jedem Funktionsaufruf entspricht ein Array-Element. – Jedes der Elemente enthält Informationen über Dateiname Zeile Funktionsname Array mit der Parameterliste • Die Routine debug_print_backtrace() gibt die in von debug_backtrace() in ein Array gelieferten Information sofort aus. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 21 PHP Extension and Application Repository: PEAR • PEAR ist eine der größten PHP-Software-Sammlungen weltweit. • Siehe http://pear.php.net/index.php • Einige der PEAR-Pakete werden zusammen mit der StandardPHP-Installation installiert. Andere sind bei XAMPP vorinstalliert. • Die Pakete können über das Internet mit dem Kommando pear (MSDOS-Eingabeaufforderung) installiert werden. • Der PEAR-Lader selbst ist in der PHP-Installation enthalten. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 22 pear-Kommando Kommando Erläuterung pear list Liste der installierten Pakete pear info Paket Gibt Informationen über Paket Paket aus pear install Paket Installiert Paket Paket pear list-all Listet alle Pakete auf dem PEAR-Server auf pear uninstall Paket Deinstalliert Paket Paket pear upgrade Paket Aktualisieren des Pakets Paket pear upgrade-all Aktualisiert alle installierten Pakete Über die Kommando-Zeile lassen sich alle PEAR-Pakete administrieren. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 23 Zur Benutzung • PEAR ist komplett objektorientiert. • Es gibt aber zunehmend viele Pakete, die rein auf PHP5 basieren und "ordentlich" objektorientiert realisiert sind. • Die Vorgehensweisen bei der Instanziierung bzw. Benutzung mit :: sind leider recht unterschiedlich. • PEAR-Objekte/Klassen benutzen sich gegenseitig, so dass Abhängigkeiten bestehen, die zu weiteren Installationen führen. Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 24 Nach dieser Anstrengung etwas Entspannung... Webtechnologien – WS 2015/16 - Teil 14/PHP-Ergänzungen und Tipps 25