Leuchtstoffröhren in der Form des englischen Wortes "Words"

PHP-Klasse für Strings

Information:
Es steht eine neue Version der Klasse zur Verfügung: String-Klasse: Version 1.1.0

Inspiriert von C++ habe ich eine generische Klasse geschrieben, mit der man Strings in PHP in Objekte umwandeln kann.

Einer meiner Hauptgründe für diese Entwicklung ist die Tatsache, dass ich in der Arbeit schon diverse Projekte auf UTF-8 umgestellt habe. Um UTF-8 möglichst weit zu unterstützen hat man momentan eine sehr einfache Möglichkeit, nämlich die Multibyte String-Funktionen von PHP. Damit der Code des Portals nun auch mit UTF-8 umgehen kann sucht man sich die Funktionen von der Seite des PHP-Manuals, sucht danach portalweit und ersetzt alle Vorkommen mit dem neuen Funktionsaufruf.

Da dies nur Copy & Paste ist und ich für meine eigenen Projekte sowas vermeiden will ist mir die Idee mit der String-Klasse gekommen, die ich gerade eben geschrieben habe. Der Vorteil dieser Klasse ist der, dass man sich keine Gedanken darum machen muss, ob die Multibyte-String-Erweiterung installiert ist oder nicht, da jeder Funktionsaufruf geprüft wird und ggf. die Multibyte-Variante der Funktion genutzt wird.

Verwendung

Einen neuen String zu initialisieren geschieht entweder mit dem Konstruktor oder mit der Methode String->set():

// mittels Konstruktor
$string1 = new String('     Das ist ein Teststring.   ');

// mittels set()
$string2 = new String();
$string2->set('Das ist auch ein Teststring.');

Um einen String nun zu bearbeiten verwendet man die Methode String->edit(). Der erste Parameter stellt hierbei den Funktionsnamen dar, der zweite optionale Parameter enthält ein Array mit sämtlichen benötigten Parametern. Bei den Parametern kann man jedoch den ersten weglassen, da dies immer der String selbst ist.

Steht für den übergebenen Funktionsnamen eine Multibyte-Version zur Verfügung wird diese verwendet.

// ohne Parameter
$string1->edit('trim');

// mit Parametern
$string2->edit('substr', array(2, 10));

Um einen String schlussendlich ausgeben zu können gibt es die Methode String->get(). Diese gibt den String zurück, den man anschließend an andere Funktionen übergeben oder ausgeben lassen kann.

// gibt 'Das ist ein Teststring' zurück
echo $string1->get();

// gibt 's ist auch' zurück
echo $string2->get();

Download & Lizenz

Der Download der Klasse findet sich hier: string.zip

Die Klasse steht unter der GPL 3. Damit kann sie auch in kommerziellen Projekten verwendet, geändert oder weitergegeben werden.

Weiterentwicklung

Mir spukt eine „History“ im Kopf herum, mit der man eine bestimmte Anzahl von Änderungen am String wieder rückgängig machen kann, sofern man dies braucht. Jedoch wüsste ich hierfür momentan keine Anwendungsmöglichkeit und es würde den Speicherbedarf nur massiv erhöhen.

Habt ihr noch Ideen, was hier fehlt oder dringend benötigt wird?

8 Kommentare

  1. Würde ich jetzt nicht unbedingt so unterstreichen. Kommt immer auf die Sache drauf an. Aber trotzdem Danke für den Tipp. Werde mal schauen, ob sich da was alternatives finden lässt.

  2. Wow, so wenig Code für so viele Funktionen.
    Was mir persönlich noch fehlt, ist eine Vergleichsfunktion von 2 Strings (auf gleichen Inhalt unter / ohne Berücksichtigung der Groß-Klein-Schreibweise, auf stringlänge, …)
    Außerdem wäre es schön, wenn man vielverwendete Funktionen ohne edit aufrufen könnte, z.B. so:

    $string->trim();

    oder

    $string->tolower();

    Aber ansonsten nicht schlecht!

    MfG Simon

  3. Sowas kommt auch noch. Die Version 1.1.0 liegt schon eine ganze Weile bei mir herum und muss erst noch veröffentlicht werden, aber sie kann schon wesentlich mehr.

    Sowas, was du vorgeschlagen hast, würde ich eher in eine abgeleitete Klasse bauen, da es nicht mit den absoluten Grundfunktionen eines String zu tun hat.

    1. Hallo Melanie,

      freut mich, dass dir die Seite gefällt.

      Eventuell gebe ich heute oder morgen noch die aktuelle Version der Klasse frei. Die wäre dann auch direkt über Subversion zu erreichen, so dass jeder ohne Probleme den aktuellen Stand auschecken kann.

  4. Mach das ganze noch „chainable“ (falls nicht schon passiert. Habe den Code jetzt nicht durchgelsen) und du hast ne nützliche Klasse welche auch auf einer Zeile zuhause sein kann

Kommentare sind geschlossen.