rollun-dic
ΠΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅
Π‘ΠΏΡΠ°Π²ΠΊΠ°
ΠΠ½ΡΠ΅ΠΊΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Π§Π΅ΡΠ΅Π· ΡΠ΅ΡΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ - Π΅ΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ΅ΡΡΠ΅Ρ Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ°, ΠΏΡΠΈ ΠΈΠ½ΡΠ΅ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΎΠ½. ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ/Π°ΡΡΠΈΠ±ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° - Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π° ΡΠ΅ΡΠ΅Π· ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅ΡΡΠ΅Ρ Π½Π΅ Π±ΡΠ» Π½Π°ΠΉΠ΄Π΅Π½.
public ΡΠ²ΠΎΠΉΡΡΠ²Π° - ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π² ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ protected ΡΠ²ΠΎΠΉΡΡΠ²Π° -ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π² ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ private ΡΠ²ΠΎΠΉΡΡΠ²Π° - ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π² ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ Π±Π΅Π· ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ
ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΏΡΠΎΡΡΡΠΌ ΡΠΈΠΏΠΎΠΌ ΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
ΠΏΡΠΎΡΡΡΠ΅ ΡΠΈΠΏΡ (int,string,float,array,resource,)
ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠ΄Π°ΡΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
Π ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π±ΡΠ» Π½Π΅ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, ΡΠΎ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π° Π² ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠ΄Π°ΡΠΈ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠ΅ΡΠΎΠ΄Ρ ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ²
init
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΡΠΊΠ°Π·Π°Π½ΡΠΌΠΈ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ __construct
.
ΠΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π² ΡΠ»ΡΡΠ°Π΅ Π½Π°Π»ΠΈΡΠΈΡ ΡΠ°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΈΡΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² Π½Π΅Π³ΠΎ.
Π’Π°ΠΊ ΠΆΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ±ΡΠΎΡΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ΅Π½ΠΎ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Π³Π΄Π΅ ΡΠΊΠ·Π°ΡΡ ΠΌΠ°ΠΏΠΈΠ½Π³.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°(ΡΠ΅ΡΠ²ΠΈΡΠ°) Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅,
Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ - ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
setConstructParams
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΡΠΊΠ°Π·Π°Π½ΡΠΌΠΈ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ __construct
.
Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° - ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠΌΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ.
initWakeup
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ ΠΌΠ°ΠΏΠΈΠ½Π°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° - ΠΈΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°/Π°ΡΡΠΈΠ±ΡΡ ΠΊΠ»Π°ΡΠ°, Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠΌΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ.
runParentConstruct
ΠΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ ΠΌΠ°ΠΏΠΈΠ½Π°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° - ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°(ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°), Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠΌΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ.
ΠΠ°ΡΠΊΠ°Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
DI - InsideConstruct
##ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
###ΠΠ±ΡΡΠ½Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°
ΠΡΡΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ 3 ΡΠ΅ΡΠ²ΠΈΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ:
class Class1
{
public $propA;
public $propB;
public $propC;
public function __construct($propA = null, $propB = null, $propC = null)
{
$this->propA = $propA;
$this->propB = $propB;
$this->propC = $propC;
}
}
/* @var $container ContainerInterface */
global $container;
$propA = $container->has('propA') ? $container->get('propA') : null;
$propB = $container->has('propB') ? $container->get('propB') : null;
$propC = $container->has('propC') ? $container->get('propC') : null;
new Class1($propA, $propB, $propC);
ΠΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΠ»ΠΈ ΠΈΡ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
###Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎ-ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ InsideConstruct::init()
:
ΠΡΠ»ΠΈ ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
class Class1
{
public $propA;
public $propB;
public $propC;
public function __construct($propA = null, $propB = null, $propC = null)
{
InsideConstruct::init();
}
}
new Class1();
ΠΡΠ΅ ΡΡΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° Π±ΡΠ΄ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ ΠΈΠ· $containr
ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅.
ΠΡΠ·ΠΎΠ² InsideConstruct::init
Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Π² ΠΊΠΎΠ½ΡΡΡΠ°ΠΊΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
ΠΡΠ»ΠΈ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΠ½ΡΡΡΠ°ΠΊΡΠΎΡΠ° ΡΠΊΠ°Π·Π°Π½Ρ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠΎ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ
InsideConstruct::init()
Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Ρ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Public
, Protected
, ΠΈ Private
ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ,
Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ»ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ ΡΠ°Π½Π΅Π΅. ΠΠΎΡΠ»Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈ ΡΡΠ΄Π° Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΡΠ΅ΡΠ²ΠΈΡΡ.
ΠΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Static
ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ Private
ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΡΠ΅Π΄ΠΊΠΎΠ².
##ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
InsideConstruct::init();
Π§ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ['param1Name'=>value1', 'param2Name' => 'value2', ...]
ΠΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΡ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΡΠ»ΠΈ ΡΠ°ΠΊ:
new Class1(new stdClass(), null);
ΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ (ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ) ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ $container->get('propC')
.
ΠΠ²Π° Π΄ΡΡΠ³ΠΈΡ
ΠΏΠΎΠ»ΡΡΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ new stdClass(
) ΠΈ null
. ΠΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ²Ρ ΡΠ΅ΡΡΠ΅ΡΠΎΠ² (ΡΠΌ. Π΄Π°Π»Π΅Π΅) ΠΎΡΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
$this->setPropA($value)
)
Π‘Π΅ΡΡΠ΅ΡΡ (ΠΡΠ»ΠΈ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΊΠΎΠ½ΡΡΡΠ°ΠΊΡΠΎΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ (ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ) ΡΠ΅ΡΡΠ΅Ρ - ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½. Π‘Π΅ΡΡΠ΅ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π°Π΄ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ. ΠΡΠ»ΠΈ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π΅ΡΡΡ ΠΈ ΡΠ΅ΡΡΠ΅Ρ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΡΠ΅ΡΡΠ΅Ρ, Π° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ.
Π Π΅ΡΠ»ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅?
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρ Π½Π°Ρ Π΅ΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ:
class Class0
{
public $propA;
public $propB;
public function __construct($newPropA = null, $propB= null)
{
//do some...
}
}
$class0 = new Class0; // $class0->propA = $container->get('propA');
, Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ:
$class0->propA = $container->get('newPropA');
$class0->propB = $container->get('propB');
ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ:
class Class1 extends Class0
{
public function __construct($newPropA = null)
{
InsideConstruct::init(['newPropA' => 'propA']);
}
};
ΠΠ»ΠΈ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠΎΠ΄ init()
ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΡΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΠ°.
ΠΡΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡcΠ° ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΈΠΌΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΡΠΎ ΠΈ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠΎ
Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ - Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°.
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ init()
ΠΏΡΠ΅Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ.
Π ΡΠ°ΠΊΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ»ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
Π Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ΅ ΡΡΠΎ ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ?
class Class0
{
public $propA;
public function __construct($propA = null)
{
}
}
$class0 = new Class0; // $class0->propA = $container->get('propA');
, Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ:
$propB = $container->get('propB'); $class0->propA = $propB->getPropA()
ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ:
class Class1 extends Class0
{
public function __construct($propB = null)
{
$params = InsideConstruct::setConstructParams();
$propA = ($params['propB'])->getPropA();
InsideConstruct::runParentConstruct(['propA' => $propA]);
}
};
ΠΡ ΠΌΠΎΠ΅ΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ runParentConstruct()
Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎ Π±Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ,
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² Π½ΠΈΡ
ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠ²Π½ΠΎ Ρ
ΠΎΡΠΈΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡcΠ°.
Π Π²ΡΠ·Π²Π°Π² ΠΌΠ΅ΡΠΎΠ΄ setConstructParams()
ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠ²ΠΎΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Π² ΠΊΠ°ΡΠ΅ΡΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΡΠ΅ΡΠ°
Π³Π΄Π΅ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΊΠ»Π°ΡΡΠ° Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΡΡ ΡΠ΅ΡΠ΅ΡΡ ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΠ½ΠΈ ΡΠΈΠ°Π»ΠΈΠ·ΡΠΈΡΠΎΠ²Π°ΡΡ,
Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΠΌΡ ΡΠ΅ΡΠ²ΠΈΡΠ°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ²Π°
Π ΠΏΡΠΎΡΠ»ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ InsideConstruct::runParentConstruct(['propA' => $propA]);
Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²ΡΠ·ΠΎΠ²Π° ['propA' => $propA]
.
ΠΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎ Π±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
ΠΡΠ΅ ΡΠ°Π· ΠΊΠΎΡΠΎΡΠΊΠΎ ΠΎ Π³Π»Π°Π²Π½ΠΎΠΌ
ΠΡΠ»ΠΈ Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅ΡΡΠ΅Ρ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ.
ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ (Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ NULL
) - ΡΠ΅ΡΠ²ΠΈΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π·Π°Π³ΡΡΠΆΠ΅Π½ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½, ΡΠ΅ΡΠ²ΠΈΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π±ΡΠ΄Π΅ Π·Π°Π³ΡΡΠΆΠ΅Π½ Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ΅ΡΡΠ΅Ρ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ.