Это правильный способ вернуть значение в PHP - PullRequest
1 голос
/ 20 июня 2011

У меня есть очень простой вопрос относительно возвращаемого значения функции и проверки значения переменной.

function test($var1, $var2){
    if ($var1 == $var2){
            $var3 = "abc";
            return $var3;
        }
    return false
}

$value = test($var1, $var2);

if ($value){
    echo "Value is".$value;  //should output abc.
} else {
    echo "Not equal";
}
  1. Можно ли возвращать значение или возвращать false? Например, я не возвращаю TRUE, это нормально?

  2. Когда я вызываю функцию, я сохраняю возвращаемое значение в переменной $ value. Как я могу проверить, что функция вернула $ var3? Какое из условий if следует использовать? if (!empty($value)) или if (isset($value)) или if ($value) или if (value != false)

Ответы [ 7 ]

5 голосов
/ 20 июня 2011

Да, в PHP принято возвращать FALSE в качестве индикатора состояния ошибки. (То, что представляет собой ошибку, является вашим собственным решением и зависит от того, что функция должна делать.)

Однако, поскольку PHP автоматически приводит к логическим значениям другого типа (например,пустая строка или 0, которая также оценивается как FALSE), вы должны выполнить явную проверку FALSE следующим образом:

if ($value !== FALSE) ...

Как ФеликсКлинг отмечает в комментариях, это называется «строгое сравнение» (или «сравнение идентичности»).Он проверяет, является ли значение идентичным FALSE, где != FALSE, == FALSE и if ($value) проверяют только то, может ли значение интерпретироваться как FALSE.

1 голос
/ 20 июня 2011
  1. Совершенно нормально возвращать разные типы данных.

  2. Если вы хотите проверить против false, используйте: if ($ value! == false). Если вы потерялись, какое условие использовать, это прояснит это: http://www.php.net/manual/en/types.comparisons.php

1 голос
/ 20 июня 2011

Я не разработчик PHP, но я не думаю, что ваш первый подход работает. Есть и другие вещи, кроме логического значения false, интерпретируемого как false:

When converting to boolean, the following values are considered FALSE:

* the boolean FALSE itself
* the integer 0 (zero)
* the float 0.0 (zero)
* the empty string, and the string "0"
* an array with zero elements
* an object with zero member variables (PHP 4 only)
* the special type NULL (including unset variables)
* SimpleXML objects created from empty tags

http://php.net/manual/en/language.types.boolean.php

0 голосов
/ 20 июня 2011

Единственный правильный ответ здесь: это зависит.

Я всегда задаю себе этот вопрос при создании такой функции. Чтобы ответить на него, я анализирую, что функция делает вместо того, что она возвращает.

Например, если у меня есть геттер, я ожидаю получить значение или ничего. В этом случае я часто возвращаю 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'
}

Итак, короче говоря: это зависит ...

0 голосов
/ 20 июня 2011
  1. Да, вы можете вернуть почти все что угодно из функции, или вы можете просто «вернуться», не возвращая ничего.В вашем примере вы получите строку или «ложь» взамен.

  2. Для проверки на ложность вы можете сделать if (! $ Variable) или if ($ variable === false).Ноль вернет истину, если вы сделаете "if ($ variable == false)" из-за автоматического приведения нуля к ложному (и любого другого положительного числа к истине).Три "===" гарантируют, что это действительно ложь и ничего больше.Isset ($ var) проверяет наличие, а не значение - и неприменимо к вашему примеру, поскольку ваша функция будет возвращать значение или «ложь» и, таким образом, всегда существует.

0 голосов
/ 20 июня 2011
$var3 = "abc";
return $var3;

Это бессмысленно. Вы return используете значение , а не переменную. return "abc"; отлично.

Можно ли либо возвращать значение, либо возвращать false?

Да, это прекрасно для такого простого случая, как этот.

Как проверить, что функция вернула $ var3?

Как сказано выше, функция возвращает значение "abc", а не $var3. Вы сохраняете его в новой переменной $value. Эта переменная определенно установлена ​​ (вы только что ее создали), поэтому нет необходимости в isset или empty. Просто проверьте, является ли его значение true или false (или что-либо еще, что вы хотите проверить). Таким образом, как вы делаете это в порядке.

0 голосов
/ 20 июня 2011

Ваша функция возвращает false, поэтому я бы пошел с этой проверкой: if ($value != false)

...