誰かがを処理する方法を提供してくださいFatal error: Call to a member function prepare() on a non-object
。
これが私のシナリオです:
データベースの詳細を格納し、要求されたときに PDO オブジェクトのインスタンスを作成するシングルトン データベース クラスがあります。
次に、次の2つのクラスがあります。
基本クラス:
namespace lib\translator;
use lib\database as db;
class EntityTranslator {
protected $dbConn;
public function __construct() {
try {
$this->dbConn = db\Database::getInstance();
}
catch(\PDOException $e) {
// do some error logging here
}
}
}
サブクラス:
namespace lib\translator;
use lib\entity as entity;
class RequestTranslator extends EntityTranslator {
public function __construct() {
parent::__construct();
}
public function createRequest() {
$request = new entity\Request();
try {
$stmt = $this->dbConn->prepare("CALL createRequest()");
$stmt->execute();
$rowCount = $stmt->rowCount();
if ($rowCount == 1) {
$row = $stmt->fetch(\PDO::FETCH_ASSOC);
// do stuff with the data here
}
return $request;
}
catch (\PDOException $pdoe) {
// do error logging here
}
}
}
さて、なぜエラーが発生するのか不思議ではありません。データベース接続が利用できず、PDO オブジェクトのインスタンス化 ( への呼び出しを介して行われるdb\Database::getInstance()
) が例外をスローし、変数$dbConn
が残りnull
.
毎回使用する前$dbConn
にテストすることは可能だと思います。しかし、私が述べたように、これは非常にまれな状況であり、実際には決して発生しない可能性があるため、毎回null
チェックすることは賢明なパフォーマンスの選択ではないと思います.null
catch(\Exception $ex){}
別のブロックを追加して、本質的に (Java で見られるように) を処理できるようにしたいと考えてNullPointerException
いますが、PHP はそのような例外を提供していません。むしろFatal error: Call to a member function prepare()
、非オブジェクトに対して を発行します。
したがって、私が探しているのは、この状況で、null
毎回チェックせずにこのエラーを処理する方法です。
PHP でのエラー処理の基本的な概念を見逃している可能性がありますが、このトピックに関する決定的なリソースを見つけることができませんでした。
助言がありますか?