2017-01-21 3 views
0

PHPクラスを見つけただけで、そのメソッドの1つが書かれている正当な理由があるのだろうかと思います。PHPクラスの静的プロパティは、次の使用まで値を保持しますか?

LogUtility::getLogger()は、PHPアプリケーションのさまざまな他のPHPクラスでは静的メソッドと呼ばれます。 getLogger()と呼ぶと、ifステートメントが意味を成すか、$logManagerは常にnullですか?

class LogUtility 
{ 
    /** 
    * @var LogManager 
    */ 
    protected static $logManager; 

    /** 
    * @return Logger 
    */ 
    public static function getLogger($name) 
    { 
     if (!self::$logManager) { 
      self::$logManager = GeneralUtility::makeInstance(LogManager::class); 
     } 
     return self::$logManager->getLogger($name); 
    } 
} 
+0

小さなテストを書く。それは?それとも? –

答えて

0

あなたはすぐに以下のように、テストをかき立てる、およびテスト/それを自分で証明することができます:

class someClass { 
    protected static $stored; 

    public static function test() { 
     echo '<br>Stored state:' . self::$stored; 
     if (! self::$stored) { 
      self::$stored = "set"; 
     } 
    } 
} 

someClass::test(); 
someClass::test(); 

出力は次のとおりです。

保存された状態:
保存された状態:セット

この単純なテストに基づいて、 swerははいifの文は意味があります。静的変数が設定され、維持されます。

0

$logManagerは、クラスのプロパティに設定されています。したがって、今のところ空のクラスであり、ゲッターでインスタンスを返すだけです。これはちょうどのコードを再利用オブジェクトに設定するだけです。だから少しリサイクルコードがあります。

このクラスでは、このオブジェクトで自由に遊ぶことができます。したがって、これをvarに設定して別のコードからこのLogUtilityを実行すると、すでにインスタンス化されています。例えば$util = new LogUtility();誰かが同行してもう一度インスタンス化しようとすると、$anotherUtil=new LogUtility();は、クラスをリサイクルし、新しいインスタンスをインスタンス化するのではなく、すでにインスタンス化されているインスタンスを戻します。

したがって、はい、それを保った。 varには「同じ値」は含まれていませんが、他の変数でインスタンス化された「同じ」クラスへの参照が含まれているため、そこに同じインスタンスのコピーが作成されます。

関連する問題