2

マジック メソッドを使用して MVC でレジストリ クラスを作成することと、「通常の」get および set メソッドを使用してクラスを作成することに決定的な違いはありますか?

たとえば、__get と __set を使用してクラスを作成すると、$registry->foo を介してレジストリ オブジェクトにアクセスし、別のケースでは $registry->getObject('foo') などになります。 . 私はこれら2つの違いに興味があります.何かがより良いか、特定の状況に依存するか、違いはありませんか?

4

4 に答える 4

1

人々はパブリック オブジェクトに直接アクセスするのではなく、そのアクセサーを介してアクセスする傾向があります。違いはまったくありません。アクセサー メソッドを使用する方がより望ましいのは、カプセル化が意味するものをよりよく見て提供するためであり、したがって良い習慣です。

于 2012-06-14T09:21:54.627 に答える
1

レジストリが一種のアンチパターンであることは、しばらく無視しましょう。

とを使用する__set()__get()、パフォーマンスがわずかに低下します。しかし、それは無視することができます。本当の問題は後で明らかになります。

設定または返される前に追加の計算を必要とするものを保存する必要がある場合はどうでしょう。たとえば、時間を保存している場合はどうでしょう。外部Registryでは時間を「きれいな」形式で使用しているが、それを unix-time 形式で保存しているとします。これには、魔法のゲッターとセッターに特別な例外を追加する必要があります。

そのような値を複数保存するとどうなりますか。何かが変更され、アプリケーションをメートル法から帝国法に移行する必要がある場合はどうでしょうか。

格納された情報にさらに多くの条件を追加すると、通常、これらすべてが および の巨大なswitchステートメントに__get()なり__set()ます。本当に悪いデザインの選択。

于 2012-06-14T09:27:45.857 に答える