8
Таблица сравнения типов в PHP
Рубрика: PHP, Алгоритмы, ОтладкаНеожиданные для многих результаты при операторах <, >, <= и >= со значением NULL. Данные результаты я также опубликовал на php.net. Может в будущем включат эти таблицы и в документацию.
До осмотра таблиц, важно знать и понимать типы переменных и их значения. К примеру, “42″ — строка, в то время как 42 — целое. FALSE — логическое, а “false” — строка.
Для разных версий php эти таблицы будут незначительно отличаться, особенно младших. В документации сказанно: “Заметка о PHP 3.0 Строка “0″ считалась не пустой, в PHP4 ситуация изменилась: строка трактуется как пустая. ”
Ссылки по теме:
PHP version 5.2.4 type comparison tables
Comparisons with ==
| TRUE | FALSE | 1 | 0 | -1 | 3,14 | “1″ | “0″ | “-1″ | NULL | array() | “php” | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TRUE | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE |
| FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE |
| 1 | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE |
| 0 | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | TRUE |
| -1 | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
| 3,14 | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| “1″ | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE |
| “0″ | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE |
| “-1″ | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
| NULL | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | TRUE | FALSE |
| array() | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | TRUE | FALSE |
| “php” | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE |
Comparisons with ===
| TRUE | FALSE | 1 | 0 | -1 | 3,14 | “1″ | “0″ | “-1″ | NULL | array() | “php” | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
| 3,14 | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| “1″ | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE |
| “0″ | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE |
| “-1″ | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
| NULL | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE |
| array() | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE |
| “php” | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE |
Comparisons with !=
| TRUE | FALSE | 1 | 0 | -1 | 3,14 | “1″ | “0″ | “-1″ | NULL | array() | “php” | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TRUE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE |
| FALSE | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE |
| 1 | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE |
| 0 | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | FALSE | TRUE | FALSE |
| -1 | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE |
| 3,14 | FALSE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| “1″ | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE |
| “0″ | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE |
| “-1″ | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE |
| NULL | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE | TRUE |
| array() | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE | TRUE |
| “php” | FALSE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE |
Comparisons with <>
| TRUE | FALSE | 1 | 0 | -1 | 3,14 | “1″ | “0″ | “-1″ | NULL | array() | “php” | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TRUE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE |
| FALSE | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE |
| 1 | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE |
| 0 | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | FALSE | TRUE | FALSE |
| -1 | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE |
| 3,14 | FALSE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| “1″ | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE |
| “0″ | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE |
| “-1″ | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE |
| NULL | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE | TRUE |
| array() | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE | TRUE |
| “php” | FALSE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE |
Comparisons with !==
| TRUE | FALSE | 1 | 0 | -1 | 3,14 | “1″ | “0″ | “-1″ | NULL | array() | “php” | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| 1 | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| 0 | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| -1 | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| 3,14 | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| “1″ | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE |
| “0″ | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE |
| “-1″ | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE |
| NULL | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE |
| array() | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE |
| “php” | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE |
Comparisons with <
| TRUE | FALSE | 1 | 0 | -1 | 3,14 | “1″ | “0″ | “-1″ | NULL | array() | “php” | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| FALSE | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE |
| 1 | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE |
| 0 | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE |
| -1 | FALSE | FALSE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | FALSE | TRUE | TRUE |
| 3,14 | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE |
| “1″ | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE | TRUE |
| “0″ | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | TRUE | FALSE | FALSE | FALSE | TRUE | TRUE |
| “-1″ | FALSE | FALSE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | FALSE | TRUE | TRUE |
| NULL | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE | TRUE |
| array() | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| “php” | FALSE | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE |
Comparisons with >
| TRUE | FALSE | 1 | 0 | -1 | 3,14 | “1″ | “0″ | “-1″ | NULL | array() | “php” | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TRUE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE |
| FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| 1 | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE |
| 0 | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE |
| -1 | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE |
| 3,14 | FALSE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE |
| “1″ | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE | FALSE | TRUE | TRUE | TRUE | FALSE | FALSE |
| “0″ | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | TRUE | FALSE | FALSE |
| “-1″ | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE |
| NULL | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE |
| array() | FALSE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE | TRUE |
| “php” | FALSE | TRUE | FALSE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE |
Comparisons with <=
| TRUE | FALSE | 1 | 0 | -1 | 3,14 | “1″ | “0″ | “-1″ | NULL | array() | “php” | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TRUE | TRUE | FALSE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE |
| FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| 1 | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE |
| 0 | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE |
| -1 | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE |
| 3,14 | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE | FALSE |
| “1″ | TRUE | FALSE | TRUE | FALSE | FALSE | TRUE | TRUE | FALSE | FALSE | FALSE | TRUE | TRUE |
| “0″ | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | FALSE | FALSE | TRUE | TRUE |
| “-1″ | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE |
| NULL | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| array() | TRUE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | TRUE | FALSE |
| “php” | TRUE | FALSE | TRUE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE | TRUE |
Comparisons with >=
| TRUE | FALSE | 1 | 0 | -1 | 3,14 | “1″ | “0″ | “-1″ | NULL | array() | “php” | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| FALSE | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE |
| 1 | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE |
| 0 | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE | FALSE | TRUE | TRUE | TRUE | FALSE | TRUE |
| -1 | TRUE | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | TRUE | FALSE | FALSE |
| 3,14 | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE |
| “1″ | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE |
| “0″ | FALSE | TRUE | FALSE | TRUE | TRUE | FALSE | FALSE | TRUE | TRUE | TRUE | FALSE | FALSE |
| “-1″ | TRUE | TRUE | FALSE | FALSE | TRUE | FALSE | FALSE | FALSE | TRUE | TRUE | FALSE | FALSE |
| NULL | FALSE | TRUE | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE | TRUE | TRUE | FALSE |
| array() | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE |
| “php” | TRUE | TRUE | FALSE | TRUE | TRUE | FALSE | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE |
А вот и код для построения теста:
<?php
$tests = array();
$tests['=='] = create_function(’$a, $b’, ‘return $a==$b;’);
$tests['==='] = create_function(’$a, $b’, ‘return $a===$b;’);
$tests['!='] = create_function(’$a, $b’, ‘return $a!=$b;’);
$tests['<>'] = create_function(’$a, $b’, ‘return $a<>$b;’);
$tests['!=='] = create_function(’$a, $b’, ‘return $a!==$b;’);
$tests['<'] = create_function(’$a, $b’, ‘return $a<$b;’);
$tests['>'] = create_function(’$a, $b’, ‘return $a>$b;’);
$tests['<='] = create_function(’$a, $b’, ‘return $a<=$b;’);
$tests['>='] = create_function(’$a, $b’, ‘return $a>=$b;’);
$comparison = array();
$comparison['TRUE'] = true;
$comparison['FALSE'] = false;
$comparison['1'] = 1;
$comparison['0'] = 0;
$comparison['-1'] = -1;
$comparison['3,14'] = pi();
$comparison['"1"'] = ‘1′;
$comparison['"0"'] = ‘0′;
$comparison['"-1"'] = ‘-1′;
$comparison['NULL'] = null;
$comparison['array()'] = array();
$comparison['"php"'] = ‘php’;
print ‘<h1>PHP version ‘.PHP_VERSION.’ type comparison tables</h1>’;
foreach ($tests as $test=>$function) {
print “<h2>Comparisons with $test</h2>”;
print “<table border=’1′>”;
print “<tr>”;
print “<th> </th>”;
foreach (array_keys($comparison) as $name) {
print “<th>$name</th>”;
}
print “</tr>”;
foreach ($comparison as $arg_1_name => $arg_1_value) {
print ‘<tr>’;
print “<th>$arg_1_name</th>”;
foreach ($comparison as $arg_2_value) {
print ‘<td>’;
print $function($arg_1_value, $arg_2_value)==true ?
‘<span style=”color:#00F;”>TRUE</span>’ : ‘<span style=”color:#F00;”>FALSE</span>’;
print ‘</td>’;
}
print “</tr>”;
}
print “</table>”;
}
?>
ИМХО это очень специфичные данные. Действительно нужно только при отладке, причём легче проверить это по ходу действия, чем искать в таблице.
Отнють. Помоему эти таблицы должны представлять в голове все php программисты хотябы от части, иначе можно и не писать вообще.
В том то и дело, что у 99% программистов эти таблицы в голове не полностью. В частности > и <
я ожидал такого результата..