关于函数的返回值和检查变量值,我有一个非常基本的问题。
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";
}
可以返回值还是返回false?例如,我没有返回TRUE,没关系?
当我调用该函数时,我将返回值存储在变量$ value中。我如何检查函数确实返回$ var3?应该使用哪种if条件?
if (!empty($value))
或if (isset($value))
或if ($value)
或if (value != false)
答案 0 :(得分:5)
是的,PHP中的常见做法是返回FALSE
作为错误情况的指示符。 (构成错误的是你自己的决定,取决于函数应该做什么。)
但是,由于PHP会自动将值转换为另一种类型的布尔值(如空字符串或0
,也会评估为FALSE
),您应该执行 explicit < / em>检查FALSE
,如下所示:
if ($value !== FALSE) ...
正如Felix Kling在评论中指出的那样,这被称为“严格比较”(或“身份比较”)。它检查某个值是否相同到FALSE
,其中!= FALSE
,== FALSE
和if ($value)
仅检查值是否为解释为FALSE
。
答案 1 :(得分:1)
我不是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
答案 2 :(得分:1)
返回不同的数据类型是完全可以的。
如果要检查false,请使用:if($ value!== false)。如果您迷失了使用哪种条件,这将澄清它:http://www.php.net/manual/en/types.comparisons.php
答案 3 :(得分:0)
您的函数返回false
,因此我会选中该项检查:if ($value != false)
答案 4 :(得分:0)
$var3 = "abc";
return $var3;
这毫无意义。您return
值,而不是变量。 return "abc";
完全没问题。
是否可以返回值或返回false?
是的,这对于像这样的简单案例来说完全没问题。
如何检查函数是否返回$ var3?
如上所述,该函数返回值"abc"
,而不是$var3
。您将其保存在新变量$value
中。这个变量肯定是 set (你刚刚在那里创建了它),因此不需要isset
或empty
。只需测试其值是true
还是false
(或者您要测试的其他内容)。所以你的方式很好。
答案 5 :(得分:0)
是的,你可以从函数中返回几乎任何东西,或者只是“返回”而不返回任何东西。在您的示例中,您将获得一个字符串或“false”作为回报。
要检查是否为假,您可以执行if(!$ variable)或if($ variable === false)。如果由于自动转换为零(以及任何其他正数为真)而执行“if($ variable == false)”,则零将返回true。三个“===”确保它真的是假的而没有别的。 isset($ var)检查是否存在而不是值 - 并且不适用于您的示例,因为您的函数将返回值或“false”,因此始终存在。
答案 6 :(得分:0)
这里唯一正确的答案是:它取决于。
在创建这样的函数时,我总是问自己这个问题。为了回答这个问题,我分析了所做的功能,而不是它返回的内容。
例如,如果我有一个吸气剂,我希望得到一个值,或者什么都没有。在这种情况下,当发现任何事情/出现问题时,我经常会返回null
。
在我看来,像你这样的测试函数应该始终返回一个布尔值。当你检查某事是真还是假时,返回一个变量在语义上是错误的,我想。
除了语义之外:当你用if (test($var1, $var2))
检查它时,返回0,false或null并不重要,因为它将全部工作相同。但是,如果您想要更精细的细节,则需要进行身份检查(===
)而不是等同性检查。在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'
}
所以,长话短说:这取决于......