2010-05-04 37 views
7

Từ những gì tôi biết về PHP, cú pháp sau là không pháp lý:PHP chuỗi so sánh không có dấu ngoặc kép

if ($s == Yes) 

Nó thay vào đó nên được viết như sau:

if ($s == 'Yes') 

Tuy nhiên, là người đầu tiên ví dụ là làm việc tốt. Có ai biết tại sao không?

+0

Luôn phát triển PHP với TẤT CẢ báo cáo lỗi. Tất cả các thông báo vô hình làm chậm ứng dụng của bạn, và làm cho nó không thể sử dụng được cho những người khác đã không vô hiệu hoá báo cáo lỗi. –

Trả lời

13

Thông thường, nó sẽ được hiểu là hằng số, nhưng nếu PHP không thể tìm thấy hằng số theo tên đó, thì nó giả định nó là một chuỗi ký tự mặc dù thiếu dấu ngoặc kép. Điều này sẽ tạo ra một tin nhắn E_NOTICE (có thể không hiển thị, tùy thuộc vào mức báo cáo lỗi của bạn); cái gì đó như:

Chú ý: Sử dụng không xác định liên tục Có - giả 'Yes' trong script.php trên dòng 3

Về cơ bản, PHP chỉ là quá nhân hậu.

8

Tóm lại, PHP hoạt động như thể dấu ngoặc kép ở đó.

Nếu PHP không nhận ra thứ gì đó dưới dạng mã thông báo dành riêng, nó xử lý nó dưới dạng chuỗi ký tự.

Nhật ký lỗi sẽ hiển thị cảnh báo về việc này.

1

Đầu tiên không phải là chuỗi.

Và nó không phải là hoạt động tốt:

error_reporting(E_ALL); 
if ($s == Yes) {} 

Đó là một di sản từ thời khi PHP chỉ là một "Pretty trang nhà" hình thức thông dịch viên và khuyến khích mạnh mẽ hiện nay.

0

Trong PHP có, điều đó sẽ được coi là hằng số. Nếu hằng số không xác định, nó sẽ giả sử bạn có nghĩa là chuỗi 'Có'. Nó sẽ tạo ra một thông báo nếu bạn đã bật chúng.

1

Bạn cần phải có cả error_reporting hiển thị thông báo và display_errors được đặt.

error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors', '1'); 

if ($s == Yes) { 
    // foo 
} 
0

PHP chuyển đổi Có thành 'Có' nội bộ khi hằng số Có được tìm thấy không được xác định.

Btw .. Nếu những gì bạn muốn được so sánh nếu $ s "Yes" là giá trị một là một chuỗi sau đó bạn phải

a) sử dụng strcmp hoặc b) sử dụng toán tử sắc "=== "

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