Diferencia PHP entre array () y []

148

Estoy escribiendo una aplicación PHP y quiero asegurarme de que funcione sin errores.

El código original:

<?php
$data = array('name' => 'test',
              'id'   => 'theID');

echo form_input($data);
?>

¿Funcionaría lo siguiente sin errores o no se recomienda por alguna razón?

<?= form_input(['name' => 'test', 'id' => 'theID']); ?>

¿Hay alguna diferencia?

He revisado nuevamente los datos array()y el método de matriz corta con corchetes []en PHP.net, pero no estoy seguro.

Y también, ¿está bien la etiqueta corta de php <?= ?>para hacer eco? ¿Hay algún problema con la versión? (siempre que esté habilitado en php.ini)

Mr.Web
fuente
1
La sintaxis de matriz corta se introdujo en PHP 5.4, no hay diferencia y el método anterior no se eliminará, por lo que es seguro usarlo. Las etiquetas cortas generalmente están mal vistas, no las usaría.
JimL
2
Tks, ¿alguna referencia / razón para no usar etiquetas cortas de php?
Mr.Web
77
Aunque <? =?> En realidad no se consideran shorttags, no están deshabilitados con los shorttags estándar afaik, por lo que deberían estar bien para ecos simples.
Alexander Varwijk
1
Lectura interesante en <? =?> Etiquetas. Según uno de los comentarios, "el mismo Rasmus Lerdorf lo hizo muy comprometido" programmers.stackexchange.com/questions/151661/…
johnsnails

Respuestas:

223

Lo siguiente []es compatible con PHP> = 5.4:

['name' => 'test', 'id' => 'theID']

Esta es una sintaxis corta solamente y en PHP <5.4 no funcionará .

El alfa
fuente
Parece que 5.3.24 también admite esta sintaxis. (no pudo confirmar directamente)
Alberto
3
¿hay alguna diferencia?
Ali Akbar Azizi
26
@CooPer, No, a menos que cuente la longitud de escritura.
The Alpha
77
Quería una referencia y encontré esto: php.net/manual/en/language.types.array.php - "A partir de PHP 5.4 también puede usar la sintaxis de matriz corta, que reemplaza a array () con []".
mrwaim
1
@ Prof83, puede usar el $data = new stdClass();$data->someProp = 'someValue';uso de PHPla clase estándar y $obj = (object) ['foo'=>'bar', 'baz'=>'biz'];convertir una matriz (usando el tipo de conversión explícito) a un objeto (stdClass), pero con respecto a {}esto, podría implementarse en el futuro, pero no estoy seguro: --)
The Alpha
19

A partir de 2019, han pasado 7 años desde que []se agregó la sintaxis. Eso es lo suficientemente largo como para caer, array()excepto en los viejos programas heredados, en mi opinión.

David Spector
fuente
3
@TheAlpha bueno, incluso hoy, tenía curiosidad por saber si había diferencias de rendimiento
Cid
¿Mediste? Supongo que son simplemente una sintaxis alternativa, que no debería ser medible.
David Spector
6

Si está utilizando la versión 5.3 o anterior, no puede usarla []como una matriz, así como una matriz asociativa. Si está utilizando la versión 5.4 o posterior de PHP, puede usar array()o []para crear una matriz, una matriz asociativa o incluso una matriz multidimensional.

Md. A. Barik
fuente
1

Y con respecto a la <?= ?>parte de la pregunta: en gran medida no está mal visto, al menos no en 2019.

  1. Un buen desglose técnico: /software/151661/is-it-bad-practice-to-use-tag-in-php
  2. Una nota en PSR-1 : Los archivos DEBEN usar solo <?phpy <?=etiquetas.
  3. TL; DR: No hay ninguna razón por la que no pueda o no deba usarlo.
Aydin4ik
fuente
-13

Usando php 7.2, para mí parece más bien que [Soy una matriz] {Soy una matriz parece funcionar}. La diferencia es entre {}y []. Mi código

<p>
  <label for="post_category"> Cat 1 </label>
  <input type="checkbox" name="post_category{first}" value="cat1">
  <br />
  <label for="post_category{second}"> Cat 2 </label>
  <input type="checkbox" name="post_category" value="cat2">
</p>
Mahad Ali
fuente
15
¿Dónde está el PHP? Estás escribiendo HTML.
domdambrogia
1
Además, las llaves NO funcionarán para el caso sobre el que OP preguntó. No puede crear una matriz con llaves, solo acceda a los elementos de la matriz (desde v5.4 hasta ahora - v7.3).
Aydin4ik