2015-09-14 13 views
17

tôi có mã này:Tại sao chuỗi hoạt động như một mảng trong PHP 5.3?

$tierHosts['host'] = isset($host['name']) ? $host['name'] : $host; 

Nó làm việc tốt trong PHP 5.5, nhưng trong PHP 5.3 điều kiện trả về true khi $host chứa chuỗi như pjba01. Nó trả về chữ cái đầu tiên của $tierHosts['host'], nghĩa là, p.

Có gì sai với mã của tôi?

+2

Bạn có thể bỏ qua hành vi này bằng '(is_array ($ host) && isset ($ host [" name "]))'. Luôn kiểm tra loại bạn cần nếu không rõ loại bạn sẽ nhận được. Để biết thêm chi tiết về hành vi bạn mô tả, hãy xem câu trả lời của Rizier123s. – TobiasJ

+0

Nếu bạn quan tâm đến một số thứ khác có thể khiến bạn mất cảnh giác trong PHP, hãy đọc phần này. http://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/ – Almo

+1

Tại sao chuỗi hoạt động như một mảng ...? Bởi vì chúng là một mảng ... – SnakeDoc

Trả lời

23

You can access strings like an array và trước khi PHP 5.4 offsets như bạn name được âm thầm Casted đến 0, có nghĩa là bạn truy cập vào ký tự đầu tiên của chuỗi:

character | p | j | b | a | 0 | 1 | 
----------------------------------- 
index  | 0 | 1 | 2 | 3 | 4 | 5 | 

Sau 5.3 offsets như vậy sẽ ném một thông báo, như bạn cũng có thể đọc trong hướng dẫn sử dụng:

Khi cắt ngắn chuỗi PHP 5.4 phải là số nguyên hoặc chuỗi giống số nguyên, nếu không cảnh báo sẽ được ném. Trước đây, một khoản bù như "foo" được tự động chuyển thành 0.

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