Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761

Оцените код пожалуйста - правильно ли я понял ООП и MVC?

01.08.2013, 12:49. Показов 4057. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! php изучаю уже три месяца, когда есть возможность. С ООП в php познакомился две неделии назад. До этого с ним немного имел дел в javascript'e, тоже в учебных целях.
Как говорится, без практики теория мало чем поможет, поэтому я всегда стараюсь кодить после того, как что-то прочитал и узнал... Но как мне понять - хороший мой код или нет? То, что я написал чего-то стоит, или полная лажа? Поэтому я принял решение выложить свой код для оценки.
Что хотелось бы услышать в ответ:
1. Правильно ли я понял ООП? Не слишком ли мой код громоздок? Может можно всё сделать намного проще и понятнее?
2. Правильно ли я понял MVC? Правильно ли я разделил код модели, контроллера и шаблонов? И вообще правильно ли я соотнес код с этими категориями.
3. Какие основные ошибки вы встретили в моем коде?
4. Есть ли в моем коде проблемы безопасности?
5. Ваши замечания.

Теперь о самом коде. Это - гостевая книга Заливал на свой хостинг - работает.
Инструкция по установке:
1. Распакуйте содержимое архива в каталог на хостинге.
2. Создайте базу данных на хостинге.
3. Откройте для редактирования файл model/db_settings.php и отредактируйте значения констант имени вашей БД,
хоста вашей БД, пользователя вашей БД и пароля пользователя вашей БД. Это нужно для того, чтобы подклю-
читься к вашей БД. При желании в этом файле можно задать кодировку вашей БД и имя таблицы, с которой бу-
дет работать гостевая книга. Таблица с заданым именем будет автоматически создана при первом запуске
гостевой книги.
4. Установка закончена. Чтобы открыть гостевую книгу в браузере - обратитесь через него к файлу guestbook.php
5. Если вы поместили гостевую книгу в корень сайта и желаете, чтобы она запускалась как главная страница
сайта, то переименуйте файл guestbook.php в index.php
Вложения
Тип файла: zip guestbook_b.0.1.zip (88.9 Кб, 59 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2013, 12:49
Ответы с готовыми решениями:

Правильно ли я понял видимость переменных в ООП
Если у меня есть класс например подключение БД библиотеки mysqli: $mysqli = new mysqli('localhost', 'root', '', 'db'); Я легко...

Проверьте пожалуйста, правильно ли я понял концепт использования СКВ?
Я почитал литературу по системам контроля версии, но проблема в том, что некому проверить правильно ли я понял все. Поэтому я попробую...

Помогите пожалуйста переделать код в ООП
Здравствуйте. Помогите пожалуйста переделать данный код в ООП. Начал только учить js, к тому ООП почти не изучал, а тут такая задача. ...

17
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
01.08.2013, 21:10
Код очень не нравится. Советую посмотреть, как пишут на фреймворках.
Описывать косяки очень долго.
1
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.08.2013, 09:21  [ТС]
Цитата Сообщение от OnYourLips Посмотреть сообщение
Код очень не нравится.
Мне, честно говоря, тоже. Тешит то, что это первое, более-менее серьезное, что я написал и оно работает...
До этого написал эту же книгу, но без ооп и mvc. Кода было почти в два меньше, думал с ооп будет проще...
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
02.08.2013, 09:23
Зверушь, с ооп на фреймворке будет и проще, и кода меньше.
1
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.08.2013, 09:24  [ТС]
Цитата Сообщение от OnYourLips Посмотреть сообщение
Описывать косяки очень долго.
А если самые основные?
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
02.08.2013, 09:25
Как нибудь на выходных.
0
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.08.2013, 09:29  [ТС]
Цитата Сообщение от OnYourLips Посмотреть сообщение
Как нибудь на выходных.
ок
Заранее спасибо!

Цитата Сообщение от OnYourLips Посмотреть сообщение
Зверушь, с ооп на фреймворке будет и проще, и кода меньше.
Значит, пришло время осваивать фреймворки? Хотя, это не совсем входило в мои планы на ближайшее будущее, но я себе отмечу, что довольно скоро придется их изучать.
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
02.08.2013, 09:37
Если в коде прослеживается определенная структура - это значит, что ты написал фреймворк.
Даже если думаешь, что никаких фреймворков не используешь.

И эффективнее взять качественный фреймворк, чем тратить время на свой велосипед на костылях.
1
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.08.2013, 09:53  [ТС]
Цитата Сообщение от OnYourLips Посмотреть сообщение
Если в коде прослеживается определенная структура - это значит, что ты написал фреймворк.
Даже если думаешь, что никаких фреймворков не используешь.
То есть я написал фреймворк? о_0 Хоть и жутко некачественный?

Добавлено через 59 секунд
Цитата Сообщение от OnYourLips Посмотреть сообщение
И эффективнее взять качественный фреймворк, чем тратить время на свой велосипед на костылях.
А как же научиться хорошо программировать без велосипедов?)
0
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
02.08.2013, 12:56
Писать свое, оглядываясь на лучшее. Но не использовать свое для кода в продакшн.
1
33 / 33 / 9
Регистрация: 26.07.2013
Сообщений: 148
02.08.2013, 13:11
Код моделей вынес правильно, а вот с контроллерами и вьюверами я немного не понял твоей схемы. У тебя на один action приходится сразу 4 контроллера, такого не должно быть. У 1 экшена должен быть 1 контроллер, а вот у контроллера может быть несколько экшенов.
Почему в контроллере controller.php нет класса?

Если нет сообщений в базе то выдает ошибку
Warning: Invalid argument supplied for foreach() in C:\OpenServer\domains\guestbook.loc\view \templates\default\content.php on line 47

Не понятно, зачем выводить статус ошибок в адресную строку?
И желательно после успешного добавления тоже выводить сообщение, можно зеленым цветом.

Добавлено через 9 минут
Зачем используется сессия? Чтоб заносились в нее какие-то данные не увидел, зато увидел как эти данные сравниваются. Либо я пропустил заполнение либо она тут вообще не нужна.
Если произошла ошибка текст в полях стирается. Если большое сообщение то набирать его заново очень напряжно. Лучше текст сообщения и ника оставлять в поле.
1
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.08.2013, 14:36  [ТС]
Цитата Сообщение от HWOARANG Посмотреть сообщение
Код моделей вынес правильно, а вот с контроллерами и вьюверами я немного не понял твоей схемы. У тебя на один action приходится сразу 4 контроллера, такого не должно быть. У 1 экшена должен быть 1 контроллер, а вот у контроллера может быть несколько экшенов.
ясно.

Цитата Сообщение от HWOARANG Посмотреть сообщение
Почему в контроллере controller.php нет класса?
Недочет... поправим.

Цитата Сообщение от HWOARANG Посмотреть сообщение
Не понятно, зачем выводить статус ошибок в адресную строку?
Действительно... но как послеть статус ошибки серверу, если страница перезагружается?

Цитата Сообщение от HWOARANG Посмотреть сообщение
Если нет сообщений в базе то выдает ошибку
Warning: Invalid argument supplied for foreach() in C:\OpenServer\domains\guestbook.loc\view \templates\default\c ontent.php on line 47
Точно, не досмотрел... поправим

Цитата Сообщение от HWOARANG Посмотреть сообщение
И желательно после успешного добавления тоже выводить сообщение, можно зеленым цветом.
Можно, но так ли это надо, ведь пользователь сразу видит сообщение после добавления?

Цитата Сообщение от HWOARANG Посмотреть сообщение
Зачем используется сессия? Чтоб заносились в нее какие-то данные не увидел, зато увидел как эти данные сравниваются. Либо я пропустил заполнение либо она тут вообще не нужна.
Сессию надо допиливать... если на сайте где-то есть регистрация пользователей, которая сохраняет имя пользователя в $_SESSION['username'], то это имя автоматом ставится в поле "Автор" и пропадает капча.

Цитата Сообщение от HWOARANG Посмотреть сообщение
Если произошла ошибка текст в полях стирается. Если большое сообщение то набирать его заново очень напряжно. Лучше текст сообщения и ника оставлять в поле.
Про это вообще не подумал. Спасибо.

Спасибо!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.08.2013, 14:44
Цитата Сообщение от Зверушь Посмотреть сообщение
но как послеть статус ошибки серверу, если страница перезагружается?
куда она перезагружается?
А вообще, с помощью header
PHP
1
2
3
header('HTTP/1.1 CODE STATUS');
//вывод сообщения или запуск роутинга нужного действия, инклуд,...
exit;
1
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.08.2013, 16:03  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
куда она перезагружается?
PHP
1
2
3
4
5
if (isset($_REQUEST['submit'])) {
    //Если кнопка Сабмит нажата - записать сообщение в БД и перезагрузить страницу
    $post_status = Controller_IO::post_message();
    header("Location: http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "?post_status=$post_status");;
}
Это было сделано для того, чтобы когда пользователь обновил страницу, то его сообщение не отправилось снова...

Добавлено через 2 минуты
Цитата Сообщение от KOPOJI Посмотреть сообщение
PHP
1
2
3
header('HTTP/1.1 CODE STATUS');
//вывод сообщения или запуск роутинга нужного действия, инклуд,...
exit;
Про такое не слышал, почитаю...
0
33 / 33 / 9
Регистрация: 26.07.2013
Сообщений: 148
02.08.2013, 16:06
Цитата Сообщение от Зверушь Посмотреть сообщение
Действительно... но как послеть статус ошибки серверу, если страница перезагружается?
Статус ошибки серверу? Зачем посылать статус серверу? У тебя статус и так определяется в моделе, передается в контроллер, а теперь тебе нужно его вывести во вьювер для пользователя. Не перезагружай страницу и exit убери и статус ошибки у тебя можно будет использовать дальше во вьювере.
Цитата Сообщение от Зверушь Посмотреть сообщение
Можно, но так ли это надо, ведь пользователь сразу видит сообщение после добавления?
Это не сильно важно, но мне кажется, что стоит сообщать пользователю и об успешных операциях.
Еще рекомендую добавить конфиг, чтоб выносить константы, и автолоадер, чтоб не инклудить модели и контроллеры.
1
 Аватар для Зверушь
461 / 369 / 94
Регистрация: 01.05.2010
Сообщений: 1,761
02.08.2013, 16:11  [ТС]
Спасибо. В общем, еще учиться и учиться))
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
02.08.2013, 16:13
Цитата Сообщение от HWOARANG Посмотреть сообщение
стоит сообщать пользователю и об успешных операциях.
Это как? "Страница загрузилась успешно" что-ли?
Цитата Сообщение от HWOARANG Посмотреть сообщение
Статус ошибки серверу? Зачем посылать статус серверу?
для поисковиков. exit - это образно, лучше бросать соответствующее исключение
0
33 / 33 / 9
Регистрация: 26.07.2013
Сообщений: 148
02.08.2013, 16:22
Цитата Сообщение от KOPOJI Посмотреть сообщение
Это как? "Страница загрузилась успешно" что-ли?
А еще после каждого успешно введенного символа или после каждого успешного прокрута колесиком)))
Выводить сообщения можно после успешного изменения сообщения или удаления или добавления.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.08.2013, 16:22
Помогаю со студенческими работами здесь

Оцените пожалуйста код
Здравствуйте, уважаемые. Недавно начал изучать JS. В программировании опыта нет совершенно, поэтому некоторые вещи очень здорово...

Оцените , пожалуйста, мой код
Просто написал небольшую программу, прошу оценить, есть ли в ней какие либо критические недостатки,и насколько правильно я подобрал...

Где правильно разместить код с позиции MVC pattern
Много думал и искал, ответа не нашел. Научите, пожалуйста. Задача: WEB приложение на RoR. Одна часть - это получение данных от...

Как упростить код и правильно использовать ООП?
Доброе время суток. Есть один блок в котором несколько блоков и второй блок в котором несколько блоков. <div...

Проектирование сложных систем - ООП. Покритикуйте код, пожалуйста!
Добрых суток. Недавно начал делать первые шаги в проектировании. Вроде, разобрался как строить классы, как выполнять их декомпозицию и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru