What is the PHP best practice for using functions that return true or false?

前端 未结 5 704
面向向阳花
面向向阳花 2021-01-13 02:40

After playing with PHP, I discovered that true is returned as 1 and false as null.

echo (5 == 5) // displays 1
echo (5 == 4) // displays nothing
5条回答
  •  时光取名叫无心
    2021-01-13 03:32

    After playing with PHP, I discovered that true is returned as 1 and false as null.

    That is not true (no pun intended). PHP, like many other languages, has "truthy" and "falsy" values, which can behave like TRUE or FALSE when compared to other values.

    It is so beause PHP uses weak typing (vs. strong typing). It automatically converts different types of values when comparing them, so it can eventually compare two values of the same type. When you echo TRUE; in PHP, echo will always output a string. But you passed it a boolean value, that has to be converted to a string before echo can do its job. So TRUE is automatically converted to the string "1", while FALSE is converted to "".

    When would you use the === operator?

    This weak, or loose, typing is the reason PHP uses two equality operators, == and ===. You use === when you want to make sure both values you are comparing are not just "equal" (or equivalent), but also of the same type. In practice:

    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)
    

    When writing functions that return true or false, what are the best practices for using them?

    Be precise when you can, returning the actual boolean TRUE or FALSE. Typical cases are functions prefixed by is, like isValidInput. One usually expects such functions to return either TRUE or FALSE.

    On the other hand, it's useful to have your function return a "falsy" or "truthy" values in some cases. Take strpos, for example. If it finds the substring in position zero, it returns 0 (int), but if the string is not found, it returns FALSE (bool). So:

    $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"
    

提交回复
热议问题