2010-12-10 3 views
6

私はPHPで新しいクラスを作成しています。私はこのクラスがこれまで拡張されることはないと思います。クラスメンバーを非公開にし、ゲッターとセッターの機能を実装することに気を付ける必要がありますか?PHPでゲッタとセッタを気にする必要がありますか?

私の一部は、これは単なる時間の無駄だと思って、自分のコードを一括して扱うだけだと思っています。

クラスは履歴書用です。私はコーディングスタイルを示すためにコードで書いています。問題は、雇用主がゲッターやセッターを見たいと思うか、それともちょうど混乱することでしょうか?

+1

あなたのクラスに関する情報はありますか? – RDL

+0

これは履歴書用です。私はコードで書いています。問題は、雇用主がゲッターやセッターを見たいと思うか、それともちょうど混乱することでしょうか? – james

+1

あなたの質問に答えるには大きな違いがあります。その情報を追加するために質問を編集することができます。 –

答えて

2

私はあなたのことを気にしません。あなたは正しいです、その装飾はあなたのクラスを混乱させるでしょう。

1

あなたはsetやgetで特別なSometingをしたいですか(またはそれらのうちの1つだけをプライベートにしますか)?

そうでない場合は、これらの時間を無駄にしないでください。

あなただけの限り私は理解して& __setを__get上書きすることができますが、「特別な方法」でそれらを使用していないと、多分それもダウン

+1

将来価値のある特別なことをする必要がある場合は、それを得ることができます。 –

3

将来クラスを拡張する必要はないことは決してありません。クラスは何をしていますか?それはどれほど複雑ですか?

カプセル化は良いOO設計の一部です。しかし、良いOO設計はプログラミングの目標ではありません。目標は機能し、必要に応じて簡単に変更できるようにすることです。

0

これらのプロパティを設定またはアクセスするときに特定の動作を計画していない場合は、あまり意味がありません。

これらのプロパティにアクセスまたは変更するときに特定の動作が必要な場合は、後でいつでも__setメソッドと__getメソッドをオーバーロードできます。

参照:http://php.net/manual/en/language.oop5.overloading.php

+0

魔法は遅いです。これらは適切なgetterとsetterのための置き換えではありません。 – Gordon

2

私はやプライベート保護され、私のクラスのプロパティを作成して、ゲッターとセッターを使用したいです。私はsetterでコードを使用して、プロパティ値が受け入れられた範囲内にあることを確認します。私はこのアプローチが気に入っているので、受け入れられた値が設定されているか、例外がスローされていることを常に確認できるので、デバッグが容易になります。また、プロパティに保持されている値の周りのオブジェクトを渡すときに何かが爆発することはないという確信が私に与えられます。私はあなたが今、継承を期待していなくてもという議論を繰り返してもう一度たくない

6

は、あなたはまだ、将来的にそれを必要とするかもしれないが、彼らはまだゲッターとセッターを使用する複数の理由です:

  • ゲッターとセッターで簡単にプロパティの検証を実装できます
  • あなたのコードは良いコーディングガイドラインに従うので、他の人が読むのが簡単になります。 getterとsetterを使用しないコードファイルに遭遇した場合、私は非常に懐疑的であり、何度も慎重に読む必要があります。
  • また、これはクラスごとの決定ではなく、プロジェクト全体の決定です。必要なクラスのゲッターやセッターを必要としますか?一貫性が重要だと私は信じています。
  • getterとsetterの作成を自動生成できるツールがあります。
+0

追加するには、プライベートプロパティに対してもgetterとsetterが必要です。内部コードは、内部プロパティを読み書きするポイントが1つしかありません。 – Rafa

4

チェックアウト__getを、何度もあなたは一度だけコードを書いていますが、それを読むことを忘れないでくださいと魔法のメソッドを__set、それがきれいにあなたのコードをしておこうと、あなたは設定しないために怠惰な感じする必要はありません可変スコープ。

public function __get($name) 
{ 
    return $this->$name; 
} 

public function __set($name, $value) 
{ 
    $this->$name = $value; 
} 

明らかに詳細はありますが、それはあなたのアクセサを処理します。

+1

魔法は遅いです。これらは適切なgetterとsetterのための置き換えではありません。 – Gordon

+0

コードを読みやすくし、スループットを大幅に低下させません。 –

2

レジュメの場合は、ゲッターやセッターのような細かいことと同じくらい多くのことを自分のロジックと同じように気にするでしょう。

ゲッター/セッターなしで公開したいと思っていますが、それらの上にコメントを入れて、「これらをプライベートにして、ゲッター/セッターをアプリケーションの範囲に応じて使うことを検討してくださいそしてチーム」

その方法の好適なコードスタイルは:

  1. あなたの履歴書コードは

  2. 彼らは理解して雑然とないこと、あなただけではなく 怠惰となってすべてのもの理由もなく

  3. の公開 それは代わりに 盲目的に特定の スタイルを次のは、あなたが意思決定を行う際に、特定の 適用を検討したいということを示しています。
関連する問題