一段时间以来,我一直在使用: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;
}