Tag archive: Entwicklung

Cover des neuen Albums "Ewig" der deutschen Band Letzte Instanz

Letzte Instanz: „Ewig“

„Jeder Schuldige hat eine Zukunft. Jeder Heilige hat eine Vergangenheit. Und das wird ewig so sein.“ Mit dieser Anlehnung an ein Zitat von Oscar Wilde beginnt die Reise im neuen Album „Ewig“ der deutschen Band Letzte Instanz und stimmt auf die darauffolgende Stunde ein. Die Trilogie aus den drei Alben „Schuldig“, „Heilig“ und „Ewig“ kommt mit dieser Scheibe zu einem Ende und verabschiedet sich mit teils sehr starken, teilweise mit etwas einfallslosen Songs.

Continue reading

Digiart eines Affen mit einer Steampunk-Brille vor einem farbenfrohen Hintergrund, der technischen Fortschritt und Evolution verkörpern soll.

Evolution statt Revolution

Kein Plan wie ich auf dieses Thema gerade gekommen bin. Wahrscheinlich liegt es daran, dass ich mich momentan in mehreren Projekten damit beschäftige, aber vielleicht auch nicht. Jedenfalls habe ich in diesem Moment einen starken Drang darüber etwas zu schreiben, auch wenn dieser Artikel höchstens eine lose Gedankensammlung wird.

Continue reading

Futuristisches, minimal und hell eingerichtetes Büro mit einem Mitarbeiter an seinem Schreibtisch.

Die ideale IDE

Wer PHP professionell entwickelt wird sich früher oder später auf die Suche nach einer geeigneten IDE begeben. Inzwischen gibt es hier auch für PHP einige interessante Stücke Software: PDT, Zend Studio, NetBeans for PHP, uvm.

Für welche IDE man sich entscheidet hängt entweder von den Präferenzen des Entwicklers ab oder davon was die Firma dafür ausgeben will. Immerhin hat man die Wahl zwischen ausgereiften kostenlosen Produkten und kommerziellen Varianten, die je nach Lizenztyp auch mal schnell ins Geld gehen können.

Eine weitere Frage, die man sich stellen muss ist die, was die IDE alles können soll/muss. Code-Completion versteht sich von selbst, aber was gibt es sonst noch? SVN-/Git-Integration? FTP? Automatische Erstellung von Dokumentationen anhand des Codes? Datenbank-Management? Debugger? Automatisierte Unit-Tests? Oder etwas ganz anderes?

Und wer sich bis jetzt noch nicht gefragt hat warum ich genau die drei oben genannten IDEs aufgezählt habe erfährt jetzt warum. Das sind nämlich genau diejenigen, die ich bisher verwendet und getestet habe. Hier also nun meine Eindrücke.

PDT

PDT ist eine freie IDE, die auf Eclipse basiert. Dadurch, dass hier schon eine ausgereifte IDE im Hintergrund arbeitet und die PHP-Integration eher durch Plugins erfolgt als durch Einbau in die Basis hat man viele benötigte Features quasi schon frei Haus.

Jedoch ist PDT in meinen Augen bei weitem noch nicht ausgereift und es fehlen viele Features, die man als professioneller PHP-Entwickler benötigt. Zudem laufen viele Prozesse in der IDE, die man für die Entwicklung von PHP gar nicht benötigt, was die Software teilweise mächtig ausbremsen kann.

Zend Studio

Wenn es nach Zend geht ist das Zend Studio die ultimative IDE für PHP. Früher war sie das auch, zumindest bis Version 5.5. Seit der Nutzung von Eclipse und PDT als Basis hatte ich nur noch Probleme. Also jetzt bitte nicht falsch verstehen, die IDE ist wirklich großartig, wenn sie funktioniert. Jedoch war zumindest in meinem Fall einiges an Handarbeit nötig bis es soweit war. Und da ich mich sehr über diese sündhaft teure verbuggte IDE geärgert habe will ich auch gar nicht mehr Worte darüber verlieren.

NetBeans for PHP

Seit einiger Zeit nutze ich NetBeans for PHP. Eine super IDE, die wirklich schnell und zuverlässig arbeitet und einige sehr interessante Features hat, die sonst keine IDE zu bieten hat. Natürlich gibt es auch hier nicht alles, was man sich wünscht, aber das was vorhanden ist funktioniert einwandfrei.

Und du?

Nun liegt es an dir. Welche IDE nutzt du und warum?

Langzeitaufnahme einer Straße mit vorbeifahrenden Autos, deren Scheinwerfer lange Lichtspuren ziehen.

(Mikro-)Optimierungen

Es gibt dutzende, wenn nicht sogar hunderte oder tausende, Wege eine Anwendung performanter zu gestalten. Einer der meistgenutzten Wege ist die Optimierung des Codes. Hierbei gibt es natürlich einige sehr interessante und gute Ansätze, aber auch viele, die die Wartungsfähigkeit des Codes einschränken oder schlichtweg nur minimale Gewinne bringen.

Vorweg wollen wir uns jedoch mit der Frage beschäftigen, ob Optimierungen wirklich nötig sind. Wenn eine Anwendung in einer für den Nutzer zumutbaren Zeit reagiert sollte man sich keine Gedanken machen hier noch etwas zu verbessern. Ebenso sollte man sich keinen unnötigen Aufwand zumuten, wenn sich das Problem durch Aufstocken der Hardware lösen lässt. Meist bringt das mehr und kommt günstiger. Man sollte jedoch dringend etwas unternehmen, wenn sich die Hardware sowieso schon auf einem Maximallevel befindet und diese an ihre Grenzen stößt.

Der übliche Weg ist dann mithilfe eines Profilers die Stellen im Code zu finden, die die Anwendung ausbremsen. Sobald man sie gefunden hat macht man sich Gedanken, was man verbessern kann. Beispiele hierfür sind weniger Datenbankabfragen ausführen, Ergebnisse zu cachen, Statements optimieren, etc.

Was man jedoch tunlichst vermeiden sollte sind Mikro-Optimierungen. In PHP gibt es hierfür einige tolle Beispiele, z.B. Strings in einfache Hochkommata schreiben, Prekrement statt Postkrement verwenden, kürzere Variablennamen zu verwenden, usw. Ich persönlich habe mir zwar einige Sachen davon angewöhnt, da es nie schaden kann hier und da eine tausendstel Millisekunde zu sparen, jedoch bringen diese Optimierungen meistens keine Verbesserung im Gegensatz zum vorherigen Stand. Viel wichtiger ist es seinen Code nochmal zu überdenken und alternative Methoden zu finden, die die Ausführung beschleunigen.

Irgendwie habe ich gerade das Gefühl, dass ich was komplett anderes geschrieben habe als ich ursprünglich wollte, aber die wichtigste Message habe ich genannt und darauf kommt es an. Übrigens gibt es auch bei PHP hates me einen Artikel dazu.

Ein Elefant auf einer grünen Wiese. Im Hintergrund sind Berge zu erkennen.

Warum PHP?

Dieser Artikel bezieht sich auf einen Beitrag im PHP Labor, der die Frage stellt „Warum PHP?„. Der Artikel ist sehr interessant zu lesen, da aber jeder seine eigene Meinung hat, was auch gut ist, will ich mich heute auch dieser Frage stellen und eine Antwort darauf geben.

Zuerst einmal der Weg wie ich zu PHP gekommen bin. Vor ein paar Jahren fing ich an mit simplem HTML Websites zu erstellen. Irgendwann folgte dann CSS und die Websites wurden komplexer. Gerade als ich soweit war diese beiden Sprachen zu verstehen hatte ich das erste Mal Kontakt mit PHP. Ich wollte damals ein Forum für die Mitglieder meines „Clans“ bereitstellen.

Leider hatte ich damals keine Ahnung was ich mache und habe einfach so lang rumgewurschtelt bis es gepasst hat. Dann fing jedoch recht bald danach meine Ausbildung zum Fachinformatiker (Anwendungsentwicklung) bei der infomax websolutions GmbH an. Dort hatte ich dann zum ersten Mal mit einer richtigen Anwendung zu tun. Unter Anleitung habe ich dann Schritt für Schritt die Sprache gelernt.

Heute, fast drei Jahre danach, wage ich zu behaupten, dass ich PHP durchaus gut kenne und auch kann.

Aber warum PHP und nicht Java, C#, Python oder sogar Delphi? Nun, jede Sprache hat ihren Reiz und auch einen mehr oder weniger festgelegten Einsatzzweck. Bei PHP fasziniert mich die Einfachheit. Es ist super einfach die Sprache zu lernen und damit Anwendungen zu programmieren. Von einfachen Skripten, die nur einen einzigen Zweck haben bis hin zu hochkomplizierten Anwendungen nach allen Regeln der Programmierkunst ist alles möglich. Und das meist recht schnell.

Auch der Einstieg ist schnell geschehen. Installiere dir einen Webserver mit PHP und lege los. Es muss nichts kompiliert werden, sondern Änderungen sind sofort sichtbar. Alles Dinge, die ich mag und so schnell nicht aufgeben will.

So, das war meine Meinung zu der Frage „Warum PHP?“. Was sagst du dazu?

Foto der Bühne, auf der die erste Keynote der International PHP Conference 2009 in Karlsruhe, stattfand.

IPC 2009 – Tag 1

Da ich, wie ich bereits geschrieben habe, pünktlich angekommen bin habe ich die Eröffnungssession auch noch mitbekommen, die einen kleinen Einblick in das vielfältige Programm der International PHP Conference und der webtech gab. Kurz darauf ging es dann auch schon mit der Session „Design Patterns“ von Cal Evans bei mir los und das war genau richtig als Einstimmung auf die nächsten drei Tage.

Design Patterns von Cal Evans

Gestartet hat die Session direkt mit einer Buchempfehlung: „Design Patterns“ von der Gang Of Four. Anschließend ging er dann großteils auf das MVC-Pattern ein und hat dessen richtige Verwendung erklärt, z.B. sollte ein Model niemals direkt auf eine Datenbank abbilden, da die Datenquellen eines Models wesentlich vielfältiger sein können. Sie können neben Datenbanken auch auf Webservices, etc. zugreifen und ihre Daten von dort beziehen.

Controller sollten ebenfalls keine großen Logiken beinhalten, sondern nur dafür Sorge tragen, dass die Daten vom Model zum View und umgekehrt gelangen. Jedoch sollten im Controller die Exceptions gefangen werden. Das Stichwort, welches ich vor kurzem dazu gelernt habe, nennt sich „Fat Model, Tiny Controller“.

Der View sollte logischerweise keine Logiken enthalten, sondern nur für die Darstellung sorgen. Dafür kann er, wenn nötig, auch direkt auf das Model zugreifen, darf jedoch keine Daten schreiben, sondern nur lesen.

Abgesehen davon ist er noch auf das Decorator Pattern eingegangen, welches anstatt multipler Vererbungen verwendet werden sollte, da man damit wesentlich flexibler ist.

NetBeans IDE von Petr Pisl

Die zweite Session stand ganz im Zeichen der aktuellen Betaversion von NetBeans, einer schlanken, aber sehr mächtigen IDE für die Entwicklung in verschiedenen Programmiersprachen. Da es bei der IPC logischerweise um PHP geht wurden auch nur die neuen Features dieses Pakets abgehandelt.

So soll die neue Version nach Plan am 10.12.2009 erscheinen und viele neue Fähigkeiten besitzen. Die erste genannte war eine Codevervollständigung ohne PHPDoc. Dafür scannt NetBeans den Code und versucht anhand verschiedener Indikatoren herauszufinden, was die Methoden und Funktionen für Rückgabewerte liefern. Auch soll PHPDoc nun eine Code-Completion erhalten, ebenso wie einzelne Elemente eines Arrays oder auch SQL, welches in Strings vorkommt. Man kann nun auch bestimmte Ordner aus dem Index für die Vervollständigung herausnehmen.

Abgesehen von diesen Features, die ich enorm spannend finde soll auch das Erstellen von Unit-Tests sehr einfach werden und die Ausführung dieser ebenso. Das Handling dieses Features erinnert mich stark an Zend Studio for Eclipse, wo das auch möglich ist.

Continuous Integration von Stefan Priebsch und Sebastian Bergmann

Diese Session war für mich extrem interessant, da ich mit diesem Thema noch nicht wirklich in Berührung gekommen bin. Die ersten Aussagen der beiden hat auch direkt beinhaltet, dass man unbedingt automatische Tests durchlaufen lassen soll und mindestens einmal täglich den aktuellen Stand zu integrieren, also zu committen.

Anschließend wurde der Wert von Continuous Integration angesprochen, der sehr hoch ist. Durch dieses Verfahren verringert man Risiken und reduziert gleiche Prozesse, da nicht überall die gleiche Software installiert werden muss. Abgesehen davon erzeugt man deploybare Software, sorgt für größeres Vertrauen in den eigenen Code und die Sichtbarkeit eines Projektes wird erhöht, da jeder immer den aktuellsten Stand einsehen kann.

Um mit diesem Verfahren starten zu können muss man zuerst einmal die Prozesse herausfinden, die automatisiert werden können. Hieraus soll dann ein „Non-Event“ gemacht werden, was im Klartext bedeutet, dass es sehr einfach sein soll diesen Prozess auszuführen, z.B. durch einen Klick auf einen Button oder ein kleines Skript.

Zuletzt wurden dann noch diverse Tools vorgestellt, die man nutzen kann und die ich hier einfach nur auflisten will, da ich mich damit noch nicht weiter beschäftigt habe: CruiseControl, phpUnderControl, Hudson, Atlassian Bamboo und Arbit.

Event Driven Architectures von Benjamin Eberlei

PHP an sich unterstützt nur bedingt Events, da es eine request-basierte Sprache ist. Jedoch gibt es zwei Patterns, die man nutzen kann, um so eine Architektur zu bilden: Das Observer-Pattern und das Event-Dispatcher-Pattern.

Doch auch dies reicht noch nicht aus, um auf Events reagieren zu können. Dazu sind weitere Tools notwendig, wie z.B. XMPP, dropr oder Gearman. Erst durch diese wird es möglich auch asynchron mit PHP arbeiten zu können. Von diesen drei Tools hat Benjamin noch Gearman etwas weiter vorgestellt, welches durch seine einfache Nutzung bei mir punkten konnte.

Wer langsam ist verliert von Dr. Johannes Mainusch

Diese Session war von der webtech und sehr interessant. Es wurde davon berichtet, welche Ziele sich XING gesetzt hat und wie sie es geschafft haben diese zu erreichen.

Die Performance von Websites ist sehr wichtig und jede Seite sollte innerhalb von zwei Sekunden komplett geladen werden, da ein Mensch in dieser Zeit eine Reaktion erwartet. Wenn nichts voran geht kommt Frustration auf und die Plattform wird verlassen. Diese Nutzer kommen auch meist nicht wieder. Dabei macht die Zeit, die der Server für die Datenverarbeitung benötigt, meist nur einen kleinen Teil aus, der größte Teil findet jedoch auf dem Weg vom Server zum Nutzer statt.

Um hier für mehr Geschwindigkeit zu sorgen ist es erstmal wichtig die Engpässe zu finden. Wie groß sind die ausgelieferten Dateien, werden diese vom Browser gecached, gibt es langsame Requests usw. Hat man hier alles identifiziert kann mit der Optimierung begonnen werden. Man kann dann anfangen Dateien zusammenzufassen, das Caching für den Browser zu beeinflussen usw.

Fazit

Alle diese Sessions waren sehr interessant und ich bereue es nicht andere Sessions besucht zu haben. Es waren viele spannende Themen von kompetenten Speakern, die zumindest mir einige neue Erkenntnisse gebracht haben.

Das Wort Vote, welches auf eine Straße gemalt wurde und dessen erster Buchstabe aus Füßen gebildet wird.

WordPress Plugin: dB Twtpoll

Just to say it before anyone complains. This is my first public released plugin for WordPress and I´m not used to write english posts as you can tell if you look around a bit.

What´s this all about?

I like to create polls with Twtpoll, a neat little service to create votings with your account from Twitter.

These polls can be embedded in a website by using two lines of javascript code. That´s not a difficult thing to do, but it´s somehow inflexible. After embedding a poll you have javascript code directly in your post. That´s a bad thing because of three simple reasons:

  1. It´s not to easy to read. Especially for people that don´t speak HTML.
  2. If the code for embedding a poll gets changed in future you have to look through all your posts with polls and update it.
  3. Your feed subscribers could by chance not be able to view the poll, because script tags are filtered by their feedreader. If this is the case and you are using this plugin a fallback will be shown with a link to the original post.

So, where to get the plugin?

At this very moment it isn´t listed in the Plugin Directory at WordPress. So you can only download it from here.

DOWNLOAD

How do I install the plugin now?

That´s as easy as always with WordPress. Unpack the archive, upload it to your wp-content directory and activate it at the plugins page.

I installed it. How do I embed polls?

That´s really easy. Just add the shortcode [ twtpoll] with the attribute id anywhere in your post (without spaces). After this the poll will be shown at this exact position.

For now it is not possible to read and copy the ID of your poll from anywhere on Twtpoll. Sounds confusing, but you can get the ID if you take a look at the URL in your browsers address bar. The last part of it is the ID you need to include your poll. Just copy it and paste it within the shortcode, e.g. [ twtpoll id="d6iby3"] (without spaces).

Something else?

Nope. Not really. I just hope you have fun with this plugin and my English wasn´t too bad. If you encounter any spelling or grammar errors please share this knowledge with me in the comments.

One more thing. If you have a nice idea to extend the plugin don´t hesitate to let me know in the comments. I appreciate every feedback.

Eine alte, noch betriebsbereite Dampfmaschine auf einem Treffen für Liebhaber dieser Maschinen

Eine Engine sie zu knechten

Das Web entwickelt sich weiter. Websites werden immer mehr zu interaktiven Anwendungen, bei denen der Nutzer diverse Einstellungen tätigen oder mit anderen kommunizieren kann. Ein Browser jedoch stellt hier immer noch ein sehr großes Hindernis dar, nämlich der Internet Explorer 6. Nun ist es soweit und YouTube, eine der weltweit führenden Websites, stellt langsam die Unterstützung für dieses veraltete Stück Software ein.

Das ist ein großer Schritt und hoffentlich tun viele andere Websites es YouTube bald gleich, um diesem Browser endgültig den Garaus zu machen. Doch wie soll es danach weitergehen? HTML 5 kommt definitiv und die Browserhersteller entwickeln auch fleißig weiter, um das Internet mit jeder neuen Version noch besser zu machen.

Doch genau hier liegt, meines Erachtens nach, momentan das Problem. Jeder Hersteller bastelt fleißig weiter an seinen Engines. Mozilla an Gecko, Microsoft an Trident, Apple an WebKit, usw. Wäre es nicht viel schlauer, dass sich die großen Produzenten an einen großen runden Tisch setzen und die Gemeinsamkeiten in ihren Lösungen finden, diese evaluieren, konsolidieren und dann in die jeweiligen Browser einbauen?

Derzeit ist es zwar so, dass Websites in vielen Browsern nahezu gleich aussehen, doch noch immer gibt es, trotz der Unterstützung von Webstandards, diverse Unstimmigkeiten und ein Browser zeigt eine Seite etwas anders an als der vorherige. Man muss sich nur mal anschauen, wie unterschiedlich die Schriften z.B. im Internet Explorer und im Firefox gerendert werden. Oder aber man versucht ein paar Features von HTML 5 und/oder CSS 3 zu verwenden. Ein Browser kann es darstellen, der andere gar nicht und wieder ein anderer muss anders angesprochen werden.

Überall hier wäre es sehr hilfreich, wenn immer die gleiche Engine eingesetzt werden würde. Ich will damit nicht erreichen, dass die verschiedenen Browser vom Markt verschwinden und es nur noch einen einzigen gibt, der alles kann. Auf gar keinen Fall, denn das ist sehr wichtig. Ein Hersteller veröffentlicht ein neues Feature, der nächste übernimmt und verbessert es und wieder der nächste kann darauf verzichten, da es schlichtweg nicht zum Browser und dessen Ideologie passt.

Die Features der unterschiedlichen Browser sollen und müssen erhalten bleiben, aber ich denke, dass jeder Webdeveloper über eine gemeinsame Technik zum Rendern der Seiten extrem froh wäre. Es müssen keine besonderen Bugs mehr beachtet, keine speziellen Codes verwendet und keine Darstellungsprobleme mehr behoben werden. Durch die gemeinsame Engine könnte das Web um ein vielfaches standardisierter und die Entwicklung dafür enorm vereinfacht werden.

Was haltet ihr von dieser Idee? Wäre sowas zu schaffen oder sehr ihr Nachteile dabei? Ihr seid gerne dazu eingeladen einen Kommentar zu hinterlassen

Screenshot meines Lifestreams

maiksi.de – Mein Lifestream geht online

Seit heute ist mein neuestest Projekt online: maiksi.de, mein Lifestream. Ursprünglich ganz anders geplant, aber jetzt wesentlich besser und viel cooler.

Ursprünglich wollte ich meinen Lifestream mit Sweetcron umsetzen, einem wirklich schönen Stück Software, welches per Cronjob alle gepflegten Feeds einliest und chronologisch alle darin enthaltenen Artikel auflistet. Doch so sehr ich es auch versucht habe wollte kein anständiges Design dabei herauskommen.

Doch gestern kam mir die glorreiche Idee eines meiner alten Designs als Grundlage zu verwenden und damit mein Feed fressendes Monster selbst zu programmieren. Das Basisdesign war ja schon da, ich musste es nur noch an den neuen Einsatzzweck anpassen, weshalb die Entwicklung auch sehr schnell vonstatten gehen konnte.

Technik

Dass diese Website auf PHP basiert, brauche ich wohl niemandem zu erzählen, immerhin ist diese Sprache mein Steckenpferd. Doch dazu wollte ich anfangs noch HTML 5 verwenden, habe es aber sein lassen, da wirklich nahezu kein Browser das unterstützt, was ich nutzen wollte. Also bin ich beim guten alten XHTML geblieben. Abgesehen davon ist noch jQuery auf der Clientseite und Magpie RSS auf der Serverseite im Einsatz.

Wird die Seite aufgerufen wird für jede gelistete Website ein AJAX-Request abgesetzt, der mir im JSON-Format ein paar Basisdaten und die letzten 5 Einträge im Feed mitsamt URL und Titel zurückgibt. Aus diesen Daten werden kleine Fenster gebaut, die beim Klick auf den Titel einer Seite angezeigt werden und mittels jQuery UI verschoben werden können.

Antrieb

Als Internetjunkie bin ich nahezu den ganzen Tag im Netz unterwegs und hinterlasse hier und dort diverse Spuren. Mit einem Lifestream können diese Aktivitäten gesammelt und aggregiert werden. Da die Umsetzung mit Sweetcron jedoch nichts werden wollte habe ich einen neuen Antrieb gefunden, nämlich einen Lifestream zu schaffen, der ganz anders als alle anderen zuvor ist.

Ich denke, dass mir das mit dem schlichten Design und der interaktiven Umsetzung durchaus gelungen ist. Mittels eines kurzen Klicks ist man über jede meiner Aktivitäten informiert und deswegen ist auch der Name maiksi perfekt. Dieses Wort stammt aus der Sprache Tagalog und bedeutet „kurz“.

Und jetzt hoffe ich mal, dass euch diese Seite ebenso gut gefällt wie mir und bin gespannt auf Feedback

Ein altes, verwittertes Buch neben einem ebenso altertümlich wirkenden Eimer.

String Klasse: Version 1.1.0

Diese Version gammelt nun schon seit weit über einem Monat auf meinem PC herum, hat aber erst heute ihre Vollendung gefunden dank dem Kommentar von Phil. Er hat mich darauf gebracht zwei magische Methoden einzubauen, mit denen die Möglichkeiten der Klasse enorm gestiegen sind.

Neue Features

Da dieses Release neue Features beinhaltet und nicht nur Bugs und Optimierungen enthält verdient es auch den Sprung von Version 1.0.1 auf 1.1.0. Welche Features das genau sind werde ich jetzt versuchen zu erläutern.

String erweitern

Es gibt jetzt gleich vier neue Methoden einen String zu erweitern: add(), addMore(), insert(), insertMore().

Mit der add()-Methode ist es möglich einen anderen String oder auch ein String-Objekt an das bisher bestehende anzufügen oder voranzustellen. Man kann auch mit einem Parameter angeben, was zwischen den Strings stehen soll. Mit addMore() kann man im Grunde genommen genau das Gleiche machen, nur kann man hier ein Array aus Strings oder String-Objekten übergeben.

Mittels insert() kann man einen String oder auch hier wieder ein String-Objekt in das bisherige String-Objekt einfügen. Dabei gibt man über einen Parameter den Offset an. Hier macht insertMore() auch wieder das Gleiche, nur dass es die in einem Array übergebenen Strings nacheinander einfügt.

String kopieren

Es ist nun auch möglich ein String-Objekt zu kopieren mittels der Methode copy(). Zurückgegeben wird ein neues String-Objekt, welches den gleichen Inhalt hat, wie das, welches kopiert wurde.

Magische Methoden

Mit PHP 5 wurden magische Methoden in Objekten eingeführt. Wie eingangs erwähnt habe ich heute erste die beiden Methoden __call() und __toString() eingebaut.

Erstere ist dafür zuständig die Möglichkeiten dieser Klasse enorm zu erweitern, da man dadurch jede beliebige String-Funktion aufrufen kann und diese dann auf das Objekt angewendet wird. Beispiel:

// Gibt 'is is the new st' aus
$string = new String('This is the new string.');
$string->substr(2, 16)->show();

Wie man sieht ist diese Methode ein wirklich mächtiges Werkzeug und auch Simon sollte jetzt zufrieden gestellt sein

Die Methode __toString() sorgt dafür, dass das Objekt direkt ausgegeben werden kann. Normalerweise würde eine Warnung auftreten, doch jetzt wird schlicht und ergreifend der String zurückgegeben. Das kann dann so aussehen:

// Gibt 'This is the new string.' aus
$string = new String('This is the new string.');
echo $string;

Vererbbarkeit

Als letzte gravierende Änderung ist es nun möglich von der String-Klasse abzuleiten, um eigene Erweiterungen dafür zu schreiben. Man kann in den abgeleiteten Klassen jede Methode verwenden, die die String-Klasse selbst hat, da alles entweder von außen zugänglich, also public ist oder geschützt (protected).

Diese Möglichkeit habe ich mir auch direkt zunutze gemacht und eine Ableitung geschrieben: JavascriptString. Mit dieser Klasse ist es möglich viele String-Funktionen, die in Javascript zur Verfügung stehen auch in PHP zu nutzen.

Dokumentation

Dieser Artikel ist nicht allzu ausführlich und das soll er auch gar nicht sein. Ich muss nicht jede einzelne Zeile oder Methode ausführlich erklären, denn die Klasse selbst ist ausführlichst dokumentiert und mit Beispielen versehen. Wer jedoch einen schnellen Blick riskieren will findet hier eine ausführliche Dokumentation, die mit phpDocumentor erstellt wurde.

Subversion

Da ich inzwischen Subversion auch privat nutze war es nur logisch das Projekt auch damit zu versionieren. Den aktuellen Entwicklungsstand findet man ab sofort immer unter dieser URL: http://dbsvn.agitos.de/public/string/trunk/

Committen darf momentan nur ich, aber um den aktuellen Stand auschecken zu können gibt es den User anonymous mit dem gleich lautenden Passwort.

Download

Zu guter Letzt kommt schließlich noch der Download der aktuellen Version. Download.

Wer auch hier Subversion nutzen möchte kann dies über den von mir angelegten Tag erledigen:http://dbsvn.agitos.de/public/string/tags/1_1_0/