Diferença de PHP entre array () e []

148

Estou escrevendo um aplicativo PHP e quero garantir que ele funcione sem erros.

O código original:

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

echo form_input($data);
?>

O seguinte funcionaria sem erros ou não é recomendado por algum motivo?

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

Existe alguma diferença?

Eu olhei novamente os dados array()e o método de matriz curta com colchetes []no PHP.net, mas não tenho certeza.

E também, a tag php curta é <?= ?>boa para ecoar? Existe algum problema de versão? (fornecido está ativado no php.ini)

Mr.Web
fonte
1
A sintaxe de matriz curta foi introduzida no PHP 5.4, não há diferença e o método antigo não será removido, portanto é seguro usá-lo. Tags curtas geralmente são desaprovadas, eu não as usaria.
JimL
2
Tks, alguma referência / razão para não usar php tags curtas?
21413 Web
7
Embora <? =?> Não sejam realmente considerados atalhos, eles não são desativados com os atalhos padrão afaik, portanto devem ser adequados para ecos simples.
Alexander Varwijk
1
Leitura interessante sobre as tags <? =?>. De acordo com um dos comentários "Rasmus Lerdorf se deixou isso muito cometer" programmers.stackexchange.com/questions/151661/...
johnsnails

Respostas:

223

A seguir, []há suporte no PHP> = 5.4:

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

Esta é apenas uma sintaxe curta e no PHP <5.4 não funcionará .

The Alpha
fonte
Parece que o 5.3.24 também suporta essa sintaxe. (não foi possível confirmar diretamente)
Alberto
3
há alguma diferença?
Ali Akbar Azizi
26
@CooPer, Não, a menos que você conte o comprimento da digitação.
The Alpha
7
Eu queria uma referência e encontrei - php.net/manual/en/language.types.array.php - "A partir do PHP 5.4, você também pode usar a sintaxe de array curto, que substitui array () por []".
mrwaim 12/02
1
@ Prof83, Você pode usar $data = new stdClass();$data->someProp = 'someValue';usando PHPclasse padrão e $obj = (object) ['foo'=>'bar', 'baz'=>'biz'];converter um array (usando fundição tipo explícito) a um objeto (stdClass), mas em relação a {}, poderia ser implementado no futuro, mas não tenho certeza tho :-)
A Alpha
19

A partir de 2019, faz 7 anos que a []sintaxe foi adicionada. Isso é tempo suficiente para cair, array()exceto em programas antigos herdados, na minha opinião.

David Spector
fonte
3
@TheAlpha bem, ainda hoje, eu estava curioso para saber se havia diferenças de desempenho
Cid
Você mediu? Suponho que sejam simplesmente sintaxe alternativa, o que não deve ser mensurável.
David Spector
6

Se você estiver usando a versão 5.3 ou anterior, não poderá usar []como matriz nem como associativo. Se você estiver usando a versão 5.4 ou posterior do PHP, poderá usar array()ou []para criar uma matriz, matriz associativa ou mesmo matriz multidimensional.

Md. A. Barik
fonte
1

E quanto à <?= ?>parte da pergunta: que em grande parte é não desaprovada, pelo menos não em 2019.

  1. Uma boa falha técnica: /software/151661/is-it-bad-practice-to-use-tag-in-php
  2. Uma observação no PSR-1 : Os arquivos DEVEM usar apenas <?phpe<?= tags.
  3. TL; DR: Não há razão para que você não possa ou não deva usá-lo.
Aydin4ik
fonte
-12

Usando o php 7.2, para mim parece que sim [eu sou uma matriz] {eu sou uma matriz parece funcionar}. A diferença está entre {}e []. Meu 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
fonte
15
Onde está o PHP? Você está escrevendo HTML.
domdambrogia
1
Além disso, chaves não funcionam para o caso sobre o qual o OP perguntou. Você não pode criar uma matriz com chaves, apenas acesse os elementos da matriz (desde a v5.4 até agora - v7.3).
Aydin4ik