2011-07-03 19 views
0

私は自分のウェブサイトを動かそうとしていたとき、静的で非静的な関数とクラスのプロパティと本当に混乱しました。PHP:静的は非静的より優れていますか?

静的ではないメソッドを使用するのではなく、静的関数を使用してWebサイト全体を作成する方が良いかどうか説明できますか? 私はこれをGoogle上でほとんど見つけることができません。

+0

私はあなたがどちらか一方を排他的に使うべきではないと思います。インスタンスの場合と同じ意味でのみスタティックを使用します – Ibu

+0

アプリケーションのアーキテクチャと(ソフトウェア)デザインがどのように見えるかによって非常に大きく異なるため、Googleでは多くの情報を見つけることはできません。 – slhck

+0

静的関数と非静的関数の交換はできません。状態を格納するためにオブジェクトインスタンスが必要なクラスはありませんか? – Dogbert

答えて

1

"this->"内のデータにアクセスする必要があるメソッドは、非静的メソッドにする必要があります。その後、オブジェクトをインスタンス化する必要があります(「新規」を介して)。

メソッドのすべてが関数パラメータに含まれるデータである場合は、メソッドを静的にすることを検討してください。または静的メソッドのみを使用して別のクラスを作成します。

1

これは本当にアプリケーションの設計方法によって異なります。関数を呼び出すことができ、クラスをインスタンス化せずに呼び出すことができる場合は、それを静的として宣言します。さもなければ、そうしないでください。ほとんどすべての場合、静的関数だけを使用することは意味がありません(手順コードを書くこともできます)ので、2つの組み合わせを使用しています。

0

OOコードを記述したり、静的変数とメソッドのみを使用することは意味がありません。手続き型コードを書くことと同じです。 OOPが静的コードを使用してのみ提供するすべての機能の恩恵を受けることはできません。

静的なメソッドやプロパティを使用してはいけないと言っているわけではありませんが、それらを多く使用すると、オブジェクト指向の設計が悪いという指標になります。

+0

そして、非静的なメソッドとプロパティだけを使用するのが適切ですか? – mkram0

+0

私は両方の組み合わせが最高だと言います。例えばいくつかのデザインパターンは静的な機能に強く依存しています。たとえばSingletonです。必要な場合にのみ静的コードを使用する必要があります。 – Headshota

0

静的すぎるクラスの間にバインドを作成するので、静的なものは有害であり避けるべきであるという考え方があります。例えば。クラスAとBが互いのメソッドを呼び出し、それらからAAとBBをサブクラス化し、AAがBBのコードを呼び出すことを期待すれば、インスタンスとして互いに知っていればうまく動作しますが失敗しますまだA/Bを指している静的コールの場合。

いずれにせよ、PHPの静的な実装はかなり悪いです。 5.3の前に遅い静的バインディングはありません(オブジェクトが独自の静的メソッドを呼び出すことができないため、OOPアーキテクチャでは静的関数が無用になります)。静的関数は厳密なモードでは非静的に呼び出すことはできません。非常に奇妙なエラーが発生し、クラスはその静的変数を両親と共有します...不確実な場合は、静的でないIMHOを使用する必要があります。

関連する問題