PHP Unterschied zwischen array () und []


148

Ich schreibe eine PHP-App und möchte sicherstellen, dass sie fehlerfrei funktioniert.

Der Originalcode:

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

echo form_input($data);
?>

Würde das Folgende fehlerfrei funktionieren oder wird es aus irgendeinem Grund nicht empfohlen?

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

Gibt es einen Unterschied?

Ich habe mir die Daten array()und die Short-Array-Methode mit eckigen Klammern []in PHP.net noch einmal angesehen, bin mir aber nicht sicher.

Und ist das kurze PHP-Tag auch <?= ?>gut für das Echo? Gibt es ein Versionsproblem? (vorausgesetzt, ist in php.ini aktiviert)


1
Die kurze Array-Syntax wurde in PHP 5.4 eingeführt. Es gibt keinen Unterschied und die alte Methode wird nicht entfernt, sodass die Verwendung auch sicher ist. Kurze Tags sind normalerweise verpönt, ich würde sie nicht verwenden.
JimL

2
Tks, gibt es einen Hinweis / Grund, warum Sie keine PHP-Short-Tags verwenden?
Mr.Web

7
Obwohl <? =?> Eigentlich keine Shorttags sind, werden sie mit den Standard-Shorttags afaik nicht deaktiviert, sodass sie für einfache Echos in Ordnung sein sollten.
Alexander Varwijk


1
Interessantes Lesen auf <? =?> Tags. Laut einem der Kommentare "Rasmus Lerdorf selbst hat das sehr begangen" programmers.stackexchange.com/questions/151661/…
johnsnails

Antworten:


223

Folgendes []wird in PHP> = 5.4 unterstützt:

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

Dies ist nur eine kurze Syntax und in PHP <5.4 funktioniert sie nicht .


Es scheint, dass 5.3.24 diese Syntax ebenfalls unterstützt. (konnte nicht direkt bestätigen)
Alberto

3
Ist dir ein Unterschied?
Ali Akbar Azizi

26
@CooPer, Nein, es sei denn, Sie zählen die Schreiblänge.
Die Alpha

7
Ich wollte eine Referenz und fand this- php.net/manual/en/language.types.array.php - "Ab PHP 5.4 können Sie auch die kurze Array-Syntax verwenden, die array () durch [] ersetzt."
Mrwaim

1
@ Prof83, Sie können die $data = new stdClass();$data->someProp = 'someValue';Verwendung der PHPStandardklasse und $obj = (object) ['foo'=>'bar', 'baz'=>'biz'];die Konvertierung eines Arrays (mit expliziter Typumwandlung) in ein Objekt (stdClass) verwenden, aber in Bezug auf das {}könnte es in Zukunft implementiert werden, aber nicht sicher, ob :-)
The Alpha

19

Ab 2019 sind 7 Jahre vergangen, seit die []Syntax hinzugefügt wurde. Das ist array()meiner Meinung nach lang genug, um außer in alten Legacy-Programmen zu fallen .


3
@ TheAlpha Nun, auch heute war ich neugierig zu wissen, ob es Leistungsunterschiede gab
Cid

Hast du gemessen? Ich gehe davon aus, dass es sich lediglich um eine alternative Syntax handelt, die nicht messbar sein sollte.
David Spector

5

Wenn Sie 5.3 oder eine frühere Version verwenden, können Sie diese nicht []als Array sowie als assoziatives Array verwenden. Wenn Sie PHP 5.4 oder höher verwenden, können Sie entweder array()oder []ein Array, ein assoziatives Array oder sogar ein mehrdimensionales Array erstellen.


1

Und was den <?= ?>Teil der Frage betrifft: Es wird größtenteils nicht verpönt, zumindest nicht im Jahr 2019.

  1. Eine gute technische Aufschlüsselung: /software/151661/is-it-bad-practice-to-use-tag-in-php
  2. Ein Hinweis in PSR-1 : Dateien MÜSSEN nur verwenden <?phpund <?=Tags.
  3. TL; DR: Es gibt keinen Grund, warum Sie es nicht verwenden können oder sollten.

-12

Mit PHP 7.2 scheint es mir eher als [Ich bin ein Array] {Ich bin ein Array scheint zu funktionieren}. Der Unterschied ist zwischen {}und []. Mein Code

<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
Wo ist das PHP? Sie schreiben HTML.
Domdambrogia

1
Außerdem funktionieren geschweifte Klammern NICHT für den Fall, nach dem OP gefragt hat. Sie können kein Array mit geschweiften Klammern erstellen, sondern nur auf die Array-Elemente zugreifen (seit Version 5.4 bis jetzt - Version 7.3).
Aydin4ik
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.