2011-06-20 17 views
5

He intentado encontrar un título adecuado y explicativo pero no pude y voy a tratar de explicar lo que estoy pidiendo aquí:Asignación de array() antes de utilizar una variable como matriz

Normalmente, si no se asigna una matriz vacía a una variable, puede empezar a asignar valores a los índices de la siguiente manera:

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

pero siempre me encuentro tan definición:

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

por qué se utiliza mucho. ¿Hay una ganancia de rendimiento o algo con el segundo?

Gracias.

+1

Oh Dios, ¿es el primero realmente válido? Siempre descubro nuevas razones para odiar PHP ... –

+0

Sí, siempre que PHP genere los índices, lo interpreta como matrices. No tiene que usar array() para declarar que algo es una matriz. – Tarik

+1

Este último es una buena práctica, evita que otro codificador adivine * OK, por lo tanto, puede que $ hola esté declarado en otro lugar, puede estar en otro archivo *. –

Respuesta

7

Dos razones:

  • legibilidad mejor (ya saben la matriz se inicializa en este punto)
  • Seguridad - cuando ejecutándose en un sistema con register_globals habilitado, un usuario podría agregar, por ejemplo hello[moo]=something a la cadena de consulta y la matriz ya estaría inicializada con esto. $hello = array(); sobrescribe este valor, ya que se crea una nueva matriz.
+1

Ese suena increíble. Gracias.... – 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;  
} 

Pero

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

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

Inicializar las variables es buenas prácticas.
Tomemos por ejemplo esta:

$foo = 'bar'; 

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

Felicitaciones, ahora tiene la cadena "tar".

Esto puede suceder accidentalmente e introducir errores innecesarios. Se pone aún peor con la creación de variables condicionales. Se evita fácilmente al adquirir el buen hábito de inicializar explícitamente sus variables.

+0

Qué comportamiento tan extraño, no lo podía creer primero, así que lo probé ... – martinstoeckli

+0

Tengo que adorar PHP, ¿no? ;) – deceze

2

Si no recuerdo mal, el primero generará una advertencia de PHP si tiene error_reporting como E_ALL. Siempre debe usar el segundo método porque inicializa explícitamente una nueva matriz. Si está mirando a través del código y de la nada, consulte $hello["hello"], pero no puede recordar haber visto ninguna referencia a $hello antes, sería confuso.

Lo mismo ocurrirá si lo hace $hello[] = "World", una advertencia se mostrará

Cuestiones relacionadas