变量强制转换上的常见整数表示


Common integer representation over variable casting?

一段时间以来,我一直在使用:gettype();来动态获取变量强制转换类型,例如:

function Type ($Value = null){
 return gettype($Value);
}

echo Type(array()); // Echo array
echo Type (1); // Echo integer
echo Type(1.2); // echo doubble

然而,我正在寻找一种具有通用和已知整数表示的方法,我相信它比传统字符串更容易验证。

有人对此有可能的解决方案吗?

我有这样的东西:

function Type ($Value = null){
 $Type = gettype($Value);
 if ($Type === "array"){
   return 1;
 }elseif ($Type === "integer"){
   return 2;
 }
 // ...
}

这个方法完成了任务,但看起来很乱,而且我在代码方面有点洁癖。。。有什么东西看起来更优雅吗?

这个怎么样:

function typeAsNumber( $var = null ) {
   $validTypes = array( "boolean", 
                        "integer", 
                        "double", 
                        "string", 
                        "array",  
                        "object", 
                        "resource", 
                        "NULL", 
                        "unknown type" 
                      );
   return array_search( gettype( $var ), $validTypes);
}

我不知道你为什么要这么做,正如你所说的。。您一直在使用这个函数,所以您显然已经围绕返回的结果创建了代码。。因此,当滚动更新时,修改这样一个重要的函数可能会导致复杂的情况,因为这将包括大量代码结构的更改,&创建一个简单的API的方法是保持连续性。。因此,如果公众可以使用此代码,那么剧烈的更改将使人们(如果使用)升级到另一个版本时感到尴尬。

如果你也。。这是我刚刚写的东西:

function Cast_Type ($Value = null){
    $Type = gettype($Value);
    switch ($Type){
        case "boolean":
            return 1;
            break;
        case "integer":
            return 2;
            break;
        case "double":
            return 3;
            break;
        case "string":
            return 4;
            break;
        case "array":
            return 5;
            break;
        case "object":
            return 6;
            break;
        case "resource":
            return 7;
            break;
        case "NULL":
            return 8;
            break;
        case "unknown type":
            return false;
            break;
    }
}

使用CCD_ 2和CCD_;可以更容易地验证返回,如中所示。简单地看一下就会发现resource类型将返回7

当函数返回一组枚举值中的一个时,通常将它们定义为常量。这允许人们在不知道值是什么的情况下在代码的其他地方引用它们

例如:

define('TYPE_BOOLEAN', 0);
define('TYPE_INTEGER', 1);
define('TYPE_FLOAT', 2);
define('TYPE_STRING', 3);
define('TYPE_ARRAY', 4);
define('TYPE_OBJECT', 5);
define('TYPE_RESOURCE', 6);
define('TYPE_NULL', 7);
define('TYPE_UNKNOWN', 8);
function type($var) {
    switch (gettype($var)) {
        case 'boolean':
            return TYPE_BOOLEAN;
        case 'integer':
            return TYPE_INTEGER;
        case 'double':
            return TYPE_FLOAT;
        case 'string':
            return TYPE_STRING;
        case 'array':
            return TYPE_ARRAY;
        case 'object':
            return TYPE_OBJECT;
        case 'resource':
            return TYPE_RESOURCE;
        case 'NULL':
            return TYPE_NULL;
    }
    return TYPE_UNKNOWN;
}

现在,当您使用该函数时,您可以编写有意义的代码。type()不是只返回一个不起眼的整数,而是返回一个可以与常数进行比较的整数。

if (type($val) === TYPE_OBJECT) {
    $val = (array) $val;
}

尽管如此,这样做还是有点多余。gettype()函数总是为相同的类型返回相同的值,因此将返回值与'object'之类的值进行比较也同样有效。

if (gettype($val) === 'object') {
    $val = (array) $val;
}