Bạn có cần ngắt công tắc khi trả lại được sử dụng không?


110

Tôi đã tự hỏi liệu tôi có cần sử dụng "break" trong chức năng "switch" khi "return" được sử dụng hay không.

function test($string)
{
  switch($string)
  {
    case 'test1':
      return 'Test 1: ' . $string;
    case 'test2':
      return 'Test 2: ' . $string;
  }
}

Tôi đã thử nó và nó hoạt động tốt mà không có "break". Nhưng tôi cần biết điều này có an toàn không. Cảm ơn bạn.


1
điều gì sẽ xảy ra nếu $ string = 'testx';
Jagadeesan

Câu trả lời:


132

Có, bạn có thể sử dụng returnthay cho break...

breaklà tùy chọn và được sử dụng để ngăn chặn " rơi " qua tất cả các casecâu lệnh khác . Vì vậy, returncó thể được sử dụng theo cách tương tự, khi returnkết thúc việc thực thi chức năng.

Ngoài ra, nếu tất cả các casecâu lệnh của bạn như thế này:

case 'foo':
   $result = find_result(...);
   break;

Và sau switchcâu lệnh bạn vừa có return $result, việc sử dụng return find_result(...);trong mỗi câu lệnh casesẽ làm cho mã của bạn dễ đọc hơn nhiều.

Cuối cùng, đừng quên thêm defaulttrường hợp. Nếu bạn nghĩ rằng mã của bạn sẽ không bao giờ đạt được defaulttrường hợp đó thì bạn có thể sử dụng asserthàm, bởi vì bạn không bao giờ có thể chắc chắn.


Cảm ơn Luzhin, đó là những gì tôi nghĩ.
EMC


4

Không, nó không cần thiết, bởi vì khi trả về từ khóa được gọi, nó sẽ chỉ ra rằng chức năng cụ thể mà switch / case được gọi đã kết thúc.


3

Không, bạn không cần breakmột switch casetuyên bố. Thực breaksự là tùy chọn, nhưng hãy sử dụng một cách thận trọng.


2

Bạn không cần nó, nhưng tôi thực sự khuyên bạn nên sử dụng nó trong mọi trường hợp như một phương pháp tốt.


6
không có điểm, vì trả về rõ ràng tồn tại bởi nó tự thực thi =) Ít mã hơn là tốt hơn.
EMC

7
Ít mã hơn! = Tốt hơn. Đi chơi gôn mã. Tôi muốn có mã rõ ràng, dễ đọc hơn là mã được tối ưu hóa quá mức chỉ để nó có thể nằm trên một dòng với chi phí dễ đọc và dễ hiểu.
Martin Bean

3
Bạn có thể tranh luận điều này theo cả hai cách. Một số trình biên dịch cảnh báo về mã không thực thi được sau khi trả về trong một công tắc, một số thì không. Đó là sở thích cá nhân, và đối với tôi ít nhất nó có màu bởi bao nhiêu lần tôi bị cắn khi rơi qua công tắc, tôi thích nhìn thấy sự cố.
Harry

2

Break chỉ là một tuyên bố cảnh báo được sử dụng để hạn chế việc điều khiển cấu trúc chuyển mạch đi vào một trường hợp khác ... ví dụ: nếu bạn có ba câu lệnh trường hợp và giá trị dành cho trường hợp đầu tiên và bạn đã sử dụng trường hợp không có bất kỳ cấu trúc ngắt nào thì tất cả các trường hợp sau sẽ được thực thi mặc dù điều kiện chỉ được thỏa mãn trong trường hợp đầu tiên ... Return có thể thực hiện chức năng asme, vì vậy sẽ không có vấn đề gì nếu bạn sử dụng return thay cho break vì return sẽ mất quyền kiểm soát câu lệnh switch case đó là nhu cầu tại thời điểm đó ...... hy vọng nó sẽ giúp ....


1

return đưa điều khiển trở lại phương thức gọi, khi break chuyển đến lệnh đầu tiên sau khối switch.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.