PHP - 返回多个状态,而不仅仅是true/false

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)

rek*_*o_t 8

您应该使用例外.如果出现查询错误,则抛出异常,说明失败的原因.如果域已存在,则抛出一个异常,指出该域已存在.这是一个非常简单的例子:

   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将终止脚本.