phpoperators

Not equal to != and !== in PHP


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?


Solution

  • == 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