Какова наилучшая практика PHP для использования функций, возвращающих true или false?

После игры с PHP я обнаружил, что true возвращается как 1, а false – как null.

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

При написании функций, возвращающих true или false, каковы наилучшие методы их использования?

Например,

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

Это лучший способ использовать эту функцию?

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

Как бы вы написали противоположную функцию?

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

Когда вы будете использовать оператор === ?

Solutions Collecting From Web of "Какова наилучшая практика PHP для использования функций, возвращающих true или false?"

После игры с PHP я обнаружил, что true возвращается как 1, а false – как null.

Это неверно (каламбур не предназначен). PHP, как и многие другие языки, имеет «правдивые» и «ложные» значения, которые могут вести себя как TRUE или FALSE по сравнению с другими значениями.

Это происходит потому, что PHP использует слабую типизацию (по сравнению с сильной типизацией ). Он автоматически преобразует разные типы значений при их сравнении, поэтому он может в конечном итоге сравнить два значения одного и того же типа. Когда вы echo TRUE; в PHP echo всегда выводит строку. Но вы передали ему логическое значение, которое должно быть преобразовано в строку, прежде чем echo сможет выполнить свою работу. Таким образом, TRUE автоматически преобразуется в строку "1" , а FALSE преобразуется в "" .

Когда вы будете использовать оператор ===?

Это слабое или слабое типирование – причина, по которой PHP использует два оператора равенства: == и === . Вы используете === когда хотите убедиться, что оба значения, которые вы сравниваете, не просто «равны» (или эквивалентны), но и одного и того же типа. На практике:

 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) 

При написании функций, возвращающих true или false, каковы наилучшие методы их использования?

Будьте точны, когда можете, возвращая фактическое логическое значение TRUE или FALSE . Типичными случаями являются функции с префиксом, такие как isValidInput . Обычно такие функции возвращают либо TRUE либо FALSE .

С другой стороны, полезно, чтобы ваша функция возвращала «фальшивые» или «правдивые» значения в некоторых случаях. Возьмите strpos , например. Если он находит подстроку в нулевой позиции, она возвращает 0 (int), но если строка не найдена, она возвращает FALSE (bool). Так:

 $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" 
 function isValidInput($input){ return ($input ...); // if your test returns true/false, just return that result } 

В вашем последнем примере отсутствует аргумент, иначе отлично:

 function isBadInput($input){ return !isValidInput($input); } 
  1. Конечно. Если вам это не нужно в другой структуре, например, в цикле while.

  2. Вы никогда этого не сделали. Всегда инвертируйте нормальную функцию напрямую.

  3. Когда вам нужно дифференцировать false от 0 , '' и т. Д.

После игры с PHP я обнаружил, что true возвращается как 1, а false – как null.

Нет. true и false возвращаются как boolean true и false . Когда вы эхо выводите его, он должен быть передан в строку для отображения. Согласно руководству :

TRUE значение TRUE преобразуется в строку "1" . Boolean FALSE преобразуется в "" (пустая строка). Это позволяет конвертировать назад и вперед между булевым и строковым значением.

Что касается остальных: все в порядке, да, да, когда вы хотите совпадения точного типа, чтобы избежать манипулирования типами при сопоставлении, например, "1" == true истинно, но "1" === true – false.

 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. }