За последние 24 часа нас посетили 22854 программиста и 1264 робота. Сейчас ищут 758 программистов ...

Классы, пространства имен, функции

Тема в разделе "Прочие вопросы по PHP", создана пользователем dsda, 27 апр 2013.

  1. dsda

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

    С нами с:
    3 сен 2008
    Сообщения:
    34
    Симпатии:
    0
    Есть потребность в реализации следующего функционала:
    - система состоящая из нескольких логических модулей, которые должны иметь возможность вызова методов друг друга.

    На ум сразу пришли три варианта:
    - классы; + ООП, и все плюшки правильного проектирования; - сложности чтения кода (потом покажу почему)
    - пространства имен; + простота чтения кода, сокращение кода; - не ООП, никакая IDE не поддержит мой код (имеется в виду автокомплит, подсказки по коду и т.д.)
    - функции; + берешь и пишешь; - не ООП, сложность в понимании другими разработчиками и еще куча минусов.

    Ну и сам вопрос: я написал два примера, один на неймспейсах (http://pastebin.com/vfnf3j54), второй на классах (http://pastebin.com/JC3sVBLv) (вот как раз тут сложнее читать код и вызывать методы). Они выполняют одну и ту-же работу. Одна функция принадлежащая к одному классу/неймспейсу вызывает функцию из другого класса/неймспейса. Какой подход более продуктивен? Почему один из них не верное решение в проектировании (если неверное)? Есть ли еще способы построить такую архитектуру?

    Заранее спасибо.
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    А зачем ты вызываешь метод класса через дополнительную функцию вызова метода класса?
     
  3. dsda

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

    С нами с:
    3 сен 2008
    Сообщения:
    34
    Симпатии:
    0
    А как по другому взаимодействовать между методами разных классов? (если речь про пример с классами)
    А если речь про пример с неймспейсами, то это просто пример. Не обязательно вызывать через функцию естественно.
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    Я не очень понимаю видимо специфику. Если ты название класса пишешь, метод пишешь, то просто вызови метод класса. Если стоит задача вызвать метод по строке то всё равно не понятно зачем отдельная функция.

    Опиши подробнее задачу. А то много если.
     
  5. dsda

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

    С нами с:
    3 сен 2008
    Сообщения:
    34
    Симпатии:
    0
    Представь, что есть несколько классов, и надо иметь возможность из методов одного класса вызывать методы другого. Как ты это реализуешь?
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    дык блин $class->method() йопт. вопрос в другом. зачем тебе именно строка? =) давай рассказывай.
     
  7. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    а почему пространства имём - это не ООП?
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    читаем про Inversion of Control
     
  9. dsda

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

    С нами с:
    3 сен 2008
    Сообщения:
    34
    Симпатии:
    0
    А как ты передал $class внутрь метода другого объекта класса? или ты прямо в методе предлагаешь создавать новый инстанс?
    Строка? не соовсем понял... это касается вызова метода из примера? Так там как-раз di в моей интерпритации (о нем ниже).

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

    IoC более чем полностью повторяет dependency injection или я ошибаюсь?

    В итоге я остановился на dependency injection и использую нечто похожее на Pimple но без ArrayAccess.

    Есть другие варианты?
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    не надо чумовых фантазий, я ничего не передавал. =) ты не говорил, что надо передавать и т.п.
    пока ты не сформулируешь нормально задачу, ты решения не найдёшь =)

    То, что ты говоришь, есть в примерах в описании классов, где один вызывает методы другого. А зачем тебе нужна функция - ты не говоришь. Без этого подсказывать по реализации как-то глупо.

    Ты не пишешь, что например классов может быть сколь угодно много и каждый из них должен кого-то по содержащемуся в строковой переменной имени класса и метода... Кто их туда положил, почему их нельзя прописать ручками, если они все равно прописываются, и всё тот же набивший оскомину вопрос "нафига тебе отдельная функция" - остаются без ответа.
     
  11. dsda

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

    С нами с:
    3 сен 2008
    Сообщения:
    34
    Симпатии:
    0
    Например у меня есть класс который вываливает контент на страницу. В шаблоне я мога захотеть вставить некие данные за которые у меня отвечат отдельный класс. Чтобы ручками не писать, я хочу привести вызов методов к некоему стандарту. Именно для этого я и использую di и стандартную (для моей системы) функцию которая отвечает за обращение к di классу и возвращает ответ.
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    ну где-то это же будет написано!
     
  13. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    это просто слова или есть какой-то пример, чем
    Код (Text):
    1. <?php
    2. class A_B_C extends A_B {}
    будет "более явно" чем
    Код (Text):
    1. <?php
    2. use A;
    3. class C extends B {}
    ?
     
  14. dsda

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

    С нами с:
    3 сен 2008
    Сообщения:
    34
    Симпатии:
    0
    Вот именно из-за use.
     
  15. Ke1eth

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

    С нами с:
    16 мар 2012
    Сообщения:
    1.073
    Симпатии:
    11
    Адрес:
    заблудилса
    Вопрос: а не срать ли, что какому-то мифическому "некто" - "сложно будет разобраться другим в этом коде".
    Тебе нафиг об этом думать? Если у человека будет когнитивный диссонанс из-за простого use, то какого икса он лезет в разработку?
     
  16. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    надо ли это использовать...

    а диссонанса не будет в любом случае.