1

PHP で読み取り専用のコレクションを探しています。すでに検索しましたが、ネイティブ実装はまだ見つかりません。私は間違いなく、このようなものを必要とする最初のプログラマーではないと思います:

私の状況は次のとおりです。cart クラスには多数の cartItems が含まれています。cartItems は、カートを介してのみ編集可能にする必要があります (集約ルートです)。これらのアイテムを表示するには、カートがコレクションのタイプを返す必要があります。(このコレクションのアイテムは既に読み取り専用になっています)。コレクションを参照渡しすることを好むので、共有コレクションは常に最新です。(コレクションを抽出した後にアイテムを削除/追加したと思っても)。

アイテムは、カート内の ArrayObject 内に格納されます。ArrayObject を読み取り専用にラップするネイティブ クラスはありますか? そうでない場合、そのようなラッパーは別のタイプのコレクションに存在しますか、それとも自分でこれを書く必要がありますか?

4

2 に答える 2

1

この議論の中で、私は自分の問題を解決するアイデアを思いつきました。カートにIteratorを実装させました。したがって、私のビューではカートとそのアイテムを表示できます。その結果、カートは常に読み取り専用のcartItemObjectsを返します。したがって、コレクションを公開する必要はありません。ご参加ありがとうございました!

于 2012-11-19T19:53:56.743 に答える
1

privateほとんどの場合、クラスで使用可能なプロパティのタイプを利用して、自分で記述する必要があります。これが、実行可能な唯一の方法だと思います。リフレクションを使用してバイパスできるため、これでも防弾ではないことに注意してください。それでも、それはいつもの格言に従っています: 誰かがそれを壊したいなら、彼らはそれを壊します.

より大きなクラスのプライベート プロパティとして ArrayObject をラップし、クラスのメソッドを介したオブジェクトへのアクセスのみを許可します (静的か動的かは関係ありません)。これにより、人為的に読み取りを許可し (魔法のメソッド __get() が頭に浮かびます)、書き込みは許可しないため、実行しようとしていることに最も近い一致が得られます。

于 2012-11-19T19:28:44.017 に答える