Первые шаги в PHP, имет ли смысл начинать с MVC?

У меня возникла задача:



Есть иностранный интернет сайт, я сделал для него перевод страниц на русский язык на лету. Теперь захотелось встроить в переведенный сайт shopping-cart. Беглое изучение вопроса показало, что практически все популярные бесплатные скрипты написаны на PHP.



Значит нужно изучать PHP! Тут стоить сказать, что проект для меня скорее хобби, которое возможно станет стартапом.



Мой скудный опыт программирования включает приличные знания SQL, небольшое знание Perl, представление о том что такое C и базовое понимание объектной парадигмы. Но к PHP раньше испытывал неприязнь за кашу, в которой перемешен код и дизайн. Однако я нашел скрипт Opencart который написан по модели MVC, а значит пугающая меня каша в нем разложена по полочкам.



Однако беглое изучение кода породило сомнения. Эти сомнения я попробую сформулировать в виде простых вопросов к Гуру. Некоторые вопросы могут показаться глупыми, но не забывайте что внутрь php я заглянул 3 дня назад, а про MVC задумался неделю назад.



Понеслась!



1. Подскажите простой русский туториал по php версии 5.1. Особенно интересуют ньюансы шаблонов и работы с БД.



2. OpenCart это годный пример или быдлокод для знакомства с языком?



3. Почему в PHP такая куча файлов? Потому что отдельный класс = отдельный файл или это стиль кода? Нельзя ли поменьше файлов, я так не привык :)?



4. Есть ли какая то простая IDE для PHP под винду. Раньше для всего мне хватало vim под unix, но с кучей файлов PHP + MVC получается чертовски неудобно. Может ли IDE сгенерить схему взаимосвязей объектов php по типу как рисуются схемы баз данных SQL?



5.1 Как делать верстку html для php? Есть нуб-верстальщик которых хочет осваивать Dreamweaver, это нам поможет?



5.2 MVC под PHP оно нужно вообще? При запуске скрипта подгружаются сотни файлов, очень низкая производительность. А вдруг мой проект выстрелит и будут тысячи посетителей, придется отказаться от PHP, может это сделать сразу?



6. А может быть вовсе не php или нафиг MVC? Но скрипт магазина с нуля писать не хочу!



В ответах приветствуются советы, поучения, безапелляционные заявления, обоснованные холивары и философские размышления! Все это может упасть в совершенно чистый от каких либо концепций мозг.



Заранее благодарю!
  • Вопрос задан
  • 12446 просмотров
Пригласить эксперта
Ответы на вопрос 18
@Jazzist
Мой скудный опыт программирования включает приличные знания SQL, небольшое знание Perl, представление о том что такое C и базовое понимание объектной парадигмы.

MVC уже любит и ждет вас.

1. Подскажите простой русский туториал по php версии 5.1. Особенно интересуют ньюансы шаблонов и работы с БД.

php.su

2. OpenCart это годный пример или быдлокод для знакомства с языком?

Годный пример — популярный фрейморк с MVC.

3. Почему в PHP такая куча файлов? Потому что отдельный класс = отдельный файл или это стиль кода? Нельзя ли поменьше файлов, я так не привык :)?

1. Так удобнее работать, и это удобство мегапозитивно сказывается на скорости и эффективности работы. «Разделяй и властвуй»
2. Незадействованные фрагменты могут не подгружаться — таким образом достигается легкость и низкая ресурсоемкость конечного приложения
3. Конечно можно поменьше! Фреймворки ждут вас :)

4. Есть ли какая то простая IDE для PHP под винду. Раньше для всего мне хватало vim под unix, но с кучей файлов PHP + MVC получается чертовски неудобно. Может ли IDE сгенерить схему взаимосвязей объектов php по типу как рисуются схемы баз данных SQL?

1. Работайте с линуксом, там есть масса удобных IDE. Под виндой будут проблемы (холиварщики идут в гугль и по мануалам, в т.ч. PHP User Guide)
2. Можно, но в большинстве случаев простая структура БД — отличное преимущество

5.1 Как делать верстку html для php? Есть нуб-верстальщик которых хочет осваивать Dreamweaver, это нам поможет?

1. Dreamweaver не надо, надо учебник и спецификацию CSS2. Хорошее место для этого вопроса — htmlbook.ru
2. Верстка HTML для PHP не отличается от верстки HTML для чего-то другого. Она сама по себе.

5.2 MVC под PHP оно нужно вообще? При запуске скрипта подгружаются сотни файлов, очень низкая производительность. А вдруг мой проект выстрелит и будут тысячи посетителей, придется отказаться от PHP, может это сделать сразу?

1. Да, нужно. Но можно и без него.
2. Подгрузка файлов производительности не снижает (могу показать очевидный прув, но лучше прогуглите).
3. Возможность не подгружать лишнее — производительность повышает
4. Это не причина для отказа от PHP. Конечно, есть причины… но не эта. PHP вас, скорее всего, не подведет.

6. А может быть вовсе не php или нафиг MVC? Но скрипт магазина с нуля писать не хочу!

Python+Django. MVC — как минимум, хорошая школа, которая пока никому не повредила.

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

Тогда еще раз смотрите ответ на вопрос №6 :)
Ответ написан
Комментировать
SSar
@SSar
1. Ничего лучше русской chm-версии справки, скачанной с docs.php.net за 7 лет так и не нашел.
3. Все зависит от вас как от разработчика. Встречал множество примеров и где куча файлов и где все в одном.
4. Мне больше всего понравился бесплатный Komodo Edit + htmltoolkit(к нему можно еще и модули догружать из Инета), из платных Adobe Dreamweaver CS.
Ответ написан
Комментировать
AntonMinsk
@AntonMinsk
>> 1. Подскажите простой русский туториал по php версии 5.1. Особенно интересуют ньюансы шаблонов и работы с БД.

Версия 5.1 уже наверное старовата, так что лучше сразу 5.3, я думаю, что проблем с совместимостью каких-то уже написанных вещей быть не должно. Книжек по PHP тьма, лично я осваивал PHP по книге «PHP5- библиотека профессионала», давно уже было…

>> 2. OpenCart это годный пример или быдлокод для знакомства с языком?
На этот вопрос пусть кто-нить другой ответит =)

>> 3. Почему в PHP такая куча файлов? Потому что отдельный класс = отдельный файл или это стиль кода? Нельзя ли поменьше файлов, я так не привык :)?

Можно! но лично из собственного опыта знаю, что поддержка такой структуры значительно проще. Есть момент с тормозами скриптов при include, но это решается путем autoload, eaccelerator и т.д и т.п. варианты ускорения есть

>> 4. Есть ли какая то простая IDE для PHP под винду. Раньше для всего мне хватало vim под unix, но с кучей файлов PHP + MVC получается чертовски неудобно. Может ли IDE сгенерить схему взаимосвязей объектов php по типу как рисуются схемы баз данных SQL?

Тут уже дело вкуса, кто-то Eclipse использует, кто-то Zend (лично я до сих пор сижу на 5.1 ZendStudio, знаю что старье, ну ни к чему другому привыкнуть не смог), PHPExpertEditor по-мойму еще есть, в общем найти можно.

>> 5. Как делать верстку html для php? Есть нуб-верстальщик которых хочет осваивать Dreamweaver, это нам поможет?

Просто верстать, в чем без разницы.
Посмотрите шаблонизаторы, например Smarty, я уже долгое время использую XSLT у меня framework под него заточен. Если же придерживаться MVC — шаблонизатор Вам обязательно будет нужен

>> 5. MVC под PHP оно нужно вообще? При запуске скрипта подгружаются сотни файлов, очень низкая производительность. А вдруг мой проект выстрелит и будут тысячи посетителей, придется отказаться от PHP, может это сделать сразу?
Без MVC я уже себе оч. плохо представляю свои проекты, по-поводу производительности уже писал выше. Если проект выстрелит, будет хорошо =) думаю в таком случае решения найдутся. Очень приятные проблемы — затачивать архитектуру под высокую нагрузку, особенно когда она уже есть. Ну и без хорошей архитектуры поддержка большого проекта будет в разы сложнее, так что я бы Вам посоветовал придерживаться MVC

>> 6. А может быть вовсе не php или нафиг MVC? Но скрипт магазина с нуля писать не хочу!
Ну если не хотите, тогда PHP
Ответ написан
Комментировать
marazm
@marazm
Задайтесь другим вопросом: «имеет ли смысл начать с PHP?»

Нет, серьёзно, посмотрите в сторону python или ruby
Ответ написан
shifty
@shifty
Хороший мануал по PHP — manual.pohape.ru
Ответ написан
DeNnEr
@DeNnEr
>изучение вопроса показало, что практически все популярные бесплатные скрипты написаны на PHP.
>Значит нужно изучать PHP!
Это как делать вывод о том, как должно работать государство, посмотрев на Россию.

Если коротко, то сейчас нужно разрабатывать сайты либо на Ruby, либо на Python. Для новеньких проще именно Ruby. Для очень сложных сайтов можно и Java. Больше здесь о выборе инструментария не напишу, т.к. слишком много оно требует времени и текста — можешь написать в личку и задать вопросы.

Что же о MVC, так это не что-то конкретное, а просто паттерн, идея, не иначе.

Твой вопрос можно свести к тому, нужно ли изучать веб-фреймворк или достаточно будет знания PHP.
PHP, Ruby, Python — только языки программирования, не более того. У PHP, конечно, есть возможность разработки «вот так», но это всегда было и будет дурным тоном. Сначала нужно изучить язык, а затем инструментарий для разработки приложения. Это как изучить из чего состоит бетон и начать строить дом: огромное время процесса будет занимать построение и создание инструментов, которые уже есть. В случае с веб-девом, ты будешь создавать свой аналог веб-фреймворка и паттерна MVC.

Ну а теперь конкретно, по вопросам:
1) Я могу дать ссылки, но очень хочу чтобы ты задумался над тем, так ли тебе нужно брать «ColdFusion сегодняшних дней».
2) Быдлокод.
3) Если ты привык оформлять большие проекты в виде нескольких файлов кода, любишь гордиться, когда приходится говорить «у меня вот есть функция в 2342ой строчке кода», то ты писал быдлокод и нужно переучиваться. Судя по всему, это было не совсем так, ведь разделение на под-файлы это есть модульность при разработке, это удобно, т.к. каждый файл включает в себя одну функциональность всей структуры проекта.
В случае же с php, там есть сама необходимость в разделении файлов. Больше можешь узнать из истории создания PHP.
4) NetBeans используют знакомые, любят.
Структуру проекта строит веб-фреймворк, делает он это в виде создания поддиректорий, вроде: модели, контроллеры, шаблоны. В результате, создание проекта очень легко и просто, это можно делать даже в блокноте. Я работаю в Emacs и мне хватает дерева проекта с редактором.
«Рисовать» схему проекта нет смысла, т.к. кроме как для тебя, программиста, она не будет ничего значить, да и иметь больше смысла, чем даёт команда unix tree, оно не даст.
5.1) Вёрстка HTML она всегда вёрстка HTML. Просто для добавления динамики используются специальные языки шаблонизаторов. На самом деле ничего они такого сложного не требуют: ты просто пишешь HTML-код, но где оно нужно, вставляешь элементы логики. Т.е., где нужно вставить число посетителей, ты, вместо числа, пишешь что-нить вроде: {{ mynum }}.
5.2) MVC, как вообще паттерны проектирования, нужны везде и всегда. Игнорирование их приводит к созданию велосипедов.
6) Ты хотел писать свой веб-фреймворк(а так и было бы) на PHP, реализацию паттерна MVC, но не хочешь писать магазин с нуля?

Просто иди сюда: rusrails.ru/ Там ты найдёшь ответы на все вопросы, найдёшь лучший инструмент для начинающего веб-разработчика.
Ответ написан
akalend
@akalend
программирую
>2. OpenCart это годный пример или быдлокод для знакомства с языком?
Это что-то среднее, но наилучшее что мы нашли из Опенсоурса. Там много ляпсусов, практически 30-60% будет переписано. Но это все же лучше, чем разрабатывать с ноля?

>3. Почему в PHP такая куча файлов? Потому что отдельный класс = отдельный файл или это стиль кода? Нельзя ли поменьше файлов, я так не привык :)?
это такой стиль, и не только в РНР: один класс = один файл
можно все слить в один файл — тогда будет каша

>4. Есть ли какая то простая IDE для PHP под винду. Раньше для всего мне хватало vim под unix, но с кучей файлов PHP + MVC получается чертовски неудобно. Может ли IDE сгенерить схему взаимосвязей объектов php по типу как рисуются схемы баз данных SQL?
Zend, Eclipse, PHPEdit, PhpEd
вышеуказанные IDE этого не делают, но можно настроить phpDoc или рекомендую Doxygen — которые документируемый код превращают в HTML документацию
Zend имеет встроенный PHPdoc
Doxygen — генерит графические рисунки и диаграмы взаимодействия классов

5.2 MVC под PHP оно нужно вообще? При запуске скрипта подгружаются сотни файлов, очень низкая производительность. А вдруг мой проект выстрелит и будут тысячи посетителей, придется отказаться от PHP, может это сделать сразу?
> у меня проект MVC на 50-60K, пока не падает. Падает только у тех — у кого кривые руки, так что MVC однозначно нужно. Делай как есть, начнет падать — ищи узкие места. Что касается Opencart, то мы полностью переписываем фронтэнд, чтоб не падало… (ну и плюс добавление наших фирменных фишек)

>6. А может быть вовсе не php или нафиг MVC? Но скрипт магазина с нуля писать не хочу!
ты проект делаешь, тебе и решать…
по теме — ответил выше
Ответ написан
Horse
@Horse
3. Можно меньше, но не нужно. Много файлов потому, что народ привык привязывать конкретный кусок реализации к файлу.
5.1 Сначала делаешь верстку на html, а потом в зависимости от ситуаций и состояний — отдаешь кусочки html клиенту.
5.2 ДА! Иначе будет крайне сложно вносить изменения в дизайн, структуру бд… Когда будет высокая нагрузка — будет кэш, много серверов, может и собственная БД, а MVC должен отсатся (конечно же для распределенных систем он видоизменится)
6. php можно заменить на python, java, asp.net, perl, ruby. MVC можно заменить на MVP, MVVM.

Если ненадолго — php MVC. Если на долго — рекомендую python и почитать что-то про ООП посерйозней.
Ответ написан
Комментировать
Отвечу лишь на некоторые вопросын:
2) OpenCart — нормальный код для знакомства с языком:) это как книгу прочитать: независимо от того, хорошая или плохая книга после ее прочтения получаешь профит в виде понимания как надо или не надо писать.
3) Да, это стиль кода, помогающий в случае ошибки моментально ее локализовать. Считается хорошей практикой.
5) Верстку для пхп нужно делать также, как и обычной страницы, только «вкрапливать» пхп-код. Если использовать какой-либо MVC фреймворк, то верстать становится проще, как раз по тому, что все разделено — подсовываешь вьюверу данные и все.
По своему давнишнему опыту (лет 7 назад, когда только брался за веб) не советую использовать Dreamweaver, поскольку он использует (или использовал, а счас все нормально?) грязную разметку с лишними элементами, с лишними позиционированиями в абсолют.
5-2) возможно, низкая производительность — из-за качества скриптов, попробуйте оптимизировать.
Ответ написан
Комментировать
AmdY
@AmdY
PHP и прочие вебштучки
Begetan, фигня это
1. потому что ты сам не умеешь и у тебя получитс кака.
2. программист как раз и умет строить архитектуру под изменяющиеся требования, а вы будете каждый раз мереписывать с нуля.
3.а твоё врем бесплатно? изучение php и программирования это в сотню раз больше времени, чем написание проекта.
4. любой нормальный программист, даже не вкладывая душу, сделает проект лучше, чем самоучка без опыта пусть даже и пытающийся из-зо всех сил. Старанием не заменишь опыт.
5. вы готовы выбросить кучу времени, жертвовать личной жизнью ради того, чтобы написать корявый стартап. который не выстрелит либо из-за плохих идей и пиара, либо из-за кривой технической реализации?

бред, бред, бред. почему некоторые люди так ненавидят и не ценят себя любимого, придумывая приключения на свою пятую точку.
Ответ написан
@SMiX
По поводу 6 пункта могу предложить Spree.
Движок написан на Ruby, а авторы стараются идти в ногу со временем и постоянно выпускают новые версии, испольщующие современные средства(мигрируют на новые движки авторизации, обновляют код для совместимости с актуальными версиями rails и т.д.). Существует большое количество плагинов.
Ответ написан
vanxant
@vanxant
По поводу 4 — я лично перепробовал кучу всего, остановился пока на NetBeans в качестве IDE и PHPEdit в качестве замены блокноту.
Ответ написан
Комментировать
golotyuk
@golotyuk
Касательно вопроса про MVC - я бы не советовал смотреть на это, как на нечто обязательное - лучше попытаться понять, зачем оно нужно. Ну и бросаться в хардкор лучше поэтапно, главное не лениться менять плохой код (которого не избежать) приобретая новые знания.

Рекоммендую почитать Web разработку для начинающих. Там совсем базовый уровень, но, возможно, будет полезно начать сначала.
Ответ написан
Комментировать
MVC это паттерн проектирования приложения, с языком или количеством файлов он никак не связан, также как не связан с ООП. Это разделение всей логики приложения на три уровня. Я как-то создал MVC приложение на php в рамках процедурного подхода. Каждый запрос — два инклуда, а чисто теоретически и без них можно было бы обходиться, но эстетически некрасиво.
Ответ написан
Комментировать
AmdY
@AmdY
PHP и прочие вебштучки
если это хобби для стартапа, то смысла нет. заказать нормальный проект у опытных программистов на несколько порядков выгоднее, чем изучать язык программирования. а затем убить стартап кривой реализации.
Ответ написан
sskorykh
@sskorykh
1. В качестве справочника я использую www.php.net/manual/en/index.php.
2. OpenCart я не видел, но порекомендовал бы взять какой-нибудь framework и писать приложение, используя его. Я бы порекомендовал Kohana3 как наиболее простой и быстрый в освоении. Своего шаблонного движка в Kohana3 нет, но можно прицепить внешний. Рекомендую Twig.
3. Нарушать общепринятый подход разделения классов и файлов не рекомендую, лучше хранить каждый класс в отдельном файле. Такой подход имеет и практическое значение. Если реализован autoload, то система должна точно знать, где лежит нужный класс.
4. Самой удобной из бесплатных IDE для меня оказался Netbeans. Сгенерировать диаграмму классов для таких языков как PHP — довольно таки нетривиальная задача.
5.2 MVC обязательно нужен! Учитесь правильно писать с самого начала. Системы, написанные без разделения логики и представления написать можно, но вот сопровождать практически нереально.

Проблема низкой производительности довольно-таки надуманная. При использовании autoload сотни файлов на подгружаются. Писать масштабируемое решение исходя из «вдруг проект выстрелит» я бы не советовал.

6. PHP может и не самый совершенный ЯП, но в умелых руках, думаю, не хуже чем Ruby или Python. Мне повезло в том плане, что я сперва научился писать на Java, а осваивая PHP уже имел чёткое представление о том, как должна выглядеть архитектура приложения.

А вот писать магазин с нуля я бы не советовал. Для начала я бы посоветовал поставить магазин на типовом движке и когда выяснится, что тема действительно пошла, тогда уже можно подумать о написании своего сайта. Но не факт, что потребность переписать сайт вообще возникнет.
Ответ написан
Комментировать
Я бы рекомендовал начать изучение сразу с PHP 5.4/5.5, чтобы пользоваться и namespaces, и closures, и синтаксическому сахару. Само собой — только ООП, а значит и MVC. Лучше сразу привыкнуть к такому стилю программирования, чем переучиваться из говнокодера в человека.

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

Обязательно сразу приучиться работать с IDE, типа PhpStorm/NetBeans. Никаких «блокнотов».
Ответ написан
Комментировать
afi13
@afi13
getjump.github.io/ru-php-the-right-way
Opencart очень простая система для простых магазинов, но далеко не самая лучшая. PHP 5.1 уже давно устарел, смотрите в сторону PHP 5.4 - PHP 5.6. PhpStorm очень хорошая IDE, но она платная, поэтому можете посмотреть в сторону Aptana или NetBeans. Для знакомства с MVC лучше возьми какой-нибудь из популярных фреймворков. Например Yii или Laravel.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы