2011-06-20 15 views
5

jak starałem się znaleźć odpowiednie i wyjaśniający tytuł, ale nie mogłem i postaram się wyjaśnić, co pytam tutaj:Przypisywanie Array() przed użyciem zmiennej tablicy

Normalnie, jeśli nie przypisywać pusta tablica do zmiennej można przypisać do rozpoczęcia wartości indeksów tak:

$hello["world"] = "Hello World"; 
... 
echo $hello["world"]; 

ale zawsze spotkać taką definicję:

$hello = array() //assigning an empty array first 
$hello["hello"] = "World"; 
... 
echo $hello["hello"]; 

Dlaczego jest używany dużo. Czy z drugim jest jakiś wzrost wydajności?

Dzięki.

+1

Boże, czy pierwszy naprawdę jest ważny? Zawsze odkrywam nowe powody, aby nienawidzić PHP ... –

+0

Tak długo, jak PHP indeksuje silnik, interpretuje to jako tablice. Nie musisz używać array(), aby zadeklarować, że coś jest tablicą. – Tarik

+1

To ostatnie jest dobrą praktyką, uniemożliwia innym programistom zgadywanie * OK, więc może być $ hello zadeklarowane gdzie indziej, może znajdować się w innym pliku *. –

Odpowiedz

7

dwóch powodów:

  • lepszej czytelności (wiesz tablica jest zainicjowany w tym momencie)
  • Bezpieczeństwo - podczas uruchomiony w systemie z włączoną opcją register_globals użytkownik może dodać np hello[moo]=something do łańcucha zapytania, a tablica zostanie już zainicjalizowana. $hello = array(); zastępuje tę wartość, ponieważ tworzona jest nowa tablica.
+1

To brzmi świetnie. Dzięki.... – Tarik

3
$hello = array(); 

if(someConditionIsTrue){ 
    $hello["world"] = "Hello World"; 
} 

foreach($hello as $val){  // this will not give you any error or warning. 
    echo $val;  
} 

Ale

if(someConditionIsTrue){ 
    $hello["world"] = "Hello World"; 
} 

foreach($hello as $val){  // this will give you error . 
    echo $val;  
} 
4

Inicjowanie zmiennych jest dobra praktyka.
Weźmy na przykład ten:

$foo = 'bar'; 

// 10 lines and 1 year later 
$foo['baz'] = 'test'; 

Gratulacje, masz teraz ciąg "tar".

Może się to zdarzyć przypadkowo i wprowadzić niepotrzebne błędy. Jeszcze gorzej z warunkowym tworzeniem zmiennych. Unika się go łatwo, wchodząc w dobry nawyk jawnego inicjowania zmiennych.

+0

Co za dziwne zachowanie, nie mogłem w to uwierzyć pierwszy raz, więc wypróbowałem to ... – martinstoeckli

+0

Uwielbiam PHP, nie? ;) – deceze

2

Jeśli dobrze pamiętam, pierwszy wygeneruje ostrzeżenie przez PHP, jeśli masz error_reporting jako E_ALL. Powinieneś zawsze używać drugiej metody, ponieważ jawnie inicjuje ona nową tablicę. Jeśli przeglądasz kod i znikąd, zobacz $hello["hello"], ale nie możesz sobie przypomnieć wcześniejszych odwołań do $hello, byłoby to mylące.

To samo stanie się, jeśli nie $hello[] = "World", ostrzeżenie zostanie wyświetlony

Powiązane problemy