$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.
¿Cuál es la razón? ¿Es inseguro sin él?
Sé que también puedes hacer esto:
$arr = array(5);
pero estoy hablando de casos en los que es necesario agregar elementos uno por uno.
$foo = array()
que no era una cadena convertida en una matriz, etc.).Respuestas:
Si no declara una nueva matriz y los datos que crean / actualizan la matriz fallan por cualquier motivo, cualquier código futuro que intente usar la matriz lo hará
E_FATAL
porque la matriz no existe.Por ejemplo,
foreach()
arrojará un error si la matriz no se declaró 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.fuente
foreach
ejemplo y el hecho de que se active un error aparentemente dependen de la versión de PHP que esté ejecutando.Solo quería señalar que la documentación de PHP en
arrays
realidad habla de esto en la documentación.Desde el sitio PHP, con el fragmento de código adjunto:
$arr[key] = value; $arr[] = value; // key may be an integer or string // value may be any value of any type
Pero, como indicaron las otras respuestas ... realmente debería declarar un valor para sus variables porque todo tipo de cosas malas pueden suceder si no lo hace.
fuente
Php es un lenguaje de escritura flexible. Es perfectamente aceptable. Dicho esto, los programadores reales siempre declaran sus vars.
fuente
¡Piense en los codificadores que vienen después de usted! Si solo ve
$arr[] = 5
, no tiene idea de lo que$arr
podría ser sin leer todo el código anterior en el alcance. La$arr = array()
línea explícita lo deja claro.fuente
es solo una buena práctica. Digamos que estaba agregando a su matriz dentro de un ciclo (práctica bastante común), pero luego accediendo a la matriz fuera de dicho ciclo. Sin una declaración de matriz, su código arrojaría errores si nunca ingresó al ciclo.
fuente
Recomiendo encarecidamente 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 introduzca 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 } }
fuente
No declarar una matriz antes de usarla puede causar problemas. Una experiencia que acabo de encontrar, llamé a este script de prueba así: indextest.php? File = 1STLSPGTGUS Esto funciona como se esperaba.
//indextest.php?file=1STLSPGTGUS $path['templates'] = './mytemplates/'; $file['template'] = 'myindex.tpl.php'; $file['otherthing'] = 'otherthing'; $file['iamempty'] = ''; print ("path['templates'] = " . $path['templates'] . "<br>"); print ("file['template'] = " . $file['template'] . "<br>"); print ("file['otherthing'] = " . $file['otherthing'] . "<br>"); print ("file['iamempty'] = " . $file['iamempty'] . "<br>"); print ("file['file'] = " . $file['file'] . "<br>");// should give: "Notice: Undefined index: file" print ("file = " . $file);// should give: "Notice: Undefined index: file" //the Output is: /* path['templates'] = ./mytemplates/ file['template'] = myindex.tpl.php file['otherthing'] = otherthing file['iamempty'] = Notice: Undefined index: file in D:\Server\Apache24\htdocs\DeliverText\indextest.php on line 14 file['file'] = Notice: Array to string conversion in D:\Server\Apache24\htdocs\DeliverText\indextest.php on line 15 file = Array */
Ahora solo necesitaré un archivo, de otro script que compré, en la parte superior del mío y podemos ver cómo los valores son completamente incorrectos para el arreglo $ archivo mientras que el arreglo $ ruta está bien: "checkgroup.php" es el culpable.
//indextest.php?file=1STLSPGTGUS require_once($_SERVER['DOCUMENT_ROOT']."/IniConfig.php"); $access = "PUBLIC"; require_once(CONFPATH . "include_secure/checkgroup.php"); $path['templates'] = './mytemplates/'; $file['template'] = 'myindex.tpl.php'; $file['otherthing'] = 'otherthing.php'; $file['iamempty'] = ''; print ("path['templates'] = " . $path['templates'] . "<br>"); print ("file['template'] = " . $file['template'] . "<br>"); print ("file['otherthing'] = " . $file['otherthing'] . "<br>"); print ("file['iamempty'] = " . $file['iamempty'] . "<br>"); print ("file['file'] = " . $file['file'] . "<br>"); print ("file = " . $file); //the Output is: /* path['templates'] = ./mytemplates/ file['template'] = o file['otherthing'] = o file['iamempty'] = o file['file'] = o file = oSTLSPGTGUS */
Inicializando la matriz antes, ¡no hay problema!
//indextest.php?file=1STLSPGTGUS require_once($_SERVER['DOCUMENT_ROOT']."/IniConfig.php"); $access = "PUBLIC"; require_once(CONFPATH . "include_secure/checkgroup.php"); $path = array(); $file = array(); $path['templates'] = './mytemplates/'; $file['template'] = 'myindex.tpl.php'; $file['otherthing'] = 'otherthing.php'; $file['iamempty'] = ''; print ("path['templates'] = " . $path['templates'] . "<br>"); print ("file['template'] = " . $file['template'] . "<br>"); print ("file['otherthing'] = " . $file['otherthing'] . "<br>"); print ("file['iamempty'] = " . $file['iamempty'] . "<br>"); print ("file['file'] = " . $file['file'] . "<br>"); print ("file = " . $file); //the Output is: /* path['templates'] = ./mytemplates/ file['template'] = myindex.tpl.php file['otherthing'] = otherthing.php file['iamempty'] = file['file'] = file = Array */
Así es como me di cuenta de lo importante que es inicializar variables, ya que nunca sabemos con qué problema podríamos terminar más tarde, y solo por querer ahorrar tiempo podríamos terminar perdiendo aún más al final. Espero que esto sea útil para aquellos que como yo no somos profesionales.
fuente
Pregunta anterior, pero comparto esto, ya que este es un caso de uso en el que el código es más simple si las matrices no se declaran.
Supongamos que tiene una lista de objetos que necesita indexar en una de sus propiedades.
// $list is array of objects, all having $key property. $index = []; foreach ($list as $item) $index[$item->key][] = $item; // Dont care if $index[$item->key] already exists or not.
fuente
Depende de su comprobación de errores. Si tiene informes de errores estrictos, se le dará un aviso, pero técnicamente debería funcionar sin él.
fuente
Es bueno en caso de que lo necesite como una variable global o desee reutilizar la misma matriz una y otra vez en diferentes funciones
fuente
Este es tu codigo
$var[] = 2; print_r($var)
¡Funciona bien! hasta que alguien declare el mismo nombre de variable antes de su código encantador
$var = 3; $var[] = 2; print_r($var)
¡Ups!
Este es un caso posible (a veces impredecible), por lo que
$var = array()
se necesita sí$var = 3; $var = array(); $var[] = 2; print_r($var)
Salida
Array ( [0] => 2 )
fuente
De acuerdo con @djdy, solo una alternativa que 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 ?>
fuente