2011-11-23 11 views
66
$arr = array(); // is this line needed? 
$arr[] = 5; 

Sé que funciona sin la primera línea, pero a menudo se incluye en la práctica.¿Es necesario declarar PHP array antes de agregar valores con []?

¿Cuál es el motivo? ¿Es inseguro sin eso?

sé también se puede hacer esto:

$arr = array(5); 

pero yo estoy hablando de los casos en que es necesario añadir elementos uno por uno.

+2

A menos que le gusten los avisos sobre las variables no declaradas, le recomiendo que inicie. Además, solo crea un código legible (está claro que '$ foo = array()' y que no se trata de una cadena entregada a una matriz, etc.). –

+5

@Brad Christie: Excepto que no desencadena dicho aviso. – BoltClock

+3

@BoltClock: Depende de [en qué versión estás trabajando] (https://bugs.php.net/bug.php?id=28151). –

Respuesta

77

Si no declara una nueva matriz, y los datos que crean/actualizan la matriz fallan por algún motivo, cualquier código futuro que intente usar la matriz E_FATAL porque la matriz no existe.

Por ejemplo, foreach() arrojará un error si la matriz no fue declarada y no se le agregaron valores. Sin embargo, no se producirán errores si la matriz está simplemente vacía, como sería el caso si la hubiera declarado.

+0

Subida vertiginosa porque el ejemplo 'foreach' y el hecho de que un error sea activado depende aparentemente de la versión de PHP que esté ejecutando. – cspray

+0

No entiendo esa respuesta. No declarado y sin agregar algo significa que no escribí en el código fuente. – Gordon

+2

@Gordon, ejemplo de algo que no funcionará bien si $ something no es igual a 1: if ($ something == 1) {$ rows [] = "a"; $ rows [] = "b"; } foreach ($ rows as $ row) {} El error podría haberse evitado si se hubieran declarado $ rows como $ rows = array(); antes de que ocurriera la declaración if. – djdy

4

es una buena práctica. Digamos que se agrega a su matriz dentro de un bucle (práctica bastante común), pero luego accede a la matriz fuera de dicho bucle. Sin una declaración de matriz, su código arrojaría errores si nunca lo hizo en el bucle.

0

Depende de la comprobación de su error. Si tiene un informe de error estricto, le dará un aviso, pero aún así debería funcionar técnicamente sin él.

0

Su buena en el caso cuando la necesitan como una variable global o desea volver a utilizar la misma matriz y otra vez en diferentes funciones

13

PHP es un lenguaje de programación relajado mecanografiado. Es perfectamente aceptable. Dicho esto, los programadores reales siempre declaran sus vars.

+26

[programadores reales] (https://www.xkcd.com/378/) – Gordon

+1

@Gordon exactamente lo que estaba pensando;) – AlienWebguy

-1

acuerdo con @djdy, sólo una alternativa Me encantaría publicar:

<?php 

// Passed array is empty, so we'll never have $items variable available. 
foreach (array() AS $item) 
    $items[] = $item; 

isset($items) OR $items = array(); // Declare $items variable if it doesn't exist 

?> 
+0

¿Cuál es el sentido de todo esto? Parece mucho ruido literalmente nada. – BoltClock

+0

En lugar de predefinir $ items variable verificará existencia de un bucle, eso es todo. – Otar

21

Sólo quería señalar que el PHP documentation on arrays realidad habla acerca de esto en la documentación.

Desde el sitio de PHP, con el código que acompaña fragmento:

$arr[key] = value; 
$arr[] = value; 
// key may be an integer or string 
// value may be any value of any type 

"Si $arr aún no existe, se creará, por lo que esta es también una forma alternativa de crear una matriz."

Pero, como dicen las otras respuestas ... usted realmente debería declarar un valor para sus variables porque todo tipo de cosas malas pueden suceder si no lo hace.

6

¡Piensa en los programadores que vienen detrás de ti! Si solo ve $arr[] = 5, no tiene idea de qué podría ser $arr sin leer todo el código anterior en el alcance. La línea explícita $arr = array() lo deja en claro.

+1

En PHP 5.4.x - 5.6.x: $ arr = [] también funciona. –

1

Recomiendo declarar la matriz antes de agregar valores. Además de todo lo mencionado anteriormente, si la matriz está dentro de un bucle, es posible que involuntariamente inserte elementos en su matriz. Acabo de observar que esto crea un error costoso.

//Example code  
foreach ($mailboxes as $mailbox){ 
     //loop creating email list to get 
     foreach ($emails as $email){ 
      $arr[] = $email; 
     } 
     //loop to get emails 
     foreach ($arr as $email){ 
     //oops now we're getting other peoples emails 
     //in other mailboxes because we didn't initialize the array 
     } 
} 
+0

¿No haces qué? – ryanve

+1

@ryanve he editado la respuesta – ykay

Cuestiones relacionadas