2008-12-02 67 views
26

Trong PHP, bạn có thể truy cập các ký tự của chuỗi theo một vài cách khác nhau, một trong số đó là substr(). Bạn cũng có thể truy cập ký tự thứ N trong một chuỗi có dấu ngoặc nhọn hoặc dấu ngoặc vuông, như vậy:

$string = 'hello'; 

echo $string{0}; // h 
echo $string[0]; // h 

Câu hỏi của tôi là, có lợi ích gì hơn cái kia không? Sự khác nhau giữa {} và [] là gì?

Cảm ơn.

Trả lời

36

sử dụng $string[0], các phương pháp khác (niềng răng) đang được tán thành trong PHP6 (src)

Lưu ý: Strings cũng có thể được truy cập bằng niềng răng, như trong $ str {42}, với mục đích tương tự. Tuy nhiên, cú pháp này không được sử dụng như của PHP 6. Sử dụng dấu ngoặc vuông để thay thế.

+0

Việc sử dụng {} làm phương pháp đánh giá cũng sẽ bị xóa không? Ví dụ: $ {$ dynamic_object_name} -> doStuff() – Jay

+0

không, tôi tin rằng mục tiêu của họ là chỉ chuẩn hóa truy cập chuỗi dưới dạng mảng. – Owen

+13

Để tham khảo trong tương lai, tôi muốn lưu ý rằng dòng về cú pháp xoăn không được chấp nhận đã bị xóa khỏi tài liệu khoảng 3 năm trước có nghĩa là nó sẽ không bị phản đối bất kỳ lúc nào, nếu có. – Webmut

18

There is no difference. câu trả lời của Owen là lỗi thời, phiên bản mới nhất của PHP Manual không còn nói rằng nó bị phản đố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 ký tự mong muốn sau chuỗi sử dụng dấu ngoặc vuông vuông, như trong $str[42]. Hãy suy nghĩ của một chuỗi như là một mảng của 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.

Tuy nhiên có vẻ như nhiều người/dự án sử dụng [] và nhiều người thậm chí không biết {} là có thể. Nếu bạn cần chia sẻ mã của mình công khai hoặc với những người không biết cú pháp cú đúp xoăn, thì có thể có lợi khi sử dụng [].

2

Có, không có sự khác biệt. những đứa ngôn ngữ này có một số lịch sử ...

Nguyên, cú pháp cú đúp xoăn được dự định để thay thế cho cú pháp khung vuông được sẽ được chấp nhận:

http://web.archive.org/web/20010614144731/http://www.php.net/manual/en/language.types.string.php#language.types.string.substr.

Sau đó chính sách đã bị đảo ngược, và cú pháp dấu ngoặc vuông được ưa thích thay vì:

http://web.archive.org/web/20060702080821/http://php.net/manual/en/language.types.string.php#language.types.string.substr

và thậm chí sau đó, dấu ngoặc nhọn ai sẽ được chấp nhận:

http://web.archive.org/web/20080612153808/http://www.php.net/manual/en/language.types.string.php#language.types.string.substr

Theo văn bản này, có vẻ như việc ngừng sử dụng cũng đã được rút ra và chúng chỉ được coi là hai cú pháp thay thế:

http://web.archive.org/web/20160607224929/http://php.net/manual/en/language.types.string.php#language.types.string.substr