Вот функция, которую я написал, чтобы упростить для себя вещи:
Он также возвращает сокращенные версии логических, целых, двойных и вещественных чисел.
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
type ("500") вернет строку
Просто будьте осторожны, так как это своего рода метод ложной проверки, и ваша фактическая переменная все равно будет строкой. Вам нужно будет преобразовать фактическую переменную в правильный тип, если это необходимо. Мне просто нужно было проверить, должна ли база данных загружать идентификатор элемента или псевдоним, таким образом, не получая никаких неожиданных эффектов, так как в любом случае она будет проанализирована как строка во время выполнения.
редактировать
Если вы хотите определить, являются ли объекты функциями, добавьте этот случай в коммутатор:
case 'object': return is_callable($mixed)?'function':'object';