PHP – Immutable

24. Oktober 2015

Seit PHP 5 gibt es Klassen-Konstanten, die mittels des Keywords const angelegt werden können. Und schon wesentlich länger gibt es die Makro-Variante define. Aber das Problem an beiden Konstrukten ist, dass diese den Wert vor der Ausführung haben müssen. Ich habe aber regelmäßig Bedarf für einen Konstanten-Wert zur Laufzeit. Doch bis heute wusste ich nicht wirklich, wie ich das bewerkstelligen könnte.
Eine mögliche Lösung wäre ein Objekt, das einen Wert hält und diesen zwar zurück geben kann, aber nicht ändern lässt. Aber das ist schon recht Ressourcen aufwendig. Ein Objekt pro Wert, das erinnert eher an Java. Also dachte ich weiter nach, denn PHP würde sicher einen besseren Weg bieten. Und in der Tat: Seit PHP 5.3 gibt es Closures, auch anonyme Funktion genannt, und die haben etwas sehr nützliches: Sie können Variablen mittels use binden. Und damit lässt sich schon etwas anfangen:

<?php
function immutable($value)
{
    return function() use($value) {
        return $value;
    };
}
$name = 'Foo';
$NameOf = immutable($name);
print $NameOf(); // gibt 'Foo' aus
$name = 'Bar';
print $NameOf(); // gibt auch 'Foo' aus!

Und schon haben wir ein immutable zur Laufzeit. 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.


*