首页 > 解决方案 > 如果在类的公共方法中未引发异常,我如何重置私有实例变量?

问题描述

我有以下类实现了设置预订的逻辑:

class DBRecord
{
   public $id;
   public $value1;
   public $value2;
}

class CreateADbRecord
{

   private $dbRecord;
   private $canSave = true;

   public function __construct()
   {
     $this->dbRecord = new DBRecord();
   }

   public function setValueOne($value)
   {
      if(is_numeric($value) && $value < 0 ) {
         throw InvalidArvumentException('Value 1 must be positive id is a number')
      }
      $this->dbRecord->value1 = "#".$value;
      return $this;  
   }

   public function setValueTwo($value)
   {
      if(is_numeric($value) && $value > 0 ) {
         throw InvalidArvumentException('Value 2 must be positive id is a number')
      }
      $this->dbRecord->value2 = "#".$value;
      return $this;
   }

   public function save()
   {
      if($this->canSave){
         // Save DB record here
      }
   }
}

但是我想做的是,一旦我调用 setValueOne 或 setValueTwo 将值设置为 true,以防两个函数都不会引发异常。一个简单的解决方案是:

  public function setValueOne($value)
   {
      if(is_numeric($value) && $value < 0 ) {
         $this->canSave = false;
         throw InvalidArvumentException('Value 1 must be positive id is a number')
      }
      $this->dbRecord->value1 = "#".$value;
      $this->canSave = true;
   }

但从长远来看,我需要在每个 getter 和 setter 上为 canSave 设置适当的值。canSave如果我的类中的方法引发异常,是否有更好的方法来重置每个或特定方法调用的值?

我问的原因是因为另一个可能继承我的代码的开发人员不必记住,如果我在抛出异常之前将 canSave 的值设置为 false 并且如果我没有异常将其重置为 true .

因此,我可能有一个更易于维护的代码。

你知道我该怎么做吗?

标签: phpexception

解决方案


推荐阅读