2016-09-06 1 views
1

私は以下の例のプライベートスタティックメソッドが非スタティックであるべきかどうかを考えています。それはクラスの静的プロパティにのみ関係しています。クラスの静的プロパティは、それが静的メソッドとして大丈夫だと私に信じさせます。ただし、非静的メソッドからのみ呼び出されるため、非静的メソッドである必要があります。プライベートスタティックメソッドの使用

パブリックメソッドは静的にする必要があるが、プライベートメソッドは静的にする必要がある場合はわかりません。

お気軽にご連絡ください!

<?php 
class MyClass 
{ 
    private static $initialized = false; 
    private static $staticProperty1; 
    private static $staticProperty2; 
    private  $normalProperty1; 

    public function __construct($normalProperty) 
    { 
     $this->normalProperty1 = $normalProperty; 
    } 

    public function doSomething() 
    { 
     self::initialize(); 
     // Now do some other stuff 
    } 

    private static function initialize() 
    { 
     if (!self::$initialized) { 
      self::$staticProperty1 = 'Hello'; 
      self::$staticProperty2 = 'World'; 
      self::$initialized = true; 
     } 
    } 
} 

答えて

1

これは興味深い質問です。プライベート関数がいつ静的であるべきかを知りたい。 別の静的メソッドから呼び出す場合は、静的でなければなりません。これは、 $thisにアクセスできないためです。

以前の私の前提は正しくありませんでした。静的関数から非静的メソッドを呼び出すこともできます。しかし、変数$thisを使ってオブジェクト自体にアクセスできないと考える必要があります。また、静的でないオブジェクトのプロパティにアクセスすることもできません。

私の意見では、たとえ非静的コンテキストからメソッドを呼び出せば、それを静的にすることはできません。静的である必要はありません。しかし、これが良い練習であるかどうかは分かりません。ちょうど私がやること。

+0

よろしくお願いいたします。私はおそらく最終的に個人的な好みになると理解していますが、私は自分のコードとできるだけセマンティックであることが好きです。 –

1

通常、パブリック静的メソッドで別のメソッドを呼び出す場合は、プライベート静的メソッドを使用します。

+0

はい私は同じことをしますが、この場合パブリックメソッドは静的ではありません。静的プロパティを設定するだけであっても、プライベートメソッドを非静的に変更しますか? –

+1

はい、別のインスタンスメソッドによって呼び出されたので、インスタンスメソッドに変更します。それが静的である理由もありません。別のことは、あなたのメソッドは静的変数を初期化しているので動作しますが、非静的変数を初期化したい場合は、それを分離したいでしょうか? –

+0

わかりました。将来的に非静的なプロパティを設定する可能性についてのあなたの意見は、それについて考える良い方法です! –

関連する問題