1

考虑下面的类

class myClass {

   private $model;

    public function update($input) {
        return $this->model->update($input);
    }

    public function find($id) {
        $this->model = ORMfind($id);
    }
}

我该如何预防

$myClass = new myClass;
$myClass->update($input);

问题不在于如何使用上面的代码,而是如何使 update() 成为只能在 find() 之后调用的方法。

编辑:我改变了我的方法的作用,所以更清楚地知道我需要在另一种方法(update())之前执行一种方法(find())

4

4 回答 4

2

您可以像这样在代码中添加一个标志:

class myClass {

  private $model;
  private $canUpdate = 0;

  public function update($input) {
    if ($canUpdate === 0) return; // or throw an exception here
    return $this->model->update($input);
  }

  public function find($id) {
    $this->model = ORMfind($id);
    $canUpdate = 1;
  }

}

设置标志$canUpdate将提醒update()方法做出相应的反应。如果update()被调用,如果标志仍为 0,则可以抛出异常或退出方法。

于 2013-08-30T03:45:57.570 回答
1

为了防止通过 get 返回 null 值:

public function get() {
    if (isset($this->value)) return $this->value;
    else echo "please give me a value ";

 }

您还可以创建一个构造:

 function __construct($val){
    $this->value=$val;  
 } 

$value然后在不使用set()方法的情况下给你一个值:

 $myClass=new myClass(10);  
于 2013-08-30T03:27:51.790 回答
0

输出文本,返回void,我觉得这一切都是错的。当您不希望发生某些事情时,您应该抛出异常:

class MyClass {
    private $canUpdate = false;

    public function find($id) {
        // some code...
        $this->canUpdate = true;
    }

    public function canUpdate() {
        return $this->canUpdate;
    }

    private function testCanUpdate() {
        if (!$this->canUpdate()) {
            throw new Exception('You cannot update');
        }
    }

    public function update($inpjut) {
        $this->testCanUpdate();

        // ... some code
    }
}

现在你可以这样做:

$obj = new MyClass();

try {
    $obj->update($input);
} catch (Exception $e) {
    $obj->find($id);
    $obj->update($input);
}
于 2013-08-31T01:51:40.450 回答
0

确保->update()模型初始化后才能调用的正确方法是将其转换为依赖项:

class myClass 
{
    private $model;

    public function __construct($id)
    {
        $this->model = ORMfind($id);
    }

    public function update($input) {
        return $this->model->update($input);
    }
}

$x = new myClass('123');

或者,如果您有多个查找操作,您可以将它们作为静态构造方法引入:

class myClass 
{
    private $model;

    private function __construct($model)
    {
        $this->model = $model;
    }

    public function update($input) {
        return $this->model->update($input);
    }

    public static function find($id)
    {
        return new self(ORMfind($id));
    }
}

$x = myClass::find('123');

更新

可以通过简单的检查来解决您当前的问题:

    public function update($input) {
        return $this->model ? $this->model->update($input) : null;
    }
于 2013-09-02T05:29:50.643 回答