+7

Vài thứ hơi lạ trong PHP

Mở đầu

Dạo gần đây mình hay được tiếp xúc với mấy câu hỏi cơ bản lẫn xoắn não về PHP. Đúng thật là nếu không tìm hiểu kỹ thì khó mà có thể trả lời được. Và khi tìm hiểu rồi thì thấy PHP thật là... không biết dùng từ gì để miêu tả luôn =)) Theo các bạn thì "01e4""001e4" có bằng (==) nhau không?

"01e4""001e4"

Chúng ta bắt đầu với một cái gì đó đơn giản và không gây tranh cãi. Nếu bạn có hai chuỗi chứa một số ký tự khác nhau, tất nhiên là chúng không thể được coi là bằng nhau. Các số 0 ở đầu 2 chuỗi được tính vào chuỗi và nó vẫn được coi là quan trọng vì đây là string chứ không phải number. Và do đó "01a4" != "001a4" trả về true.

Vậy thì với "01e4" == "001e4" thì kết quả sẽ như thế nào? Người ta bảo, PHP không thích string, nó sẽ tìm kiếm bất kỳ lý do gì nó có thể tìm thấy để xử lý các giá trị của bạn như là những con số. Và nó đã tìm thấy lý do ở đây, 0, 1, 4, e nó coi là các ký tự trong hệ hexadecimal. Từ đây 2 string trên không còn là string nữa 😃)) mà nó là số trong ký hiệu khoa học (numbers in scientific notation). Nó cũng không quan tâm đến chuyện bạn đã sử dụng dấu quotes để cho nó biết đây là string. Do đó, "01e4" == "001e4" sẽ trả về true vì số 0 ở đầu sẽ chẳng có tác dụng gì vì nó đang là number mà. Thử với "01e4" == "10000" cũng cho kết quả tương tự vì đây là 2 con số tương đương nhau. Không tin à? 😄

17017

Có thể là 18 và 018 hoặc 99 và 099.... nhưng tự nhiên nghĩ ra con số này thì dùng làm ví dụ thôi. Thế theo các bạn thì 17017 có bằng nhau không??? Thử luôn nhé :v Có cái gì đó sai sai ở đây =)) không phải máy tính của tớ hỏng đâu, mà đúng là như vầy đó. Ở đây không phải là string nữa mà là number cmnr, và đối với PHP mà number có số 0 ở đầu thế này, nó coi là số trong hệ octal, và 017 trong hệ octal sẽ là 15 trong hệ decimal, nhìn nè:

Thế còn "0017"0017

Thật khốn nạn ở chỗ, trong thì nó không tự động chuyển ký tự có số 0 ở đầu sang octal như nó đã chuyển string ở ví dụ trên sang hexa, thế nên ta có "0017"0017 không bằng nhau 😃))

"0x001e4"0x01e4

Thế khi chúng ta cố tình bảo cho PHP là string này chứa số hệ hexa thì nó làm gì? Có vẻ không như chúng ta nghĩ 😃))

Kết Luận

  • Còn có nhiều điều mà chúng ta cần khám phá về PHP, và chúng ta sẽ thấy nó rất thú vị.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.