2015-03-26 13 views
32

Tôi rất ngạc nhiên khi tôi chạy đoạn mã sau trong trình soạn thảo của tôi:Tại sao dấu chấm phẩy tùy chọn trong câu lệnh cuối cùng trong php?

<?php 

    echo "hello"; 
    echo "world" 

?> 

Như bạn có thể thấy, các mã thiếu một dấu chấm phẩy (;), nhưng nó vẫn hoạt động!

Có ai biết cách thức hoạt động và lý do tại sao; là {0,1} ở đây ?.

+24

Vì đặc tả ngôn ngữ cho biết. – Quentin

+3

Điều này tương tự như cách Pascal không yêu cầu dấu chấm phẩy trên dòng cuối cùng trước một 'kết thúc;' hoặc 'kết thúc'. – Schism

+7

@Schism Tôi có thể nhầm lẫn nhưng tôi tin Pascal không sử dụng câu lệnh * terminators * nhưng * separators *; nói cách khác bạn * không thể * đặt dấu chấm phẩy cuối cùng; dấu chấm phẩy chỉ được sử dụng hai câu lệnh riêng biệt. Xem [tại đây] (http://en.wikipedia.org/wiki/Pascal_%28programming_language%29#Semicolons_as_statement_separators). Tuy nhiên, các phiên bản mới hơn cho phép dấu chấm phẩy kết thúc, nhưng nó là tùy chọn chính xác vì tiêu chuẩn trước đó bắt buộc sự vắng mặt của nó. – Bakuriu

Trả lời

66

Vì thẻ đóng ngụ ý dấu chấm phẩy. Bạn có thể đọc thêm về điều này trong hướng dẫn sử dụng theo Instruction separation.

Và báo giá từ đó:

As in C or Perl, PHP requires instructions to be terminated with a semicolon at the end of each statement. The closing tag of a block of PHP code automatically implies a semicolon; you do not need to have a semicolon terminating the last line of a PHP block. The closing tag for the block will include the immediately trailing newline if one is present.

Một ví dụ để chứng minh điều này:

1. kịch bản với dấu chấm phẩy mất tích ở cuối, nhưng với thẻ đóng:

<?php 
    echo "1"; 
    echo "2" 
      //^ semicolon missing 
?> 

đầu ra :

12 

2. kịch bản với dấu chấm phẩy mất tích ở cuối, nhưng không có thẻ đóng:

<?php 
    echo "1"; 
    echo "2" 
      //^ semicolon missing (closing tag missing) 

đầu ra:

Parse error: syntax error, unexpected end of file, expecting ',' or ';' in

13

Bởi vì dấu chấm phẩy kể phân tích cú pháp mà bạn đã đạt đến kết thúc giảng dạy đó. Nó cho phép nó biết rằng đoạn văn bản tiếp theo là một hướng dẫn mới. Tuy nhiên thẻ đóng cho biết rằng chúng tôi đang ở cuối tất cả các hướng dẫn, bạn không cần phải phân tích cú pháp bất kỳ điều gì khác. Bởi vì chúng ta không phân tích cú pháp gì khác, chúng ta không cần kết thúc dấu chấm phẩy lệnh, nó được ngụ ý.

3

Đó là vì dấu chấm phẩy không phải là biểu tượng để chấm dứt tuyên bố.

Dường như điều đó xảy ra hầu như lúc nào cũng ở cuối câu lệnh.

Lưu ý hầu như luôn luôn ... có thể là gợi ý.

Cố gắng loại bỏ sự không đối xứng, chúng tôi có thể nói là luôn luôn giữa các câu lệnh!

Điều đó dẫn trực tiếp đến ý nghĩa thực sự của dấu chấm phẩy: nó không chấm dứt các câu lệnh - nó phân tách các câu lệnh.
Rõ ràng, sau tuyên bố cuối cùng, không có gì để tách biệt.


(Hầu hết các ngôn ngữ cho phép một dấu chấm phẩy ở cuối của một khối dù sao, để ngăn chặn các lỗi nhỏ liên quan. Nó có thể được thực hiện bằng cách loại bỏ các dấu chấm phẩy, hoặc, rõ ràng hơn, bằng cách chèn một lệnh mà không làm gì sau khi dấu chấm phẩy.)

+6

Chỉ cần đọc dòng đầu tiên trong [manual] (http://php.net/manual/en/language.basic-syntax.instruction-separation.php) Và một trích dẫn từ đó: 'Như trong C hoặc Perl, PHP yêu cầu hướng dẫn được' ** chấm dứt ** 'bằng dấu chấm phẩy ở cuối mỗi câu lệnh.' – Rizier123

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