私は PHP で OOP を復習しているのですが、関数や変数を静的に設定する例を見ました。変数や関数を静的に設定するのはいつ、なぜでしょうか? 他の言語を学んだことがありますが、静的を使用した記憶があまりなく、実際にその目的がわからなかったのです。それが何をするのかは知っていますが、なぜ代わりに変数を使用しないのでしょうか?
ベストアンサー1
あなたが使う静的インスタンスに結び付けられていないメソッド/変数を使用したいとき。これは次のような場合に発生します:
目的とインスタンスには関係がありません (Java のように OOP 以外のものを許可しない言語のツールボックスには便利ですが、PHP では役に立ちません)。
インスタンスへのアクセスを制御したい場合、ほとんどの場合、処理したいインスタンスはコードを書くときには定義されず、実行時に定義されます。シングルトンパターンは最良の例です。静的メソッドをファクトリとして使用して、コンテキストに応じてオブジェクトを作成したり、他のインスタンスとリソースを共有したりできます。たとえば、静的メンバーはデータベース レイヤーへのアクセスを許可できるため、アプリの一部がどこからでも同じレイヤーにアクセスし、競合することなく開いたり閉じたりできます。
パフォーマンスは重要であり、メソッドは何度も実行されます。その場合、インタープリタが各呼び出しでインスタンスのメンバーを検索するのを防ぐことで、CPU 時間を節約できます。しかし、それでもパフォーマンスが問題となり、このソリューションにたどり着く場合は、アーキテクチャを再検討するか、コードの重要な部分に高速な言語へのバインディングを使用する必要があるかもしれません。
ある型に関連し、別の型に適用されるメソッドがあります。最初の型の宣言にメソッドを記述し、別の型のインスタンスを期待するため、静的に設定することは理にかなっています。
完璧な例は文字列パーサーです:
class MyObject
{
static function parse($str)
{
$obj = new MyObject();
// some parsing/setting happens here
return $obj;
}
}
// you create an object "MyObject" from a string, so it's more obvious
// to read it this way :
$new_obj = MyObject::parse("This a description of a super cool object");