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() の後でのみ呼び出し可能なメソッドにする方法です。

編集:メソッドの動作を変更したため、あるメソッド(find())を別のメソッド(update())の前に実行する必要があることがより明確に理解されました

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ように警告されます。が呼び出された場合、フラグがまだ 0 の場合は、例外をスローするか、メソッドを終了できますupdate()update()

于 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 に答える