PHP - 简单的IF ...如果......产生意想不到的结果,教育我?

时间:2011-09-30 21:00:58

标签: php if-statement

我遇到了一个简单的PHP代码问题。

我正在使用2个产品定价级别。这些是基于用户是否已登录。

如果用户未登录,则第一个价格为空;然后价格是price1。如果没有,那就是price1。

这完全没问题。

如果用户已登录,则第一个价格为空;然后价格是price1。如果没有,那就是price2。

这是应该工作的方式,但实际发生的是:

如果用户已登录,则第一个价格为空;然后价格 0 。如果没有,那就是price2。

为什么我的代码会产生这种效果?

if (!userIsLoggedIn())
{
    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice1;
    }
} else if (userIsLoggedIn())
{
    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice2;
    }
} else 
{
    $prPrice = $prPrice1;
}

如果有人有任何建议可以帮我解决这个问题,我们将不胜感激。

谢谢!

@Pekka,它相当复杂。我只是希望这种情况发生:

product 1 -> price 1 = 1.00
product 1 -> price 2 = 0.00
product 2 -> price 1 = 1.00
product 2 -> price 2 = 0.80

如果用户已登录但price2字段为空,则price变量将为price1。如果没有,则价格为2。

另一方面,如果用户未登录但price2字段为空,则price变量将为price1。如果没有,则价格为1。

4 个答案:

答案 0 :(得分:5)

你解释规则的方式有点令人困惑。您应该能够修改以下代码以适应:

if (userIsLoggedIn()) {
    $prPrice = !empty($prPrice2) ? $prPrice2 : $prPrice1;
} else {
    $prPrice = !empty($prPrice1) ? $prPrice1 : $prPrice2;
}

答案 1 :(得分:3)

代码与您描述的算法相矛盾。

你说:

  

如果用户未登录且第一个价格为空,那么   价格是价格1。如果没有,那就是price2。如果用户已登录并且   第一个价格是空的,然后价格是price1。如果没有,那就是price2。

因此,实际上,无论用户是否登录,该算法都应该完全相同。

在你的代码中,它也很奇怪:

您有三个条件:

  1. 用户未登录
  2. 用户已登录
  3. 其他
  4. 用户已登录或未登录。我没有看到任何其他可能性。

    还有以下几行:

    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice1;
    }
    

    可以缩减为

    $prPrice = $prPrice1;
    

    因为您在两个代码块中执行相同的操作。

答案 2 :(得分:1)

您的代码过于复杂,包含一些奇怪的结构。这是一个等效但简化的版本,但请检查我在第一个添加的评论....

if (!userIsLoggedIn())
{
    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice1;  // this is highly suspicious...
    }
} else {    // user is logged or not, no need to recheck that boolean var
    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice2;
    }
} 

用三元语句表达相同条件的稍微有点方式(示例等同于外部if的else块:

$prPrice = (empty($prPrice2)) ? $prPrice1 : $prPrice2;

修改

假设有一种方法可以区分未登录的帐户和没有帐户的用户,则需要在外部条件下处理,例如:

if ($UserHasAnAccount) {  
// but i don't understand (yet) how you'd know that at this point
    if (userIsLoggedIn()) {  // the price logic described before
        ....
    } else {
        ....
    }
} else {  // unknown user, price1
    $prPrice = $prPrice1;
}

答案 3 :(得分:1)

else 
{
    $prPrice = $prPrice1;
}

你无法达到这个条件,因为我理解userIsLoggedIn是布尔值,它可能只发生两个条件:当userIsLoggedIn为true时为false。 你写了那个

  

如果用户未登录且第一个价格为空,则价格为price1。如果没有,那就是price2。

但在你的代码中会发生这种情况:

  

如果用户未登录且第二价格为空,则价格为price1。如果没有,则 price1

同样在条件userIsLoggedIn中你写了

  

如果用户已登录且第一个价格为空

但在您的代码中,您检查第二个价格是否为空。