За последние 24 часа нас посетили 22980 программистов и 1236 роботов. Сейчас ищут 776 программистов ...

вопрос по внедрению зависимости

Тема в разделе "PHP для новичков", создана пользователем oleg_, 18 июл 2019.

  1. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    105
    Симпатии:
    2
    Подскажите, можно ли через конструктор внедрить зависимость одновременно внутри класса и снаружи?
    типа вот так
    PHP:
    1. use voc;
    2. class test01
    3. {
    4.     protected $pro;
    5.     protected $voc;
    6.  
    7.     public function __construct($pro, voc $voc)
    8.     {
    9.         $this->pro=$pro;
    10.         $this->voc=$voc;
    11.     }
    12. }
    13. ///
    14. $class=new test01(new \pro);
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Что значит "внутри и снаружи"?
    У тебя, кстати, ошибка: второй параметр обязателен, но не указан при вызове.
     
  3. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    105
    Симпатии:
    2
    я про это и спрашиваю, он требует второй параметр, но я не хочу его туда передавать, так как он определен в этом же файле -
    use voc;
    и если делать так
    PHP:
    1. use voc;
    2. class test01
    3. {
    4.     protected $pro;
    5.     protected $voc;
    6.     public function __construct(voc $voc)
    7.     {
    8.         $this->pro=$pro;
    9.  
    10.     }
    11. }
    12. ///
    13. $class=new test01();
    то он прекрасно сам втыкается туда
    вопрос заключается в том, как воткнуть туда "pro"
    $class=new test01(new \pro);
    а "voc" сам бы воткнулся
    (что бы не загромаждать "new test01(new \pro);" не нужными аргументами (зависимостями), которые не изменны)
     
    #3 oleg_, 18 июл 2019
    Последнее редактирование: 18 июл 2019
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Тот случай когда от объяснений понятно ещё меньше :)
    Во втором примере новая ошибка, неинициированная переменная.

    Я не понимаю этих "само втыкается". Если тебе нужна инъекция зависимости, будь добр описать её при вызове - в фактических параметрах.
    --- Добавлено ---
    use Voc не имеет ничего общего с параметрами. Use нужен для правильного разименования имён классов. Сама по себе эта конструкция не выполняет ничего, это просто подсказка.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Сдаётся мне, что ты получил неправильное представление о параметрах по умолчанию. И виноват в этом, скорее всего, какой-нибудь сервис-контейнер из Laravel или другого фреймворка. Нет в самом языке такой магии чтобы автоматически инжектить объекты. Но сервис-контейнер может создавать параметры неявно, читая информацию об аргументах через рефлексию.
     
  6. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    105
    Симпатии:
    2
    да, все перепутал, конечно так не работает, запарился, на самом деле вот что было, а значит и вопрос отпал
    PHP:
    1. use voc
    2. class test01
    3. {
    4.     protected $pro;
    5.     protected $voc;
    6.     public function __construct($pro)
    7.     {
    8.         $this->pro=$pro;
    9.         $this->voc= new voc;
    10.     }
    11. }
    12. ///
    13. $class=new test01(new \pro);