2012-10-14 12 views
52

Ich kann keine Beispiele in Büchern oder im Internet finden, die beschreiben, wie man ein assoziatives Array nur mit Namen (mit leeren Werten) richtig initialisiert - außer natürlich ist der richtige WegInitialisieren eines assoziativen Arrays mit Schlüsselnamen, aber leeren Werten

Es fühlt sich so, als ob es eine andere effizientere Art und Weise, dies zu tun (?):

config.php

class config { 
    public static $database = array (
     'dbdriver' => '', 
     'dbhost' => '', 
     'dbname' -> '', 
     'dbuser' => '', 
     'dbpass' => '' 
    ); 
} 

// Is this the right way to initialize an Associative Array with blank values? 
// I know it works fine, but it just seems ... longer than necessary. 

index.php

require config.php 

config::$database['dbdriver'] = 'mysql'; 
config::$database['dbhost'] = 'localhost'; 
config::$database['dbname'] = 'test_database'; 
config::$database['dbuser'] = 'testing'; 
config::$database['dbpass'] = '[email protected]$$w0rd'; 

// This code is irrelevant, only to show that the above array NEEDS to have Key 
// names, but Values that will be filled in by a user via a form, or whatever. 

Irgendwelche Empfehlungen, Vorschläge oder Richtung würde geschätzt werden. Vielen Dank.

+0

Hey, nicht wichtig, aber du hast geschrieben 'dbname' -> '', wo es sein sollte 'dbname' => ' '- Ich habe nicht genug Reputation, um den Schnitt zu machen. – Martha

Antwort

47

Was Sie haben, ist die klarste Option.

Aber man könnte es array_fill_keys, wie dies verkürzt mit:

$database = array_fill_keys(
    array('dbdriver', 'dbhost', 'dbname', 'dbuser', 'dbpass'), ''); 

Aber wenn der Benutzer die Werte zu füllen hat sowieso, können Sie einfach das Array leer lassen, und bieten nur den Beispielcode in Index. php. Die Schlüssel werden automatisch hinzugefügt, wenn Sie einen Wert zuweisen.

+0

Sie müssen dies jedoch außerhalb der Klasse tun, da Sie keine Funktionen in Klassenvariablendeklarationen aufrufen können. Das * kann * dazu führen, dass mehr Code oder Initialisierungscode an Stellen erscheint, an denen Sie das nicht sehen. – BoltClock

+0

Das habe ich gesucht! Vielen Dank! – NYCBilly

+0

@BoltClock Ja, ich würde diese Option sowieso nicht wählen. Die zusätzlichen Zeichen, die Sie für die 'normale' Array-Initialisierung benötigen, machen es mir viel klarer, was der Code tut. Ich würde es so lassen wie es ist. Zeigen Sie einfach, wenn Sie wollen, gibt es Möglichkeiten, es zu tun. :) Sie könnten dies in einem Konstruktor tun, aber natürlich nicht für eine statische Klasse. – GolezTrol

1

Erste Datei:

class config { 
    public static $database = array(); 
} 

Andere Datei:

config::$database = array(
    'driver' => 'mysql', 
    'dbhost' => 'localhost', 
    'dbname' => 'test_database', 
    'dbuser' => 'testing', 
    'dbpass' => '[email protected]$$w0rd' 
); 
+0

Das ist hart codiert, meine zweite Datei war nur ein Beispiel - ich brauchte die Schlüssel bereits definiert. – NYCBilly

Verwandte Themen