2011-11-11 43 views
25

Tôi chỉ muốn đi qua một chút rất lạ của mã php:PHP dấu ngoặc nhọn trong ký hiệu mảng

$oink{'pig'} = 1; 
var_dump($oink); 

$oink{'pig'} = '123123'; 
echo $oink{'pig'}; /* => 123123 */ 
echo $oink['pig']; /* => 123123 */ 

Nó hoạt động như một mảng, nhưng không nơi nào đề cập trong cuốn hướng dẫn. Cái gì thế này?

+0

Xem thêm http://stackoverflow.com/q/335205/632951 – Pacerier

+0

@Jauzsika, nếu bạn quay lại, vui lòng chấp nhận [Câu trả lời của Pacerier] (https://stackoverflow.com/a/26809707/283366) vì nó có chất lượng tốt hơn nhiều. – Phil

Trả lời

1

Nó được đề cập trong cuốn hướng dẫn, nhưng nó che khuất:

http://www.php.net/manual/en/language.types.string.php#language.types.string.substr

Tóm lại, các dấu ngoặc nhọn truy cập chỉ là một nhân vật duy nhất (hãy thử thêm một chuỗi đầy đủ và bạn sẽ thấy nó chỉ trả về ký tự đầu tiên). Nó cũng không được chấp nhận, vì vậy tôi sẽ tránh sử dụng nó.

+3

Không đúng sự thật. Xem ví dụ của tôi. – Jauzsika

+1

Truy cập chuỗi dưới dạng một mảng tạo ra một ký tự. Ở đó, bạn cũng có thể sử dụng dấu ngoặc nhọn và ngoặc vuông thay thế cho nhau. –

4

Theo nhận xét này trên các tài liệu, nó chỉ là một ký hiệu, có lẽ được thiết kế để trông giống như cú pháp Perl: http://www.php.net/manual/de/language.types.array.php#99015

Cập nhật: Khi câu trả lời này ban đầu được đăng, hướng dẫn PHP không có bất kỳ chính thức thông tin về ký hiệu này. Tuy nhiên, vào năm 2014, nhận xét được đề cập ở trên đã bị xóa và, như Pacerier's answer says, ký hiệu đã được đề cập chính thức trong sách hướng dẫn.

26

được đề cập trong sách hướng dẫn. {} chỉ là một cú pháp thay thế cho []§:

Cả hai dấu ngoặc vuông và dấu ngoặc nhọn có thể được dùng thay thế cho nhau để truy cập vào các phần tử mảng (ví dụ $array[42]$array{42} sẽ cả hai làm điều tương tự trong ví dụ trên).

Cũng vậy các chuỗi §:

Nhân vật trong chuỗi có thể được truy cập và sửa đổi bằng cách xác định zero-based bù đắp của nhân vật mong muốn sau khi chuỗi sử dụng dấu ngoặc mảng vuông, như trong $str[42]. Hãy suy nghĩ về một chuỗi như một mảng các ký tự cho mục đích này. [...]

Lưu ý: Các chuỗi cũng có thể được truy cập bằng niềng răng, như trong $str{42}, cho cùng một mục đích.

+8

Một bazillions muộn, nhưng chỉ cần lưu ý rằng bạn có thể làm $ array [] để đẩy, nhưng bạn không thể làm $ array {} – Vertig0

+3

@ Vertig0, Yepp, hoán đổi cho nhau-ness là "để truy cập các phần tử mảng". – Pacerier

Các vấn đề liên quan