|
Заблокирован
|
|
PHP приложение на чистом процедурном стиле27.09.2018, 20:54. Показов 5473. Ответов 55
Доброго времени суток! Изучаю пхп и пытаюсь написать что то большое. Но пока не изучил ООП. Все говорят что можно большие приложения и без ООП написать. Но не смог найти примеры таких реализации. Что имело бы единую точку входа, использовало что то вроде роутинга и легко поддерживался и расширялся. Если кто нибудь знает где найти, имеет соображения или имеет какие то исходники прошу поделиться?
0
|
|
| 27.09.2018, 20:54 | |
|
Ответы с готовыми решениями:
55
[Mono] Приложение на чистом .Net и Mono Оконное приложение на чистом Win API |
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
||||||
| 06.10.2018, 09:41 | ||||||
|
1) О других языках я не говорю. 2) Решать всё только на ООП я не предлагал. 3) Я против более менее сложных проектов чисто на процедурках в PHP.
0
|
||||||
|
|
|||||
| 06.10.2018, 13:46 | |||||
1
|
|||||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
|||||||||||||||||||||||
| 06.10.2018, 15:42 | |||||||||||||||||||||||
|
Смотрим сравнение скорости функций и схожий вызов через класс.
Сейчас вы можете возразить мол пример синтетический и в реальных проектах все по другому... ну у меня не так. Максимум приходилось в самых узких местах вместо ORM юзать прямые sql запросы, но это явно нельзя назвать 100% чистом процедурным кодом. И это еще было еще во времена php5, который раза в 2 медленней чем php7. Второй пример про зависимости. Допустим у меня есть класс для работы с АПИ.
------- В общем ожидаю ответные примеры на тему наследования(через компоненты) и заглушки части кода. Другие примеры тоже приветствуются. Особенно интересно про конфиги, благодаря которым можно вообще не менять код.
0
|
|||||||||||||||||||||||
|
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
||||||
| 06.10.2018, 16:12 | ||||||
|
tarasalk, отлично, а теперь давайте посмотрим сколько памяти потребляют оба подхода:
Вызов метода занял 0.17694997787476 секунд , memory: 1704
2
|
||||||
|
|
||||||||||||||||||||||||
| 06.10.2018, 16:40 | ||||||||||||||||||||||||
|
http://joelabrahamsson.com/a-s... principle/ Или создавать совершенно новый класс, который наследует от этого. На каждый чих новый класс. А добавление нового класса это добавление новой абстракции и зависимости. Чем больше абстракций, которые к тому же зависимы друг от друга, тем сложнее разобраться в вашем коде.
В конфиге:
Таким образом я могу сторонним кодом подменить работу любой функции. А функция MainPage() может выводить блоки в любом порядке, который прописан в конфиге того модуля, в котором находится сама функция MainPage(). Такой код полностью соответствует Open/Closed принципу, так как при добавлении нового функционала ничего не нужно менять в существующем коде. Также у меня, за редкими исключениями общего порядка, функции находятся в своих собственных файлах, поэтому манипуляция ими очень легка и мобильна.
0
|
||||||||||||||||||||||||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
||||||||||||||
| 06.10.2018, 18:11 | ||||||||||||||
|
Я хз на чем вы тестили и что там внутри include, но у меня результаты совершенно другие.
Вариант ниже думаю более корректный, но в целом тестить память в таком виде это ни о чем. Нужно с профайлером смотреть проект в продакшене. Функции Кликните здесь для просмотра всего текста
Методы Кликните здесь для просмотра всего текста
У меня вышло что пиковые затраты памяти отличаются незначительно. Добавлено через 1 час 14 минут Пример: У меня есть класс FileLog, он реализует интерфейс ILog. Другой класс, Api, работает с логами через интерфейс ILog. Так вот чтобы изменить логику логирования класса Api, мне не нужно менять сам класс Api, мне нужно просто подсунуть ему другой класс например DBLog, и благодаря общему интерфейсу ILog класс Api это схавает. 1) Ранее вы говорили что ни одна функция не вызывает другую напрямую. В MainPage дергается сразу 2 функции. 2) Глобальные переменные - зло. Что там находится слабо поддается контролю. В больших проектах это приведет к необъяснимым багам, которые можно очень долго искать. 3) Если это решение с конфигами не стандартизировано, то мне сложно представить как в этот велосипед вписать сторонний код. 4) Автокомплит не заработает. Вы наверно в блокноте пишите и и не знаете как приятно использовать современные IDE. 5) Как передают параметры в функцию? Через конфиг? Везде глобальные переменные? 6) Как вызвать конкретную функцию из конфига? Через индекс? А если в массиве один элемент удалится и все последующие индексы слетят, я должно по всему коду прыгать и менять 1 на 2? 7) Интересно во что превращается stack trace, отладка наверно то еще удовольствие.
0
|
||||||||||||||
|
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
|
|||
| 06.10.2018, 19:38 | |||
|
ооп сжирает на много больше памяти чем процедурка, да и по времени выполнения тоже уступает. Плюс ко всему, накосячить в ооп стиле гораздо проще чем в процедурном. Процедурка никогда и никуда не уйдет, так как в конечном итоге и ооп на её основе работает. По сути выполнение программ и архитектура процессоров это и есть процедурный стиль.
1
|
|||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
|||||
| 06.10.2018, 20:15 | |||||
|
0
|
|||||
|
|
||||||||||||||||
| 07.10.2018, 12:49 | ||||||||||||||||
|
Короче говоря отделите мух от котлет и будет вам счастье. Мухи это функции, а котлеты это данные. Мне кажется, что достаточно нэймспейсов или соглашений имён, и правильной разбивки сложной системы на модули, желательно построенной по иерархическому принципу. Можно, конечно и их дёргать через наборы данных, но просто не вижу смысла. Кстати у меня сама функция MainPage() вызывается через список модулей, и её саму можно подменить если что. Но я у же это буду делать не руками, а через код. Мне хватает. И всё там работает в этих редакторах и автозавершение и всё остальное.
![]() Добавлено через 39 минут Я всё хочу сделать "умную" систему, чтобы она сама знала о себе всё, что нужно: из чего состоит, какие изменения вводились и т.п. Такая система была бы способна к самолечению.. Некая имунная система должна присутствовать в любой системе.. Пока такой системы ещё не создано, но я выбрал, на мой взгляд правильный вектор развития, который возможно приблизит мечту..
0
|
||||||||||||||||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
||||||||
| 07.10.2018, 13:39 | ||||||||
|
Посмотрите на что-то более серьезное, например Яндекс.Диск. Думаете его исходники дадут кому-то постороннему? 2) Я вам уже говорил, сделать плагины на ООП не проблема. Но не все решается плагинами. Не просто так существуют различные версии CMS. 3) Если вы думаете что нельзя спокойно обновить движок (не плагин) то спешу вас разочаровать. Это очень легко делается через composer. Например фреймворк Laravel часто меняется, я делаю composer update и всё. Аналогично с другими зависимостями, которые сотнями с гитхаба качаются. В этом и есть ключевая фишка ООП, работая через интерфейс, можно совершенно не обращать внимание на реализацию. Класс как раз никаких данных в себе не содержит, всё приходит как параметры в методе.
0
|
||||||||
|
|
||||||||
| 07.10.2018, 14:25 | ||||||||
|
0
|
||||||||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
||||||||||||||
| 07.10.2018, 15:40 | ||||||||||||||
|
Да, плагин. Вместо того чтобы взять готовую библиотеку вы будете писать свой аналог на конфигах. Допустим ошибка здесь. require_once($TemplatesPath.$Skin.$TplLi st[$funct][0]); Как вы поймете где косяк? Стека нет, только текст ошибки. file not found in aaa/bbb/ccc/ddd.php. А путь вам неизвестен, он же динамически сформировался и там может быть абсолютно любая ерунда.
0
|
||||||||||||||
|
|
||||||||||
| 09.10.2018, 11:55 | ||||||||||
|
Видимо это зло просто заточили в класс и его стало малозаметно?.
0
|
||||||||||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
|||||||||||
| 09.10.2018, 14:06 | |||||||||||
|
use App\Models\Driver; Результат мало чем отличается от require_once. Еще раз цитирую ваши слова
0
|
|||||||||||
|
|
|||||||||||||
| 26.10.2018, 10:47 | |||||||||||||
0
|
|||||||||||||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
|
| 26.10.2018, 13:54 | |
|
0
|
|
| 26.10.2018, 13:54 | |
|
Можно ли создать приложение под Android на чистом С++? О чистом коде html,css,js,php сайт на чистом php плюсы и минусы Как сделать приложение в стиле Office 2007 в VS2008 Можно ли в css стиле(на HTML странице) использовать php? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|