2012-03-02 39 views
28

Tôi đã thấy điều này rất nhiều: $fp = fopen($filepath, "w") or die(); Nhưng dường như tôi không tìm thấy bất kỳ tài liệu thực nào về cú pháp "hoặc" này. Nó đủ rõ ràng, nhưng tôi có thể sử dụng nó ở bất cứ đâu không? Và nó phải được theo sau bởi die()? Có bất kỳ hãy cẩn thận khi sử dụng or khi bạn có thể sử dụng một cái gì đó giống nhưPHP "hoặc" Cú pháp

if (file_exists($filepath)) 
    $fp = fopen($filepath,"r"); 
else 
    myErrMessage(); 

Tôi biết nó có vẻ như một câu hỏi ngớ ngẩn, nhưng tôi không thể tìm thấy bất kỳ quy tắc cứng và nhanh chóng cho việc này. Cảm ơn.

+1

'hoặc' có thể được sử dụng để kết hợp * biểu thức *, chứ không phải * câu lệnh *. Và nó đôi khi hữu ích vì ưu tiên của toán tử thấp hơn (so với việc gán). Btw, nếu khối của bạn bị thiếu dấu ngoặc nhọn. Đừng tìm kiếm các phím tắt cú pháp cho đến khi bạn đã nắm vững điều đó. – mario

+1

Niềng răng xoăn là không cần thiết cho điều kiện, theo sau là một tuyên bố duy nhất. – Andrew

+2

Có; cú pháp ngôn ngữ cho phép điều đó. Có vẻ nghiệp dư và thường bị cau mày. – mario

Trả lời

14

Đó là toán tử logic và có thể được sử dụng trong bất kỳ biểu thức logic nào.

http://php.net/manual/en/language.operators.logical.php

+5

Bạn cũng nên xem ưu tiên là '$ fp = fopen ($ filepath," w ") hoặc die();' khác với '$ fp = fopen ($ filepath," w ") || die(); ' –

+1

Để thêm một số thông tin vào câu lệnh trên: câu lệnh đầu tiên (sử dụng' hoặc') sẽ xuất hiện nếu biểu thức đầu tiên '$ fp = fopen ($ filepath," w ")' trả về false (hoặc bất kỳ thứ gì mà PHP xem xét bằng false, như 'null' hoặc' 0'). Nếu, và chỉ khi nó thực hiện, nó thực hiện câu lệnh thứ hai, 'die()'. Điều thứ hai cũng giống như vậy, nhưng thường chỉ nên được sử dụng trong ngữ cảnh 'if'. – Thomas

3

Về cơ bản, có nghĩa là "nếu lệnh đầu tiên không thành công, thì hãy thực hiện lệnh thứ hai". Trong ví dụ của bạn, nếu PHP không thể mở tệp, nó sẽ chấm dứt tập lệnh (die()).

+0

Về mặt kỹ thuật, nó kiểm tra nếu biểu thức đầu tiên trả về một boolean false, sau đó với các biểu thức boolean phím tắt, nó sẽ thực hiện biểu thức thứ hai. Nếu biểu thức đầu tiên trả về một giá trị không sai, thì các biểu thức boolean của phím tắt có nghĩa là không cần thực thi biểu thức thứ hai –

5

or chỉ cần thực hiện so sánh boolean.

Điều gì được trả lại bởi fopen() có thể được coi là giá trị boolean, vì nó trả về FALSE nếu không thành công (và giá trị khác nếu không).

Nếu không thành công, câu lệnh được đánh giá ở bên phải và do đó chức năng die() được gọi.

0

Nó có thể được sử dụng như || nhưng đã không phải là ưu tiên giống nhau: http://www.php.net/manual/en/language.operators.precedence.php

Các ưu tiên của một nhà điều hành quy định cụ thể như thế nào "chặt" nó liên kết hai biểu thức với nhau. Ví dụ, trong biểu thức 1 + 5 * 3, câu trả lời là 16 và không phải 18 vì toán tử nhân ("*") có số ưu tiên cao hơn toán tử cộng ("+"). Các dấu ngoặc đơn có thể được sử dụng để bắt buộc, nếu cần. Ví dụ: (1 + 5) * 3 đánh giá để 18.

3

'Hoặc' trong PHP cũng giống như cú pháp C-like (||)

<?php 
if(($a==1 || $a==2) && ($b==3 || $b==4) && ($c==5 || $c==6)) { 
    //do that something here. 
} 
?> 

Các 'Hoặc' bạn đang nói về chỉ là một thủ thuật như tình trạng sau:

Ví dụ:

$result = mysql_query('SELECT foo FROM bar', $db) or die('Query failed: ' . mysql_error($db)); 

các or die() Bí quyết là một lựa chọn rất nghèo vì nhiều lý do:

  1. Đây không phải là cách rất hay để trình bày cho người dùng thông báo lỗi.
  2. Bạn không thể phát hiện lỗi theo bất kỳ cách nào.
  3. Bạn không thể ghi nhật ký lỗi.
  4. Bạn không thể kiểm soát liệu nó có nên xuất ra màn hình hay không.Không sao khi làm điều đó trong môi trường phát triển, nhưng chắc chắn không phải trong môi trường sản xuất.

    5. Nó ngăn cản bạn thực hiện bất kỳ loại dọn dẹp nào. Nó chỉ kết thúc kịch bản đột ngột.

tham khảo: [nhập liên kết mô tả ở đây] [1]

[1]: http://www.phpfreaks.com/blog/or-die-must-dieenter code here

5

Đây là lừa gọn gàng, thừa hưởng từ một số người tiền nhiệm PHP, dựa trên thực tế rằng PHP khá thông minh sẽ không đánh giá bất kỳ biểu thức nào sau HOẶC, nếu câu trả lời đầu tiên trả về đúng:

function a($ret){ 
    echo "FOO"; 
    return $ret; 
} 
function b($ret){ 
    echo "BAR"; 
    return $ret; 
} 

$result = (a(true) OR b(true)); 

sẽ in ra chỉ FOO, có nghĩa là b() thậm chí không được thực hiện.

8

Hãy chỉ nói rằng:

$result = first() || second(); 

sẽ đánh giá để:

if (first()) { 
    $result = true; 
} elseif (second()) { 
    $result = true; 
} else { 
    $result = false; 
} 

khi:

$result = first() or second(); 

sẽ đánh giá để:

if ($result = first()) { 
    // nothing 
} else { 
    second(); 
} 

Nói cách khác, bạn có thể xem xét:

$result = first() || second(); 

$result = (first() || second()); 

và:

$result = first() or second(); 

là:

($result = first()) || second(); 

Nó chỉ là vấn đề ưu tiên.

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