PHP:Tại sao === lại nhanh hơn ==
Bài từ dự án mở Ứng dụng mẫu.
|
=== có nghĩa là đồng nhất.
== có nghĩa là bằng, theo giá trị.
Ví dụ: Kết quả là FALSE
- $a = 123;
- $b = '123';
- if($a === $b)
- {
- exit('TRUE');
- }
- else
- {
- exit('FALSE');
- }
Nếu ta thay == thành === thì kết quả sẽ là FALSE, lỳ do là vì: kiểu dữ liệu không giống nhau mặc dù giá trị là bằng nhau.
Đặt mình vào vị trí của người tạo ngôn ngữ PHP (tức là viết bằng C), việc so sánh sẽ như sau:
- Lấy kiểu dữ liệu và giá trị của phần tử bên trái
- Nếu là đồng nhất (===) thì so sánh ngay với giá trị của phần tử bên phải
- Nếu là bằng (==) thì phải gọi hàm để kiểm tra kiểu hoặc có thể thao tác chuyển dữ liệu của phần tử bên phải. Như vậy sẽ tốn thêm thời gian cho việc kiểm tra dữ liệu. Với trường hợp trong ví dụ, $a sẽ là kiểu int, sau đó, phải thực hiện thao tác chuyển kiểu của $b sang int
Ngoài ra, đồng nhất còn có ích trong trường hợp dùng hàm strpos(): kết quả là TRUE
- $a = '#123';
- if(strpos($a, '#') !== false)
- {
- exit('TRUE');
- }
- else
- {
- exit('FALSE');
- }
Nếu thay đổi !== thành != thì kết quả sẽ không đúng như ý muốn. Ngay trong trường hợp này, kí tự # nằm đầu tiên, giá trị của vị trí sẽ là 0. Trong PHP, 0 là FALSE!
Thảm khảo: PHP Operators Comparison


