Единственный правильный ответ здесь: это зависит.
Я всегда задаю себе этот вопрос при создании такой функции. Чтобы ответить на него, я анализирую, что функция делает вместо того, что она возвращает.
Например, если у меня есть геттер, я ожидаю получить значение или ничего. В этом случае я часто возвращаю null
, когда ничего не найдено / что-то пошло не так.
По моему мнению, такая тестовая функция должна возвращать логическое значение всегда. Я думаю, что возвращение переменной, когда вы проверяете, является ли она истинной или ложной, семантически неверно.
Помимо семантики: возвращение 0, false или null на самом деле не имеет значения, когда вы проверяете его с помощью if (test($var1, $var2))
, так как все будет работать одинаково. Однако, если вам нужны более мелкие детали, вы хотите выполнить проверку личности (===
), а не проверку на равенство. В PHP это иногда имеет место, например, strpos
может возвращать 0 или false, 0 - совпадение найдено, а false - нет. Следовательно, следующее не получится:
// returns 0, which is casted to false, so the 'else' part is executed
if (strpos('a', 'abc')) {
// 'abc' contains 'a'
} else {
// 'abc' does not contain 'a'
}
Итак, короче говоря: это зависит ...