Archiv der Kategorie: webdev

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.
Den ganzen Post lesen
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

MySQL Views

Views sollten eigentlich jedem Webdeveloper bekannt sein, deswegen versteht sich der Post hier eher als kleiner „Reminder“. Legen wir doch direkt mit einem Beispiel los. Ich habe eine Tabelle pizzas:

Und eine Tabelle ingredients:

Klassische 1:n-Beziehung also. Ich habe eine wunderbare, normalisierte Datenhaltung (okay, man könnte auch den Zutaten noch eine Zutaten-ID geben aber das verkompliziert das Beispiel unnötig). Wenn ich jetzt allerdings häufig den Bezug der Pizza zu den Zutaten brauche, schreibe ich in vielen Funktionen joins von ingredients auf pizzas. Das geht schlauer! – mit Views.

CREATE VIEW pizzaingredients AS
	SELECT p.*, i.ingredient
	FROM pizzas p
	LEFT JOIN ingredients i ON i.pizzaid
Den ganzen Post lesen
Veröffentlicht unter 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

  1. Unicode in Klassennamen? Kann das gehen?
  2. Sind Funktionsnamen case sensitive?
  3. Nested Functions?
  4. Warum sind es 2 Calls?

Und nun zu Auflösung:

  1. 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)

  2. Auch das haut hin.
Den ganzen Post lesen
Veröffentlicht unter php, PHP-WTF, webdev | 8 Kommentare

What you need to know about the DOM: 20 functions in 100 lines

Okay, first english article. I’m feeling kind of stupid when posting code related topics in German so I’m gonna try to bring some english content in here. Personally I think that comments, variable names and everything code-related should be written in english – considering multi-national development teams.

So, enough introduction. What follows is one single function performing stupid javascript actions with the Document Object Model. Even though every sane developer prefers the use of a library like jQuery for stuff like that, it’s always good to know what goes on behind the scenes. What I’ve covered are the following functions:

  • document.
Den ganzen Post lesen
Veröffentlicht unter Javascript, Security, webdev | Hinterlasse einen Kommentar

Java Hibernate Tutorial

Nachdem ich mit SQLite das Java-Fass aufgemacht hab, gibts nun noch Hibernate hinterher. Hibernate ist wohl eines der bekanntesten ORM-Frameworks. Ich zeige das ganze anhand von Netbeans, aber auch hier sollte Eclipse nicht weit entfernt sein. Es wird frech davon ausgegangen, dass das Java-Plugin installiert ist.

1) Hibernate Plugin installieren

In Netbeans unter Tools -Plugins -Availible Plugins -Hibernate. Sollte schmerzfrei durchlaufen.

2) Java Projekt anlegen

File -New Projekt -Java Application. Darf auch eine DesktopApplication sein, wenn ihr den GUI-Builder (Swing) als Plugin mitinstalliert habt – tut aber für Hibernate nichts zur Sache. Die Standardeinstellungen tun es unter Netbeans für das neue Projekt.… Den ganzen Post lesen

Veröffentlicht unter Datenbanken, Java | 1 Kommentar

Java und SQLite

Was folgt ist ein etwas themenfremder Exkurs in die Java-Welt. Und zwar ein kleines Tutorial zur Anbindung einer (dateibasierten) SQLite Datenbank an Java. Ich werde Netbeans benutzen, unterstelle aber das Eclipse da sehr ähnlich zu handhaben sein wird. Als OS kommt Windows 7 zum Einsatz, ich werde aber an den entsprechenden Stelle auch den „Linux way“ dazuschreiben. Los gehts auf Basis eines frisch installierten Netbeans ohne Java-Plugin – wenn Java also schon drauf sein sollte, einfach bei Schritt 3 loslegen.

1) JDK herunterladen und installieren

Findet man hier – leider aber nur mit Oracle Account. JDK installieren. Netbeans muss dabei geschlossen sein, sonst bleibt der Fortschrittsbalken bei der JDK Installation einfach stehen (ohne Warnung).… Den ganzen Post lesen

Veröffentlicht unter Datenbanken, Java | 5 Kommentare