我应该在 PDO 对象中返回啥来生成可靠的代码?
Posted
技术标签:
【中文标题】我应该在 PDO 对象中返回啥来生成可靠的代码?【英文标题】:What shall I return in a PDO Object to produce reliable code?我应该在 PDO 对象中返回什么来生成可靠的代码? 【发布时间】:2019-04-13 17:36:04 【问题描述】:我使用 PDO 编写了一个新的数据库类。我正在努力解决一个问题。我通常返回一个对象,所以我可以使用它。所以当查询失败时,我只返回$this
。我有一个名为 wasSuccessful()
的方法,用于确保查询没有失败。
$result = $database->query(...);
if ($result->wasSuccessful())
// do code
但是,当方法返回false
时,我该怎么办?例如:
...
if (!$this->tableExists($table)) return false;
当这种情况发生时,PDO 告诉我我不能在布尔值上运行函数。我该如何以最好的方式解决这个问题?
提前非常感谢!
【问题讨论】:
你throw exceptions而不是返回false。 假设您的第二段代码是您的数据库类的一部分,并且鉴于您之前所说的,逻辑将指示return $this;
而不是return false;
并使用...->wasSuccessful()
来检查成功或失败.另一方面,检查布尔值并不困难。但是,一种方法不能同时使用两种返回机制,因为那样您将不知道如何检查它。也就是说,例外也很好。
【参考方案1】:
您应该使用异常,而不是依赖函数的返回值。像这个简单的例子应该会给你这个想法:
在你的课堂上:
class MyClass
public function query($sql, ...$params)
if (!$this->tableExists($table))
throw new \Exception("the table doesn't exist");
return false;
然后在你的代码中:
try
$result = $database->query(...);
// do stuff with $result, knowing it's ok
catch (\Exception $e)
echo "here's our error handling routine";
echo $e->getMessage();
在更复杂的项目中,可能需要创建自己的异常类。同样,你可以在你的类中使用try
/catch
,以及从 PDO 到更高级别代码的throw
异常。例如:
class MyClass
public function query($sql, ...$params)
if (!$this->tableExists($table))
throw new \Exception("the table doesn't exist");
return false;
try
//do something with the PDO object that might throw an exception
catch (\PDOException $e)
// just take this existing exception and throw it to the next catch block
throw $e;
return false;
【讨论】:
谢谢,会实现这个!最近没有检查答案,所以请不要认为您的努力没有得到赞赏!以上是关于我应该在 PDO 对象中返回啥来生成可靠的代码?的主要内容,如果未能解决你的问题,请参考以下文章
在从 C++ 转换为 C# 的代码中,我应该使用啥来代替 memcpy?
jQuery.type() 已弃用。检查 var 是不是不是对象时,我应该使用啥来代替? [复制]