php - 如果在类的公共方法中未引发异常,我如何重置私有实例变量?
问题描述
我有以下类实现了设置预订的逻辑:
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 .
因此,我可能有一个更易于维护的代码。
你知道我该怎么做吗?
解决方案
推荐阅读
- javascript - 等待获取响应以在 for 循环中继续。Javascript Nodejs
- c# - 来自 Guid 的有效 string.Intern
- c - #ifdef 在#define 中?
- python - 如何使用python创建一个excel阅读循环
- selenium - 如何用硒阻止弹出窗口?
- matplotlib - Matplotlib 图例未对齐
- migrate - npm run migrate 询问密码
- python - 程序仅在某些初始条件下才能正常工作
- r - R绘图标题涉及变量的下标和值
- javascript - Node.js 运行命令行(child_process?)