, (*1)
Callback-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡ-ΠΎΠ±ΡΡΡΠΊΡ Π½Π°Π΄ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ
Π² PHP ΡΠΈΠΏΠΎΠΌ callable., (*2)
ΠΠ»Π°Π²Π½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° - ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
Serializable. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ Π²ΡΡΠΊΠΈΠΉ callable ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½,
ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ isSerializable() Π΄Π»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ., (*3)
ΠΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
Π Π°Π±ΠΎΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ°Π±ΡΠΈΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
make():, (*4)
use \Movephp\CallbackContainer\Container;
$factory = new Container();
$callback = $factory->make('my_callback');
ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ:, (*5)
if($callback->isSerializable()){
var_dump(serialize($callback));
}
ΠΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅:, (*6)
call_user_func($callback->closure());
ΠΠΎΠΏΡΡΠΊΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Ρ Π½Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΌ ΠΊΠ°Π»Π±Π΅ΠΊΠΎΠΌ
Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
\Movephp\CallbackContainer\Exception\NonSerializableException, (*7)
ΠΠ°ΠΆΠ½ΠΎ: ΠΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ CallbackContainer'Π° Ρ ΠΊΠ°Π»Π±Π΅ΠΊΠΎΠΌ Π½Π°
ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° [$object, 'method'] ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡ
ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π‘ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ½ΠΈΠΆΠ°ΡΡΡΡ Π·Π°ΡΡΠ°ΡΡ
Π½Π° ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ/Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΈΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅
ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ°ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ $object ΠΌΠΎΠΆΠ΅Ρ
Π±ΡΡΡ Π½Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠΌ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ
ΠΎ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΡ $object ΠΌΠΎΠ³ Π±ΡΡΡ
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° (ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅ΡΠ»ΠΈ
Ρ Π½Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ»ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΌ. Π΄Π°Π»Π΅Π΅)., (*8)
ΠΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ callback Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
Π ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΡΠΈΠΏΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ make() Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:, (*9)
| Π’ΠΈΠΏ |
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ |
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ callable
|
ΠΠ±ΡΠ΅ΠΊΡ Closure (Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½), ΡΡΡΠΎΠΊΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π²ΠΈΠ΄Π° [$objectOrClassName, $methodName]. |
Π£ΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ ΡΠΎΡΠΌΠ° callable: [$className, $nonStaticMethodName]
|
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠ°Ρ ΡΠΎΡΠΌΠ° ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ, Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΅Ρ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. |
ΠΠ°ΡΡΠΈΠ² Π²ΠΈΠ΄Π° [$psrContainerKey, $methodName]
|
ΠΠΎΠΏΡΡΡΡΠ½ΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Ρ PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ (ΡΠΌ. Π½ΠΈΠΆΠ΅). |
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ
ΠΡΠ»ΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ DI-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ PSR-11,
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ΅ΡΠΎΠ΄ make() ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ²,
ΠΏΠΎΡ
ΠΎΠΆΠΈΠΉ Π½Π° ΠΎΠ±ΡΡΠ½ΡΠΉ callable, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅ΠΌΠ΅Π½ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ
ΠΊΠ»ΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΠΎΡΠΈΡΡ Π½ΡΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅., (*10)
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅:, (*11)
use \Movephp\CallbackContainer\Container;
$factory = new Container($psrContiner);
$callback = $factory->make(['psr_container_key', 'method']);
ΠΠ»ΡΡΠΎΠΌ Π΄Π»Ρ PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΈΠ»ΠΈ
Π»ΡΠ±Π°Ρ ΡΡΡΠΎΠΊΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ $psrContiner->has($key) Π²Π΅ΡΠ½ΡΡ TRUE., (*12)
ΠΡΠΈΠ²ΡΠ·ΠΊΠ° PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
ΠΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ CallbackContainer'Π° ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΠΎΡΡΠ½Π½ΠΎΠ΅
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°Π»Π±Π΅ΠΊΠ°. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΡΠ»ΠΈ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ
Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΠΎ ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ
Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΠΊ CallbackContainer'Ρ., (*13)
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ
CallbackContainer'Π°:, (*14)
$callback = unserialize($serialized);
$callback->setPsrContainer($psrContiner);
ΠΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ PSR-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π±ΡΠ΄ΡΡΠΈΡ
CallbackContainer'ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π½Π°ΠΏΡΡΠΌΡΡ
(new Container()) ΠΈΠ»ΠΈ ΠΏΡΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π²ΡΠ·Π²Π°Π² ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΠ΅ΡΠ»ΡΠ½ΠΎ
ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ setPsrContainerGlobal():, (*15)
use \Movephp\CallbackContainer\Container;
Container::setPsrContainerGlobal($psrContiner);
$callback = unserialize($serialized);
ΠΠ½Π°Π»ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠ°Π»Π±Π΅ΠΊΠ°
ΠΡΠΎΠΌΠ΅ ΠΏΡΠΎΡΠ΅Π³ΠΎ CallbackContainer ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ parameters(), ΠΊΠΎΡΠΎΡΡΠΉ
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ°
Movephp\CallbackContainer\Parameter, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ,
ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠ΅ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠ°Π»Π±Π΅ΠΊΠΎΠΌ. ΠΠ»ΡΡΠ°ΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ²Π»ΡΡΡΡΡ
ΠΈΠΌΠ΅Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²., (*16)
ΠΠ΅ΡΠΎΠ΄ parameters() Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Reflection API
ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ,
ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ ΠΎΠ±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ
ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° CallbackContainer'ΠΎΠ² ΠΈΠ· ΠΊΠ΅ΡΠ°., (*17)
ΠΠ»Π°ΡΡ Movephp\CallbackContainer\Parameter ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³Π΅ΡΡΠ΅ΡΠΎΠ²
Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅:, (*18)
| ΠΠ΅ΡΠΎΠ΄ |
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ |
name(): string |
ΠΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° |
hasType(): bool |
true, Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΡΠΈΠΏ |
type(): string |
Π‘ΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ('int', 'string' ΠΈ Ρ.Π΄.) |
isVariadic(): bool |
true, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² |
isOptional(): bool |
true, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ |
getDefault(): mixed |
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΈΠ»ΠΈ null, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π½Π΅Ρ |
ΠΠ΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠ°Π»Π±Π΅ΠΊΠΈ
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ
CallbackContainer'Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΠ΅Π»ΡΡ
ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠ΅ΡΠ΅Π· isSerializable(),
Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠ΅Π»ΠΎΠΌ ΠΈΠΌΠ΅ΡΡ Π²Π²ΠΈΠ΄Ρ, ΠΊΠ°ΠΊΠΈΠ΅ Π²ΠΈΠ΄Ρ ΠΊΠ°Π»Π±Π΅ΠΊΠΎΠ² Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ
ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ. ΠΡΠΎ:, (*19)
- ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ, Ρ.Π΅. ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°
\Closure, ΠΊΠΎΡΠΎΡΡΠ΅,
ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΡΡΡΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ.
- ΠΡΠ±ΡΠ΅
callable, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ
ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΈΡ
Π±ΡΠ΄Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ
Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠ»Π΅ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΠΊΠΈΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠΎΡΡΠΈΠ½Π³Π° Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ,
ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΌΠ°ΡΡΡΡΡΠΎΠ² Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΈ ΠΊΠΎΡΠΎΡΡΠΉ
Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΡΡΡΠΎΠ΅Π½, ΡΠ°ΠΊ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡΡ
Π·Π°ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ. ΠΠΎΡ ΡΡΠ»ΠΎΠ²Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ:, (*20)
use Movephp\CallbackContainer\Container;
Container::setPsrContainerGlobal($psrContainer);
if ($cache->isHit()) {
$routes = $cache->get();
} else {
$callbackFactory = new Container();
$rules = getRoutingRulesOverWholeProject(); // Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ ΡΠΎΡΡΠΎΠ² ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌΠΈ ΠΊΠ°Π»Π±Π΅ΠΊΠΈ
$routes = [];
foreach ($rules as $rule) {
try {
$callback = $callbackFactory->make($rule->callback);
} catch (\Exception $e) {
$logger->error($e);
continue;
}
$routes[] = [
'template' => $rule->template,
'callback' => $callback
];
}
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ Π²ΡΠ΅ ΠΊΠ°Π»Π±Π΅ΠΊΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΠ΅
$serializable = array_reduce(
$routes,
function ($result, $route) {
return $result && $route['callback']->isSerializable();
},
true
);
if ($serializable) {
// ΠΠ΅ΡΠΈΡΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
$cache->set($routes);
$cachePool->save($cache);
}
}