PHP变量作用域和if


PHP variable scope and IFs

我有一个大致类似的东西:

function get_gender ($gid){ 
    $return= '';
...some code ..
    if ($male !== 0 && $female !== 0){
        $return = 'mixed';
    }else if ($male !== 0 && $female == 0){
        $return = 'male';
    }
    return $return;
}

我知道其中一个条件已经满足,所以我假设$return变量将被更新。虽然它总是空着回来。这是范围问题吗?

在您的代码中,如果$male为零,则从不检查$female,并且两个赋值都不运行,使$return为空。

不,这是调试问题。Scope在这里没有任何作用,因为它没有改变(至少在您提供的代码中没有改变)。

试试这个:

if ($male !== 0 && $female !== 0){
    $return = 'mixed';
    echo 'Return: ' . $return;
}else if ($male !== 0 && $female == 0){
    $return = 'male';
    echo 'Return: ' . $return;
} else {
    echo 'None of the conditions met';
}

此外,难道你不希望为this (true, false)使用布尔值而不是显式的整数检查吗?

这里没有作用域应该不是问题。

很可能你的问题在于你的环境。特别是使用严格相等(即!==)。

不,这不是作用域问题。你的变量一定是设置错了,所以没有满足条件。也许那是因为结果应该是女性(我看不到一个选项),或者是因为你使用显式的类型敏感条件(也许你的变量包含字符串下-尝试使=====!====,看看是否有变化)

为了证明这一点,尝试添加另一个else{ }并将$return设置为"oh noez"(或其他)。