[解決済み】メンバ関数をnullで呼び出す?
2022-02-03 13:05:58
質問
実際に何が問題なのかを理解するためにいろいろとやってみたのですが、どうしてもこのエラーの原因がわかりませんでした。
以下は
Topic
:
class Topic {
// Init DB variables
private $db;
/*
* Constructor
*/
public function __contruct() {
$this->db = new Database();
}
/*
* Get All Topics
*/
public function getAllTopics() {
$this->db->query("SELECT topics.*, users.username,
users.avatar, categories.name
FROM topics
INNER JOIN users
ON topics.user_id = users.id
INNER JOIN categories
ON topics.category_id = categories.id
ORDER BY create_date DESC");
// Assign the results
$results = $this->db->resultset();
return $results;
}
}
クラスのオブジェクトを作成すると
Topic
,
$topic = new Topic();
$results = $topic->getAllTopics();
常にこのようなエラーが発生します。
致命的なエラー : メンバ関数query()のnullに対する呼び出し。 /Applications/XAMPP/xamppfiles/htdocs/forumproject/libraries/Topic.php つまり、$this->db->query(...)である。
は
Database
クラスは、私がそのクラスに対して独自にテストを実行したところ、何の問題もなく動作しています。
以下はDatabaseクラスです。
<?php
/*
* Using PDO for the first time in my life.
*/
class Database {
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $dbh;
private $error;
private $stmt;
public function __construct() {
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instance
try {
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch the errors using exceptions handler
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
public function query($query){
$this->stmt = $this->dbh->prepare($query);
}
public function bind($param, $value, $type = null){
if(isnull($type)){
switch(true){
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default :
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
public function execute(){
return $this->stmt->execute();
}
public function resultset(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_OBJ);
}
public function single(){
$this->execute();
return $this->stmt->fetch(PDO::FETCH_OBJ);
}
public function rowCount(){
return $this->stmt->rowCount();
}
public function lastInsertId(){
return $this->dbh->lastInsertId();
}
public function beginTransaction(){
return $this->dbh->beginTransaction();
}
public function endTransaction(){
return $this->bbh->commit();
}
public function cancelTransaction(){
return $this->dbh->rollBack();
}
}
?>
解決方法は?
の中にタイプミスがあります。
public function __contruct()
であるべきです。
public function __construct() {
(sが抜けています)
関連
-
[解決済み】Weird PHP error: 'Can't use function return value in write context'.
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み】DateTimeクラスのオブジェクトを文字列に変換できない
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: バインドされた変数の数が102行目のトークンの数と一致しない [終了]
-
[解決済み】Apache + PHPで「ヘッダの前にスクリプトの出力が終了する」件
-
[解決済み】 libapache2-mod-php7 パッケージが見つからない。
-
[解決済み】PHP フェイタルエラー。未定義の関数mssql_connect()をコールしています。
-
[解決済み】警告。数値でない値に遭遇しました
-
[解決済み] Uncaught Error: 未定義の関数 mysql_escape_string() の呼び出し。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Notice: 非オブジェクトのプロパティを取得しようとしているエラー
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: バインドされた変数の数が102行目のトークンの数と一致しない [終了]
-
[解決済み】PHPの予期しないT_VARIABLEとは何ですか?
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み】SSLピア証明書またはSSHリモートキーがOKでなかった
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
phpのAllowed memory size of 134217728 bytes枯渇問題の解決法
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?