1

このようなばかげた質問をして申し訳ありませんが、私は OOP を初めて使用し、静的メソッドが何に使用されるかを理解しようとしています。PHP コードの例を次に示します。

class foo{
static function bar(){
//do something here
}
public function baz(){
//do something different
}
}

ドキュメントには次のように記載されています。

クラスのプロパティまたはメソッドを静的として宣言すると、クラスのインスタンス化を必要とせずにアクセスできるようになります

ただし、上記の例の両方のメソッドは、次のようにクラスの外部からアクセスできます。

foo::bar();
foo::baz();

クラスfooのインスタンス化なしで(少なくとも私が使用しているPHP 5.3では)動作します。 では、両方の方法が機能する場合、静的メソッドを使用する意味は何ですか??

このような初心者の質問をもう一度お許しください。私は自分でそれを見つけようと本当に一生懸命努力してきましたが、成功しませんでした。ありがとう。

4

2 に答える 2

3

静的メソッドは、グローバルに利用可能なツール (ヘルパー) であり、しばしば過剰に使用されます。静的メソッドは、テスト容易性にとって致命的であり、ほぼ完全に回避する必要があります。

それらの長所と短所は、それらがグローバルスコープに存在することです。どこからでも呼び出すことができます。カプセル化を破るため、ほとんどの場合、コードの匂いがします。

言語レベルでは、Kolink が言及しているようmysqli:real_escape_string()に、もちろん理にかなっていますが、アプリケーション レベルでは、通常、グローバル スコープを汚染したり、そのようなカプセル化を破ったりしたくありません。本当に必要なツールと場所を考えて、それらを意味のあるグループ (クラス) にまとめて注入します。

厳密foo::baz()モードで警告が発生します(常にオンにする必要があります):

厳格な基準: 非静的メソッド foo:baz() は、yourfile.php の行 x で静的に呼び出されるべきではありません

于 2013-10-09T17:44:48.097 に答える