[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PDIC - Property Dependency Injection Container
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
twin
Цитата (twin @ 12.04.2016 - 06:52)
Не догоняю. Покажи на примере плиз.

Я под вторым объектом имею ввиду не зависимость. А второй экземпляр основного класса.

$container = new \Cheevauva\Container(array(
'Ron\MysqlWrapper' => array(
'config' => 'Ron\Config',
),
));


$obj1 = $container->get('Ron\MysqlWrapper');
// Вот этот
$obj2 = $container->get('Ron\MysqlWrapper'); //????


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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
bestxp, я понял так как ты описал, как по мне это должно быть за пределами ответствнности di, так как это явное пересечение с функционалом фабрик. Хоия если подумать, это годный способ избежать внедрения контейнера в пользовательские обьекты


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
twin, код точно правильный для вопроса?


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 12.04.2016 - 07:07)
код точно правильный для вопроса?

Да. Почему сомнения? Разве не может быть два объекта в одном скрипте?

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
twin, клонирование и фабрики тебе в помощь


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 12.04.2016 - 07:14)
клонирование и фабрики тебе в помощь

Ясно. Фабрика фабрик.
Слуш, а у тебя CMS так же работает? Я вот не пойму, в чем профит от такого конейнера. Ты запретил конструкторы, второй объект инициализировать нельзя просто так. А чем это от статики отличается?

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Oyeme
Цитата
$obj1 = $container->get('Ron\MysqlWrapper');
// Вот этот
$obj2 = $container->get('Ron\MysqlWrapper'); //????

http://php.net/manual/en/language.oop5.references.php

Как передается object.
twin
Oyeme
Причем тут это вообще? Мне нужно два разных объекта одного сервиса. А у него стоит
        if (isset($this->objects[$className])) {
return $this->objects[$className];
}
Я все время получаю один и тот же объект. Как два разных сделать? Вот в чем вопрос был.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Цитата (twin @ 12.04.2016 - 11:18)
Ясно. Фабрика фабрик.

Нет. Контейнер, настраивает тебе конкретную зависимость которую ты можешь взять в фабрике. А в фабрике выбирается при получении псевдонима, определяется конкретная зависимость и она берется из контейнера. У меня это выглядит примерно так. Внимание, упрощаю код!

namespace App;

$container = new Cheevauva\Container(array(
'App\Field\StringField' => array(
'someDependency' => 'App\SomeClass',
),

'App\FieldFactory' => array(
'container' => 'Cheevauva\Container',
),
));


namespace FieldFactory
{
public function get($field)
{
$fields = array(
'string' => 'App\Field\StringField',
'enum' => 'App\Field\Enum',
);


return clone $this->container->get($fields[$field]);
}
}


$container->get('App\FieldFactory')->get('enum');


Если объект надо доностроить, то доностраиваем после клонирования.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Oyeme
Цитата
не очень понятно, почему будет каша, было бы не плохо примером показать.


Mediator implements ContainerInterface {}
UseServiceLocator implements ContainerInterface {}

Общий interface с общими методами.

Cейчас у тебя разная реализаци под разные interface.
Соотвественно у тебя куча условий на провeрку того или иного интерфейса.Что можно было бы упростить обьеденив в единый interface с общими методами.

if ($object instanceof \Cheevauva\Contract\Container\Mediator) {
$this->objects[$className] = $object->get();
}


https://github.com/cheevauva/container/blob...er/Mediator.php

https://github.com/cheevauva/container/blob...viceLocator.php


Цитата
Как два разных сделать? Вот в чем вопрос был


В его примере только клонирование обьекта либо через создание экземпляра класса.

В zend как я помню можно указывать ServiceLocator тип shared.Соотвестенно будет создан новый обьект.

http://blog.alejandrocelaya.com/2014/10/09...nd-framework-2/
Цитата

Shared services
By default, the ServiceManager allways returns the same instance of a service when you request it multiple times. It is created the first time and cached during the request. That's what a shared service is. A non-shared service will create a new instance every time it is requested.
twin
Цитата (chee @ 12.04.2016 - 07:36)
Контейнер, настраивает тебе конкретную зависимость которую ты можешь взять в фабрике.

Ну ясно. В твоем контейнере этого нету. Тогда нужно было и фабрику туда тянуть))
Иначе он реально от статики не отличается. У прыща наоборот всё кстати помоему.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
И кстати, получается, что для инициализации копии объекта нужно алиас? И его тоже куда то прописать? Не слишком сложно для такой простой задачи?

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Цитата (Oyeme @ 12.04.2016 - 11:38)
Соотвественно у тебя куча условий на провeрку того или иного интерфейса.Что можно было бы упростить обьеденив в единый interface с общими методами.

А что мне даст общий интерфейс, мне же нужно разное поведение в зависимости от интерфейса.

Кстати новую версию выкатил, с исправлеными замечаниями

https://github.com/cheevauva/container/blob...ntainer.php#L33

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Цитата (twin @ 12.04.2016 - 11:54)
И кстати, получается, что для инициализации копии объекта нужно алиас? И его тоже куда то прописать? Не слишком сложно для такой простой задачи?

Я не понимаю в чем сложность. Порождением новых объектов обычно занимаются фабрики, они инкапсулируют всю эту кухню. У меня нет ни одного случая, где бы мне нужен было использовать clone не в контексте какой-либо фабрики.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 12.04.2016 - 08:05)
У меня нет ни одного случая, где бы мне нужен было использовать clone не в контексте какой-либо фабрики.

Ну ты же в паблик выкатил его. У тебя нет, у меня есть. Как юзать? Мне может вообще фабрика без надобности. Городить её из-за одной копии объекта?




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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.