Warum nicht PHP-Konstanten-Objekt?
Habe ich ein Schlüssel-Wert-Datenbank-Tabelle, wo ich speichern einiger Einstellungen.
Ich würde gerne diese Einstellungen in einer PHP-Konstanten-Objekt, denn Sie sollen nicht bearbeitbar sein.
In PHP7 können wir jetzt tun:
define('MySettings', array(
'title' => 'My title'
//etc
));
//And call it with
echo MySettings['title'];
Und es funktioniert Super.
Aber warum kann ich nicht tun:
define('MySettings', (object) array('title' => 'My title'));
So, ich könnte es so nennen, statt:
echo MySettings->title;
//or
echo MySettings::title;
Dies ist nur, weil ich denke, es ist schneller und schöner zu geben als Objekt Eigenschaft/Konstante ($obj->key
, $obj::key
), als array ($array['key']
)
Gibt es einen Grund dies nicht möglich ist?
- denn technisch-Objekte KÖNNEN NICHT konstant sein. Sie können code enthalten, was bedeutet, dass die Interna eines Objekts kann geändert werden, das heißt, Sie sind nicht konstant. das ist, warum Sie haben Konstanten - es ist ein Versprechen/garantieren, dass das, was Sie die Dinge in die Konstante wird NIE geändert werden.
- Es ist ein Vorschlag, der derzeit in der Diskussion für eine zukünftige version von PHP zur Unterstützung unveränderliche Objekte. Dies würde es ermöglichen, ein Programm zu erstellen ein Objekt mit einer Reihe von Werten, und diese Werte sind fest und unveränderlich, nachdem das Objekt erstellt wurde. Sie können mehr darüber Lesen Sie hier: wiki.php.net/rfc/immutability. Jedoch beachten Sie, dass es nicht in PHP jetzt (7.0), und es wird nicht in der kommenden Version 7.1 entweder. Je nachdem, wie die Gespräche gehen, es könnte in 7.2, aber es ist zu früh, um etwas Versprechen, auf das an dieser Bühne.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für PHP, alle Objekte sind veränderlich. Da Konstanten sollte sich nie ändern zur Laufzeit, sondern können Objekte, Objekt-Konstanten werden derzeit nicht unterstützt.
In der phpdoc über Konstanten, es wird festgestellt, dass:
Gibt es eine Inkonsistenz mit arrays, obwohl keine rationale gegeben ist, warum array-Konstanten sind erlaubt. (Ich würde sogar behaupten, dass es war ein schlechter call.) Es muss darauf hingewiesen werden, dass
array-constants
sind unveränderlich, also versuchen, Sie zu ändern Ergebnisse in Fataler Irrtum, wie präsentiert, durch diesen code aus php7:werfen:
Warum ist es nicht möglich zu definieren, Objekt-Konstanten, die mit einem ähnlichen Fehler? Hat man zu Fragen, die macht das.
Empfehle ich fernbleiben von arrays und Objekte als Konstanten. Vielmehr erstellen Sie eine unveränderliche Objekte, oder verwenden Sie immutable collections statt.
Da suchst du eine bestimmte syntax, die es schon gibt, ist das Konzept der Klasse Konstanten.
Es ist auch möglich, Sie zu definieren Schnittstellen.