Lee*_*Lee 1 php error-handling class return-value
我有一个与PHP类和错误处理有关的概念性问题.下面是一个演示我的问题的基本类.
存在名为"domain_create"的创建数据库记录的函数.此函数调用辅助函数以确保要创建的域在数据库表中不存在.
在过去,我总是使用true或false来反映函数是否找到了记录,但这会在我的逻辑中产生缺陷.当domain_lu函数返回false时会插入记录,但是如果遇到错误则应该执行此操作选择失败?返回false将导致create函数相信找不到任何内容并继续创建过程.
我的问题是在这种情况下应该如何反映多个州?这种情况是否有"最佳实践"?
<?php
require_once('auth.base.class.php');
require_once('mysql.class.php');
class auth extends base
{
public function __construct()
{
parent::__construct();
}
/*
* User
*/
public function domain_create($args='')
{
if ( domain_lu($args['dname']) === FALSE )
{
return $error['Domain already in use'];
}
}
/*
* Domain
*/
private function domain_lu($dname)
{
$sql = "SELECT name FROM domain WHERE name = '$dname'";
$this->_mysql->SQLQuery($sql);
if ($this->_mysql->numRow() > 0) return true;
else return false;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
您应该使用例外.如果出现查询错误,则抛出异常,说明失败的原因.如果域已存在,则抛出一个异常,指出该域已存在.这是一个非常简单的例子:
public function domain_create($args='')
{
if (!$this->domain_lu($args['dname']))
throw new Exception('domain already in use');
}
private function domain_lu($dname)
{
$sql = "SELECT name FROM domain WHERE name = '$dname'";
$this->_mysql->SQLQuery($sql); // SQLQuery should throw an exception if it fails
return ($this->_mysql->numRow() > 0);
}
Run Code Online (Sandbox Code Playgroud)
您应该真正创建专门的异常类,以便用户可以捕获特定的异常而不依赖于异常消息,PHP文档有更多信息.但是,只要抛出异常,基本上以这种方式做事就会从函数中拯救出来,并且只要有捕获异常的代码就返回.或者,如果它没有被捕获,PHP将终止脚本.
归档时间: |
|
查看次数: |
299 次 |
最近记录: |