【发布时间】:2011-01-08 19:32:58
【问题描述】:
我目前正在编写一个下载管理器,我在问自己这是否可能:
if($ext == ('zip' || 'png')) { echo "Is it possible ?" }
它每次都返回 true,所以我想这是不可能的。但是您知道我如何轻松做到这一点吗?我的意思是,不是有很多“如果”或“开关”...
还是谢谢! :)
【问题讨论】:
标签: php operators conditional-statements
我目前正在编写一个下载管理器,我在问自己这是否可能:
if($ext == ('zip' || 'png')) { echo "Is it possible ?" }
它每次都返回 true,所以我想这是不可能的。但是您知道我如何轻松做到这一点吗?我的意思是,不是有很多“如果”或“开关”...
还是谢谢! :)
【问题讨论】:
标签: php operators conditional-statements
你可以简单地使用:
if($ext == 'zip' || $ext == 'png')
{
echo "It's possible";
}
【讨论】:
if(($ext == 'zip') || ($ext == 'png')) { echo "It's possible." }
【讨论】:
小建议:PHP 使用类似于 C 的布尔类型处理,在某种意义上,实际上任何非零值都被认为是“真”,以防驻留在 if 语句的条件部分。例如,如果您在比较构造中错过了 '=' 符号并键入 if($var = "val") 而不是 if($var == "val") 您将始终在该语句中得到一个真值,因为 '=' 运算符将作为集合操作值的结果从右侧部分“val”被依次转换为“true”。所以最好将文字写在比较条件if("val" == $var) 的左侧,因为在这种情况下,如果您在“==”比较中丢失了一个“=”符号,则会出现错误。
所以你的 if 语句必须如下所示:
if('zip' == $ext || 'png' == $ext) { echo "Is it possible ?" }
也可能最好将“zip”和“png”文字放在名称为 FILE_TYPE_ZIP、FILE_TYPE_PNG 的常量中,或者定义一些枚举实体,例如位于源页面顶部的全局 PHP 数组,甚至可能在外部文件中创建一些单独的类 SupportedFileTypes,以强调程序支持的文件类型(在这种情况下,请查看 PHP and Enumerations 了解详细信息)。
在开始开发性能问题时不必打扰您,因为编写易于阅读和未来发展/优化的代码至关重要。
【讨论】:
您可以使用switch-case 声明:
switch($ext)
{
case 'png':
case 'zip':
// Will run for both 'png' and 'zip'
echo "It is possible";
break;
default:
echo "unknown extension!";
break;
}
【讨论】:
这绝对是可能的,但是您在那里所做的代码不正确。这是你写的:
if($ext == ('zip' || 'png')) { echo "Is it possible ?" }
这就是在 php 中的翻译:
if( (if $ext evaluates to true then return true) == ( if 'zip' evaluates to true then return true || if 'png' evaluates to true then return true ) )
所以,由于 'zip' 不是 php 中定义的 'empty' 或 'false' 值之一,'png' 也不是,所以你基本上是在运行这个 if 语句:
if($ext == true)
如果不为空,则为空。
你想要的是 - 如前所述:
if($ext == 'zip' || $ext == 'png')
【讨论】:
if($ext == ('zip' || 'png')) 正在按以下顺序进行比较 -> ('zip' || 'png'),因为至少有一个不为空,所以返回 TRUE。现在将其替换为($ext == TRUE),我将竭尽全力并猜测php 只是像($ext) 一样评估它,这也是正确的。
if ( $ext == 'zip' || $ext == 'png' ) 会检查您要查找的内容。
【讨论】:
if (in_array($ext, array('png', 'zip'))) {
echo "Is it possible ?"
}
如果您多次需要,该数组可以存储在某个地方。
【讨论】:
你可以使用in_array($ext,array('png','zip','another','more'))
【讨论】:
array_key_exists($ext, array_fill_keys(array('png','zip'), null)).
你可以使用正则表达式,例如
if(preg_match("/^(zip|png)$/", $ext) { echo “It is possible!” }
相关问题:Checking for file-extensions in PHP with Regular expressions
【讨论】: