1

私は PHP を初めて使用します。特に OOP に関連する優れたプラクティスを読んでいると、「ローカル変数をグローバル空間に公開しないでください。代わりに getter メソッドまたは取得メソッドを使用してください」などのステートメントをよく目にします。 .

グローバル名前空間を汚染したくない理由は理解できますが、単純なプロパティにアクセスするためだけに getter メソッドを呼び出すのは、どの時点でばかげているのでしょうか? これは大規模な偽善を示していると思います。クラス定義の外でメソッドを公開して呼び出すことはできますが、単純な変数はできませんか? どうしてこれなの?メソッドはもっと複雑ではありませんか?

私の混乱が見当違いの場合はご容赦ください。OOP のベスト プラクティスを理解することに本当に興味があります。

4

5 に答える 5

2

グローバルな名前空間を少し忘れて、カプセル化情報隠蔽の基本概念を見てみましょう。OOP では、小さなコンポーネント (クラスなど) からソフトウェアを構築します。クラスの (壊れやすい) 内部を外部に公開すると、クラスが適切に機能していることを保証できません。ゲッターとセッターを使用すると、クラスの外部に公開する変数へのアクセスを制御できます。

于 2013-08-27T10:24:48.017 に答える
1

問題は、なぜ役に立たない getter/setter メソッドを書く必要があるのか​​ということではなく、クラスとそのメソッドの主な目的について混乱させるために、なぜ変数を公開する必要があるのか​​ということです。

変数には getter のみ、setter のみ、またはどちらも持たないことを考慮してください。

于 2013-08-27T11:20:38.137 に答える
0

これはカプセル化と呼ばれます。一般に、ローカル変数は実装の詳細です。コードの呼び出し (コードが正しく分離されている場合) は、ユーザーが何を行うかではなく、を行うかのみを気にするため、これを公開しないでください。

実装が変更された場合、変数が削除または変更される可能性があります。つまり、呼び出し元のコードを変更する必要があります。メソッドはこれを抽象化し、公開されたインターフェースに影響を与えずに内部を変更できるようにします。

もう 1 つの理由は、変数への直接アクセスにより、コードを呼び出して、クラスが依存する変数を変更できることです。メソッドを使用すると、たとえば配列のコピーを作成できるため、配列を変更するコードがクラスのロジックに影響を与えることはありません。

于 2013-08-27T10:14:25.517 に答える