Differenza PHP tra array () e []


148

Sto scrivendo un'app PHP e voglio assicurarmi che funzioni senza errori.

Il codice originale:

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

echo form_input($data);
?>

Il seguente funzionerebbe senza errori o non è raccomandato per qualche motivo?

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

Ci sono delle differenze?

Ho rivisto i dati array()e il metodo di array corto con parentesi quadre []in PHP.net ma non ne sono sicuro.

Inoltre, il tag php breve va <?= ?>bene per l'eco? C'è qualche problema di versione? (fornito è abilitato in php.ini)


1
La sintassi a breve array è stata introdotta in PHP 5.4, non c'è alcuna differenza e il vecchio metodo non verrà rimosso, quindi è sicuro da usare. I tag corti sono generalmente disapprovati, non li userei.
JimL

2
Tks, qualche riferimento / motivo per non usare tag short php?
Mr.Web,

7
Sebbene <? =?> Non siano in realtà considerati short tag, non sono disabilitati con i short tag standard, quindi dovrebbero andare bene per gli echi semplici.
Alexander Varwijk,


1
Lettura interessante sui tag <? =?>. Secondo uno dei commenti "Rasmus Lerdorf stesso ha commesso molto" programmers.stackexchange.com/questions/151661/…
johnsnails

Risposte:


223

Di seguito []è supportato in PHP> = 5.4:

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

Questa è solo una sintassi breve e in PHP <5.4 non funzionerà .


Sembra che 5.3.24 supporti anche questa sintassi. (impossibile confermare direttamente)
Alberto

3
c'è qualche differenza?
Ali Akbar Azizi,

26
@CooPer, No, a meno che non conti la lunghezza della digitazione.
L'Alfa il

7
Volevo un riferimento e ho trovato questo- php.net/manual/en/language.types.array.php - "A partire da PHP 5.4 puoi anche usare la sintassi breve dell'array, che sostituisce array () con []."
mrwaim,

1
@ Prof83, è possibile $data = new stdClass();$data->someProp = 'someValue';utilizzare la PHPclasse standard e $obj = (object) ['foo'=>'bar', 'baz'=>'biz'];convertire un array (utilizzando il cast di tipo esplicito) in un oggetto (stdClass) ma per quanto riguarda {}, potrebbe essere implementato in futuro ma non è sicuro che :-)
L'Alpha

19

A partire dal 2019, sono passati 7 anni da quando è []stata aggiunta la sintassi. array()Secondo me, è abbastanza lungo da abbandonare, tranne nei vecchi programmi legacy.


3
@TheAlpha bene, anche oggi, ero curioso di sapere se ci fossero differenze di prestazioni
Cid

Hai misurato? Presumo che siano semplicemente sintassi alternativa, che non dovrebbe essere misurabile.
David Spector,

6

Se si utilizza la versione 5.3 o precedente, non è possibile utilizzare []sia un array che un array associativo. Se stai usando la versione 5.4 o successive di PHP, puoi usare array()o []per creare un array, un array associativo o anche un array multidimensionale.


1

E per quanto riguarda la <?= ?>parte della domanda: è in gran parte non è visto di buon occhio, almeno non nel 2019.

  1. Una buona ripartizione tecnica: /software/151661/is-it-bad-practice-to-use-tag-in-php
  2. Una nota in PSR-1 : i file DEVONO usare solo tag <?phpe <?=tag.
  3. TL; DR: non vi è alcun motivo per cui non si possa o non si debba usare.

-13

Usando php 7.2, per me sembra piuttosto che [I am a array] {I am a array sembra funzionare}. La differenza è tra {}e []. Il mio codice

<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
Dov'è il PHP? Stai scrivendo HTML.
domdambrogia,

1
Inoltre, le parentesi graffe NON funzioneranno per il caso richiesto da OP. Non è possibile creare un array con parentesi graffe, accedere solo agli elementi dell'array (dalla v5.4 fino ad ora - v7.3).
Aydin4ik,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.