case is_numeric($ action):可以用另一种方式编写吗?

时间:2012-01-21 05:17:42

标签: php

我想知道我是否可以像这样编写is_numeric($ action):

switch ($action):
    case NULL:
...

CASE INTEGER:无效。

5 个答案:

答案 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()