PHP ความแตกต่างระหว่าง array () และ []


148

ฉันกำลังเขียนแอพ PHP และฉันต้องการให้แน่ใจว่ามันจะทำงานได้โดยไม่มีข้อผิดพลาด

รหัสเดิม:

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

echo form_input($data);
?>

งานต่อไปนี้ไม่มีข้อผิดพลาดหรือไม่แนะนำด้วยเหตุผลบางประการ

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

มีความแตกต่างหรือไม่?

ฉันได้ตรวจสอบข้อมูลเกี่ยวกับarray()วิธีอาร์เรย์แบบสั้นอีกครั้งด้วยวงเล็บเหลี่ยม[]ใน PHP.net แต่ฉันไม่แน่ใจ

และยังเป็นแท็ก php สั้น ๆ ที่<?= ?>ดีสำหรับการสะท้อน? มีรุ่นใดหรือไม่ (ที่มีให้ถูกเปิดใช้งานใน php.ini)


1
มีการแนะนำไวยากรณ์ของอาร์เรย์แบบสั้นใน PHP 5.4 ซึ่งไม่มีความแตกต่างและวิธีเก่าจะไม่ถูกลบดังนั้นจึงปลอดภัยที่จะใช้ แท็กสั้น ๆ มักจะขมวดคิ้วเมื่อฉันจะไม่ใช้มัน
JimL

2
ขอบคุณอ้างอิง / เหตุผลใดที่ไม่ใช้แท็กสั้น php?
Mr.Web

7
แม้ว่า <? =?> จะไม่ได้รับการพิจารณาว่าเป็น Shorttags จริง ๆ แต่ก็ไม่ได้ถูกปิดใช้งานด้วย shorttags มาตรฐานดังนั้นจึงควรปรับให้เหมาะกับเสียงสะท้อนแบบง่าย
Alexander Varwijk

2
ดูphp.net/manual/en/ini.core.php#ini.short-open-tag
str

1
อ่านน่าสนใจในแท็ก <? =?> ตามที่หนึ่งในความคิดเห็น "Rasmus Lerdorf ตัวเองทำอย่างนั้นมุ่งมั่นมาก" programmers.stackexchange.com/questions/151661/…
johnsnails

คำตอบ:


223

ต่อไป[]นี้ได้รับการสนับสนุนใน PHP> = 5.4:

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

นี่คือไวยากรณ์สั้น ๆ เท่านั้นและในPHP <5.4 มันจะไม่ทำงาน


ดูเหมือนว่า 5.3.24 สนับสนุนไวยากรณ์นี้เช่นกัน (ไม่สามารถยืนยันได้โดยตรง)
Alberto

3
เจ้าแตกต่างอะไรเหรอ?
Ali Akbar Azizi

26
@CooPer, ไม่เว้นแต่คุณจะนับความยาวการพิมพ์
อัลฟ่า

7
ฉันต้องการการอ้างอิงและพบสิ่งนี้ - php.net/manual/en/language.types.array.php - "ตั้งแต่ PHP 5.4 คุณยังสามารถใช้ไวยากรณ์อาร์เรย์แบบสั้นซึ่งแทนที่ array () ด้วย []"
mrwaim

1
@ Prof83 คุณสามารถใช้$data = new stdClass();$data->someProp = 'someValue';โดยใช้PHPคลาสมาตรฐานและ$obj = (object) ['foo'=>'bar', 'baz'=>'biz'];แปลงอาร์เรย์ (โดยใช้การคัดเลือกประเภทที่ชัดเจน) เป็นวัตถุ (stdClass) แต่เกี่ยวกับ{}มันสามารถนำมาใช้ในอนาคต แต่ไม่แน่ใจว่า:
The Alpha

19

ตั้งแต่ปี 2019 เป็นเวลา 7 ปีแล้วที่[]มีการเพิ่มไวยากรณ์ มันยาวพอที่จะดร็อปarray()ยกเว้นในโปรแกรมรุ่นเก่าในความคิดของฉัน


3
@ TheAlpha ดีแม้วันนี้ฉันอยากรู้ว่ามีความแตกต่างในการทำงานหรือไม่
Cid

คุณวัดหรือไม่ ฉันคิดว่ามันเป็นเพียงรูปแบบทางเลือกซึ่งไม่ควรวัดได้
David Spector

6

หากคุณใช้ 5.3 หรือเวอร์ชันก่อนหน้าคุณจะไม่สามารถใช้[]เป็นอาร์เรย์รวมถึงอาร์เรย์ที่เชื่อมโยงได้ หากคุณใช้ PHP เวอร์ชั่น 5.4 ขึ้นไปคุณสามารถใช้array()หรือ[]สร้างอาเรย์อาเรย์แบบเชื่อมโยงหรืออาเรย์หลายมิติได้


1

และเกี่ยวกับ<?= ?>ส่วนของคำถาม: ส่วนใหญ่ไม่ได้ขมวดคิ้วอย่างน้อยในปี 2019

  1. การวิเคราะห์ทางเทคนิคที่ดี: /software/151661/is-it-bad-practice-to-use-tag-in-php
  2. หมายเหตุในPSR-1 : ไฟล์ต้องใช้อย่างเดียว<?phpและติด<?=แท็ก
  3. TL: ไม่มีเหตุผลที่คุณไม่สามารถหรือไม่ควรใช้

-12

เมื่อใช้ php 7.2 แล้วสำหรับฉันดูเหมือนว่า [ฉันเป็นอาร์เรย์] {ฉันเป็นอาร์เรย์ดูเหมือนจะใช้งานได้} ความแตกต่างอยู่ระหว่างและ{} []รหัสของฉัน

<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
PHP อยู่ที่ไหน คุณกำลังเขียน HTML
domdambrogia

1
การจัดฟันแบบหยิกจะไม่ทำงานในกรณีที่ OP ถาม คุณไม่สามารถสร้างอาร์เรย์ด้วยเครื่องหมายปีกกาเข้าถึงเฉพาะองค์ประกอบอาร์เรย์ (ตั้งแต่ v5.4 จนถึงตอนนี้ - v7.3)
Aydin4ik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.