转到正文

浪淘沙

静观己心,厚积薄发

存档

标签: isset

gettype获取变量的类型

string gettype ( mixed $var )  返回 PHP 变量的类型 var .

PHP manual 有个大大的warning:

不要使用 gettype() 来测试某种类型,因为其返回的字符串在未来的版本中可能需要改变。此外,由于包含了字符串的比较,它的运行也是较慢的。

使用 is_* 函数代替。

但是有时候 我们又不得不使用gettype这样的功能来判断参数的类型,这个时候我们应该怎么办?O(∩_∩)O哈哈~ 热心的网友已经帮我们重新实现了这个逻辑。代码如下:

 
function get_type($var)
{
    if (is_object($var)) {
        return get_class($var);
    }
    if (is_null($var)) {
        return 'null';
    }
    if (is_string($var)) {
        return 'string';
    }
    if (is_array($var)) {
        return 'array';
    }
    if (is_int($var)) {
        return 'integer';
    }
    if (is_bool($var)) {
        return 'boolean';
    }
    if (is_float($var)) {
        return 'float';
    }
    if (is_resource($var)) {
        return 'resource';
    }
    return 'unknown';
}

另一个版本

/**
 * Returns the type of the var passed.
 *
 * @param mixed $var Variable
 *
 * @return string Type of variable
 */
function myGetType($var)
{
    if (is_array($var)) {
        return "array";
    }
    if (is_bool($var)) {
        return "boolean";
    }
    if (is_float($var)) {
        return "float";
    }
    if (is_int($var)) {
        return "integer";
    }
    if (is_null($var)) {
        return "NULL";
    }
    if (is_numeric($var)) {
        return "numeric";
    }
    if (is_object($var)) {
        return "object";
    }
    if (is_resource($var)) {
        return "resource";
    }
    if (is_string($var)) {
        return "string";
    }
    return "unknown type";
}

 

php一个弱类型语言。一个变量,你可以随便为它赋值,而不需要考虑它原来是什么类型。这样简直是太方便,太爽了。

但是,就是因为这个软类型特性, 使得我们要特别注意变量的比较操作结果。

因为以前没有太在意php变量比较规则,昨天在实现功能的时候就掉进坑里面去了。

代码如下:

$needle = '5';
$haystack = array(5,10,15);
if (in_array($needle, $haystack, true)) {
    echo var_export($needle, 1), ' is in array ', var_export($haystack, 1);
} else {
   echo var_export($needle, 1), ' is not in array ', var_export($haystack, 1);
}

我的本意是 可以进入到if 语句块,但是结果却进入了else语句块。因为in_array使用的严格模式,php认为 数字5 和字符串’5′ 是不相等的。虽然他们的值一样,但是他们的类型是不一样的,一个是数字类型,而另一个却是字符类型。 继续阅读