Php 为什么这个总是死?

Php 为什么这个总是死?,php,Php,它似乎总是会消亡。你想要&而不是 大声读出来: 如果x不等于Y或x不等于N 显然,x等于什么并不重要,只要Y和N不相等,该语句将始终为真:因为$extension不能同时为jpg、gif和png,所以至少有两个子条件为真 而且,由于使用的是or | |而不是And&,因此任何真正的子条件都将使整个条件为真 你想要的是: $extension = "jpg" if($extension != "jpg" || $extension != "gif" || $extension != "p

它似乎总是会消亡。

你想要&而不是

大声读出来:

如果x不等于Y或x不等于N

显然,x等于什么并不重要,只要Y和N不相等,该语句将始终为真:

因为$extension不能同时为jpg、gif和png,所以至少有两个子条件为真

而且,由于使用的是or | |而不是And&,因此任何真正的子条件都将使整个条件为真

你想要的是:

$extension = "jpg"

    if($extension != "jpg" || $extension != "gif" || $extension != "png") die("only jpg, gif, png acceptable");
这可能会起作用

如果您将不等于运算符与一组OR一起使用

您可以通过以下两种方式之一解决此问题:

将所有| |切换到&& 将其简化为具有有效扩展的数组:
原因已经解释过了,而且您可以简单地这样做,得到您期望的结果:

$valid = array('jpg' => true, 'gif' => true, 'png' => true);
if (!isset($valid[$extension])) {
    // not a valid extension
}

或者如果$扩展名=='jpg'| |$extension=='gif'| |$extension=='png'。是的,德摩根。”当然,这是比较容易忽视的!马克,德摩根定理应该是一种简化布尔代数的方法。你似乎在这里使用它使它更复杂:-ggg:我不担心;我很难说我过去犯过多少次这样的错误;大声读出语句,甚至写下几个例子总是有帮助的,只是为了检查一切是否正常,显然是为了测试:PWhy不只是使用$valid=array'jpg'、'gif'、'png';如果在_数组$extension中,$valid{…}@Darren-在_数组中使用需要对整个数组进行迭代,而设置数组键允许您简单地检查是否设置了键。这是一个简单的优化。在这种情况下,您可能需要检查该值是否等于true。这允许您打开和关闭一些扩展。如果未知,则默认为关闭。in_数组解决方案的效率确实稍低。然而,它更容易阅读。假设这段代码很少执行,我可能会选择in_数组解决方案。牺牲可读性来节省几纳秒是没有意义的。@Frank-如果我能在相同的时间内写得更快,我就不会选择较慢的代码。另外,我认为可读性并没有降低!isset$valid[$extension]用简单的英语向您跳出来。
$extension = "jpg"

    if($extension != "jpg" && $extension != "gif" && $extension != "png") die("only jpg, gif, png acceptable");
$extension = "jpg"
if ($extension != "jpg" || 
    $extension != "gif" || 
    $extension != "png") 
    die("only jpg, gif, png acceptable");
$valid = array('jpg' => true, 'gif' => true, 'png' => true);
if (!isset($valid[$extension])) {
    // not a valid extension
}
$extension = "jpg";
if(!in_array($extension,array("jpg","gif","png"))){
    die("only jpg, gif, png acceptable");
}