有人可以提供一种方法来处理Fatal error: Call to a member function prepare() on a non-object
.
这是我的场景:
我有一个单例数据库类,它存储我的数据库详细信息并在请求时创建 PDO 对象的实例。
然后我有以下两个类:
基类:
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){}
块来处理本质上是 a 的内容NullPointerException
(如在 Java 中所见),但 PHP 不提供此类异常。相反,他们Fatal error: Call to a member function prepare()
在非对象上发出。
所以我正在寻找的是一种在这种情况下处理这个错误的方法,而不是null
每次都检查。
也许我错过了 PHP 中错误处理的基本概念,但我还没有找到关于这个主题的权威资源。
有什么建议么?