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)


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á .


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.


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.



-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>

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.