2012-10-14 22 views
52

Nie mogę znaleźć przykładów w książkach lub w Internecie, opisujących, jak poprawnie zainicjować tablicę asocjacyjną tylko według nazwy (z pustymi wartościami) - chyba że, oczywiście, jest właściwy sposóbInicjuj tablicę asocjacyjną z nazwami kluczy, ale puste wartości

to po prostu czuje się tak, jakby nie ma innego bardziej efektywny sposób to zrobić (?):

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. 

Wszelkie zalecenia, sugestie lub wskazówki będą mile widziane. Dzięki.

+0

Hej, nie ważne, ale napisałeś 'dbname' -> '', gdzie powinno być 'dbname' => ' "- Nie mam wystarczającej reputacji, aby dokonać edycji. – Martha

Odpowiedz

47

To, co masz, jest najbardziej przejrzystą opcją.

Ale można skrócić go za pomocą array_fill_keys, tak:

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

Ale jeśli użytkownik musi wypełnić wartości w każdym razie, można po prostu zostawić tablicę pusta, i po prostu podać kod przykładowy w indeksie. php. Klawisze zostaną automatycznie dodane po przypisaniu wartości.

+0

Musisz to zrobić poza klasą, ponieważ nie możesz wywoływać żadnych funkcji w deklaracjach zmiennych klas. To * może * spowodować więcej kodu lub kod inicjujący pojawiający się w miejscach, w których nie spodziewasz się go zobaczyć. – BoltClock

+0

Tego właśnie szukałem! Dziękuję Ci! – NYCBilly

+0

@BoltClock Tak, nie wybrałbym tej opcji. Te dodatkowe znaki, których potrzebujesz do "normalnej" inicjalizacji macierzy, znacznie ułatwiają mi działanie kodu. Zostawiłbym to takim, jakie jest. Po prostu pokazuję, że jeśli chcesz, możesz to zrobić. :) Można to zrobić w konstruktorze, ale oczywiście nie dla klasy statycznej. – GolezTrol

1

pierwszego pliku:

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

inny plik:

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

To jest zakodowane, mój drugi plik był tylko przykładem - potrzebowałem już zdefiniowanych kluczy. – NYCBilly

Powiązane problemy