pdf

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