ReflectionClass::newLazyProxy
  新しいレイジープロキシインスタンスを作成する
  
 
  説明
  
   public object ReflectionClass::newLazyProxy(callable $factory, int $options = 0)
  
   クラスの新しいレイジープロキシインスタンスを作成し、
   factory をアタッチします。コンストラクタは呼び出されず、
   プロパティはデフォルト値に設定されません。プロキシの状態を
   初めて参照または変更する時に、
   ファクトリ関数により実インスタンスが初期化され、
   プロキシにアタッチされます。その後、プロキシとのすべての対話は
   実インスタンスに転送されます。
   初期化トリガーおよび
   初期化シーケンス
   を参照してください。
  
  
 
  パラメータ
  
   
    - 
factory 
    - 
     
      ファクトリは以下のシグネチャを持つコールバックです:
     
     
      
       object factory(object $object)
      
       
        - 
object 
        - 
         
          初期化される
object。この時点では、
          オブジェクトはもはやレイジーとしてマークされておらず、
          アクセスしても再び初期化がトリガーされることはありません。
         
         
       
      
     
     
      ファクトリ関数は、実インスタンスとして参照される
      オブジェクトを返す必要があり、それがプロキシにアタッチされます。
      この実インスタンスはレイジーであってはならず、
      プロキシ自体でもあってはなりません。もし実インスタンスが
      プロキシと同じクラスでない場合、プロキシのクラスは実インスタンスのクラスの
      サブクラスでなければならず、追加のプロパティを持ってはならず、
       __destructや __cloneメソッドを
      オーバーライドしてはいけまさん。
     
     
   
   
    - 
options 
- 
     
      optionsには以下のフラグを組み合わせて
      指定できます:
      
       
        - 
         
ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
         
        - 
         
          デフォルトでは、レイジーオブジェクトのシリアライズは
          初期化がトリガーされます。このフラグを設定すると、
          初期化せずにシリアライズできるようになります。
         
        
 
       
      
     
     
   
  
  
 
  戻り値
  
   レイジープロキシインスタンスを返します。オブジェクトにプロパティがない場合、または
   そのプロパティがすべてstaticまたはvirtualの場合、通常の(レイジーではない)インスタンスが
   返されます。
   レイジーオブジェクトの
   ライフサイクルも参照してください。
  
  
 
  エラー / 例外
  
   クラスが内部クラスであるか、stdClassを除く内部クラスを
   拡張している場合、Errorをスローします。
  
  
 
  例
  
   例1 基本的な使用法
   
<?php
class Example {
    public function __construct(public int $prop) {
        echo __METHOD__, "\n";
    }
}
$reflector = new ReflectionClass(Example::class);
$object = $reflector->newLazyProxy(function (Example $object) {
     $realInstance = new Example(1);
     return $realInstance;
});
var_dump($object);
var_dump($object instanceof Example);
// 初期化をトリガーし、プロパティの取得を実インスタンスに転送します
var_dump($object->prop);
var_dump($object);
?>
 
    
   
   
lazy proxy object(Example)#3 (0) {
  ["prop"]=>
  uninitialized(int)
}
bool(true)
Example::__construct
int(1)
lazy proxy object(Example)#3 (1) {
  ["instance"]=>
  object(Example)#4 (1) {
    ["prop"]=>
    int(1)
  }
}
 
    
   
  
 
  参考
  
   - レイジーオブジェクト
 
   -  ReflectionClass::newLazyGhost
 
   -  ReflectionClass::newInstanceWithoutConstructor
 
   -  ReflectionClass::resetAsLazyProxy
 
   -  ReflectionClass::markLazyObjectAsInitialized
 
   -  ReflectionClass::initializeLazyObject
 
   -  ReflectionClass::isUninitializedLazyObject
 
   -  ReflectionProperty::setRawValueWithoutLazyInitialization
 
   -  ReflectionProperty::skipLazyInitialization
 
   -  ReflectionProperty::isLazy