2017 © Pedro PelΓ‘ez
 

lib rollun-dic

InsideConstruct

image

rollun-com/rollun-dic

InsideConstruct

  • Thursday, May 3, 2018
  • by Andrey Zaboychenko
  • Repository
  • 2 Watchers
  • 1 Stars
  • 519 Installations
  • PHP
  • 5 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 23 Versions
  • 20 % Grown

The README.md

rollun-dic


ОглавлСниС


Π‘ΠΏΡ€Π°Π²ΠΊΠ°

Π˜Π½ΡŒΠ΅ΠΊΡ†ΠΈΡ зависимости

Π§Π΅Ρ€Π΅Π· сСттСр ΠΌΠ΅Ρ‚ΠΎΠ΄ - Ссли сущСствуСт сСттСр для свойста, ΠΏΡ€ΠΈ ΠΈΠ½ΡŒΠ΅ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ использован ΠΎΠ½. Ρ‡Π΅Ρ€Π΅Π· свойство/Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΎΠ±ΡŒΠ΅ΠΊΡ‚Π° - Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΡŒΠ΅Ρ†ΠΈΡ€ΠΎΠ²Π°Π½Π° Ρ‡Π΅Ρ€Π΅Π· свойство, Π² случаС Ссли ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΠ²ΡƒΡŽΡ‰ΠΈΠΉ сСттСр Π½Π΅ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½., (*1)

public свойства - инициализация свойств Π² инстансС с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования protected свойства -инициализация свойств Π² инстансС с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования private свойства - инициализация свойств Π² инстансС Π±Π΅Π· ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ наслСдования, (*2)

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° зависимостСй ΠΈ типизация ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ простым Ρ‚ΠΈΠΏΠΎΠΌ Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°., (*3)

простыС Ρ‚ΠΈΠΏΡ‹ (int,string,float,array,resource,), (*4)

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈΠΌΠ΅Π½Π΅ΠΌ класса ΠΈΠ»ΠΈ интСрфСйса, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ сСрвис Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅., (*5)

Π’ случаС Ссли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±Ρ‹Π» Π½Π΅ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚ΠΎ сСрвис попытаСтся загрузится ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ использовано Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ., (*6)

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ спСцифика Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

init

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ сСрвис зависимостями ΡƒΠΊΠ°Π·Π°Π½Ρ‹ΠΌΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ __construct.
Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ конструктор Π² случаС наличия Ρ‚Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΠΈΠ½ΡŒΠ΅Ρ†ΠΈΡ€ΡƒΠ΅Ρ‚ зависимости Π² Π½Π΅Π³ΠΎ. Π’Π°ΠΊ ΠΆΠ΅, позволяСт ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ конструктор.
Для этого Π½ΡƒΠΆΠ΅Π½ΠΎ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив Π³Π΄Π΅ ΡƒΠΊΠ·Π°Ρ‚ΡŒ ΠΌΠ°ΠΏΠΈΠ½Π³.
Π’ качСствС ΠΊΠ»ΡŽΡ‡Π° массива ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ имя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°(сСрвиса) Π² конструкторС, Π° Π² качСствС значСния - имя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° конструктора Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса., (*7)

setConstructParams

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ сСрвис зависимостями ΡƒΠΊΠ°Π·Π°Π½Ρ‹ΠΌΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ __construct., (*8)

Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ конструктор Π½Π΅ вызываСтся, (*9)

Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°.
Π’ качСствС ΠΊΠ»ΡŽΡ‡Π° - имя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° конструктора, Π° Π² качСствС значСния имя сСрвиса ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ., (*10)

initWakeup

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСрвис зависимостями.
Π’ качСтсвС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ ΠΌΠ°ΠΏΠΈΠ½Π°.
Π’ качСствС ΠΊΠ»ΡŽΡ‡Π° - имя свойства/Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ класа, Π° Π² качСствС значСния имя сСрвиса ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ., (*11)

runParentConstruct

Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ конструктор
Π’ качСтсвС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ ΠΌΠ°ΠΏΠΈΠ½Π°.
Π’ качСствС ΠΊΠ»ΡŽΡ‡Π° - имя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° конструктора(Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса), Π° Π² качСствС значСния имя сСрвиса ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ., (*12)

ΠšΠ°Ρ€ΠΊΠ°Ρ для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ., (*13)

DI - InsideConstruct

Быстрый старт

ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ класс, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ 3 сСрвиса Π² качСствС зависимостСй:, (*14)

    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);

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° зависимости ΠΈ присвоили ΠΈΡ… ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½Ρ‹ΠΌ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°., (*15)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎ-ΠΆΠ΅ самоС с использованиСм InsideConstruct::init():

Если имя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° соотвСтствуСт ΠΈΠΌΠ΅Π½ΠΈ сСрвиса ΠΈ ΠΈΠΌΠ΅Π½ΠΈ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:, (*16)

    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 свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ свойства родитСля, Ссли ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π½Π΅Π΅. ПослС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ конструктор родитСля ΠΈ Ρ‚ΡƒΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ сСрвисы., (*17)

НС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Static свойства ΠΈ Private свойства ΠΏΡ€Π΅Π΄ΠΊΠΎΠ²., (*18)

ИспользованиС

Π§Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ InsideConstruct::init();

ВозвращаСтся массив ['param1Name'=>value1', 'param2Name' => 'value2', ...], (*19)

Как ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΡŒ умолчания

Если Ρ‚Π°ΠΊ:, (*20)

        new Class1(new stdClass(), null);

Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ (послСдний) ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ сСрвисом $container->get('propC').
Π”Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ значСния new stdClass() ΠΈ null. Но присваивания свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Ρ‹ сСттСров (см. Π΄Π°Π»Π΅Π΅) ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ для всСх ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²., (*21)

Π‘Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ($this->setPropA($value))

Если для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° констрактора ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ (ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ) сСттСр - ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½. Π‘Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Π½Π°Π΄ свойствами. Если для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΅ΡΡ‚ΡŒ ΠΈ сСттСр ΠΈ свойство, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ сСттСр, Π° присваиваниС свойству Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ., (*22)

А Ссли наслСдованиС?

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρƒ нас Π΅ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс:, (*23)

    class Class0
    {
        public $propA;
        public $propB;

        public function __construct($newPropA = null, $propB= null)
        {
            //do some...
        }
    }

    $class0 = new Class0;        // $class0->propA = $container->get('propA');

, Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ сСрвис:, (*24)

 $class0->propA = $container->get('newPropA');
 $class0->propB = $container->get('propB');

МоТно Ρ‚Π°ΠΊ:, (*25)

    class Class1 extends Class0
    {
        public function __construct($newPropA = null)
        {
              InsideConstruct::init(['newPropA' => 'propA']);  
        }
    };

Или ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ init() ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наши зависимости ΠΈ зависимости Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класа. Если Π² конструкторС нашСго класcΠ° имССтся имя Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ сСрвиса Ρ‡Ρ‚ΠΎ ΠΈ Π² конструкторС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Ρ‚ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ пробрасываСтся - Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° Π² конструктор родитСля Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ init() ΠΏΡ€Π΅Π½ΠΈΠΌΠ°Π΅Ρ‚ массив подстановки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π² случаС Ссли наслСдник пСрСопрСдСляСт Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ родитСля. Π’ Ρ‚Π°ΠΊΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΡŽΡ‡ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ имя ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ зависимости, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ имя ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ зависимости., (*26)

А Ссли Π½ΡƒΠΆΠ½ΠΎ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ?

    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()
МоТно Ρ‚Π°ΠΊ:, (*27)

    class Class1 extends Class0
    {
        public function __construct($propB = null)
        {
                $params = InsideConstruct::setConstructParams();
                $propA = ($params['propB'])->getPropA();
                InsideConstruct::runParentConstruct(['propA' => $propA]);
        }
    };

ΠœΡ‹ ΠΌΠΎΠ΅ΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ runParentConstruct() для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ зависимости Ρ‡Π΅Ρ€Π΅Π· конструктор, Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Π½ΠΈΡ… массив содСрТащий Ρ‚Π΅ поля ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ явно Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² конструктор Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класcΠ°., (*28)

А Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ setConstructParams() ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ свои зависимости. Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив Π² качСсвтС ΠΏΠ°Ρ€Π°ΠΌΡ‚Π΅Ρ€Π° Π³Π΄Π΅ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… класса для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΡΡ‚ΡŒ сСтСры ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ½ΠΈ Ρ†ΠΈΠ°Π»ΠΈΠ·Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° Π² качСствС значСния ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ имя сСрвиса., (*29)

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π°

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ InsideConstruct::runParentConstruct(['propA' => $propA]); Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π²Ρ‹Π·ΠΎΠ²Π° ['propA' => $propA]. Π­Ρ‚ΠΎ сдСлано для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² конструктор родитСля, Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹., (*30)

Π•Ρ‰Π΅ Ρ€Π°Π· ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΎ Π³Π»Π°Π²Π½ΠΎΠΌ

Если Π΅ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ сСттСр ΠΈΠ»ΠΈ свойство - Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ присвоСно.
Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ (Π΄Π°ΠΆΠ΅ Ссли NULL) - сСрвис ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.
Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½, сСрвис ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π±ΡƒΠ΄Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Ссли Π΅ΡΡ‚ΡŒ сСттСр ΠΈΠ»ΠΈ свойство., (*31)

The Versions