Hallo!
Mein Name ist David Müller, ich arbeite bei der Public Cloud Group und wohne in Frankfurt. Hier geht es hauptsächlich um Webentwicklung.Kategorien
- webdev (131)
- php (84)
- Javascript (32)
- Datenbanken (22)
- Software Engineering (12)
- Performance (8)
- Security (27)
- PHP-WTF (11)
- Best of the Web (13)
- Quicktips (32)
- Linux (4)
- Java (3)
- misc IT (10)
- Persönlich (9)
- webdev (131)
Blogroll
Neueste Kommentare
- Tristan Tate bei Javascript: Arrays kopieren
- Daniel Marschall bei Dealing with Trusted Timestamps in PHP (RFC 3161)
- Login Mit Facebook Tutorial – Logini helper bei Facebook API – Tutorial
- PHP validation/regex for URL - Design Corral bei Why URL validation with filter_var might not be a good idea
- Manuel bei Meine ultimativen Buchempfehlungen
Archiv der Kategorie: php
usort
usort war mir zwar bisher schon bekannt, wirklich benutzt habe ich es aber nicht – was ich jetzt rückblickend bereue. Kurz gefasst ist usort die Waffe der Wahl, wenn man Arrays sortieren möchte die entweder heftig verschachtelt sind oder für die es keine trivialen Sortierkriterien gibt (wie etwa größer / kleiner). Für beides kommen später Beispiele. Bisher kam ich zwar auch ohne usort um die Runden, habe aber ersatzweise dann ziemlich aufwändige Ersatzkonstruktionen bauen müssen, für die usort die eindeutig bessere Wahl gewesen wäre.
Ein Beispiel
Man nehme folgendes Array:
$data = array( "P1915" => array("name" => "Manfred Schmidt", "work" => array("income" => 61000, "pos" => "Abteilungsleiter")), "P2193" => array("name" => "Wilfried Mueller", "work" => array("income" => 42300, "pos" => "Entwickler")), "P0813" => array("name" => "Herbert Mann", "work" => array("income" => 93500, "pos" => "Chef")), "P3913" => array("name" => "Klaus Kaiser", "work" => array("income" => 42700, "pos" => "Entwickler")), "P2881" => array("name" => "Juergen Koenig", "work" => array("income" => 43300, "pos" => "Marketing")));
Dabei haben wir eine Zuordnung der Personalnummer zu einem Unterarray, welches den Name beinhaltet und weitere Verzweigung auf ein „work“-Unterarray mit Position und Gehalt hat.… Den ganzen Post lesen
Veröffentlicht unter php, webdev
Hinterlasse einen Kommentar
Reflection – Teil 4: ReflectionProperty
Vorangegangene Teile:
- Teil 1: Einführung und ReflectionClass
- Teil 2: ReflectionMethod und ReflectionFunction
- Teil 3: ReflectionParameter
Nun sind also die Properties dran, womit dann der vierteilige Reflection-Ausflug auch schon beendet ist. Wie bekannt beginnen wir wieder mit einem Mustercode
class D { /** * this is a property */ public $prop = array("a","b","c"); }
Property erhalten
Der Weg um an das ReflectionProperty – Objekt zu kommen führt uns über das ReflectionClass – Objekt der Klasse.
$refclass = new ReflectionClass("D"); $refprop = $refclass->getProperty("prop");
DocBlock – Kommentar
print_r($refprop->getDocComment()); /** * this is a property */
Property-Name
print $refprop->getName(); //prop
Property-Value
Hierbei erwartet getValue eine Instanz der Klasse als Parameter.… Den ganzen Post lesen
Veröffentlicht unter php, webdev
7 Kommentare
Reflection – Teil 3: ReflectionParameter
Vorangegangene Teile:
Wie im letzten Teil 2 über die ReflectionMethod und die ReflectionFunction angedroht soll es nun um die Parameter gehen, die man ebenfalls reflecten kann. Ob es sich dabei um die Parameter einer Funktion oder um die Parameter einer Methode handelt, spielt keine Rolle. Wie in allen anderen Teilen muss mal wieder ein Beispielcode herhalten:
class C { public function fct($a,$b,array $c = array(1,2,3)) {} }
Default-Wert des Parameters
Erstmal müssen wir uns ein ReflectionParameter – Objekt ergattern. Das geht im – hier geschilderten – umständlichsten Fall von der Klasse über die Methode zu den Parametern.… Den ganzen Post lesen
Veröffentlicht unter php, webdev
3 Kommentare
Reflection – Teil 2: ReflectionMethod und ReflectionFunction
Hier nun also der zweite Teil, nachdem im letzten die ReflectionClass behandelt wurde. Doch nicht nur Klassen und Objekte kann man reflektieren, sondern auch Methoden und Funktionen . Das soll nun hier das Thema sein.
Beispielcode
Wie im letzten Beispiel muss folgender Code für alle weiteren Zwecke herhalten:
class Calculator { /** * This method adds the first two parameters or multiplies * them depending on the value of the third param */ public function AddOrMultiply($a, $b, $c = true) { static $someUselessVar = "123"; return $c ? $a+$b : $a*$b; } private function IamPrivate() {} }
Generelle Informationen
Um erstmal an ein ReflectionMethod – Objekt zu kommen, um dieses dann abfragen zu können müssen wir den Weg über das ReflectionClass – Objekt der beinhaltenden Klasse gehen.… Den ganzen Post lesen
Veröffentlicht unter php, webdev
4 Kommentare
Reflection – Teil 1: ReflectionClass
Was ist Reflection
Eines der coolsten Features in PHP, was leider so gut wie ohne Dokumentation dasteht. Reflection ist eine Möglichkeit, Meta Informationen über so ziemlich alles in PHP herauszubekommen. Welche Interfaces implementiert eine Klasse? Welche Methoden hat sie? Wieviele Parameter hat eine Funktion / Methode, davon wieviele optionale? Was ist der Default-Wert eines Parameters? Dies und einiges mehr ist wohl nur mit der Reflection herauszubekommen.
Arten der Reflection
Oben habe ich mit meinen Fragen bereits die Grundbereiche der Reflection erschlagen. Was ist nun wie reflektierbar?
- ReflectionClass – Liefert Infos über Klassen
- ReflectionObject – Im Prinzip wie die ReflectionClass, nur das der Angriffspunkt nicht die ganze Klasse, sondern eine Instanz dieser ist.
Veröffentlicht unter php, webdev
3 Kommentare
Datenbank-Klasse (auf PDO basierend)
Es ist wohl eine der am häufigsten neu geschriebenen Klassen. Jedem Entwickler seinen Datenbank-Wrapper. PDO macht die Sache eigentlich schon sehr angenehm, trotz allem vermisst man hier und da ein paar Komfort-Features. Habe neulich meine Datenbank-Klasse auf Github hochgejagt.
Features
- Kommt komplett mit Unit-Tests daher
- Komfortables Handling mit Prepared Statements
- Möglichkeit, das PDO DB-Handle aus der Datenbank herauszubekommen – volle Flexibilität
- Unterstützt mehrere Datenbank-Verbindungen gleichzeitig
- Komplett sauberes exceptionbasiertes Fehlerverhalten
- Komfortfeatures (siehe unten)
- Komplette Dokumentation
Einen Einblick in die Klasse erhaltet ihr in diesem kleinen howto auf github.… Den ganzen Post lesen
Veröffentlicht unter php, Datenbanken, webdev
1 Kommentar
YODA Conditions
Yoda dreht bekanntlich gern Satzbestandteile um. Das hat jetzt noch nichts direkt mit PHP zu tun. Zäumen wir das Pferd mal andersherum auf. Was fällt hier auf?
function doSomething() { return false; } $res = doSomething(); if ($res = false) { echo "1"; } else { echo "2"; }
Der geübte Debugger sieht sofort: Im if haben wir eine Zuweisung und keinen Vergleich. PHP findet das voll okay, IDEs geben in der Regel einen Warnhinweis. Raus kommt im Übrigen 2.
Was wäre jetzt, wenn wir frei nach Yoda geschrieben hätten:
if (false = $res) { echo "1"; } else { echo "2"; }
Parse error: syntax error, unexpected ‚=‘.… Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev
1 Kommentar
PHP WTF #2
Und weiter gehts mit den Kuriositäten (Teil 1).
$ar = array(1,2,3); foreach ($ar as &$a) echo $a; foreach ($ar as $a) echo $a;
Wenn 123123 rauskommen würde, wärs langweilig oder? Kommts auch nicht. 123122 lautet das Ergebnis.
Da ich unmöglich schöner erklären, was da intern vor sich geht als Herr Schlüter, sei an dieser Stelle elegant zu ihm übergeleitet.… Den ganzen Post lesen
Veröffentlicht unter php, PHP-WTF, webdev
1 Kommentar
PHP WTF #1
Ohne viel Worte: was kommt bei dem Code raus?
class çåèäßäöü { public static function weird() { function stuff() { return 123; } } } echo çåèäßäöü::wEiRd().sTuFf(); echo çåèäßäöü::weird().stuff();
Geballte „weirdness“. Wenn man jemandem so einen Schnippsel vorlegt und ihn laut nachdenken lässt (Bewerbungsgespräch), stellen sich folgende Fragen
- Unicode in Klassennamen? Kann das gehen?
- Sind Funktionsnamen case sensitive?
- Nested Functions?
- Warum sind es 2 Calls?
Und nun zu Auflösung:
- Das geht! Klassen, Funktionen und Variablen
dürfen unicode-Zeichen beinhalten. (Richtigstellung: Wie Fabian per Kommentar angemerkt hat, ist es kein „wirklicher“ unicode, denn die verwendbaren Zeichen beschränken sich auf den regulären Ausdruck[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
Natürlich ist das nicht empfehlenswert, aber prinzipiell möglich)
- Auch das haut hin.
Veröffentlicht unter php, PHP-WTF, webdev
8 Kommentare
Quicktip: Integer Validation
Oft ist es ja so, dass man einen Integer validieren möchte, der allerdings als String vorliegt (bei SOAP z.B.). Das heißt, dass uns is_int nicht weiterhilft, wie folgender Schnippsel zeigt:
var_dump(is_int("12")); //false
Klar, ist kein int – kann man PHP keinen Strick draus drehen. Alternative ist is_numeric.
var_dump(is_numeric("12")); //true
Ah, wunderbar – warum auch immer jetzt auf einmal Strings kein Problem mehr darstellen. Aber:
var_dump(is_numeric("12.123456")); //true
Klar irgendwie, „numeric“ heißt nicht zwangsläufig gerade. Deswegen (meines Erachtens nach der beste Weg): intval
intval konvertiert (sofern möglich, also wenn etwa ein int in einem String vorliegt) zu Integer, allerdings kommt bei allen anderen Inputs (bspw.… Den ganzen Post lesen
Veröffentlicht unter php, Security, Quicktips, webdev
1 Kommentar