2010-08-18 17 views
7

Làm thế nào biểu thức boolean sau đây cần được viết bằng PHP:Các biểu thức boolean nên được viết bằng PHP như thế nào?

$foo = ""; 
if($var==TRUE){ 
    $foo = "bar"; 
} 

hoặc

if($var==TRUE){ 
    $foo = "bar"; 
}else{ 
    $foo = ""; 
} 

hoặc

$foo = ($var==TRUE) ? "bar": ""; 
+0

Cảm ơn George, tôi đã đăng nó ở mức 16,55 ngay trước khi tôi rời công việc, tôi có thể làm tiêu đề và mở câu rõ ràng hơn trong nhận thức. :) – Stann0rz

Trả lời

8

Trước hết, true không phải là hằng số, đó là mã thông báo, vì vậy vui lòng không viết hoa nó (tôi biết một số tiêu chuẩn làm điều đó, nhưng tôi nghĩ nó gây nhầm lẫn ...)

Thứ hai, bạn không cần sự so sánh thừa $var == true bên trong if. Nó chính xác giống như if ($var) { (Đối với một so sánh == đôi. So sánh giống hệt nhau === sẽ cần phải rõ ràng).

Thứ ba, tôi thích việc khởi tạo trước. Vì vậy:

$foo = ''; 
if ($var) { 
    $foo = 'one status'; 
} else { 
    $foo = 'another status'; 
} 

Nếu bạn không cần nhánh khác, chỉ cần xóa nó. Tôi thích trước khi khởi tạo vì nó buộc bạn phải khởi tạo biến, và nó ngăn chặn các trường hợp bạn quên khởi tạo nó ở một trong các nhánh. Thêm vào đó, nó cung cấp cho bạn một gợi ý kiểu khi bạn quay trở lại để đọc hàm sau ...

Và đối với một nhánh đơn giản như vậy, sử dụng cú pháp bậc ba là tốt. Nếu có logic phức tạp hơn, tôi sẽ tránh xa:

$foo = $var ? 'bar' : ''; 
+0

Thành thật mà nói, các mã trên không đưa ra mối quan hệ về những gì tôi hiện đang làm việc và là cái gì đó tôi đã gõ trong vài giây để hỏi rõ hơn, các giá trị boolean có vẻ hợp lý hơn so sánh chuỗi hoặc số nguyên. Việc khởi tạo trước là điều tôi luôn làm, nhưng tôi chưa bao giờ được 'dạy' PHP, hay bất kỳ ngôn ngữ nào và chỉ tự hỏi liệu có cách nào tốt nhất cho việc này hay không. Cảm ơn lời khuyên ircmaxell. – Stann0rz

5

Tất cả những công việc. Đó là sở thích. Tôi muốn xem xét việc khởi tạo biến đầu tiên như bạn làm trong ví dụ đầu tiên. Nhưng đối với một cái gì đó đơn giản này, lựa chọn thứ 3 là tốt trong cuốn sách của tôi.

Ngoài ra, thứ 3 không phải là quá dài dòng nếu $ var chỉ là một giá trị boolean:

$foo = $var ? "bar" : ""; 
+3

Trừ khi chúng cụ thể tìm kiếm sự thật, bạn sẽ muốn sử dụng $ foo = ($ var === TRUE)? "quán ba" : ""; – Codeacula

1

Tôi thích là người đầu tiên:

$foo = ""; 
if($var==TRUE){ 
    $foo = "bar"; 
} 

Vì nó là rõ ràng, súc tích, và dễ đọc.

0

Không quan trọng lắm. Tôi thích cái đầu tiên khi có nhiều thứ khác để bạn biết biến luôn được khởi tạo. Nhưng nó thực sự chỉ là vấn đề ưu tiên.

Giống như các trích dẫn, tôi thích sử dụng các từ đơn lẻ trong php. Không có lý do chính đáng :)

+0

Oh và cái thứ ba có thể dễ dàng là $ foo = $ var? 'quán ba' : ''; –

+0

Tôi có xu hướng sử dụng kết hợp dấu ngoặc kép tùy thuộc vào những gì tôi xuất hiện vào lúc đó, chuỗi HTML có xu hướng được tạo bằng cách sử dụng dấu nháy đơn, trong khi tôi tin rằng dấu ngoặc kép là cách duy nhất để tạo nguồn cấp dữ liệu dòng mới? - "\ r \ n" – Stann0rz

0

Câu trả lời đúng, như thường lệ, "nó phụ thuộc". Trong trường hợp này,

if ($var==TRUE) $foo = "bar"; 
else $foo = ""; 

rất rõ ràng. Nhưng bối cảnh của bạn là gì?

Nói chung, nhà điều hành đại học, tùy chọn thứ ba của bạn, nên được sử dụng hết sức thận trọng vì nó rất dễ đọc.

Nhưng hãy suy nghĩ về những gì bạn muốn mã của bạn MEAN, nhiều hơn những gì nó làm. Bạn có muốn đặt $ foo của mình thành giá trị "bình thường" và sau đó ghi đè lên giá trị đó không? Hay bạn muốn thiết lập cái gì đó phụ thuộc vào $ var là gì?

Cái gì tôi thấy hữu ích để thay đổi, đó không phải là trực tiếp những gì bạn hỏi, nhưng điều đó cũng tương tự, là thế này, từ

function func() { 
    ... 
    if ($condition) { 
     do plenty 
     of things 
    } 
    else { 
     do plenty 
     of things 
    } 
} 

đó, tôi thường muốn thay đổi để:

function func() { 
    ... 
    if ($condition) { 
     do plenty 
     of things 
     return; 
    } 
    do plenty 
    of things 
} 

Thông thường, có ý nghĩa.

Chỉ cần tự hỏi: "Nếu ai đó không biết bất kỳ điều gì về mã của tôi đã đọc, liệu điều đó có hợp lý với anh ấy không? Hay cô ấy?"

1

Tôi thích cái đầu tiên (ngoại trừ kiểm tra dư thừa cho boolean) vì nó hoạt động liên tục trên các ngôn ngữ, đặc biệt là các yêu cầu khai báo biến (và có thể gõ) trước khi cài đặt.
Java:

String foo = ""; 
if (var) { 
    foo = "Something"; 
} 

JavaScript hoặc JavaFX:

var foo = ""; 
if (var) { 
    foo = "Something"; 
} 

vv
Người ta có thể sử dụng mẫu thứ 3 quá nhưng nếu điều kiện (hoặc chuyển nhượng) rất phức tạp, nó là một chút ít có thể đọc .

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