downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Lista semnelor interpretorului> <Domeniul Unix: Unix și UDG
Last updated: Fri, 20 Nov 2009

view this page in

Tabelele de comparaţii ale tipurilor PHP

Tabelele următoare demonstrează comportamentul tipurilor şi operatorilor de comparare din PHP, pentru ambele tipuri de comparaţii — libere şi stricte. Acest supliment de asemenea are legătură şi cu secţiunea din manual despre jonglarea cu tipurile. Inspiraţia a fost adusă de diverse comentarii ale utilizatorilor şi de lucrările de la » BlueShoes.

Înainte de a utiliza aceste tabele, este important de a întelege tipurile şi însemnătatea lor. Spre exemplu "42" este un string, în timp ce 42 este un integer. FALSE este un boolean, în timp ce "false" este un string.

Notă: Formularele HTML nu transmit tipuri integer, float, sau boolean; ele transmit string-uri. Pentru a afla dacă un string este numeric, puteţi folosi is_numeric().

Notă: Facând, pur şi simplu, if ($x), în timp ce $x nu este definit va genera o eroare de nivelul E_NOTICE. În loc, consideraţi utilizarea empty() sau isset() şi/sau iniţializaţi variabilele.

Comparaţiile $x cu funcţiile PHP
Expresia gettype() empty() is_null() isset() boolean : if($x)
$x = ""; string TRUE FALSE TRUE FALSE
$x = null NULL TRUE TRUE FALSE FALSE
var $x; NULL TRUE TRUE FALSE FALSE
$x is undefined NULL TRUE TRUE FALSE FALSE
$x = array(); array TRUE FALSE TRUE FALSE
$x = false; boolean TRUE FALSE TRUE FALSE
$x = true; boolean FALSE FALSE TRUE TRUE
$x = 1; integer FALSE FALSE TRUE TRUE
$x = 42; integer FALSE FALSE TRUE TRUE
$x = 0; integer TRUE FALSE TRUE FALSE
$x = -1; integer FALSE FALSE TRUE TRUE
$x = "1"; string FALSE FALSE TRUE TRUE
$x = "0"; string TRUE FALSE TRUE FALSE
$x = "-1"; string FALSE FALSE TRUE TRUE
$x = "php"; string FALSE FALSE TRUE TRUE
$x = "true"; string FALSE FALSE TRUE TRUE
$x = "false"; string FALSE FALSE TRUE TRUE

Comparaţiile libere cu ==
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
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
"php" TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE

Comparaţiile stricte cu ===
TRUE FALSE 1 0 -1 "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
"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
"php" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
"" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE



add a note add a note User Contributed Notes
Tabelele de comparaţii ale tipurilor PHP
rich
08-May-2008 02:20
The note about object comparison should be corrected. Cloning objects does not imply instances are the same, so === would return FALSE.

Compare object
<?php
$o
= new stdClass();
$o->we = 12;

$o2 = new stdClass();
$o2->we = 12;

$o3 = clone $o2;
var_dump($o == $o2); //true
var_dump($o === $o2); //false
var_dump($o3 === $o2); //false
?>
gernovich at ya dot ru
08-May-2008 07:48
Universal comparison test.

<?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>&nbsp;</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>";
}

?>
info at shaelf dot ru
06-Jan-2008 09:51
Compare object
<?php
$o
= new stdClass();
$o->we = 12;

$o2 = new stdClass();
$o2->we = 12;

$o3 = clone $o2;
var_dump($o == $o2); //true
var_dump($o === $o2); //false
var_dump($o3 === $o2); //true
?>
frank
14-Aug-2007 10:06
A comparison table for <=,<,=>,> would be nice...
Following are TRUE (tested PHP4&5):
NULL <= -1
NULL <= 0
NULL <= 1
!(NULL >= -1)
NULL >= 0
!(NULL >= 1)
That was a surprise for me (and it is not like SQL, I would like to have the option to have SQL semantics with NULL...).
15-Mar-2007 10:06
Re: omit's comment

The note omit quotes is referring to the VALUE returned, not its name. If you put 42 into a text field, the corresponding array value will be the string "42". The note makes no comment on the array's keys.
omit
23-Aug-2006 06:32
the manual said "HTML Forms do not pass integers, floats, or booleans; they pass strings"

while this is true, php will sometimes change the type to either type array, or possibly type integer(no, not a numeric string) if it was used as an array key. php seems to do this when it parses the request data into the predefined variable arrays.

example:

<input type="text" name="foo[5]">
<input type="text" name="foo[7]">

now obviously the browser will send those names as a string. but php will change thier type.

<?php

// $_POST['foo'] is an array
var_dump($_POST['foo']);

foreach (
$_POST['foo'] as $key => $val) {
   
// the keys 5 and 7 will be type integer
   
var_dump($key);
}

?>

because of this, its also a good idea to check the types of your variables.
Jan
29-Dec-2005 07:23
Note that php comparison is not transitive:

"php" == 0 => true
0 == null => true
null == "php" => false
php [at] barryhunter [.] co [.] uk
07-Sep-2005 07:44
In case it helps someone, here's a table to compare different Variable tests (created before I found this page!)

http://www.deformedweb.co.uk/php_variable_tests.php
jerryschwartz at comfortable dot com
26-Jul-2005 08:04
In some languages, a boolean is promoted to an integer (with a value of 1 or -1, typically) if used in an expression with an integer. I found that PHP has it both ways:

If you add a boolean with a value of true to an integer with a value of 3, the result will be 4 (because the boolean is cast as an integer).

On the other hand, if you test a boolean with a value of true for equality with an integer with a value of three, the result will be true (because the integer is cast as a boolean).

Surprisingly, at first glance, if you use either < or > as the comparison operator the result is always false (again, because the integer as cast as a boolean, and true is neither greater nor less than true).
tom
17-Jun-2005 09:27
<?php
if (strlen($_POST['var']) > 0) {
   
// form value is ok
}
?>

When working with HTML forms this a good way to:

(A) let "0" post values through like select or radio values that correspond to array keys or checkbox booleans that would return FALSE with empty(), and;
(B) screen out $x = "" values, that would return TRUE with isset()!

Because HTML forms post values as strings, this is a good way to test variables!

[[Editor Note: This will create a PHP Error of level E_NOTICE if the checked variable (in this case $_POST['var']) is undefined. It may be used after (in conjuection with) isset() to prevent this.]]
aidan at php dot net
24-Jan-2005 03:00
The way PHP handles comparisons when multiple types are concerned is quite confusing.

For example:
"php" == 0

This is true, because the string is casted interally to an integer. Any string (that does not start with a number), when casted to an integer, will be 0.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites