I have a GCM class which includes a send_notification function. In a different class, Demand.php, I am trying to use the send_notification function. So I have a constructor in Demand.php which points to my GCM class like this:
$gcm = new GCM();
This $gcm variable is used in a function inside that class like this:
$result = $gcm->send_notification($registatoin_ids, $message);
That's where I get the error:
<br />n<b>Fatal error</b>: Call to a member function send_notification() on a non-object in..
I searched for the problem and found out that the problem is that $gcm is null and that's why it's calling nothing. So when I put the
$gcm = new GCM();
Inside my function it worked correctly. But is there no other way of doing this? I mean should it not be alright only by putting creating $gcm in the constructor of Demand.php?
Here are the parts where I am referring to:
function __construct() {
require_once 'GCM.php';
require_once 'DB_Connect.php';
require_once 'DB_Functions.php';
// connecting to database
$this->db = new DB_Connect();
$this->db->connect();
$gcm = new GCM();
$df = new DB_Functions();
}
// destructor
function __destruct() {
}
public function getDistance($uuid, $name, $distance, $latstart, $lonstart, $latend, $lonend, $gcm_regId) {
$user_new = array ("$uuid", "$name", "$distance","$latstart", "$lonstart", "$latend", "$lonend","$gcm_regId");
$query = sprintf("SELECT uid, distance,latstart, lonstart, latend, lonend, gcm_regid, name FROM user_demand WHERE latstart='%s' AND lonstart='%s'",
mysql_real_escape_string($latstart),
mysql_real_escape_string($lonstart));
$user = mysql_query($query);
$no_of_rows = mysql_num_rows($user);
while($user_old = mysql_fetch_assoc($user))
{
$djson = $this->findDistance($latend,$lonend,$user_old["latend"],$user_old["lonend"] );
if ($user_old["distance"]+$distance>=$djson) {
$match = mysql_query("INSERT INTO matched_users(gcm_a, gcm_b, name_a, name_b) VALUES(".$user_old['gcm_regid'].",".$user_new['gcm_regId'].",".$user_old['name'].",".$user_new['name'].")");
$registatoin_ids = array($gcm_regId);
$message = array("var" => $name);
$result = $gcm->send_notification($registatoin_ids, $message);
}
}
}
$gcm = new GCM();relative to$gcm->send_n..?$gcm = new GCM();will only exist in the current scope. You can set it to an instance variable so it can be accessed throughout the class:$this->gcm = new GCM()