2

インスタンス変数が割り当てられていないかどうかを確認する良い方法は何ですか。次の例を考えてみましょう。$this->foo開始するにはnullです。$this->fooデータベースで が見つかった場合、以降の の呼び出しはデータベースにgetFoo()クエリを実行しません。ただし、データベースに何も返されない場合 (null)、後続の呼び出しはすべてデータベースにヒットします。良くありません。

class FooBar 
{    
  protected $foo;
  protected $db;    

  public function getFoo()
  {
    if (is_null($this->foo)) {
      $this->foo = $this->db->getFooFromDatabase();
    }

    return $this->foo;
  }
}
4

2 に答える 2

1

これはちょっとしたハックだと思いますが、単に設定しないのはどうですか? 次に、オブジェクトにそのプロパティがあるかどうかを確認します。

class FooBar 
{   
  //REMOVED
  //protected $foo;
  protected $db;    

  public function getFoo()
  {
    if (! property_exists($this, 'foo')) {
      $this->foo = $this->db->getFooFromDatabase();
    }

    return $this->foo;
  }
}
于 2013-10-18T20:04:53.063 に答える