0

クラスオブジェクトwordsの配列と保持するプライベートプロパティを持つ「Article」クラスがあります。Word私はまた、getWord1つの単語を返すことができるメソッドを持っています:

class Article {
    private $words = Array(1 => new Word(1), 2 => new Word(2), ...);

    public function getWord($wordId) {
        if (array_key_exists($wordId, $this->words)) {
            return $this->words[$wordId];
        } else {
            return NULL;
        }
    }
}

既存のすべての単語を反復処理する必要があります。それを行う最善の方法は何ですか?

現在、別の方法を使用してすべての単語を配列として返していますが、それは良い選択肢ではないと思います。

4

2 に答える 2

1

あなたのソリューションは、最もクリーンなソリューションです。プライベート プロパティのゲッターを作成することは、OOP で広く受け入れられています。このstackoverflowエントリを参照してください

ゲッターは次のようになります。

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

すべてのクラスがプロパティにアクセスして編集できるようにする場合は、それをパブリック プロパティにすることもできます。しかし、あなたのコードを理解しているように、他のクラスとメソッドはこのプロパティへの読み取り専用アクセスを持っている必要があるため、ゲッターが決定的な最良のソリューションです。

プロパティの特定の単語オブジェクトのみを公開したい場合、メソッドは次のようになります。

public function getFilteredWords($param) {
  $tmpWords = array();

  foreach($this->words as $w) {
    if(/*word NOT matches your filter criteria ($param)*/)
      continue;

    $tmpWords[] = $w;
  }

  return $tmpWords;
}
于 2013-10-30T07:49:02.727 に答える