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)


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


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.


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.



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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.