PHPackages                             rollun-com/rollun-dic - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. rollun-com/rollun-dic

ActiveLib[Utility &amp; Helpers](/categories/utility)

rollun-com/rollun-dic
=====================

InsideConstruct

4.1.2(1y ago)511.4k—0%1[3 issues](https://github.com/rollun-lc/rollun-dic/issues)7proprietaryPHPPHP ^8.0

Since Jan 13Pushed 1y ago2 watchersCompare

[ Source](https://github.com/rollun-lc/rollun-dic)[ Packagist](https://packagist.org/packages/rollun-com/rollun-dic)[ RSS](/packages/rollun-com-rollun-dic/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (10)Versions (33)Used By (7)

rollun-dic
==========

[](#rollun-dic)

---

[Оглавление](https://github.com/rollun-com/rollun-skeleton/blob/master/docs/Contents.md)
----------------------------------------------------------------------------------------

[](#оглавление)

---

Справка
=======

[](#справка)

Иньекция зависимости
--------------------

[](#иньекция-зависимости)

Через сеттер метод - если существует сеттер для свойста, при иньекции будет использован он. через свойство/атрибут обьекта - зависимость будет иньецирована через свойство, в случае если соответсвующий сеттер не был найден.

public свойства - инициализация свойств в инстансе с учетом иерархии наследования protected свойства -инициализация свойств в инстансе с учетом иерархии наследования private свойства - инициализация свойств в инстансе без иерархии наследования

Загрузка зависимостей и типизация параметров
--------------------------------------------

[](#загрузка-зависимостей-и-типизация-параметров)

Если параметр типизирован простым типом то такой параметр не будет получаться из контейнера.

> простые типы (int,string,float,array,resource,)

Если параметр типизирован именем класса или интерфейса, то такой сервис будет загружен из контейнера и в случае неудачи будет выброшено исключение.

В случае если параметр был не типизирован, то сервис попытается загрузится из контейнера, а в случае неудачи будет использовано значение по умолчанию.

Методы и специфика вызовов
--------------------------

[](#методы-и-специфика-вызовов)

### init

[](#init)

Инициализирует сервис зависимостями указаными в методе `__construct`.
Вызывает родительский конструктор в случае наличия такового и иньецирует зависимости в него. Так же, позволяет пробросить зависимость в родительский конструктор.
Для этого нужено в параметры метода передать массив где укзать мапинг.
В качестве *ключа* массива указываем имя параметра(сервиса) в конструкторе, а в качестве значения - имя параметра конструктора родительского класса.

### setConstructParams

[](#setconstructparams)

Инициализирует сервис зависимостями указаными в методе `__construct`.

> Родительский конструктор не вызывается

В качестве параметров можно передать конфиг маппинга.
В качестве ключа - имя параметра конструктора, а в качестве значения имя сервиса которое нужно загрузить.

### initWakeup

[](#initwakeup)

Позволяет инициализировать сервис зависимостями.
В качетсве параметра можно передать конфиг мапина.
В качестве ключа - имя свойства/атрибут класа, а в качестве значения имя сервиса которое нужно загрузить.

### runParentConstruct

[](#runparentconstruct)

Вызывает родительский конструктор
В качетсве параметра можно передать конфиг мапина.
В качестве ключа - имя параметра конструктора(родительского класса), а в качестве значения имя сервиса которое нужно загрузить.

Каркас для создания приложений.

- [Стандарты](https://github.com/rollun-com/rollun-skeleton/blob/master/docs/Standarts.md)

DI - InsideConstruct
====================

[](#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();`

[](#что-возвращает-метод-insideconstructinit)

Возвращается массив `['param1Name'=>value1', 'param2Name' => 'value2', ...]`

### Как перекрыть умолчания

[](#как-перекрыть-умолчания)

Если так:

```
        new Class1(new stdClass(), null);

```

то только один (последний) параметр будет инициализирован сервисом `$container->get('propC')`.
Два других получат значения `new stdClass(`) и `null`. Но присваивания свойствам объекта или вызовы сеттеров (см. далее) отработают для всех параметров.

### Сеттеры (`$this->setPropA($value)`)

[](#сеттеры--this-setpropavalue)

Если для параметра констрактора определен соответствующий (по имени) сеттер - он будет вызван. Сеттеры имеют приоритет над свойствами. Если для параметра есть и сеттер и свойство, то будет вызван сеттер, а присваивание свойству не будет произведено.

### А если наследование?

[](#а-если-наследование)

Предположим у нас есть базовый класс:

```
	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`) - сервис из контейнера загружен не будет.
Если параметр не передан, сервис из контейнера буде загружен если есть сеттер или свойство.

###  Health Score

43

—

FairBetter than 90% of packages

Maintenance29

Infrequent updates — may be unmaintained

Popularity29

Limited adoption so far

Community23

Small or concentrated contributor base

Maturity79

Established project with proven stability

 Bus Factor1

Top contributor holds 80.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~92 days

Recently: every ~183 days

Total

32

Last Release

550d ago

Major Versions

1.1.7 → 2.0.02017-03-23

2.2.2 → 3.0.02017-12-18

3.3.7 → 4.0.02022-02-23

3.x-dev → 4.1.12023-08-01

PHP version history (3 changes)v1.0.0PHP ^5.6 || ^7.0

3.2.0PHP ^7.0

4.0.0PHP ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/a580b0a91b7d5d602f8858c7c747c49542ea14b631dcd976eed93a0d3014a8de?d=identicon)[Andrey Zaboychenko](/maintainers/Andrey%20Zaboychenko)

---

Top Contributors

[![victorynox](https://avatars.githubusercontent.com/u/17138585?v=4)](https://github.com/victorynox "victorynox (113 commits)")[![Vict0rynox](https://avatars.githubusercontent.com/u/8139419?v=4)](https://github.com/Vict0rynox "Vict0rynox (9 commits)")[![orlyk-rollun](https://avatars.githubusercontent.com/u/59170653?v=4)](https://github.com/orlyk-rollun "orlyk-rollun (6 commits)")[![misha-rollun](https://avatars.githubusercontent.com/u/72918877?v=4)](https://github.com/misha-rollun "misha-rollun (4 commits)")[![maria-rollun](https://avatars.githubusercontent.com/u/85940777?v=4)](https://github.com/maria-rollun "maria-rollun (4 commits)")[![rollun-com](https://avatars.githubusercontent.com/u/25004261?v=4)](https://github.com/rollun-com "rollun-com (3 commits)")[![artemka-debug](https://avatars.githubusercontent.com/u/60359843?v=4)](https://github.com/artemka-debug "artemka-debug (1 commits)")[![mikola-rollun](https://avatars.githubusercontent.com/u/116670083?v=4)](https://github.com/mikola-rollun "mikola-rollun (1 commits)")

---

Tags

composer-libraryphp

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/rollun-com-rollun-dic/health.svg)

```
[![Health](https://phpackages.com/badges/rollun-com-rollun-dic/health.svg)](https://phpackages.com/packages/rollun-com-rollun-dic)
```

###  Alternatives

[symfony/dependency-injection

Allows you to standardize and centralize the way objects are constructed in your application

4.2k431.1M7.4k](/packages/symfony-dependency-injection)[illuminate/contracts

The Illuminate Contracts package.

704122.9M10.0k](/packages/illuminate-contracts)[illuminate/container

The Illuminate Container package.

31278.1M2.0k](/packages/illuminate-container)[ecotone/ecotone

Supporting you in building DDD, CQRS, Event Sourcing applications with ease.

558549.8k17](/packages/ecotone-ecotone)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

728272.9k17](/packages/civicrm-civicrm-core)[internal/dload

Downloads binaries.

98142.7k10](/packages/internal-dload)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
