2012-03-10 24 views
5

Sau khi chơi với PHP, tôi phát hiện ra rằng true được trả về là 1 và false là null.Thực hành tốt nhất của PHP để sử dụng các hàm trả về đúng hay sai là gì?

echo (5 == 5) // displays 1 
echo (5 == 4) // displays nothing 

Khi viết các hàm trả về đúng hoặc sai, phương pháp hay nhất để sử dụng chúng là gì?

Ví dụ,

function IsValidInput($input) { 
    if ($input...) { 
    return true; 
    } 
    else { 
    return false; 
    } 
} 

Đây có phải là cách tốt nhất để sử dụng chức năng?

if (IsValidInput($input)) { 
    ... 
} 

Bạn viết hàm đối diện như thế nào?

IsBadInput($input) { 
    return ! IsValidInput($input); 
} 

Khi nào bạn sử dụng toán tử ===?

+2

Bạn đã hỏi ít nhất 4 câu hỏi. Câu hỏi _real_ của bạn là gì? – Madbreaks

+2

"PHP" và "thực hành tốt nhất" là những từ hiếm khi được nghe trong cùng một câu. –

+1

@GeorgeCummins Đúng với người mới. Tương tự áp dụng cho bất kỳ ngôn ngữ nào. – Madbreaks

Trả lời

4

Sau khi chơi với PHP, tôi phát hiện ra rằng sự thật sẽ được trả về như 1 và sai như null.

Điều đó không đúng (không có ý định chơi chữ).PHP, giống như nhiều ngôn ngữ khác, có giá trị "trung thực" và "giả", có thể hoạt động như TRUE hoặc FALSE khi được so sánh với các giá trị khác.

Thật là beause PHP sử dụng đánh máy yếu (so với strong typing). Nó tự động chuyển đổi các loại giá trị khác nhau khi so sánh chúng, do đó, nó cuối cùng có thể so sánh hai giá trị của cùng một loại. Khi bạn echo TRUE; trong PHP, echo sẽ luôn xuất một chuỗi. Nhưng bạn đã vượt qua nó một giá trị boolean, mà phải được chuyển đổi thành một chuỗi trước khi echo có thể thực hiện công việc của nó. Vì vậy, TRUE được tự động chuyển đổi thành chuỗi "1", trong khi FALSE được chuyển đổi thành "".

Khi nào bạn sử dụng toán tử ===?

Điều này yếu hoặc lỏng lẻo, gõ là lý do PHP sử dụng hai toán tử bình đẳng, =====. Bạn sử dụng === khi bạn muốn đảm bảo cả hai giá trị mà bạn đang so sánh không chỉ là "bằng" (hoặc tương đương), nhưng cũng có cùng loại. Trong thực tế:

echo 1 == TRUE; // echoes "1", because the number 1 is a truthy value 
echo 1 === TRUE; // echoes "", because 1 and TRUE are not the same type (integer and boolean) 

Khi viết các chức năng mà trở về đúng hay sai, thực hiện những điều tốt nhất cho việc sử dụng chúng là gì?

Be chính xác khi bạn có thể, trả lại boolean thực tế TRUE hoặc FALSE. Các trường hợp điển hình là các hàm được bắt đầu bằng is, như isValidInput. Người ta thường mong đợi các chức năng như vậy để trả về TRUE hoặc FALSE.

Mặt khác, sẽ hữu ích khi hàm của bạn trả về giá trị "sai" hoặc "trung thực" trong một số trường hợp. Lấy ví dụ strpos. Nếu nó tìm thấy chuỗi con ở vị trí 0, nó trả về 0 (int), nhưng nếu chuỗi không được tìm thấy, nó trả về FALSE (bool). Vì vậy:

$text = "The book is on the table"; 
echo (strpos($text, "The") == FALSE) ? "Not found" : "Found"; // echoes "Not found" 
echo (strpos($text, "The") === FALSE) ? "Not found" : "Found"; // echoes "Found" 
+0

Tôi nghĩ rằng câu hỏi này xứng đáng có một câu trả lời tốt hơn, vì vậy tôi hoàn toàn viết lại của tôi. Phiên bản trước có sẵn [ở đây] (http://stackoverflow.com/revisions/9643134/3). – bfavaretto

+0

Thông tin bổ sung: [câu hỏi/câu trả lời stackoverflow "chính thức" trên '==' so với '==='] (http: // stackoverflow.com/questions/589549/php-vs-nhà điều hành) – bfavaretto

1
  1. Chắc chắn. Trừ khi bạn cần nó trong một loại cấu trúc khác, ví dụ: một vòng lặp while.

  2. Bạn sẽ không bao giờ làm thế. Luôn luôn đảo ngược chức năng bình thường trực tiếp.

  3. Khi bạn cần phải phân biệt false từ 0, '' vv

2
function isValidInput($input){ 
    return ($input ...); // if your test returns true/false, just return that result 
} 

ví dụ cuối cùng của bạn thiếu một cuộc tranh cãi, nếu không tốt:

function isBadInput($input){ 
    return !isValidInput($input); 
} 
+0

Cảm ơn. Tôi sửa lỗi đánh máy. Có, chức năng không phải là một ví dụ tốt, nhưng tôi chỉ muốn làm ví dụ rõ ràng. –

+0

Đừng lo lắng, chúc mừng. – Madbreaks

1

Sau khi chơi với PHP, tôi phát hiện ra rằng true được trả về là 1 và false là null.

Không .. truefalse được trả về như boolean truefalse. Khi bạn echo output nó phải được truyền tới một chuỗi để hiển thị. Dưới dạng per the manual:

Giá trị boolean TRUE được chuyển thành chuỗi "1". Boolean FALSE được chuyển đổi thành "" (chuỗi rỗng). Điều này cho phép chuyển đổi qua lại giữa giá trị boolean và chuỗi.

Đối với phần còn lại: tốt, vâng, vâng, khi bạn muốn đối sánh chính xác loại, để tránh loại tung hứng khi so sánh, ví dụ: "1" == true là đúng nhưng "1" === true là sai.

+0

OK, điều đó rất hữu ích. –

0
function isValidInput($input) { 
    return ($input...); 
} 

if(isValidInput($input)) 
    ... 

if(!isValidInput($input)) // never rewrite inverse functions 
    ... 

if(isValidInput($input) === false) { 
    // Only run if the function returned a boolean value `false` 
    // Does the same thing as above, but with strict typing. 
} 
Các vấn đề liên quan