6

PHPで新しいクラスを作成しています。このクラスが拡張されることはないと思います。クラスメンバーをプライベートにし、getterおよびsetter関数を実装する必要がありますか?

私の一部は、これは時間の大きな無駄であり、コードをまとめるのに役立つだけだと考えています。

クラスは履歴書用です。私は自分のコーディングスタイルを示すためにコードで書いています。問題は、雇用主がゲッターとセッターを見たいのか、それとも単に物事を混乱させるのかということです。

4

9 に答える 9

6

現在継承を期待していなくても、将来は継承が必要になる可能性があるという議論をもう一度繰り返したくありませんが、ゲッターとセッターを使用する理由はまだまだあります。

  • ゲッターとセッターを使用すると、プロパティの検証を簡単に実装できます
  • あなたのコードは良いコーディングガイドラインに従うので、他の人が読みやすくなります。ゲッターとセッターを使用しないコードファイルに遭遇した場合、私はそれについて非常に懐疑的であり、何度も注意深く読む必要があります。
  • また、これはクラスごとの決定であるだけでなく、プロジェクト全体の決定でもあります。必要なクラスにゲッターとセッターを使用し、他のクラスには使用しないようにしますか?一貫性が重要だと思います。
  • ゲッターとセッターの書き込みを自動生成できるツールがあります。コードを書くのは1回だけですが、何度も読むことを忘れないでください。
于 2010-12-10T20:54:10.363 に答える
4

__getおよび__setマジックメソッドを確認してください。コードがクリーンに保たれ、変数scopelを設定しないことに怠惰になる必要はありません。

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

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

明らかにあなたはより多くの詳細を持っているでしょう、しかしそれはあなたのアクセサーを扱います。

于 2010-12-10T20:57:42.657 に答える
3

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

カプセル化は優れたオブジェクト指向設計の一部です。しかし、優れたオブジェクト指向設計はプログラミングの目標ではありません。目標は、物事を機能させ、必要に応じて簡単に変更できるようにすることです。

于 2010-12-10T20:52:21.063 に答える
2

私があなただったら気にしない。そうです、その装飾はクラスを乱雑にするだけです。

于 2010-12-10T20:49:52.370 に答える
2

私が理解している限り、__ get&__setをオーバーライドすることができます。 http://php.net/manual/en/language.oop5.overloading.php

于 2010-12-10T20:50:55.473 に答える
2

クラスのプロパティを保護またはプライベートにしてから、ゲッターとセッターを使用するのが好きです。次に、セッターのコードを使用して、プロパティ値が許容範囲内にあることを確認します。受け入れられた値が設定されているか、例外がスローされているかを常に確認できるため、デバッグが容易になるため、このアプローチが気に入っています。また、プロパティに保持されている値の周りにオブジェクトを渡すと、他に何も爆発しないという確信が得られます。

于 2010-12-10T20:53:51.450 に答える
2

履歴書の場合、彼らはゲッター/セッターのような細かいことをするのと同じくらい(またはそれ以上)あなたのロジックを気にかけている可能性があります。

私の場合は、ゲッター/セッターなしで公開しますが、「アプリケーションの範囲と好みのコードスタイルに応じて、これらをプライベートにし、ゲッター/セッターを使用することを検討してください。チームの」

そのように:

  1. 履歴書コードが乱雑ではありません

  2. 彼らはあなたが怠惰ですべてを理由もなく公開しているだけではないことを理解しています

  3. これは、特定のスタイルに盲目的に従うのではなく、決定を下す際に特定のアプリケーションを検討することを示しています。
于 2010-12-10T21:55:18.777 に答える
1

セットで何か特別なことをしたいですか、それとも取得したいですか(またはそのうちの1つだけをプライベートにしますか)?

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

「特別な方法」でそれらを使用しない場合、これを行うことで何も得られず、おそらくそれはすべてを遅くすることさえあります

于 2010-12-10T20:50:28.103 に答える
0

これらのプロパティを設定またはアクセスするときに特定の動作を行う予定がない場合は、それほど重要ではありません。

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

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

于 2010-12-10T20:52:51.780 に答える