PHP-if语句工作不正常

PHP-if语句工作不正常,php,if-statement,Php,If Statement,我目前在一个项目,使拍卖网站。为了确保人们在当前出价的基础上不能出价太少,我发表了以下声明: if( ($this->getHighestBid() < 50 && $this->getHighestBid() >= 0 && $bid > $this->getHighestBid()+0.50) || ($this->getHighestBid() < 500 && $this-&g

我目前在一个项目,使拍卖网站。为了确保人们在当前出价的基础上不能出价太少,我发表了以下声明:

if(
    ($this->getHighestBid() < 50 && $this->getHighestBid() >= 0 && $bid > $this->getHighestBid()+0.50) ||
    ($this->getHighestBid() < 500 && $this->getHighestBid() >= 50 && $bid > $this->getHighestBid()+1) ||
    ($this->getHighestBid() < 1000 && $this->getHighestBid() >= 500 && $bid > $this->getHighestBid()+5) ||
    ($this->getHighestBid() < 5000 && $this->getHighestBid() >= 1000 && $bid > $this->getHighestBid()+10) ||
    ($this->getHighestBid() >= 5000 && $bid > $this->getHighestBid()+50)            
){
...
}
这样,当当前最高出价在指定范围内时,您必须将价格至少提高指定的价格。 我的问题是,它根本不让我出价。有人知道这里发生了什么吗?

这是您的代码:

$highest_bid = $this->getHighestBid();
if(
    ($highest_bid < 50 && $highest_bid >= 1 && $bid > ($highest_bid+0.50)) ||
    ($highest_bid < 500 && $highest_bid >= 50 && $bid > ($highest_bid+1)) ||
    ($highest_bid < 1000 && $highest_bid >= 500 && $bid > ($highest_bid+5)) ||
    ($highest_bid < 5000 && $highest_bid >= 1000 && $bid > ($highest_bid+10)) ||
    ($highest_bid >= 5000 && $bid > ($highest_bid+50))       
){
    // Condition 1:
    // Highest bid should be >= 1 and < 50
    // Bid should be > 1.5 and < 50.5

    // Condition 2:
    // Highest bid should be >= 50 and < 500
    // Bid should be > 51 and < 501

    // Condition 3:
    // Highest bid should be >= 500 and < 1000
    // Bid should be > 505 and < 1005

    // Condition 4:
    // Highest bid should be >= 1000 and < 5000
    // Bid should be > 1010 and < 5010

    // Condition 5:
    // Highest bid should be >= 5000
    // Bid should be > 5050
}
这里有一个主要问题:

有些数字没有处理。 您应该考虑在函数中执行此业务逻辑。
我稍微更改了您的代码,以便可以在IDE中执行它:

    <?php
    $hbid = 50;
    $bid = 52;
if(
    ($hbid < 50 && $hbid >= 0 && $bid > $hbid+0.50) ||
    ($hbid < 500 && $hbid >= 50 && $bid > $hbid+1) ||
    ($hbid < 1000 && $hbid >= 500 && $bid > $hbid+5) ||
    ($hbid < 5000 && $hbid >= 1000 && $bid > $hbid+10) ||
    ($hbid >= 5000 && $bid > $hbid+50)            
)
{
    echo "ok";
}
else
{
    echo 'not ok';
}
?>

当我更改参数时,它总是工作正常。我猜你的问题出在其他地方。

你的代码在我的测试中似乎正常工作,听起来变量的类型不是数字类型float或整数,而是字符串或类似的奇怪类型

确认:

var_dump($this->getHighestBid());
在我写我的答案时,我想补充一点,您可能希望编辑您的代码,使其更像:

function getMinimumBid() {
     $maxBid = (float)$this->getHighestBid();
     return $maxBid + $this->getBidIncrement();
}

function getBidIncrement() {
     $maxBid = (float)$this->getHighestBid();
     switch (true) {
          case $maxBid < 50:
              return 0.50;
          case $maxBid < 500:
              return 1;
          case $maxBid < 1000:
              return 5;
          case $maxBid < 5000:
              return 10;
          default:
              return 50;
     }
}

// ...
    if ($bid >= $this->getMinimumBid()) {
    }
// ...

乍一看,我相信您可能需要将$this->getHighestBid存储在变量中。我是否建议您更改此设置,并创建一个$this->getMinimumBidIncrement方法来处理您在这里编写的逻辑?这当然会使事情更容易阅读和理解。你为什么不根据最高出价的百分比值来处理它,例如出价超过最高出价10%以上:如果$bid-$this->getHighestBid getHighestBid/10{}@mlefvre我一开始打算这么做,但最终我们还是选择了这个系统,因为项目的成员发现它更有效。你应该这样写$this->getHighestBid<50&&$this->getHighestBid>=0他的代码已经可以工作了,正如我所做的,你的代码没有工作,投了反对票,因为在有问题的好代码中发布坏代码。这些数字到底是如何处理的?我同时在需要的地方添加了>=并且这个if语句已经在函数中了。我的意思是502的出价将进入语句的else部分。我提供的代码可以工作,但是您需要分配$bid和$this->getHighestBid。我刚刚清理了代码并提供了解释。echo$bid。“-”$此->获取最高出价;。在if语句之前编写此代码,这样您就可以检查变量的值,否则我们将很难帮助您。@Wissam El Kik尝试输入最高出价500,您的代码有效吗?这里有一个输入错误:$$hbid