Q:

Is Empty and NULL the same in a comparision operation in PHP?

I have a class that has a method that expects a response from an API service in array format. This method then converts the response array into an object by casting (object)$response_array. After this the method attempts to parse the contents of the object. There is a possibility that the returned array could be empty. Before parsing the contents of the object in my class method, I perform a check for null or empty object in an if...else block. I would like to use an equivalence comparison operator like if($response_object === null){} and not if(empty($response_object)){}. 
Below is how my class looks like
<?php 
class ApiCall {

    //this method receives array response, converts to object and then parses object
    public function parseResponse(array $response_array)
    {
        $response_object = (object)$response_array;

        //check if this object is null
        if($response_object === null) //array with empty content returned
        {
          #...do something

        }
        else //returned array has content 
        {
           #...do something

        }

    }

}
?>

So my question is - is this the right way to check for empty object, without using the function empty() and is it consistent? If not then how can I modify this code to get consistent results. This would help me know if null and empty mean the same thing in PHP objects. I would appreciate any answer where I can still use an equivalent comparison like this ===

A:

It is not the right way to check for an empty object. If you call your function parseResponse with an empty array, the if condition will still be false.
So, if you would put echo in the if-else code like this:
class ApiCall {
    //this method receives array response, converts to object and then parses object
    public function parseResponse(array $response_array)
    {
        $response_object = (object)$response_array;
        //check if this object is null
        if($response_object === null) { // not doing what you expect
          echo "null";
        }
        else {
          echo "not null";
        }
    }
}

Then this call:
ApiCall::parseResponse(array()); // call with empty array

... will output

not null

The same happens if you test for empty($response_object). This used to be different in a distant past, but as from PHP 5.0 (mid-2004), objects with no properties are no longer considered empty.
You should just test on the array you already have, which is falsy when empty. So you can just write:
        if(!$response_array) {
          echo "null";
        }
        else {
          echo "not null";
        }

Or, if you really want an (in)equality, then do $response_array == false, making sure to use == and not ===. But personally, I find such comparisons with boolean literals nothing more than a waste of space.
All of the following would be working alternatives for the if condition:
Based on $response_array:
!$response_array
!count($response_array)
count($response_array) === 0
empty($response_array)

Based on $response_object:
!get_object_vars($response_object)
!(array)($response_object)

Note that get_object_vars could give a different result than the array cast method if $response_object were not a standard object, and would have inherited properties.

