Как узнать тип переменной php

Как узнать тип переменной php

(PHP 3, PHP 4, PHP 5)

gettype — получает тип переменной.

Описание

string gettype (mixed var)

Возвращает тип РНР-переменной var .

Предупреждение!

Никогда не используйте gettype() для проверки типа, поскольку возвращаемая строка может быть субъектом для изменения в последующих версиях. Кроме того, это слишком медленно, так как выполняется сравнение строк.

Используйте вместо неё функции is_* .

Возможными значениями для возвращаемой строки являются:

" boolean " (начиная с PHP 4, PHP 5)

" double " (по историческим соображениям "double" возвращается в случае с float , а не просто "float")

" resource " (начиная с PHP 4, PHP 5)

"NULL" (начиная с PHP 4, PHP 5)

"user function" (только в PHP 3, не рекомендуется)

Для PHP 4 вы должны использовать function_exists() и method_exists() взамен ранее использовавшейся gettype() .

В этой статье вы узнаете как и зачем проверяют на тип данных (как правило в переменной) в PHP.

Как проверить тип переменной в PHP

В ваших скриптах может возникнуть необходимость на дополнительную проверку и иногда, это проверка на какой-то определенный тип. Чаще всего, смотрим, есть ли хоть какого-то значение в переменной:

В этом языке программирования типизацию называют динамической (также, можно встретить термин «слабая типизация«). Это означает, что строка может стать числом, если мы применим оператор сложения.
За это, кстати говоря, у PHP так много ненавистников 🙂 .

Вернемся к нашей теме. Чтобы проверить на типы данных существуют следующие проверки:

Можем проверить на массив, на тип булево (true или false), число с плавающей точкой, обычное число, строку и объект.

Эти проверки помогут вам в ваших скриптах. Например, стоит задача: если приходит целое число, то мы ничего не делаем, а если с плавающей точкой то округляем в какую-то сторону на «столько-то» знаков.

Также, бывают случаи, когда в переменную может записываться как число, так и массив, и нам нужно предусмотреть все эти варианты.

Есть также проверка и для NULL:

Вот такие вот простые и полезные вещи могут улучшить наш код 🙂

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

Какие услуги предоставляю:
— Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
— Разработка функционала с нуля и доработка кода на уже созданных проектах;
— Поддержка рабочего сайта, доработки по ТЗ;
— Адаптивная вёрстка макетов и натяжка на Битрикс;
— Парсинг сайтов;
— Выгрузка и Загрузка на сайт (форматы — CSV, XML, XLS, XLSX, JSON)
— Интеграции со сторонними сервисами по API;
— Многоязычные версии сайтов и многое другое.

(PHP 4, PHP 5, PHP 7)

gettype — Возвращает тип переменной

Описание

Возвращает тип PHP-переменной var . Для проверки типа переменной используйте функции is_*.

Список параметров

Возвращаемые значения

Возможными значениями возвращаемой строки являются:

  • " boolean "
  • " integer "
  • " double " (по историческим причинам в случае типа float возвращается "double", а не просто "float")
  • " string "
  • " array "
  • " object "
  • " resource "
  • "resource (closed)" с PHP 7.2.0
  • " NULL "
  • "unknown type"

Примеры

Пример #1 Пример использования gettype()

Читайте также:  Huawei nova 3 и хонор 10

= array( 1 , 1. , NULL , new stdClass , ‘foo’ );

foreach ( $data as $value ) <
echo gettype ( $value ), "
" ;
>

Результатом выполнения данного примера будет что-то подобное:

Список изменений

Версия Описание
7.2.0 Для закрытых ресурсов теперь возвращается ‘resource (closed)’. Ранее для закрытых ресурсов возвращалось ‘unknown type’.

Смотрите также

  • settype() — Задает тип переменной
  • get_class() — Возвращает имя класса, к которому принадлежит объект
  • is_array() — Определяет, является ли переменная массивом
  • is_bool() — Проверяет, является ли переменная булевой
  • is_callable() — Проверяет, может ли значение переменной быть вызвано в качестве функции
  • is_float() — Проверяет, является ли переменная числом с плавающей точкой
  • is_int() — Проверяет, является ли переменная целым числом
  • is_null() — Проверяет, является ли значение переменной равным NULL
  • is_numeric() — Проверяет, является ли переменная числом или строкой, содержащей число
  • is_object() — Проверяет, является ли переменная объектом
  • is_resource() — Проверяет, является ли переменная ресурсом
  • is_scalar() — Проверяет, является ли переменная скалярным значением
  • is_string() — Проверяет, является ли переменная строкой
  • function_exists() — Возвращает TRUE, если указанная функция определена
  • method_exists() — Проверяет, существует ли метод в данном классе

User Contributed Notes 11 notes

= 5 / 0 ;
$number2 = sqrt (- 3 );
$number3 = pow ( 0 , 0 );
$number4 = 0 / 0 ;

echo $number . "
" ;
echo $number2 . "
" ;
echo $number3 . "
" ;
echo $number4 . "
" ;
echo "
" ;
echo gettype ( $number ). "
" ;
echo gettype ( $number2 ). "
" ;
echo gettype ( $number3 ). "
" ;
echo gettype ( $number4 );
?>

This will return:
INF
NAN
1
NAN

After some testing I found a bug in my function "myGetType":
The check for "is_callable" was done before "is_string", so that something like echo myGetType ( "max" ); ?> would output: "function reference" instead of "string"

"is_callable" and "is_string" can’t be checked together in this method, so I’ve removed the check for is_callable because it’s a very rare usage case and if it’s a valid string the check for is_callable never executes because is_string would be reached first (or vice-versa).

So here is the new function without "is_callable"-Check:
/**
* Returns the type of the var passed.
*
* @param mixed $var Variable
* @return string Type of variable
*/
function myGetType ( $var )
<
if ( is_array ( $var )) return "array" ;
if ( is_bool ( $var )) return "boolean" ;
if ( is_float ( $var )) return "float" ;
if ( is_int ( $var )) return "integer" ;
if ( is_null ( $var )) return "NULL" ;
if ( is_numeric ( $var )) return "numeric" ;
if ( is_object ( $var )) return "object" ;
if ( is_resource ( $var )) return "resource" ;
if ( is_string ( $var )) return "string" ;
return "unknown type" ;
>
?>

@langpavel at phpskelet dot org

Doesn’t the gettype return the string already? Using get_class seems to be the only "useful" part of that solution. All that can be reduced to somewhere half in terms of the amount of code.

NaN and #IND will return double or float on gettype, while some inexistent values, like division by zero, will return as a boolean FALSE. 0 by the 0th potency returns 1, even though it is mathematically indetermined.

= 5 / 0 ;
$number2 = sqrt (- 3 );
$number3 = pow ( 0 , 0 );
$number4 = 0 / 0 ;

Читайте также:  Журнал учета посещений в яндекс почте очистить

echo $number . "
" ;
echo $number2 . "
" ;
echo $number3 . "
" ;
echo $number4 . "
" ;
echo "
" ;
echo gettype ( $number ). "
" ;
echo gettype ( $number2 ). "
" ;
echo gettype ( $number3 ). "
" ;
echo gettype ( $number4 );
?>

This will return:


1
1

PHP Warning: Division by zero in C est.php on line 2 PHP Warning: Division by zero in C: est.php on line 5

Here is something that had me stumped with regards to gettype and is_object.
Gettype will report an incomplete object as such, whereas is_object will return FALSE.

if (! is_object ( $incomplete_obj )) <
echo ‘This variable is not an object, it is a/an ‘ . gettype ( $incomplete_obj );
>
?>

Will print:
This variable is not an object, it is a/an object

This function returns string representation of type. This is generalization of get_class(). I try to order is_* tests by density of occurence, but is bad idea to use result of this call in conditions for performance reasons, usefull and better than gettype for debugging messages.
Note, that last line should not be never executed.
Also has no sense to make input parameter optional.

function get_type ( $var )
<
if( is_object ( $var ))
return get_class ( $var );
if( is_null ( $var ))
return ‘null’ ;
if( is_string ( $var ))
return ‘string’ ;
if( is_array ( $var ))
return ‘array’ ;
if( is_int ( $var ))
return ‘integer’ ;
if( is_bool ( $var ))
return ‘boolean’ ;
if( is_float ( $var ))
return ‘float’ ;
if( is_resource ( $var ))
return ‘resource’ ;
//throw new NotImplementedException();
return ‘unknown’ ;
>
?>

This is my work around for the gettype warning. Hope some find it useful.

/**
* Returns the type of the passed var
* — PHP warns against using gettype(), this is my workaround
*
* @param mixed $var
* @return string
*/
function myGetType ( $var )
<
if ( is_array ( $var )) return "array" ;
if ( is_bool ( $var )) return "boolean" ;
if ( is_callable ( $var )) return "function reference" ;
if ( is_float ( $var )) return "float" ;
if ( is_int ( $var )) return "integer" ;
if ( is_null ( $var )) return "NULL" ;
if ( is_numeric ( $var )) return "numeric" ;
if ( is_object ( $var )) return "object" ;
if ( is_resource ( $var )) return "resource" ;
if ( is_string ( $var )) return "string" ;
return "unknown type" ;
>
?>

[EDITOR thiago NOTE: Code has been updated by PPKu-N0-SPAM-schy at mediasoft-berlin dot de]

In some rare cases a class instance object returns false when an object but gettype() returns "object".

$save = serialize ( $x );

$obj = unserialize ( $save );
// here sometimes is_object() returns FALSE
if ( is_object ( $x ) || gettype ( $x ) === "object" )
<
// . do something
>
?>

I wrote my own gettype function by just using the default is_? functions, but it took twice as long as gettype. So I decided to use gettype with a twist.

Taking the warnings about gettype to heart, and depending on your custom needs, it’s worthwhile to dynamically test the gettype result with a known variable, and link the result to a predefined result. Like so:

/*
dynamically create an array by using known variable types
link with a predefined value
*/
$R =array();
$R [ gettype ( .0 )]= ‘number’ ;
$R [ gettype ( 0 )]= ‘number’ ;
$R [ gettype ( true )]= ‘boolean’ ;
$R [ gettype ( » )]= ‘string’ ;
$R [ gettype ( null )]= ‘null’ ;
$R [ gettype (array())]= ‘array’ ;
$R [ gettype (new stdClass ())]= ‘object’ ;

Читайте также:  Классные игры для айфона

// what is
function wis_ ( $v ) <
global $R ;
return $R [ gettype ( $v )];
>

echo wis_ ( ‘hello’ ) . ‘
‘ ; // "string"
echo wis_ ( 24 ) . ‘
‘ ; // "number"
echo wis_ ( 0.24 ) . ‘
‘ ; // "number"
echo wis_ ( null ) . ‘
‘ ; // "null"
echo wis_ ( $R ) . ‘
‘ ; // "array"
?>
You won’t need to worry about changes in gettype’s return strings in future versions.
If the result evaluates to false then you know the variable tested is some "other" type.

I also find these useful
function is_num ( $v )
function is_box ( $v )

echo is_num ( null ) . ‘
‘ ; // false
echo is_num ( false ) . ‘
‘ ; // false
echo is_num ( ‘123’ ) . ‘
‘ ; // false
echo is_num ( 123 ) . ‘
‘ ; // true
echo is_num ( 123.0 ) . ‘
‘ ; // true
?>

this fastest solution I found to identify a variable type without using gettype function:
function typeof ( $var ) <
if ( is_object ( $var ))
return "object" ;

if ( is_resource ( $var ))
return "resource" ;

return (( $var === null ) ? "null" :
(((bool) $var === $var ) ? "bool" :
(((float) $var === $var ) ? "float" :
(((int) $var === $var ) ? "int" :
(((string) $var === $var ) ? "string" :
"unknown"
)
)
)
)
);
>
?>
Maybe someone has a more elegant solution to check for object and resource types.

The complete script — including several identify- and timing functions follow:
#!/usr/bin/php
function typeof_trinary ( $var ) <
if ( is_object ( $var ))
return "object" ;

if ( is_resource ( $var ))
return "resource" ;

return (( $var === null ) ? "null" :
(((bool) $var === $var ) ? "bool" :
(((float) $var === $var ) ? "float" :
(((int) $var === $var ) ? "int" :
(((string) $var === $var ) ? "string" :
"unknown"
)
)
)
)
);
>

function typeof_if_query ( $var ) <

if ( is_object ( $var ))
return "object" ;

if ( is_resource ( $var ))
return "resource" ;

if ((bool) $var === $var )
return "bool" ;

if ((float) $var === $var )
return "float" ;

if ((int) $var === $var )
return "int" ;

if ((string) $var === $var )
return "string" ;

if ( null === $var )
return "null" ;

function typeof_gettype ( $var ) <
return gettype ( $var );
>

echo "start@ " . date ( "Y-m-d H:i:s" ) . "
" ;
echo "$var = $var — gettype($var) = " . gettype ( $var ) . "

" ;
$time = — microtime ( true );

echo "typeof_if_query($var) = " . typeof_if_query ( $var ) . "
" ;
$time += microtime ( true );
echo "duration: " . sprintf ( "%0.10f" , $time ) . "

" ;

$time = — microtime ( true );

echo "typeof_gettype($var) = " . typeof_gettype ( $var ) . "
" ;
$time += microtime ( true );
echo "duration: " . sprintf ( "%0.10f" , $time ) . "

" ;

$time = — microtime ( true );

echo "typeof_trinary($var) = " . typeof_trinary ( $var ) . "
" ;
$time += microtime ( true );
echo "duration: " . sprintf ( "%0.10f" , $time ) . "

" ;
?>

My console output — try the script several times!:
$ ./gettype.php
start@ 2015-01-10 01:10:37
$var = 100 — gettype($var) = integer

typeof_if_query($var) = int
duration: 0.0000500679

typeof_gettype($var) = integer
duration: 0.0000309944

typeof_trinary($var) = int
duration: 0.0000240803

Ссылка на основную публикацию
Как удалиться из приложения фотострана
Социальная сеть «Фотострана» многим не нравится своей навязчивостью, что также проявляется, когда пользователь желает удалить свой аккаунт. В самой сети...
Как удалить аккаунт на юле с телефона
У пользователей в той или иной ситуации появляется необходимо удаления профиля из какого-либо приложения, причем речь идет о полном удалении...
Как удалить антивирус bitdefender с компьютера
Удаление антивируса Bitdefender через панель управления. Откройте панель управления Windows и, в зависимости от операционной системы, выберите меню "Удаление программ",...
Как удалиться с сайта навечно
На сегодняшний день существует множество сайтов знакомств, и зачастую пользователи регистрируются на нескольких одновременно в поисках интересного общения, новых друзей...
Adblock detector