Сравнение типов данных в PHP
| Сравнение различных типов $variable и результаты функций PHP | |||||
| Выражение | gettype() | empty() | is_null() | isset() | boolean : if($variable) |
| $variable = ''; | string | TRUE | FALSE | TRUE | FALSE |
| $variable = null; | NULL | TRUE | TRUE | FALSE | FALSE |
| var $variable; | NULL | TRUE | TRUE | FALSE | FALSE |
| // $variable не определена | NULL | TRUE | TRUE | FALSE | FALSE |
| $variable = array(); | array | TRUE | FALSE | TRUE | FALSE |
| $variable = array('x', 'y'); | array | FALSE | FALSE | TRUE | TRUE |
| $variable = false; | boolean | TRUE | FALSE | TRUE | FALSE |
| $variable = true; | boolean | FALSE | FALSE | TRUE | TRUE |
| $variable = 1; | integer | FALSE | FALSE | TRUE | TRUE |
| $variable = 42; | integer | FALSE | FALSE | TRUE | TRUE |
| $variable = 0; | integer | TRUE | FALSE | TRUE | FALSE |
| $variable = -1; | integer | FALSE | FALSE | TRUE | TRUE |
| $variable = '1'; | string | FALSE | FALSE | TRUE | TRUE |
| $variable = "0"; | string | TRUE | FALSE | TRUE | FALSE |
| $variable = '-1'; | string | FALSE | FALSE | TRUE | TRUE |
| $variable = 'txt'; | string | FALSE | FALSE | TRUE | TRUE |
| $variable = 'true'; | string | FALSE | FALSE | TRUE | TRUE |
| $variable = 'false'; | string | FALSE | FALSE | TRUE | TRUE |
Гибкое сравнение разных типов с помощью ==
| == | TRUE | FALSE | 1 | 0 | -1 | '1' | '0' | '-1' | NULL | array() | 'txt' | '' |
| TRUE | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE |
| FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE | TRUE |
| 1 | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| 0 | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE |
| -1 | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE |
| '1' | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| '0' | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE |
| '-1' | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE |
| NULL | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE | TRUE | FALSE | TRUE |
| array() | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | TRUE | FALSE | FALSE |
| 'txt' | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE |
| '' | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | TRUE |
Жесткое сравнение различных типов с помощью ===
| === | TRUE | FALSE | 1 | 0 | -1 | '1' | '0' | '-1' | NULL | array() | 'txt' | '' |
| TRUE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| 1 | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| 0 | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| -1 | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| '1' | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| '0' | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE |
| '-1' | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE |
| NULL | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
| array() | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE |
| 'txt' | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE |
| '' | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE |
p.s. Очень познавательная статья о сравнении в PHP на хабре с наглядными примерами, о том почему нужно быть внимательным к сравнению различных типов.
<em>var_dump((null=='')); //bool(true) var_dump((null==='')); //bool(false) var_dump((null!=='')); //bool(true) var_dump(((bool)null==false)); //bool(true) var_dump(((bool)null===false)); //bool(true) var_dump(((bool)((string)'test')===true)); //bool(true) var_dump(((bool)((string)'-10')===true)); //bool(true) var_dump(((bool)((int)'-10')===true)); //bool(true) var_dump(((bool)((int)[])===true)); //bool(false) var_dump(((bool)((int)['' => ''])===true)); //bool(true) var_dump(((bool)((int)'1'.'2')===true)); //bool(true) var_dump(((bool)((int)1+2.2)===true)); //bool(true) </em>
var_dump(''); // string(0) ""
var_dump((int)''); // int(0) число из пустой строки - 0
var_dump((bool)''); // bool(false) пустая строка - лож
var_dump((bool)(int)''); // bool(false) пустую строку в число - 0 -> число 0 в boolean - лож
var_dump('null'); // string(4) "null"
var_dump((bool)'null'); // bool(true) не пустая строка - истина
var_dump((int)'null'); // int(0) не пустая строка без числа в начале - 0
var_dump((int)'1null'); // int(0) не пустая строка с числом в начале - 1
var_dump((bool)(unset)true); // bool(false) истина -> null -> в boolean - лож
просмотров: 1956