我遇到了一个简单的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。
答案 0 :(得分:5)
你解释规则的方式有点令人困惑。您应该能够修改以下代码以适应:
if (userIsLoggedIn()) {
$prPrice = !empty($prPrice2) ? $prPrice2 : $prPrice1;
} else {
$prPrice = !empty($prPrice1) ? $prPrice1 : $prPrice2;
}
答案 1 :(得分:3)
代码与您描述的算法相矛盾。
你说:
如果用户未登录且第一个价格为空,那么 价格是价格1。如果没有,那就是price2。如果用户已登录并且 第一个价格是空的,然后价格是price1。如果没有,那就是price2。
因此,实际上,无论用户是否登录,该算法都应该完全相同。
在你的代码中,它也很奇怪:
您有三个条件:
用户已登录或未登录。我没有看到任何其他可能性。
还有以下几行:
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中你写了
如果用户已登录且第一个价格为空
但在您的代码中,您检查第二个价格是否为空。