2012-07-15 27 views
7

Thấy exit()PHP documentation tôi đã suy nghĩ:Tại sao nếu/else so với hoặc/thoát trong PHP?

câu hỏi
$filename = '/path/to/data-file'; 
$file = fopen($filename, 'r') 
or exit("unable to open file ($filename)"); 

Couple:

  1. gì những trường hợp sử dụng chung bên cạnh mở tập tin cho việc sử dụng exit()?
  2. Vì không phải mọi chức năng mà mọi người từng viết đều kết thúc bằng số exit(), làm thế nào để bạn biết sử dụng nó trong một số ngữ cảnh so với các ngữ cảnh khác?
  3. Có phải if/elseor/exit có thể hoán đổi cho nhau không?
+4

Chúng đã sử dụng 'hoặc thoát' vì bạn đang xem ví dụ về' thoát'. – Gumbo

+0

@Gumbo, tôi đã chỉnh sửa câu hỏi của mình để xóa phần không hợp lý của câu hỏi # 3 mà bạn tham chiếu. –

Trả lời

3

Trong bối cảnh đó, các or trong tuyên bố đó là một trong những PHP logical operators mà khi được sử dụng như thế, sẽ thực hiện báo cáo kết quả thứ hai nếu và chỉ khi người đầu tiên thất bại do short circuit evaluation.

Kể từ khi fopen trả về false, câu lệnh or exit được thực hiện vì phần đầu tiên không thành công.

Để hiểu rõ hơn, đây là giải thích nhanh về đánh giá ngắn mạch.

$x = 5; 
$y = 42; 

if ($x == 5 or $y == 42) { 
    echo "x or y is true"; 
} 

Trong mã trên, biểu thức $y == 42 không bao giờ được đánh giá vì không cần biểu hiện đầu tiên.

Trong ví dụ đó, họ đang sử dụng cùng một logic để quyết định có hay không đánh giá tuyên bố gọi exit.

Để giải quyết câu hỏi của bạn:

  1. tôi sẽ không sử dụng lối ra khi mở một tập tin thất bại trừ khi chương trình đã rất cụ thể. Điều tốt hơn để làm là đăng nhập lỗi và sau đó trả lại lỗi cho người gọi để họ có thể quyết định phải làm gì.
  2. Khi nào sử dụng exit hoàn toàn phụ thuộc vào mã bạn đang viết.
  3. Với giải thích về đoản mạch, có thể chúng có thể hoán đổi cho nhau theo nghĩa đó. Sử dụng or exit chỉ ngắn hơn một chút so với sử dụng if/else.

Hy vọng điều đó sẽ hữu ích.

+0

- @ drew010, nội dung tuyệt vời, cảm ơn! –

1

Tôi muốn nói bạn sử dụng exit trong trường hợp mã của bạn không thể tiếp tục nếu chức năng bạn đang làm không thành công. Ví dụ đọc một tập tin cần thiết.

+0

Theo hướng dẫn sử dụng '" chết - Tương đương để thoát "'. Trong khi 'thoát' mô tả: 'Chấm dứt thực thi tập lệnh. Các chức năng tắt máy và các bộ hủy đối tượng sẽ luôn được thực hiện ngay cả khi thoát được gọi. ” –

+0

lol ok xấu của tôi :) phải đọc nó sai ở đâu đó sau đó. –

2

Tôi có xu hướng tránh sử dụng exit() ở tất cả vì đó là một cách thực sự xấu xí để xử lý lỗi từ góc nhìn của người dùng.

Nếu bạn phải sử dụng, mọi lỗi không thể khôi phục sẽ là ứng cử viên. Ví dụ, truy vấn cơ sở dữ liệu hoặc lỗi kết nối, hoặc thất bại yêu cầu từ xa.

if/else tương đương với ...or whatever(). Nó chỉ là một thứ phong cách, với hình thức thứ hai ngắn gọn hơn.

4
  1. kịch bản CLI, xuất cảnh có thể mất một số nguyên đó được đưa trở lại giao diện điều khiển để chỉ thành công hay một số hình thức lỗi
  2. Tôi không có ý định sử dụng exit() hoặc die() trong mã ứng dụng, vì là trường hợp ngoại lệ ưa thích. Tuy nhiên, cá nhân tôi nghĩ rằng bạn có thể làm quá nhiều thứ một chút ... nó giết chết việc thực thi tập lệnh, vì vậy hãy sử dụng nó khi bạn cần giết một tập lệnh. Thành thật mà nói, tôi hầu như chỉ từng giết các kịch bản giữa việc thực thi khi gỡ lỗi (các điểm ngắt một lần) và điều đó cũng không lý tưởng (ngoại trừ một lần nữa làm một công việc tốt hơn).
  3. Việc sử dụng or chủ yếu là thuận tiện. Dưới đây là một điểm thú vị mặc dù ...

Tại sao

$resource = mysql_connect() || die('dead') 

không hoạt động?

Câu trả lời là nhà điều hành = được ưu tiên hơn or để bài tập được thực hiện trước tiên như sau: ($resource = mysql_connect()) or die(). Theo cách này, chính xác như làm một if(!($resource = mysql_connnect())) { die() }

+0

- @ damiand, cảm ơn tôi vừa học được rất nhiều! –

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