Aqui está uma função que escrevi para simplificar as coisas para mim:
Ele também retorna versões abreviadas de booleano, inteiro, duplo e real.
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;
}
}
O tipo de chamada com parseNumeric definido como true converterá seqüências numéricas antes de verificar o tipo.
Portanto:
type ("5", true) retornará int
type ("3.7", true) retornará float
type ("500") retornará string
Apenas tome cuidado, pois esse é um tipo de método de verificação falsa e sua variável real ainda será uma string. Você precisará converter a variável real para o tipo correto, se necessário. Eu só precisava verificar se o banco de dados deveria carregar um ID ou um alias de item, sem causar efeitos inesperados, pois ele será analisado como uma string no tempo de execução.
Editar
Se você deseja detectar se objetos são funções, adicione este caso ao comutador:
case 'object': return is_callable($mixed)?'function':'object';