Появилась необходимость работы в линуксе (ubuntu), и вот нужно выбрать lamp стек.
Но после openserver все предложения в линуксе кажутся УГ.
Поделитесь лайфхаками.
Хотелось бы иметь быстрое переключение между версиями PHP, MySQL, быстрое и простое создание доменов.
Конечно, если "быстро и просто" возможно.
igosja, не так это все.
MVC не имеет никакого отношения к БД.
M = модель - некий объект хранящий какие-то данные. Слой БД нужно реализовывать отдельно и никоем образом не привязывать к моделям (не люблю yii за такую халатность)
V = вид - подсистема отображения. Это могут быть простые php файлы, в которых происходит подстановка переменных, так сложная система рендеринга.
C = контроллер - некий объект принимающий запросы и возвращающий результат
+ ко всему не обойтись без фронт-контроллера, роутера, репозиториев (как дополнение к моделям) и других плюшек, без которых жизнь становится сложной.
А просто MVC в вакууме не имеет практического применения, только в купе с другими паттернами (некоторые я назвал выше) этот паттерн будет полезен.
вот в чем разница. Если твои классы не будут унаследованы от какого-то базового, то они по сути будут иметь каждый свой интерфейс, и не важно, что интерфейсы совпадают. Когда появляется базовый класс, то классы-наследники наследуют интерфейс базового класса и у всех классов-наследников интерфейс становится единым, и теперь каждый класс можно заменить другим наследником.
Как будет использоваться полиморфизм в данном случае? В моем абстрактом классе нет ни одного поля или неабстрактного метода. Если мы создадим экземпляр каждого типа логирования и запишем в массив. Будем массив перебирать и вызывать метод logAdd(), то он будет одинаково работать и при существовании базового класса и без него.
что бы говорить о полиморфизме, обеим сторонам надо знать что это за зверь, у меня нет желанию разжовывать это, и так разжовано уже 100000 раз, надо лишь погуглить.
Есть такая практика, называется отладка. Запусти код с xdebugger и пройдись пошагово, найди место где все слетает, и если не разберешься, приходи снова.
Поставь PhpStorm EAP (или лицензию, там бесплатный месяц дается), настрой дебагер и в путь. это не сложно.
интерфейс интерфейсом а конструктор конструктором. одно другому не мешает. пусть конструкторы отличаются, не вижу в этом проблемы. тем более, код станет понятнее, если конструктор будет принимать понятные параметры (поток, PDO, параметры БД), нежели универсальный DTO (если я правильно понял, что ты имел в виду под DTO).
LIME пишет:
например объект конфига
тут не соглашусь. как раз наоборот, компоненты должны объявляться в конфиге и конфигурироваться приложением при запуске, т.е. сам объект (логгер) ничего не должен знать о конфиге.
karamba попрактикуйся еще ...рано профессионально кодить
это уж точно. (Добавление)
T1grOK пишет:
Все применимо - цепочка из одного звена. Но в любой момент количество звеньев можно нарастить, в чем вижу плюс - предусмотрительность к расширению возможностей.
YAGNI. Когда будет потребность - будем рефакторить, иначе это лишнее переусложнение. Тем более это 1 компонент, добавил класс, добавил по методу в логгеры и в путь.
потому что его нет.
в задании четко было сказано как надо делать.
во первых нужно выделить сущности.
- Logger: базовый абстрактный класс или интерфейс.
- StreamLogger: производный от Logger для записи логов в поток. В твоем случае это stdout.
- DBLogger: производный от Logger для записи логов в БД.
- FileLogger: производный от Logger для записи логов в файл.
StreamLogger принимает поток как параметр конструктора (в твоем случае php://stdout), открывает его и по завершению программы закрывает (в деструкторе).
DBLogger принимает параметром конструктора либо внешний объект для работы с БД (пусть будет PDO) либо принимает параметры для подключения к БД, и создает объект PDO сам.
Я бы предпочел первый вариант, он более оптимален в плане расширения. Тут вылезает полиморфизм - мы сможем подменить объект PDO на любой другой производный от PDO, а не хардкодим класс в логере.
FileLogger по сути лишний, так как есть StreamLogger, который может работать и с файловыми потоками.
Плюсом было бы написать логгер в соответствии с PSR-3, так как многие помешаны на PSR, и скорее всего посчитают плюсом.
И обязательно почитай PSR-1 и PSR-2, так как твой код ужасен.
При объявлении свойства допустимо использовать некоторые операции.
Это какие? Насколько я знаю только константные значения могут быть присвоены (в том числе константы) (Добавление)
потыркал пхп, оказывается константы тогоже класса он не видит.
кроме того, можно задавать арифметические, логические и побитовые выражения.