Is there a difference between !== and != in PHP?
The != operator compares value, while the !== operator compares type as well.
That means this:
var_dump(5!="5"); // bool(false)
var_dump(5!=="5"); // bool(true), because "5" and 5 are of different types
!= is the inverse of the == operator, which checks equality across types
!== is the inverse of the === operator, which checks equality only for things of the same type.
!= is for "not equal", while !== is for "not identical". For example:
'1' != 1 # evaluates to false, because '1' equals 1
'1' !== 1 # evaluates to true, because '1' is of a different type than 1
!== checks type as well as value, != only checks value
$num = 5
if ($num == "5") // true, since both contain 5
if ($num === "5") // false, since "5" is not the same type as 5, (string vs int)
=== is called the Identity Operator. And is discussed in length in other question's responses.
Others' responses here are also correct.
Operator != returns true, if its two operands have different values.
Operator !== returns true, if its two operands have different values or they are of different types.
cheers
See the PHP type comparison tables on what values are equal (==) and what identical (===).
Related
I'm learning validation stuff, and I just can't understand this:
if (strpos($value, "#") === false) { echo "Validation failed." }
What's the difference between === and ==? and why can't we use == instead and also why is it === false? does false means that # is not in the $value or it means 0 ?
The Equality Operator ==
A == B checks whether A and B are equal to each other, but not whether they are the same data type.
A pertinent example: 0 == false is true
The Identity Operator ===
A === B checks whether A and B are equal to each other also the same data type.
A pertinent example: 0 === false is false
Application Here
Applying this to your case, if the # was found as the first character of the string, strpos($value,"#") would return 0. If it is not found at all, it would return false.
So to avoid confusing these two situations, the test must use === rather than ==.
Useful references:
http://php.net/manual/en/function.strpos.php
http://php.net/manual/en/language.operators.comparison.php
I've assumed this is php, but the equality and identity operators are common to many programming languages.
What does this !== mean in php and is there any doc's on it?
PHP comparison operators, "Not identical" (5th in the table)
This operator works much like != but also checks the type of the operands. For example:
3 != '3' is false, but 3 !== '3' is true.
== is the comparison operator you're familiar with: if two values are equivalent, they == each other. There's some type coercion that goes on before the comparison.
4 == '4' // true: equivalent value, different type
=== is a more strict comparison that requires that values be of the same type.
4 === 4 // true: same value, same type
'4' === '4' // true: same value, same type
4 === '4' // false: equivalent value, different type
!== is the opposite of the strict comparison operator, so it is true when two values are of a different type or different value or both.
4 !== 3 // true: different value, same type
4 !== '4' // true: equivalent value, different type
'4' !== 3 // true: different value, different type
'4' !== '3' // true: different value, same type
4 !== 4 // false: same value, same type
It means "not equal or not the same type".
This shows the difference between != and !==:
"5"!=5 //returns false
"5"!==5 //returns true
That is the not identical operator
$a !== $b
Returns TRUE if $a is not equal to $b, or they are not of the same type.
For example, it is used to check if a variable is false and not 0, since 0 is the same that false for PHP.
$bar = 0;
if ($bar != false) { echo '$bar != false'; } // won't output the text
if ($bar !== false) { echo '$bar !== false'; } // will output the text
!= is used for value only
but
!== is used for value and type both
suppose:
$a = "5"; // String
$b = 5; // Integer
$a!=$b // false
$a!==$b // true
That's the difference.
I've always done this: if ($foo !== $bar)
But I realized that if ($foo != $bar) is correct too.
Double = still works and has always worked for me, but whenever I search PHP operators I find no information on double =, so I assume I've always have done this wrong, but it works anyway. Should I change all my !== to != just for the sake of it?
== and != do not take into account the data type of the variables you compare. So these would all return true:
'0' == 0
false == 0
NULL == false
=== and !== do take into account the data type. That means comparing a string to a boolean will never be true because they're of different types for example. These will all return false:
'0' === 0
false === 0
NULL === false
You should compare data types for functions that return values that could possibly be of ambiguous truthy/falsy value. A well-known example is strpos():
// This returns 0 because F exists as the first character, but as my above example,
// 0 could mean false, so using == or != would return an incorrect result
var_dump(strpos('Foo', 'F') != false); // bool(false)
var_dump(strpos('Foo', 'F') !== false); // bool(true), it exists so false isn't returned
!== should match the value and data type
!= just match the value ignoring the data type
$num = '1';
$num2 = 1;
$num == $num2; // returns true
$num === $num2; // returns false because $num is a string and $num2 is an integer
$a !== $b TRUE if $a is not equal to $b, or they are not of the same type
Please Refer to http://php.net/manual/en/language.operators.comparison.php
You can find the info here: http://www.php.net/manual/en/language.operators.comparison.php
It's scarce because it wasn't added until PHP4. What you have is fine though, if you know there may be a type difference then it's a much better comparison, since it's testing value and type in the comparison, not just value.
I keep seeing variations of this:
Not equal
!=
Not equal, equal
!==
Which one is the standard or do they have different meanings?
I am guessing the latter also checks the value and the name if it's a string, while the
former might just check the value only...
== and != check equality by value, and in PHP you can compare different types in which certain values are said to be equivalent.
For example, "" == 0 evaluates to true, even though one is a string and the other an integer.
=== and !== check the type as well as the value.
So, "" === 0 will evaluate to false.
Edit: To add another example of how this "type-juggling" may catch you out, try this:
var_dump("123abc" == 123);
Gives bool(true)!
The second one is type-strict.
"1" != 1; // false
"1" !== 1; // true because the first is a string, the second is a number
!= not equal by value
!== not equal by value and type
in an example:
"2" == 2 -> true
"2" === 2 -> false
"2" !== 2 -> true
"2" != 2 -> false
this is also important when you use certain function that can return 0 or false
for example strpos: you want always to check types too there, not only values. because 0 == false but 0 !== false.
since strpos can return 0 if a string is at the first position. but that not the same as false, which means the string has not been found.
This question already exists:
Closed 13 years ago.
Possible Duplicate:
php == vs === operator
What's the difference between !== and != in PHP?
!== is strict not equal and which does not do type conversion
!= is not equal which does type conversion before checking
=== AND !== checks if the values compared have the same type (eg: int, string, etc.) and have the same values
While...
== AND != only compares the values
"1" != 1 // False
"1" !== 1 // True
It's a type thing. !== takes into account the types of its operands, while != does not (the implicit conversion makes the first conditional false).
== is only true if the values are equal.
=== is only true if the values and types are equal.
the triple equal also make sure the two variable are from the same type
1 == `1` // is ok
1 === `1` // is not same.
Both are comparion operators
$a !== $b Return TRUE if $a is not equal to $b, or they are not of the same type.
$a != $b Return TRUE if $a is not equal to $b.