Sự khác biệt của PHP giữa mảng () và []


148

Tôi đang viết một ứng dụng PHP và tôi muốn chắc chắn rằng nó sẽ hoạt động không có lỗi.

Mã ban đầu:

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

echo form_input($data);
?>

Các công việc sau đây không có lỗi hoặc không được khuyến nghị vì một số lý do?

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

Có sự khác biệt nào không?

Tôi đã xem lại dữ liệu về array()và phương pháp mảng ngắn với dấu ngoặc vuông []trong PHP.net nhưng tôi không chắc chắn.

Và ngoài ra, thẻ php ngắn có <?= ?>tốt cho tiếng vang không? Có bất kỳ vấn đề phiên bản? (cung cấp được kích hoạt trong php.ini)


1
Cú pháp mảng ngắn đã được giới thiệu trong PHP 5.4, không có sự khác biệt và phương thức cũ sẽ không bị xóa, vì vậy nó cũng an toàn khi sử dụng. Các thẻ ngắn thường được tán thành, tôi sẽ không sử dụng chúng.
JimL

2
Tks, bất kỳ tài liệu tham khảo / lý do về việc không sử dụng thẻ ngắn php?
Mr.Web 21/07/13

7
Mặc dù <? =?> Không thực sự được coi là shorttags, nhưng chúng không bị vô hiệu hóa với shorttags tiêu chuẩn afaik vì vậy chúng sẽ ổn cho tiếng vang đơn giản.
Alexander Varwijk


1
Thú vị đọc trên các thẻ <? =?>. Theo một trong những ý kiến ​​"Bản thân Rasmus Lerdorf đã cam kết" lập trình
viên.stackexchange.com /questions / 151661 / Lỗi

Câu trả lời:


223

Theo dõi []được hỗ trợ trong PHP> = 5,4:

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

Đây chỉ là một cú pháp ngắn và trong PHP <5.4 nó sẽ không hoạt động .


Có vẻ như 5.3.24 cũng hỗ trợ cú pháp này. (không thể xác nhận trực tiếp)
Alberto

3
Bạn có khác biệt gì không?
Ali Akbar Azizi

26
@CooPer, Không, trừ khi bạn đếm chiều dài gõ.
Alpha

7
Tôi muốn có một tài liệu tham khảo và tìm thấy cái này- php.net/manual/en/lingu.types.array.php - "Kể từ PHP 5.4, bạn cũng có thể sử dụng cú pháp mảng ngắn, thay thế mảng () bằng []."
mrwaim

1
@ Prof83, Bạn có thể sử dụng sử $data = new stdClass();$data->someProp = 'someValue';dụng PHPlớp tiêu chuẩn và $obj = (object) ['foo'=>'bar', 'baz'=>'biz'];để chuyển đổi một mảng (sử dụng kiểu truyền rõ ràng) sang một đối tượng (stdClass) nhưng liên quan đến {}, nó có thể được triển khai trong tương lai nhưng không chắc chắn tho :-)
Alpha

19

Tính đến năm 2019, đã 7 năm kể từ khi []cú pháp được thêm vào. Đó là đủ dài để giảm array()trừ trong các chương trình cũ, theo ý kiến ​​của tôi.


3
@TheAlpha tốt, ngay cả hôm nay, tôi đã tò mò muốn biết liệu có sự khác biệt về hiệu suất hay không
Cid

Bạn đã đo? Tôi giả sử chúng chỉ đơn giản là cú pháp thay thế, không nên đo lường được.
David Spector

6

Nếu bạn đang sử dụng phiên bản 5.3 hoặc phiên bản trước thì bạn không thể sử dụng []như một mảng cũng như mảng kết hợp. Nếu bạn đang sử dụng phiên bản PHP 5.4 trở lên thì bạn có thể sử dụng array()hoặc []để tạo một mảng, mảng kết hợp hoặc thậm chí là mảng đa chiều.


1

Và liên quan đến <?= ?>một phần của câu hỏi: phần lớn không được tán thành, ít nhất là không phải vào năm 2019.

  1. Sự cố kỹ thuật tốt: /software/151661/is-it-bad-practice-to-use-tag-in-php
  2. Một lưu ý trong PSR-1 : Tệp PHẢI chỉ sử dụng <?php<?=thẻ.
  3. TL; DR: Không có lý do gì bạn không thể hoặc không nên sử dụng nó.

-12

Sử dụng php 7.2, đối với tôi có vẻ như sau đó [Tôi là một mảng] {Tôi là một mảng dường như hoạt động}. Sự khác biệt là giữa {}[]. Mã của tôi

<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 ở đâu? Bạn đang viết HTML.
domdambrogia

1
Ngoài ra, niềng răng xoăn sẽ KHÔNG hoạt động cho trường hợp mà OP yêu cầu. Bạn không thể tạo một mảng với các dấu ngoặc nhọn, chỉ truy cập các phần tử mảng (kể từ v5.4 đến nay - v7.3).
Aydin4ik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.