|
Заблокирован
|
|
PHP приложение на чистом процедурном стиле27.09.2018, 20:54. Показов 5326. Ответов 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? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|