我想知道我是否可以像这样编写is_numeric($ action):
switch ($action):
case NULL:
...
CASE INTEGER:
无效。
答案 0 :(得分:3)
switch
uses equality, not identity(“请注意,switch / case确实loose comparision [sic]。”),所以即使示例的第一部分也不会按照您期望的方式工作。
请考虑以下事项:
<?php
function checknull( $var )
{
switch( $var )
{
case null:
echo '$var is null!';
break;
}
}
checknull(null);
checknull(0);
checknull(false);
checknull('');
checknull(array());
上述代码中对checknull()
的所有调用都将导致文本“$ var is null!”正在输出。
正如其他答案中所述,if...else
可能会更好地满足您的目的。
答案 1 :(得分:2)
我假设你想对输入值进行类型切换。
理论上,由于巨大的红色警告,你无法使用gettype
:
永远不要使用
gettype()
来测试某种类型,因为返回了 字符串可能会在将来的版本中更改。另外,它 也很慢,因为它涉及字符串比较。相反,请使用is_ *函数。
就在你和我之间,我预计它至少可以使用十年左右。但这会让你觉得很脏,这是真的。
在寻求官方支持的内容时,我们可能会转向:
function get_type_stable($var) {
$types = array('array','integer','double','string','object','resource','null');
foreach($types as $type) {
$typechecker = 'is_'.$type;
if($typechecker($var)) {
return $type;
}
}
}
switch(get_type_stable($var)) {
case 'integer': // whatever
case 'null': // etc
}
答案 2 :(得分:1)
不,你不能case INTEGER
。 NULL是一个特定值,INTEGER是一种数据类型。
您需要使用带有is_int()
的if语句。
答案 3 :(得分:1)
是否需要使用switch语句?简单的if / else块有什么问题?
<?php
if ( is_numeric($action) ) {
// $action is numeric; perform relevant actions
} else {
// it's not numeric.
}
答案 4 :(得分:1)
如果您想知道字符串是否是有效整数,可以使用ctype_digit()