ΠΠ΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ β ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ Π½Π°ΡΠ½ΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π»Π΅Π½ΠΈΠ²ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΡ: Π°) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π½Π° 100 % ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΡΡΡΡ Π±) ORM-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π³ΠΈΠ΄ΡΠΈΡΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ORM-ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ Π²) JSON-ΠΏΠ°ΡΡΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΠ°Π·Π±ΠΎΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ°ΡΡΡΡΡ.
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄Π²Π΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π»Π΅Π½ΠΈΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²: ΠΎΠ±ΡΠ΅ΠΊΡΡ-ΠΏΡΠΈΠ·ΡΠ°ΠΊΠΈ (Π°Π½Π³Π». Ghost Objects) ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈ (Π°Π½Π³Π». Virtual Proxies), ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π΄Π΅ΡΡ ΠΈ Π΄Π°Π»ΡΡΠ΅ Π±ΡΠ΄Π΅ΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ Β«Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΏΡΠΈΠ·ΡΠ°ΠΊΠΈΒ» ΠΈ Β«Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈΒ». Π ΠΎΠ±Π΅ΠΈΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΡΡΡ ΠΊ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ ΠΈΠ»ΠΈ ΡΠ°Π±ΡΠΈΠΊΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ-ΠΏΡΠΈΠ·ΡΠ°ΠΊΠΈ Π½Π΅ΠΎΡΠ»ΠΈΡΠΈΠΌΡ ΠΎΡ Π½Π΅Π»Π΅Π½ΠΈΠ²ΡΡ : Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½Π΅ Π·Π½Π°Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ Π»Π΅Π½ΠΈΠ²ΡΠ΅, ΡΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΊΠΎΠ΄Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±Π΅Π· Π·Π½Π°Π½ΠΈΡ ΠΎ Π»Π΅Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ΅Π½ΠΈΠ²ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈ ΡΠΎΠΆΠ΅ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½Ρ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠΈΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΡ-ΠΏΡΠΎΠΊΡΠΈ ΠΎΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΠΏΡΠΎΠΊΡΠΈ ΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΠ°Π·Π½ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ.
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ Π²Π΅ΡΡΠΈΠΈ
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² PHP 8.4.
Π Π°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΠ»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ PHP-ΠΊΠ»Π°ΡΡΠ° stdClass (Π΄ΡΡΠ³ΠΈΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ) ΠΈΠ»ΠΈ ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π»Π΅Π½ΠΈΠ²ΡΠΌ. Π’ΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π°, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, β ΠΌΠ΅ΡΠΎΠ΄Ρ ReflectionClass::newLazyGhost() ΠΈ ReflectionClass::newLazyProxy().
ΠΠ±Π° ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ callback-ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΆΠ΄ΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΈ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ. Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΏΡΠ°Π²ΠΎΡΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ.
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π»Π΅Π½ΠΈΠ²ΠΎΠ³ΠΎ ΠΏΡΠΈΠ·ΡΠ°ΠΊΠ°
<?php
class Example
{
public function __construct(public int $prop)
{
echo __METHOD__, "\n";
}
}
$reflector = new ReflectionClass(Example::class);
$lazyObject = $reflector->newLazyGhost(function (Example $object) {
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΠ·ΠΆΠ΅, Π½Π° ΠΌΠ΅ΡΡΠ΅ β ΠΏΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
$object->__construct(1);
});
var_dump($lazyObject);
var_dump(get_class($lazyObject));
// ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
var_dump($lazyObject->prop);
?>
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
lazy ghost object(Example)#3 (0) { ["prop"]=> uninitialized(int) } string(7) "Example" Example::__construct int(1)
ΠΡΠΈΠΌΠ΅Ρ #2 ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π»Π΅Π½ΠΈΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠΊΡΠΈ
<?php
class Example
{
public function __construct(public int $prop)
{
echo __METHOD__, "\n";
}
}
$reflector = new ReflectionClass(Example::class);
$lazyObject = $reflector->newLazyProxy(function (Example $object) {
// Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ
return new Example(1);
});
var_dump($lazyObject);
var_dump(get_class($lazyObject));
// ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
var_dump($lazyObject->prop);
?>
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
lazy proxy object(Example)#3 (0) { ["prop"]=> uninitialized(int) } string(7) "Example" Example::__construct int(1)
ΠΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ Π»Π΅Π½ΠΈΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π»Π΅Π½ΠΈΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π²ΠΊΠ»ΡΡΠ°Ρ Π΄ΠΎΡΡΡΠΏ ΡΠ΅ΡΠ΅Π· ΠΊΠ»Π°ΡΡ ReflectionProperty. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΠ·Π²Π΅ΡΡΠ½Ρ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅:
ΠΡΠΈΠΌΠ΅Ρ #3 ΠΡΠΈΠΌΠ΅Ρ ΡΠ½Π΅ΡΠ³ΠΈΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ²
<?php
class BlogPost
{
public function __construct(
public int $id,
public string $title,
public string $content,
) {}
}
$reflector = new ReflectionClass(BlogPost::class);
$post = $reflector->newLazyGhost(function ($post) {
$data = fetch_from_store($post->id);
$post->__construct($data['id'], $data['title'], $data['content']);
});
// ΠΠ΅Π· ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° ReflectionProperty::setValue(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ΄ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ,
// Π·Π°ΠΏΡΡΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
$reflector->getProperty('id')->skipLazyInitialization($post);
$reflector->getProperty('id')->setValue($post, 123);
// ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π±Π΅Π· Π·Π°ΠΏΡΡΠΊΠ° Π»Π΅Π½ΠΈΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
$reflector->getProperty('id')->setRawValueWithoutLazyInitialization($post, 123);
// ΠΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Ρ id Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π±Π΅Π· Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
var_dump($post->id);
?>
ΠΠ΅ΡΠΎΠ΄Ρ ReflectionProperty::skipLazyInitialization() ΠΈ ReflectionProperty::setRawValueWithoutLazyInitialization() ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΠ±Ρ ΠΎΠ΄Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π»Π΅Π½ΠΈΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Ρ.
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ ΠΏΡΠΈΠ·ΡΠ°ΠΊΠΈ β ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π½Π° ΠΌΠ΅ΡΡΠ΅, ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΎΡΠ»ΠΈΡΠΈΠΌΡ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ» Π»Π΅Π½ΠΈΠ²ΡΠΌ. Π‘ΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, ΡΠ°ΠΊ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π½Π΅ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΠΉ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½ΠΎΠΉ.
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΊΡΠΈ Π΄ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°: ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π»Π΅Π½ΠΈΠ²ΠΎΠΌ ΠΏΡΠΎΠΊΡΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΏΡΠΈΠ·ΡΠ°ΠΊΠΈ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ. Π₯ΠΎΡΡ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΏΡΠΎΠΊΡΠΈ ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½Ρ, ΠΊΠ°ΠΊ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΏΡΠΈΠ·ΡΠ°ΠΊΠΈ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠΈΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΠΏΡΠΎΠΊΡΠΈ ΠΎΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΠΏΡΠΎΠΊΡΠΈ ΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΠ°Π·Π½ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ.
ΠΠ±ΡΠ΅ΠΊΡΡ Π΄Π΅Π»Π°ΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΌΠΈ Π»ΠΈΠ±ΠΎ ΡΡΠ°Π·Ρ β ΠΏΡΡΡΠΌ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° ReflectionClass::newLazyGhost() ΠΈΠ»ΠΈ ReflectionClass::newLazyProxy(), Π»ΠΈΠ±ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΌΠ΅ΡΠΎΠ΄ ReflectionClass::resetAsLazyGhost() ΠΈΠ»ΠΈ ReflectionClass::resetAsLazyProxy(). Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ:
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π»Π΅Π½ΠΈΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠΌΠ΅ΡΠΈΠ»ΠΈ Π½Π΅Π»Π΅Π½ΠΈΠ²ΡΠΌ, ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ°ΠΊ Π»Π΅Π½ΠΈΠ²ΡΠΉ, Π΅ΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΌ.
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π½Π° 100 % ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π½Π΅ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
ΠΡΠ·ΠΎΠ²Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΡΠΊΠ°, Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ ΠΎΡΠΊΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ»ΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π»Π΅Π½ΠΈΠ²ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±Π΅Π· Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
,
Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡ
__serialize()
ΠΈΠ»ΠΈ __sleep() Π½Π΅ Π·Π°ΠΏΡΡΡΠΈΠ»Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
Π Π°Π·Π΄Π΅Π» ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π΄Π»Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
null
ΠΈΠ»ΠΈ Π½Π΅ Π²Π΅ΡΠ½ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ Π±ΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ
ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ΠΎΡΠ»ΠΈΡΠΈΠΌ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ» Π»Π΅Π½ΠΈΠ²ΡΠΌ.
ΠΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΠΏΡΠΎΠΊΡΠΈ Π΄Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΡΠΎ ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°; ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΠΏΡΠΎΠΊΡΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅, Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ReflectionProperty::skipLazyInitialization() ΠΈΠ»ΠΈ ReflectionProperty::setRawValueWithoutLazyInitialization().
Π‘Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΏΡΠΎΠΊΡΠΈ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈ Π½Π΅ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ.
Π₯ΠΎΡΡ ΡΠ°Π±ΡΠΈΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠΊΡΠΈ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°Π±ΡΠΈΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΏΡΠΎΠΊΡΠΈ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ, Π½ΠΎ ΠΏΠΎΡΠ΅ΡΡΡΡΡΡ Π½Π° Π·Π°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΠΊΡΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ², ΠΊΠ»Π°ΡΡΠ°, ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°.
ΠΠ±Π»Π°ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $this ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΈΠ»ΠΈ ΡΠ°Π±ΡΠΈΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠ»ΠΈ ΡΠ°Π±ΡΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΡΡΠ»ΠΎΠΊ.
Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΄ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π»Π΅Π½ΠΈΠ²ΡΠΉ, Π΅ΡΠ»ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΠ°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ ΠΎΡΠΌΠ΅Π½ΡΡΡΡΡ. ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π»Π΅Π½ΠΈΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π½ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΊΠ»ΠΎΠ½, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ.
ΠΡΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²-ΠΏΡΠΎΠΊΡΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΊΡΠΈ, ΡΠ°ΠΊ ΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ,
ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊΠ»ΠΎΠ½ ΠΏΡΠΎΠΊΡΠΈ.
ΠΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ __clone
Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅, Π½Π΅ Π½Π° ΠΏΡΠΎΠΊΡΠΈ.
ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΡΠΎΠΊΡΠΈ ΠΈ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ²ΡΠ·Π°Π»ΠΈΡΡ
ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠ»ΠΎΠ½Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΠΏΡΠΎΠΊΡΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ
Π½Π° ΠΊΠ»ΠΎΠ½ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°.
Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠ»ΠΎΠ½ ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ Π²Π»ΠΈΡΡΡ Π½Π° ΠΊΠ»ΠΎΠ½. ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΠΊΡΠΈ, ΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π²ΠΌΠ΅ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΠΎΠ½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ°.
ΠΠ»Ρ Π»Π΅Π½ΠΈΠ²ΡΡ ΠΏΡΠΈΠ·ΡΠ°ΠΊΠΎΠ² Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈ. ΠΠ»Ρ ΠΏΡΠΎΠΊΡΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, Π΅ΡΠ»ΠΈ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΠ΅ΡΠΎΠ΄Π°ΠΌ ReflectionClass::resetAsLazyGhost() ΠΈ ReflectionClass::resetAsLazyProxy() ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.