452 Stimmen

PHP-Konstanten, die Arrays enthalten?

Dies ist fehlgeschlagen:

 define('DEFAULT_ROLES', array('guy', 'development team'));

Offenbar 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 ein unnötiger Aufwand zu sein.

1010voto

Andrea Punkte 18168

Seit PHP 5.6 können Sie eine Array-Konstante mit const :

<?php
const DEFAULT_ROLES = array('guy', 'development team');

Auch die kurze Syntax funktioniert, wie zu erwarten war:

<?php
const DEFAULT_ROLES = ['guy', 'development team'];

Wenn Sie PHP 7 haben, können Sie endlich die define() so wie Sie es zuerst versucht hatten:

<?php
define('DEFAULT_ROLES', array('guy', 'development team'));

520voto

HINWEIS: während dies die akzeptierte Antwort ist, ist es erwähnenswert, dass in PHP 5.6+ Sie const-Arrays haben können - siehe die Antwort von Andrea Faulds unten .

Sie können Ihr Array auch serialisieren und es dann in die Konstante einfügen:

# define constant, serialize array
define ("FRUITS", serialize (array ("apple", "cherry", "banana")));

# use it
$my_fruits = unserialize (FRUITS);

147voto

soulmerge Punkte 70900

Sie können sie als statische Variablen einer Klasse speichern:

class Constants {
    public static $array = array('guy', 'development team');
}
# Warning: array can be changed lateron, so this is not a real constant value:
Constants::$array[] = 'newValue';

Wenn Ihnen der Gedanke nicht gefällt, dass das Array von anderen geändert werden kann, könnte ein Getter helfen:

class Constants {
    private static $array = array('guy', 'development team');
    public static function getArray() {
        return self::$array;
    }
}
$constantArray = Constants::getArray();

エディテージ

Seit PHP5.4 ist es sogar möglich, auf Array-Werte zuzugreifen, ohne Zwischenvariablen zu benötigen, d.h. es funktioniert folgendermaßen:

$x = Constants::getArray()['index'];

41voto

Jashwant Punkte 27629

Wenn Sie PHP 5.6 oder höher verwenden, benutzen Sie Andrea Faulds Antwort

Ich verwende es so. Ich hoffe, es wird anderen helfen.

config.php

class app{
    private static $options = array(
        'app_id' => 'hello',
    );
    public static function config($key){
        return self::$options[$key];
    }
}

In der Datei, in der ich Konstanten benötige.

require('config.php');
print_r(app::config('app_id'));

12voto

Syclone Punkte 979

Das verwende ich. Es ist ähnlich wie das Beispiel von soulmerge zur Verfügung gestellt, aber auf diese Weise können Sie das gesamte Array oder nur einen einzelnen Wert im Array erhalten.

class Constants {
    private static $array = array(0 => 'apple', 1 => 'orange');

    public static function getArray($index = false) {
        return $index !== false ? self::$array[$index] : self::$array;
    }
}

Verwenden Sie es so:

Constants::getArray(); // Full array
// OR 
Constants::getArray(1); // Value of 1 which is 'orange'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X