0

次のようなクラスがあるとします。

class MyClass {
  public function __construct($str) {
    // do some stuff including:
    $str = self::getIP($str);
  }

  private static function getIP($str) {
    return (bool) ip2long($str) ? $str : gethostbyname($str);
  }

  // other NON static functions ....
}

上記のシナリオでは、getIP を静的にすることと単純にすることの利点/欠点は何ですか:

private function getIP($str) {
  return (bool) ip2long($str) ? $str : gethostbyname($str);
}

$this->getIP();コンストラクター(またはその他のメソッド)で呼び出す

コンテキスト: 通常は static キーワードなしでこれを行いますが、最近数回これに遭遇しました。これを絶対に使用しない場合に static を使用する利点があるかどうか疑問に思っています。

4

2 に答える 2

2

この特定のケースでは、よくわかりません。通常、次の理由で静的メソッドを使用します。

  • 複数のオブジェクトからアクセスしたい静的変数にデータを保存します(グローバルのようなものです)
  • そのメソッドを呼び出すたびにオブジェクトのインスタンスを作成する必要はありません。特に、ほとんどが外部から呼び出される場合はそうです。

たとえば、私は通常、多くのヘルパー メソッドを持つ App オブジェクトを作成します。これらの 1 つですfetch_db。データベースに接続するたびに、 を呼び出すだけApp::fetch_db()です。

于 2012-09-18T23:36:43.027 に答える
1

この特定のケースでは、利点も欠点もありません。ただし、静的メソッドは他の静的メソッド (おそらく何らかのpublic staticメソッド) で使用できます。別の静的メソッドによって呼び出されていませんか?

技術的には、依存していないメソッドは、$thisそのインターフェイスに準拠している限り、静的にすることができます (たとえば、親メソッドが依存している$thisが子メソッドが依存していない場合、子メソッドは静的であってはなりません)。

于 2012-09-18T23:35:51.867 に答える