有人可以请提供一种方法来处理Fatal error: Call to a member function prepare() on a non-object
。PHP/PDO:如何处理致命错误:调用成员函数prepare()在非对象
这是我的情景:
我有一个Singleton数据库类存储我的数据库的详细信息,并要求当创建一个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){}
块来处理本质上是NullPointerException
(如Java所示),但PHP不提供这样的例外。相反,他们在非客体上发行Fatal error: Call to a member function prepare()
。
所以我在找的是一种处理这种错误的方法,对于这种情况,每次都不检查null
。
也许我错过了PHP中错误处理的基本概念,但我一直未能找到有关此主题的权威资源。
有什么建议吗?
感谢您在回复中考虑您的情况。我认为你的解决方案是正确的,我的应用程序将从你的建议中受益。现在,将异常传递给链并处理它,然后才允许其他组件调用类方法,这样做更有意义。 – samazi