2011-06-02 39 views
6

Nó xảy ra, khi viết một số mã PHP, tôi vô tình đặt một dấu chấm phẩy ; ngay sau một câu lệnh if. Ví dụ:Điều gì sẽ xảy ra nếu(); làm gì, trong đó dấu chấm phẩy là ngay sau dấu ngoặc đơn?

if($a > 1); 
{ 
    .... 
} 

Tôi nghĩ rằng PHP nên nêu ra lỗi trong trường hợp này, nhưng không phải vậy. Đó là loại cú pháp nên có một ý nghĩa, tôi chỉ tự hỏi nó là gì.

Đối với những gì tôi có thể thấy điều kiện có vẻ luôn đúng khi số ; được thêm vào nhưng tôi không chắc chắn về tất cả điều này là ý nghĩa.

+0

Nó hoạt động không phải vì nó có mục đích thiêng liêng, nhưng nó có ý nghĩa từ quan điểm ngữ pháp (hoặc ít nhất là không gây ra khó khăn phân tích cú pháp). Đôi khi các vòng lặp 'for' không cần nội dung, mặc dù tôi muốn nó được viết như' for ($ a; $ b; $ c) {} 'với dấu ngoặc nhọn. – Matthew

Trả lời

14

Một đơn ; có thể được đọc như một "tuyên bố trống rỗng" và

if($a > 1); 
{ 
    .... 
} 

tương đương với

if($a > 1) 
    ;  // execute an empty statement if $a > 1 

// then execute the following block of code. 
{ 
    .... 
} 


Đối với những gì tôi có thể thấy tình trạng này dường như luôn đúng khi ; được thêm

Nó chỉ có vẻ như là vì khối được thực hiện bất kể câu lệnh if.

+1

Tôi nghĩ rằng anh ấy cũng hỏi tại sao 'if ($ a> 1);' tự nó * thậm chí nên là * cú pháp hợp lệ, và nếu có, mục đích của nó sẽ phục vụ. Chỉnh sửa: Hoặc có thể đó không phải là những gì anh ta yêu cầu, nhưng tôi thấy đó là một câu hỏi thú vị hơn, dù sao đi nữa. :) –

+0

đó là lý do tại sao mã giữa các bộ đệm luôn được thực hiện, nhờ có phản hồi nhanh như vậy – Dalen

+0

@Dalen, bạn đã hiểu. – aioobe

1

Thêm dấu chấm phẩy cơ bản kết thúc khối nếu trước dấu ngoặc. Nó không phải là sự thật, nó chỉ là bạn không làm bất cứ điều gì trong nếu.

Hãy suy nghĩ về nó như thế này, nếu bạn không có dấu ngoặc:

if($a>1) 
    echo "Yes"; 
echo "No"; 

làm mọi thứ trước dấu chấm phẩy đầu tiên bên trong nếu. Vì vậy, trong trường hợp của bạn, không có gì trước khi bán kết đầu tiên, vì vậy không có gì xảy ra.

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