Dies schlug fehl:
define('DEFAULT_ROLES', array('guy', 'development team'));
Anscheinend können Konstanten keine Arrays enthalten. Was ist der beste Weg, um dies zu umgehen?
define('DEFAULT_ROLES', 'guy|development team');
//...
$default = explode('|', DEFAULT_ROLES);
Dies scheint unnötiger Aufwand zu sein.
Antworten:
HINWEIS: Obwohl dies die akzeptierte Antwort ist, ist es erwähnenswert, dass Sie in PHP 5.6+ konstante Arrays haben können - siehe Andrea Faulds Antwort unten .
Sie können Ihr Array auch serialisieren und dann in die Konstante einfügen:
quelle
$fruit = FRUITS[0];
Seit PHP 5.6 können Sie eine Array-Konstante deklarieren mit
const
:Die kurze Syntax funktioniert auch wie erwartet:
Wenn Sie PHP 7 haben, können Sie es endlich verwenden
define()
, so wie Sie es zuerst versucht hatten:quelle
define()
hier in PHP 5.6 nicht verwenden , aber dies wurde für PHP 7.0 behoben . :)Sie können sie als statische Variablen einer Klasse speichern:
Wenn Ihnen die Idee nicht gefällt, dass das Array von anderen geändert werden kann, kann ein Getter hilfreich sein:
BEARBEITEN
Seit PHP5.4 ist es sogar möglich, auf Array-Werte zuzugreifen, ohne dass Zwischenvariablen erforderlich sind, dh Folgendes funktioniert:
quelle
const AtomicValue =42; public static $fooArray = ('how','di')
Ich benutze es so. Ich hoffe, es wird anderen helfen.
config.php
In Datei, wo ich Konstanten brauche.
quelle
Das benutze ich. Es ähnelt dem Beispiel von soulmerge, aber auf diese Weise können Sie das vollständige Array oder nur einen einzelnen Wert im Array erhalten.
Verwenden Sie es so:
quelle
Sie können es als JSON-Zeichenfolge in einer Konstante speichern. Aus Anwendungssicht kann JSON in anderen Fällen nützlich sein.
quelle
Ab PHP 5.6 können Sie konstante Arrays mit dem folgenden
const
Schlüsselwort definierenAuf verschiedene Elemente kann wie folgt zugegriffen werden:
Ab PHP 7 können konstante Arrays wie folgt definiert werden
define
:Auf verschiedene Elemente kann wie zuvor zugegriffen werden.
quelle
Ich weiß, dass es eine etwas alte Frage ist, aber hier ist meine Lösung:
Ich habe es definiert, weil ich Objekte und Arrays in Konstanten speichern musste, also habe ich auch Runkit auf PHP installiert, damit ich die Variable $ const superglobal machen kann.
Sie können es als
$const->define("my_constant",array("my","values"));
oder nur verwenden$const->my_constant = array("my","values");
Um den Wert zu erhalten, rufen Sie einfach an
$const->my_constant;
quelle
__get
und__set
... ich muss sagen, dass diese Methode großartig ist.PHP 7+
Ab PHP 7 können Sie einfach die Funktion define () verwenden, um ein konstantes Array zu definieren:
quelle
Kann sogar mit assoziativen Arrays arbeiten .. zum Beispiel in einer Klasse.
quelle
Mit der Explosions- und Implodierfunktion können wir eine Lösung improvisieren:
Dies wird widerhallen
email
.Wenn Sie möchten, dass es weiter optimiert wird, können Sie zwei Funktionen definieren, um die sich wiederholenden Dinge für Sie wie folgt zu erledigen:
Ich hoffe, das hilft . Viel Spaß beim Codieren.
quelle
Es scheint hässlich, eine Art Ser / Deser- oder Codierungs- / Decodierungs-Trick auszuführen, und Sie müssen sich daran erinnern, was genau Sie getan haben, als Sie versucht haben, die Konstante zu verwenden. Ich denke, die private statische Variable der Klasse mit Accessor ist eine anständige Lösung, aber ich werde Ihnen eine bessere machen. Verwenden Sie einfach eine öffentliche statische Getter-Methode, die die Definition des konstanten Arrays zurückgibt. Dies erfordert ein Minimum an zusätzlichem Code und die Array-Definition kann nicht versehentlich geändert werden.
Wenn Sie es wirklich wie eine definierte Konstante aussehen lassen möchten, können Sie ihm einen Namen mit Großbuchstaben geben. Dann wäre es verwirrend, daran zu denken, die Klammern '()' nach dem Namen einzufügen.
Ich nehme an, Sie könnten die Methode global machen, um näher an der von Ihnen gewünschten define () -Funktionalität zu sein, aber Sie sollten den konstanten Namen trotzdem auf jeden Fall festlegen und globale Werte vermeiden.
quelle
Sie können so definieren
quelle
Ja, Sie können ein Array als konstant definieren. Ab PHP 5.6 ist es möglich, eine Konstante als skalaren Ausdruck zu definieren , und es ist auch möglich, eine Array-Konstante zu definieren . Es ist möglich, Konstanten als Ressource zu definieren, dies sollte jedoch vermieden werden, da dies zu unerwarteten Ergebnissen führen kann.
Mit dem Verweis auf diesen Link
Viel Spaß beim Codieren.
quelle
Wenn Sie dies ab 2009 suchen und AbstractSingletonFactoryGenerators nicht mögen, finden Sie hier einige andere Optionen.
Denken Sie daran, dass Arrays bei der Zuweisung "kopiert" oder in diesem Fall zurückgegeben werden, sodass Sie praktisch jedes Mal das gleiche Array erhalten. (Siehe Copy-on-Write-Verhalten von Arrays in PHP.)
quelle
Wenn Sie PHP 7 & 7+ verwenden, können Sie auch Fetch wie folgt verwenden
quelle
Konstanten können nur skalare Werte enthalten. Ich schlage vor, Sie speichern die Serialisierung (oder JSON-codierte Darstellung) des Arrays.
quelle