有一段时间我一直在使用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;
}
// ...
}
这种方法可以完成工作,但看起来很混乱,而且在我的代码方面,我是一个干净的怪人......有什么东西看起来更优雅吗?
答案 0 :(得分:3)
这个怎么样:
function typeAsNumber( $var = null ) {
$validTypes = array( "boolean",
"integer",
"double",
"string",
"array",
"object",
"resource",
"NULL",
"unknown type"
);
return array_search( gettype( $var ), $validTypes);
}
答案 1 :(得分:2)
我不知道你为什么要这样做,正如你所说的那样..你一直在使用这个函数,所以你显然已经在返回的结果周围创建了代码。所以修改这样一个重要的函数可以/滚动更新时可能会导致复杂化,因为这将包括大规模代码结构更改,&创建一个简单的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;
}
}
使用switch
和case
方法可让用户轻松阅读您的代码和可以更简单地验证返回,例如..简单的外观会显示resource
类型将返回7
答案 2 :(得分:2)
当函数返回一组枚举值中的一个时,将它们定义为常量是很常见的。这允许人们在不知道值是什么的情况下在代码中的其他地方引用它们。
例如:
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;
}