Oto funkcja, którą napisałem, aby uprościć rzeczy dla siebie:
Zwraca także skrócone wersje boolean, integer, double i 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;
}
}
Wywołanie typu z parseNumeric ustawionym na true spowoduje konwersję ciągów liczbowych przed sprawdzeniem typu.
A zatem:
type („5”, true) zwróci int
type („3.7”, true) zwróci liczbę zmiennoprzecinkową
typ („500”) zwróci ciąg znaków
Bądź ostrożny, ponieważ jest to rodzaj fałszywej metody sprawdzania, a twoja rzeczywista zmienna nadal będzie ciągiem znaków. W razie potrzeby będziesz musiał przekonwertować rzeczywistą zmienną na poprawny typ. Potrzebowałem go tylko, aby sprawdzić, czy baza danych powinna załadować identyfikator elementu lub alias, nie powodując przy tym żadnych nieoczekiwanych efektów, ponieważ i tak zostanie on przeanalizowany jako ciąg znaków w czasie wykonywania.
Edytować
Jeśli chcesz wykryć, czy obiekty są funkcjami, dodaj ten przypadek do przełącznika:
case 'object': return is_callable($mixed)?'function':'object';