You have a GCM class which includes a send_notification function. In a different class, Demand.php, we trying to use the send_notification function.
So we have a constructor in Demand.php which points to GCM class:
This $gcm variable is used in a function inside that class :
That’s where we get the error:
Inside our function it worked correctly. But is there no other way of doing this? That means should it not be alright only by creating $gcm in the constructor of Demand.php?
Happens with code similar to xyz->method() where xyz is not an object and therefore that method can not be called.
This is a fatal error which will stop the script (forward compatibility notice: It will become a catchable error starting with PHP 7).
Most often this is a sign that the code has missing checks for error conditions. Validate that an object is actually an object before calling its methods.
Example:
[ad type=”banner”]In the example above, the query cannot be prepared and prepare() will assign false to $statement.
Trying to call the execute() method will then result in the Fatal Error because false is a “non-object” because the value is a boolean.
Figure out why your function returned a boolean instead of an object. For example, check the $pdo object for the last error that occurred.
Details on how to debug this will depend on how errors are handled for the particular function/object/class.
If even the ->prepare is failing then your $pdo database handle object didn’t get passed into the current scope.
Find where it got defined. Then pass it as a parameter, store it as property, or share it via the global scope.
If we place $gcm = new GCM(); in the constructor of our Demand class, then the variable $gcm will only be available in the constructor method.
If we want to be able to access the $gcm variable throughout the Demand class we will need to set it as a property of the class like so:
gcm will only be available in the scope of the constructor unless you initialize it as a instance variable.
This means $gcm is not an object, probably it’s NULL or false in some cases (nothing found) due to it’s not accessible. Out of scope