Вот функция, которую я написал, чтобы упростить для себя вещи:
Она также возвращает сокращенные версии логических, целых, двойных и вещественных чисел.
function type($mixed, $parseNumeric = false)
{
if ($parseNumeric && is_numeric($mixed)) {
//Set type to relevant numeric format
$mixed += 0;
}
$t = gettype($mixed);
switch($t) {
case 'boolean': return 'bool'; //shorthand
case 'integer': return 'int'; //shorthand
case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
default: return $t;
}
}
Тип вызова с parseNumeric, установленным вtrue будет преобразовывать числовые строки перед проверкой типа.
Таким образом:
type ("5", true) вернет int
type ("3.7", true) вернетТип float
("500") вернет строку
Только будьте осторожны, так как это своего рода метод ложной проверки, а ваша фактическая переменная все равно будет строкой.Вам нужно будет преобразовать фактическую переменную в правильный тип, если это необходимо.Мне просто нужно было проверить, должна ли база данных загружать идентификатор элемента или псевдоним, таким образом, не получая никаких неожиданных эффектов, так как он все равно будет анализироваться как строка во время выполнения.
Редактировать
Если вы хотите определить, являются ли объекты функциями, добавьте этот случай в коммутатор:
case 'object': return is_callable($mixed)?'function':'object';