2011-01-11 49 views
14

Tôi đã tự hỏi sự khác biệt giữa elseifelse if.sự khác biệt cơ bản giữa elseif và khác nếu

Tôi đã đọc the manual cho biết nếu sử dụng niềng răng {} chúng được xử lý giống nhau nhưng chỉ elseif hoạt động khi không sử dụng niềng răng.

Cũng contributer khác nói:

Lưu ý rằng} elseif() {có phần nhanh hơn} else if() {

và ông ủng hộ nó lên với một thử nghiệm benchmark.

Đối với tôi nó có vẻ như elseif là cách đúng để nói nó và nói:

else if() {...} 

thực sự là tương đương với:

else { if() {...} } 

mà có thể giải thích tại sao nó nhẹ chậm.

Tôi đã từng sử dụng else if vì đó là cách tôi cũng làm như vậy bằng các ngôn ngữ khác. Tôi không thực sự nghĩ rằng nó quan trọng theo cách bạn gõ nó (trừ khi bạn không sử dụng niềng răng .. nhưng tôi nghĩ rằng nó luôn luôn tốt để sử dụng niềng răng anyways) Tôi chỉ tò mò về các chi tiết cơ bản.

Tôi có đúng không?

+3

Xem câu trả lời cho câu hỏi này: http://stackoverflow.com/questions/3662412/are-elseif-and-else-if-completely-synonymous Không che hiệu suất nhưng có thể * đề nghị * rằng PHP xử lý 'else if' là' else {if} '. – BoltClock

+0

Câu hỏi này chắc chắn là bản dupe của bản gốc. –

+2

Có thể trùng lặp của [Là "elseif" và "else if" hoàn toàn đồng nghĩa?] (Http://stackoverflow.com/questions/3662412/are-elseif-and-else-if-completely-synonymous) – Kuttoozz

Trả lời

7

Ngoài nhận xét của tôi, từ những gì tôi có thể thấy trong nguồn PHP, tốc độ tăng tốc duy nhất là trình phân tích cú pháp của PHP có mã thông báo đặc biệt cho elseif, không được ngạc nhiên là T_ELSEIF. Nhưng tôi chắc chắn rằng việc tăng tốc độ là gì khác hơn là một tác dụng phụ của việc cho phép elseif trong cú pháp thay thế:

if (cond1): 
    // Do something 
elseif (cond2): 
    // Do something else 
else: 
    // Do something else 
endif; 

Tương tự như Python, trong đó sử dụng elif, else if với một không gian sẽ không được phép mà không cần phải làm phức tạp không cần thiết mã thực thi của trình phân tích cú pháp (tức là hành động khác nhau giữa việc nhìn thấy dấu hai chấm và từ khóa if). Vì vậy, một dấu hai chấm được yêu cầu trực tiếp sau elseif tương ứng, và đó là cách quy tắc ngôn ngữ được quy định.

Ergo Tôi khá chắc chắn PHP chỉ xử lý else if làm khối điều kiện trong tuyên bố số ít else.

Nếu có bất kỳ sự khác biệt về tốc độ ở tất cả, đổ lỗi cho trình phân tích cú pháp cho hầu hết trong số chúng.

+0

Và, nếu tôi không sai, PHP không nên quan tâm đến không gian nào cả. – Shoe

+0

@Charlie Pigarelli: Khoảng trắng không phải là một vấn đề, đó là thực tế là cú pháp thay thế Python và PHP bị nghẹt thở khi nhìn thấy 'if' thay vì dấu hai chấm sau' else'. – BoltClock

1

"Sự khác biệt về tốc độ" trong nhận xét đó không có ý nghĩa thống kê. Ngoài else if: không phân tích cú pháp, không có sự khác biệt hiệu quả.

0

Về hiệu quả và dựa trên những gì tôi đã học trong một thời gian dài. Không có sự khác biệt.

+2

Cũng có thể chia sẻ kết quả của bạn để xác nhận. – Aziz

4

Trong Manual tôi đọc ra (Xem Ghi chú):

Lưu ý: Lưu ý elseif đó và else if sẽ chỉ được xem xét một cách chính xác các tương tự khi sử dụng dấu ngoặc nhọn như trong ví dụ trên. Khi sử dụng dấu hai chấm để xác định các điều kiện if/elseif của bạn, bạn không được tách riêng khác nếu thành hai từ hoặc PHP sẽ không thành công với lỗi phân tích cú pháp.

Ví dụ:

<?php 

/* Incorrect Method: */ 
if($a > $b): 
    echo $a." is greater than ".$b; 
else if($a == $b): // Will not compile. 
    echo "The above line causes a parse error."; 
endif; 


/* Correct Method: */ 
if($a > $b): 
    echo $a." is greater than ".$b; 
elseif($a == $b): // Note the combination of the words. 
    echo $a." equals ".$b; 
else: 
    echo $a." is neither greater than or equal to ".$b; 
endif; 

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