[解決済み] 致命的なエラーです。非オブジェクトでのメンバ関数の呼び出し。
2022-02-09 23:10:46
質問
を持っています。
GCM
クラスは send_notification 関数を含んでいます。別のクラスで
Demand.php
send_notification関数を使おうとしています。そこで、コンストラクタを
Demand.php
を指し、その
GCM
クラスはこのようになります。
$gcm = new GCM();
これは
$gcm
変数は、そのクラス内の関数で次のように使用されます。
$result = $gcm->send_notification($registatoin_ids, $message);
そこでエラーになるんです。
<br />n<b>Fatal error</b>: Call to a member function send_notification() on a non-object in..
と思い検索してみたところ、問題点は
$gcm
がヌルだから、何も呼び出さないのです。そこで
$gcm = new GCM();
私の関数内では正しく動作しました。しかし、これを行う他の方法はないのでしょうか?というのは、この関数の中に
$gcm
のコンストラクタで
Demand.php
?
以下、参考にしている部分です。
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();
をDemandクラスのコンストラクタで使用する場合、変数
$gcm
はコンストラクタのメソッドでのみ使用可能です。
にアクセスできるようにしたい場合は
$gcm
変数を、Demandクラス全体のプロパティとして設定する必要があります。
class Demand()
{
/**
* Declare the variable as a property of the class here
*/
public $gcm;
...
function __construct()
{
...
$this->gcm = new GCM();
...
}
function myFunction()
{
...
// You can access the GCM class now in any other method in Demand class like so:
$result = $this->gcm->send_notification($registatoin_ids, $message);
...
}
...
}
関連
-
[解決済み】PHPで空の値からデフォルトオブジェクトを作成する?
-
[解決済み】++と*+の意味は何ですか?
-
[解決済み] php5パッケージのインストール候補がない (Ubuntu 16.04)
-
[解決済み】未定義のメソッド mysqli_stmt::get_result を呼び出す。
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
MacでPHPを実行した際に、メモリサイズが134217728バイトも消費される問題の解決方法について
-
[解決済み] オートロードとは何ですか; spl_autoload、__autoload、spl_autoload_register はどのように使うのですか?
-
[解決済み] $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて
-
[解決済み] 致命的なエラーです。最大実行時間30秒を超えました
-
[解決済み] PHP Fatal error: 未定義の関数 json_decode() への呼び出し
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み] 整形されていない数値が発生しました。
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】予期せぬ例外。SQLSTATE[HY000] [1045] Access denied for user ****@'localhost' (using password: YES)
-
[解決済み】不明なMySQLサーバーのホスト
-
[解決済み】DateTimeクラスのオブジェクトを文字列に変換できない
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み】ディレクトリ内のファイル数を数える PHP
-
[解決済み] オートロードとは何ですか; spl_autoload、__autoload、spl_autoload_register はどのように使うのですか?