| | | | |
| |||||||
| Tutorials Hier findest Du Tutorials, welche nach und nach ein fertiges Script ergeben. Sehen, lernen & verstehen! |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 34.248
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Nachfolgend möchte ich eine Funktion vorstellen, die ich gestern geschrieben habe. Ich denke, dem ein oder anderen könnte die einmal hilfreich sein. Eigentlich bin ich ein Fan der printf () Funktionen [1], über die man in einen gegebenen Formatstring eine zugeordnete Liste von Parametern einfügen lassen kann. Für bestimmte Anwendungen waren mir diese Funktionen aber nicht flexibel genug. Ausgangssituation Als Beispiel nehmen wir eine Methode eines Fehlerobjektes, die beliebige Fehlerdaten über einen variablen Formatstring in ein Logfile schreiben soll. Dazu werden die Objektmember via sprintf () in den Formatstring eingetragen. Um eine beliebige Reihenfolge der Daten zu ermöglichen, bieten printf () & Co das sogenannte Argument swapping an, bei dem der gewünschte Paramter über einen Index n$ angegeben wird. PHP-Code: Ziel ist ein adäquater Ersatz für sprintf (), der im Formatstring eine klare Aussage über den einzusetzenden Parameter macht. Im Endeffekt eine Art Template. Wobei die eigentliche Funktionalität der Parameter von printf () erhalten werden soll, also z.B. die explizite Typumwandlung eines Parameters nach int, führende Nullen oder Leerzeichen etc. Lösung Zunächst die Funktion, die ich vsprintf_assoc () getauft habe. Genauso denkbar wären natürlich Pendants für printf (), vprintf () und vsprintf (): PHP-Code: Diese Platzhalter werden durch einen regulären Audsruck gesucht. Der Ausdruck, den ich für die original printf () Syntax erstellt habe lautet: Code: (%[\-\+]?(?:\s|0|\\\'.)?\-?\d*(?:\.\d+)?[bcdeufFosxX]) Aus den erkannten Settings wird dann eine Liste von Parameternamen zusammengestellt, der Formatstring selbst wird sprintf () kompatibel 'zurückentwickelt'. Die eigentliche Ersetzung erfolgt dann durch sprintf (). Für häufige Anwendungem sollte die aufwendige reguläre Suche redzuiert werden. Deshalb wird für jeden neuen Formatstring, der vsprintf_assoc () übergeben wird eine temporäre (sogenannte Lambda-) Funktion erstellt, deren Namen von vsprintf_assoc () selbst statisch verwaltet wird und einem md5 Hash des Formatstrings zugeordnet wird. Ein erneuter Aufruf mit diesem Format ruft die entsprechende Funktion - gegebenenfalls mit anderen Paranetern - direkt auf, ohne den Formatstring erneut zu interpretieren. Schauen wir uns abschließend die veränderte Sachlage an: PHP-Code: Quellen [1] http://de2.php.net/manual/en/function.printf.php http://de2.php.net/manual/en/function.sprintf.php http://de2.php.net/manual/en/function.vprintf.php http://de2.php.net/manual/en/function.vsprintf.php |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| sprintf mittels array füttern? | tomtaz | PHP Tipps 2008 | 4 | 27.03.2008 05:20 |
| Gästebuch auf PHP Basis erstellen - verzweifel ... | sanctus | PHP Tipps 2006 | 3 | 23.04.2006 15:33 |
| Faktura auf PHP Basis für Kleinunternehmer? | Trash | 5 | 14.12.2005 08:40 | |
| Php Forum auf PHP 5 Basis | Beitragsarchiv | 4 | 18.10.2005 20:24 | |
| Chat auf Basis von MySQL und PHP??? | nicobischof | PHP Tipps 2005-2 | 1 | 18.10.2005 19:13 |
| Wozu sprintf() ? | Chr!s | PHP Tipps 2005-2 | 19 | 30.07.2005 22:39 |
| parameter für sprintf bzw. string in text umwandeln | PHP Tipps 2005-2 | 4 | 12.07.2005 15:20 | |
| Benötige Hilfe/Tipp für Rechnung mit sprintf | PHP Tipps 2005-2 | 2 | 03.07.2005 13:50 | |
| Texticker auf PHP Basis mit Text aus externer Datei | PHP Tipps 2005 | 2 | 16.02.2005 15:26 | |
| Formatierung mittels sprintf() | inu | PHP Tipps 2005 | 3 | 28.01.2005 16:02 |
| Vertriebs - System auf PHP / MySql Basis | dh1sbg | Beitragsarchiv | 4 | 18.11.2004 10:20 |
| Warning: sprintf(): Too few arguments | Paulo | PHP Tipps 2004 | 3 | 21.10.2004 12:35 |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| sprintf php, php template sprintf, php sprintf, php sprintf template, php sprintf führende nullen, sprintf platzhalter, printf php reihenfolge, anwendung von sprintf, php printf ersatz, using sprintf for html links, php sprintf platzhalter, php platzhalter printf, warning: vsprintf() [function.vsprintf]: too few arguments in, php printf, printf php, platzhalter printf, php templating sprintf, php parametrisierte strings, php sprintf(\02%, sprintf php reihenfolge |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.