Вы видите копию треда, сохраненную 16 июля в 04:26.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
https://www.youtube.com/results?search_query=php+%D1%83%D1%80%D0%BE%D0%BA%D0%B8+2023
Уроки по Laravel
https://laravel.com/docs/11.x
Архитектура сложных веб-приложений. С примерами на Laravel:
https://github.com/adelf/acwa_book_ru
Шаблоны проектирования:
https://refactoring.guru/
Интересные проекты на/для PHP:
https://frankenphp.dev/
https://roadrunner.dev/
https://reactphp.org/
https://openswoole.com/
https://spiral.dev/
Остальное обсуждаем в треде
Сначала уроки на го
Хороший перекат, надоела каша в шапке
Зато тэг забыл
Был клуб, а теперь не клуб?
>>086299 (OP)
Говно а не перекат, нет ссылки на предыдущий, ссылка на говноролики с ютуба а не учебник от опа анона. В следующий раз сам переекачу
Велкам ту зе клаб бади...
>Архитектура сложных веб-приложений. С примерами на Laravel:
Здорово конечно, но на деле ты придешь в компанию работать, а там проект написанный битриксоидом который даже пхп не знает нормально.
Ну этот только ты ещё собираешься, а я уже не первый год работаю. Нытиков и истеричек, если что, нигде не любят. Чето не нравится - сделай сам, все просто.
Это сервак запускает скрипт при каждом запросе сам ?
> проект написанный битриксоидом который даже пхп не знает нормально.
как будто ларавельщики нормально пхп знают
Кстати, да.
Лара - полная хуета, а ларавельщики - говноеды и хуесосы. С умением писать хороший код на пхп лара не имеет ничего общего
Битрикс-джумла - западло, Магенто на кал похожа, цмс Друпал тоже, Вордпресс пиздятиной вонял, Мулленвега негр ебал. Zend ебланы создавали, Yii в рахе закопали - Макаров пидор был, Laravel моча на кале, Symfony писал дебил.
Симфони может и норм, только фиг изучишь. Книг нет, обучающих материалов тоже "кот наплакал". Был сайт с документацией на русском, да и тот недавно закрылся.
Да вы заебали со своей документацией на русском. Любой браузер переводит отлично. На ютубе полно уроком по симфони на разных языках - ставишл божественный яндекс браузер и смотришь забугорные видосы на русском языке - переводит очень неблохо
1С-Скуфикс
5.6 это скуфоскрипт, а Скуфани 7.0
Про роад раннер в курсе, что одни разрабы. Они флексят своим трушным подходом к архитектуре: пээсары, паттерны, отсутствие магии, заявляют, что конкурируют не с симфони или ларой, а со спрингами всякими, лонг ранинг сервак и как следствие возможность писать вебсокеты, микросервисы и пр. Многообещающая хуйня в общем, но сам фреймворк я не тыкал, интересно мнение тех, кто ковырял или писал что-то, стоит вкатываться или мертворожденное говно?
Бесмысленный вопрос. Для джуномидла все что отлично от мейнстрима смерти подобно, а тимлид сам способен оценить нужно это в прокте или нет
На битрикс тяжелее уроки/инфу найти. Так что симфони в этом плане лучше. Ну и во всём она лучше, кроме количества вакансий и конкуренции и зарплаты.
все уже изучили и выкатились в го
тред остался чтоб притворятся вкатывающимися и задавать вопрос про mysqli
Нихуя не отдупляюсь зочем оне. Сакральный смыл их в пыхе - что було, как в других языках? Рили.
Для того, чтобы человек получил хотя бы первичное представление о работе с ООП-кодом?
Нахуя скатываться в айти, если ты можешь пойти в казино и стать богатым?
Приходят к тебе данные в контроллер через хттп, эти же данные приходят в друге место через консольную команду и тд их нужно сохранить. Создаешь сервис, в который из разных мест передаешь полученные данные, который их сохраняет. Внимание вопрос: где и как будешь валидировать полученные данные?
Усложним для наглядности. Полученные данные нужно ещё куда-то отправить. Другими словами их так же нужно передать во второй, третий, десятый сервисы
>делается в процедурном стиле?
А что вообще на пхп сделано в процедурном стиле? Библиотека или фреймворк какой? Может приложение какое-то или сайт?
Пример можно?
А нахуй мне твой код? Ты можешь хоть задом наперед писать, это дело твое.
Я имел ввиду что-то широко используемое. То за что бабки платят. Учить-то нужно то за что башляют и вакансиях требуют.
Есть что-то такое в процедурном стиле или нет?
А что такое MCV?
Шо такое SCV я знаю, шо такое пробка знаю, дрона знаю. А шо такое MCV не знаю.
А на пхп че игры не делают? А почему? На шарпе вон и игры и сайты делают, а с пхп че не так?
Потому что пхп для веб бекенда. А почему на шарпе бекенд не пишут? А, пишут? Ну иди работай бекендером на шарпе, раз пишут
Enum (перечисления) в PHP могут быть использованы для создания набора констант с ограниченным количеством допустимых значений. Они позволяют удобно работать с определенным набором значений и обеспечивают ясность кода, делая его более читаемым и поддерживаемым.
Преимущества использования enum в PHP:
1. Защита от ошибок. Enum позволяют предотвратить ошибки, связанные с несовместимыми значениями, так как они задают допустимые варианты значений.
2. Читаемость кода. Использование enum делает код более понятным и позволяет легко понять, какие значения могут быть использованы в определенном контексте.
3. Интеграция с IDE. Многие современные интегрированные среды разработки могут предложить автодополнение и подсказки значений enum, что облегчает работу с кодом.
Хотя необязательно использовать enum в PHP, их применение может значительно улучшить качество кода и облегчить его поддержку в будущем.
Ну да. Создаёшь SaySomethingService, а в нем метод sayHello и передаешь ему форму HelloForm, с единственным атрибутом helloTo и валидируешь его как строку. Потом пишешь юнит тесты на форму и метод в сервисе. В основном скрипте, где будешь использовать сервис, будешь передавать ему форму с заранее заданным атрибутом. А ещё нужно автолоадер свой написать не забыть. Это в одной компании на тестовом просили
>SaySomethingService
А если не добавлять "Service", то у тебя мать умрет или че?
Ну пиши тогда сразу ClassSaySomethingService. Или ClassSaySomethingPhpService. Сколько еще бесполезной хуйни можно запихать в название?
Вам бы только курсы и подавай. На битриксе между прочим вообще нет нормальных курсов. А те что есть показывают как "натянуть" верстку и как модифицировать уже готовые компоненты. Это буквально процентов 15 от необходимых знаний. Тута надо копаться самому во всём, потом идти в компанию, где тебе будут помогать прокачиваться первое время, иначе ты будешь плохой код писать. Так что не ной и иди вон, в свой сцаный Го или Шарп.
Что будешь делать через 3 года, когда го умрёт как руби, а все новые курсы будут по mojo?
Пчел. Вот график активности языков на гитхабе.
https://tjpalmer.github.io/languish/#y=mean&weights=issues%3D1%26pulls%3D0%26stars%3D1%26soQuestions%3D1&names=go%2Cphp%2Crust%2Ctypescript
Го то может и сдохнет. Туда ему и дорога. Но пхп от этого лучше не станет.
Тренд на дно, причем давно.
>А если не добавлять "Service", то у тебя мать умрет или че?
Постфикс Service обозначает, что у тебя там бизнес-логика лежит. В папке с этим сервисом ещё дохрена всяких классов для него может быть - от каких-то кастомных валидаторов, до обертки импорт-файла в объект.
Мы, блядь, не на уроке русского языка, вайтишник. Постфиксы и префиксы обязательны - это чисто техническая фича.
>В папке с этим сервисом ещё дохрена всяких классов
Ты типа перепутаешь, и когда тебе надо будет что-то "сказать" ты вместо SaySomething используешь NasratVTruhaniService и обосрешься?
И нахуя ты все запихал в одну папку? И вообще причем здесь папки? Ты КЛАСС называешь. Названия папок и так в неймспейсе есть.
>Постфиксы и префиксы обязательны
Ну так хули ты не пишешь ClassSaySomethingPhpService? Че ты без префикса если он обязателен?
Пишу так, как принято в приличном обществе. Ты за своим компом можешь как хочешь называть классы, а у нас стиль
ClassSaySomethingPhpServiceAbstractFactoryResult
Достаточно прилично или надо еще что-то уточнить?
>Приходят к тебе данные в контроллер через хттп
Ты описываешь как нарисовать сову, задача про студентов, животных это про то как нарисовать кружок.
>проще и быстрее делается в процедурном стиле?
Лучше всего понять ооп можно как раз таки через большую процедурную лапшу в которую ты начинаешь добавлять новый функционал, прям в одном файле хуяришь портянку на 1000 срок, потом начинаешь замечать повторение кода, похожие блоки для разных задач и т.п. И начинаешь думать что из этого срача можно вынести в отдельный класс.
Собственно глядя на интерфейсы студента, собаки. человека, работника ты задаешь правильный вопрос ибо нихуя не понятно зачем писать классы для 10 строк кода.
99% объяснений ооп сводится к выдуманным собачкам и студентам.
>через большую процедурную лапшу
А с классами типа маленькая процедурная лапша?
Какую только хуйню не выдумают. Сам пхп написан с помощью процедурного подхода. Ебать сюрприз, да? Линукс, на котором весь интернет держится, написан с помощью процедурного подхода.
А есть еще функциональный подход. Структурный. Модульный. И нихуя для этого в пхп нет. Вот просто блядь нет. Совсем.
Проблема пхп не в том что процедурный подход чем-то там плох. Проблема пхп в том что на нем максимально неудобно в процедурном стиле писать.
1) Как организовать автозагрузку функций? В пхп надо файлы подключать. Файлы с классами автозагружаются, а функции? Руками хуярить?
2) В классах есть специальный конструктор, чтобы можно было зависимости в объект передавать. Специальный, отдельный, скрытый снаружи метод. А с функциями че? Синтаксиса для нормального каррирования нет, пять-шесть зависимостей превратят твои функции в монстров.
3) Типизации для функций нет. Если нужно получить объект, то можно четко указать какой именно тебе нужен. А если нужна функция преобразующая строку в число? Ты можешь только указать что принимаешь функцию, а какую - да хуй её знает. Хочешь знать какой колбек нужно в array_map передать? Так пиздуй читай документацию, по самой функции ты хуй поймешь.
4) Данные в каком виде хранить? Структур в пхп нет, только объекты и массивы. Если массивы, то это сразу минус типизация, минус стат анализ, минус любые подсказки об ошибках от IDE. Опечатался в названии поля? Ебать ты лох канеш. А вот ооп "нелохам" даже и писать нихуя не надо - за них все IDE автокомплитит. И подсказывает им: извините ооп господин, вы тут изволили обосраться и не тот объект суете, вот я вам сейчас в одно нажатие все пофикшу. А с массивами все ручками. И сколько таких массивов будет? Сотни? И все поля в них текстом, без малейшей проверки. Охуенчик.
5) Ну и как добивающий: все библиотеки, вся инфраструктура написаны в ооп стиле. Любую орм возьми - объекты, классы-хуясы. Http клиент? Объекты. Мэйлер? Объекты. Да даже блядь uuid'ы генерятся через фабрики.
В этом языке нет нихуя чтобы писать процедурный код. На этом языке никто не пишет процедурный код.
И лапша тут совершенно не причем. Ты и с классами на отличненько насрешь кучу лапши. А потом еще большую кучу когда будешь пытаться написать "нормально".
>через большую процедурную лапшу
А с классами типа маленькая процедурная лапша?
Какую только хуйню не выдумают. Сам пхп написан с помощью процедурного подхода. Ебать сюрприз, да? Линукс, на котором весь интернет держится, написан с помощью процедурного подхода.
А есть еще функциональный подход. Структурный. Модульный. И нихуя для этого в пхп нет. Вот просто блядь нет. Совсем.
Проблема пхп не в том что процедурный подход чем-то там плох. Проблема пхп в том что на нем максимально неудобно в процедурном стиле писать.
1) Как организовать автозагрузку функций? В пхп надо файлы подключать. Файлы с классами автозагружаются, а функции? Руками хуярить?
2) В классах есть специальный конструктор, чтобы можно было зависимости в объект передавать. Специальный, отдельный, скрытый снаружи метод. А с функциями че? Синтаксиса для нормального каррирования нет, пять-шесть зависимостей превратят твои функции в монстров.
3) Типизации для функций нет. Если нужно получить объект, то можно четко указать какой именно тебе нужен. А если нужна функция преобразующая строку в число? Ты можешь только указать что принимаешь функцию, а какую - да хуй её знает. Хочешь знать какой колбек нужно в array_map передать? Так пиздуй читай документацию, по самой функции ты хуй поймешь.
4) Данные в каком виде хранить? Структур в пхп нет, только объекты и массивы. Если массивы, то это сразу минус типизация, минус стат анализ, минус любые подсказки об ошибках от IDE. Опечатался в названии поля? Ебать ты лох канеш. А вот ооп "нелохам" даже и писать нихуя не надо - за них все IDE автокомплитит. И подсказывает им: извините ооп господин, вы тут изволили обосраться и не тот объект суете, вот я вам сейчас в одно нажатие все пофикшу. А с массивами все ручками. И сколько таких массивов будет? Сотни? И все поля в них текстом, без малейшей проверки. Охуенчик.
5) Ну и как добивающий: все библиотеки, вся инфраструктура написаны в ооп стиле. Любую орм возьми - объекты, классы-хуясы. Http клиент? Объекты. Мэйлер? Объекты. Да даже блядь uuid'ы генерятся через фабрики.
В этом языке нет нихуя чтобы писать процедурный код. На этом языке никто не пишет процедурный код.
И лапша тут совершенно не причем. Ты и с классами на отличненько насрешь кучу лапши. А потом еще большую кучу когда будешь пытаться написать "нормально".
покормлю зеленого
у нас есть ДТО SaySomethin с полями text и target
у нас есть класс который перегоняет из Request в дто
и есть сервис SaySomething
как назовем каждый случай предвкушая твой ответ - есть интерфейс SaySomething и есть две реализации SaySomething - как назовем их, один в STDOUT пишет, другой echo вызывает, а как фабрику которая по условиям создаёт одну из стратегий; а как будем по проекту ориентироваться когда у нас будет 8 реализаций и несколько ассемблеров для этого дела; а когда у нас жирный проект на десяток тысяч классов?
> график активности языков на гитхабе
для пыхи написали все что можно представить и написать в рамках ограниченности самого языка, на gовне у всех самописные велосипеды
>1) Как организовать автозагрузку функций? В пхп надо файлы подключать. Файлы с классами автозагружаются, а функции? Руками хуярить?
а в Си как?
>2) В классах есть специальный конструктор, чтобы можно было зависимости в объект передавать. Специальный, отдельный, скрытый снаружи метод. А с функциями че? Синтаксиса для нормального каррирования нет, пять-шесть зависимостей превратят твои функции в монстров.
а в Си как?
>3) Типизации для функций нет. Если нужно получить объект, то можно четко указать какой именно тебе нужен. А если нужна функция преобразующая строку в число? Ты можешь только указать что принимаешь функцию, а какую - да хуй её знает. Хочешь знать какой колбек нужно в array_map передать? Так пиздуй читай документацию, по самой функции ты хуй поймешь.
ты точно про процедурный код пишешь? В указанных тобой примерах в виде линукса и ядра пыхи используется сишка, где вполне себе нормальная ситуацая каста к (void⚝) и высирания этого из процедуры, а дальше ебись как хочешь
>4) Данные в каком виде хранить? Структур в пхп нет, только объекты и массивы. Если массивы, то это сразу минус типизация, минус стат анализ, минус любые подсказки об ошибках от IDE. Опечатался в названии поля? Ебать ты лох канеш. А вот ооп "нелохам" даже и писать нихуя не надо - за них все IDE автокомплитит. И подсказывает им: извините ооп господин, вы тут изволили обосраться и не тот объект суете, вот я вам сейчас в одно нажатие все пофикшу. А с массивами все ручками. И сколько таких массивов будет? Сотни? И все поля в них текстом, без малейшей проверки. Охуенчик.
struct point {int x;}; и class Point {public int x;}; - найди отличия
>5) Ну и как добивающий: все библиотеки, вся инфраструктура написаны в ооп стиле. Любую орм возьми - объекты, классы-хуясы. Http клиент? Объекты. Мэйлер? Объекты. Да даже блядь uuid'ы генерятся через фабрики.
возьми и напиши в процедурном стиле либу живущую дольше 1 месяца, будешь популярным
>нет нихуя чтобы писать процедурный код
нигде нет, сама суть ООП это нормальный вид процедурного кода, который хотя бы минимально можно поддерживать при наличии капли мозгов у прокладки между клавиатурой и креслом
>Ты и с классами на отличненько насрешь кучу лапши
а вот это чистая правда мимо счастливый пользователь кучи лапши ооп лапши в которой никто не пользуется получением сервисов через вызов статического метода Container::getContainer()->get(ZalupaService::class)
>1) Как организовать автозагрузку функций? В пхп надо файлы подключать. Файлы с классами автозагружаются, а функции? Руками хуярить?
а в Си как?
>2) В классах есть специальный конструктор, чтобы можно было зависимости в объект передавать. Специальный, отдельный, скрытый снаружи метод. А с функциями че? Синтаксиса для нормального каррирования нет, пять-шесть зависимостей превратят твои функции в монстров.
а в Си как?
>3) Типизации для функций нет. Если нужно получить объект, то можно четко указать какой именно тебе нужен. А если нужна функция преобразующая строку в число? Ты можешь только указать что принимаешь функцию, а какую - да хуй её знает. Хочешь знать какой колбек нужно в array_map передать? Так пиздуй читай документацию, по самой функции ты хуй поймешь.
ты точно про процедурный код пишешь? В указанных тобой примерах в виде линукса и ядра пыхи используется сишка, где вполне себе нормальная ситуацая каста к (void⚝) и высирания этого из процедуры, а дальше ебись как хочешь
>4) Данные в каком виде хранить? Структур в пхп нет, только объекты и массивы. Если массивы, то это сразу минус типизация, минус стат анализ, минус любые подсказки об ошибках от IDE. Опечатался в названии поля? Ебать ты лох канеш. А вот ооп "нелохам" даже и писать нихуя не надо - за них все IDE автокомплитит. И подсказывает им: извините ооп господин, вы тут изволили обосраться и не тот объект суете, вот я вам сейчас в одно нажатие все пофикшу. А с массивами все ручками. И сколько таких массивов будет? Сотни? И все поля в них текстом, без малейшей проверки. Охуенчик.
struct point {int x;}; и class Point {public int x;}; - найди отличия
>5) Ну и как добивающий: все библиотеки, вся инфраструктура написаны в ооп стиле. Любую орм возьми - объекты, классы-хуясы. Http клиент? Объекты. Мэйлер? Объекты. Да даже блядь uuid'ы генерятся через фабрики.
возьми и напиши в процедурном стиле либу живущую дольше 1 месяца, будешь популярным
>нет нихуя чтобы писать процедурный код
нигде нет, сама суть ООП это нормальный вид процедурного кода, который хотя бы минимально можно поддерживать при наличии капли мозгов у прокладки между клавиатурой и креслом
>Ты и с классами на отличненько насрешь кучу лапши
а вот это чистая правда мимо счастливый пользователь кучи лапши ооп лапши в которой никто не пользуется получением сервисов через вызов статического метода Container::getContainer()->get(ZalupaService::class)
>а в Си
А хуй соси.
Си пятьдесят лет и он всех заебал. Ты на раст смотри. Ядро линукса на раст переписывают.
А ты хули примазываешься? Все перепишут, только не на пхп кал. Это не для вас переписывание. Вам в битрикс.
Ты бля с марса прилетел? У тебя есть ФРАЗА, которую надо СКАЗАТЬ. Или ЗАПИСАТЬ на ПЛЕНКУ с помощью МИКРОФОНА.
Http\Request\Talking\Phrase
Http\Controller\Talking\SayPhrase
Domain\Talking\Phrase\JsonPhrase
Domain\Talking\SayPhrase
Domain\Talking\SayJsonPhrase(JsonPhrase $phrase, Microphone $microphone): VoiceTape
По ЧЕЛОВЕЧЕСКИ надо писать. Потому что эту хуйню потом ЧИТАТЬ надо. А ваш ебучий канцелярит шизанутый ни один адвокат не разберет. Понапишет бессмысленной хуйни, а че хотел в итоге сам не понимает.
Чтоб с вами, полуебками, в жизни так разговаривали.
Если так не делать, придется этот самый сишарп учить, а бегая по тредам, можно весело время тратить на полезное дело...
>А на пхп че игры не делают? А почему? На шарпе вон и игры и сайты делают, а с пхп че не так?
>Потому что пхп для веб бекенда. А почему на шарпе бекенд не пишут? А, пишут?
>А что не так? мимо бекендер на шарпе
>Арряяя бегают по тредам и называют пхп говном. Рряяяя.
Произошел лингвистический ПРОРЫВ.
Если я отключю выполнение php-файлов в папке для хранения загруженных файлов, буду хранить загруженные файлы под фейковыми именами и пользователь будет видеть фейковый файловый путь в ссылке, то какие расширения файлов мне следует не позволять загружать на свой сервер кроме .htaccess? Что может быть опасным, если я реализую выше описанные методы?
Я правильно понимаю, что если я использую Laravel и у меня настроена корневая папка сервера public, а сам я буду класть загруженные файлы вне папки public, то мне необязательны фейковые имена и фейковые пути?
Потому что 1) Laravel не позволит обратиться к маршруту, которого не существует и 2) Потому что Apache не позволит обратиться к файлам вне public?
Зачем тебе вообще давать пользователям прямой доступ к файлам?
Все равно надо проверять права доступа, владельца, сколько можно кочать.
Ну и делай это через фреймворк. Сохраняй названия и метаданные вроде расширения файлов в базе. А сами файлы храни в папке с хешем по содержимому вместо имени. Так дубли автоматически уберутся и можно несколько имен для одного файла хранить. И поиск файла можно легко организовать - разделять по папкам по первым буквам хеша:
/files/78/15/7815696ecbf1c96e6894b779456d330e
>проверять права доступа
У меня не будет регистрации, авторизации.
Как я понял из задачи, нужно сделать 3 страницы: страницу загрузки файла, страницу просмотра файла, страницу последних 100 загруженных файлов.
Т.е. можно только загружать файлы и смотреть их, как следствие, зачем тут регистрация? Я пока что не планировал выходить за пределы задачи. Мой минимум - научиться пользоваться фреймворком и выполнить условия задачи.
>Сохраняй названия и метаданные вроде расширения файлов в базе. А сами файлы храни в папке с хешем по содержимому вместо имени.
Да, так и планировал.
> поиск файла можно легко организовать - разделять по папкам по первым буквам хеша:
Как вариант рассматрю.
Я пока что думою...Вроде понятно что делать, а с чего браться непонятно. Куча разрозненных условий в стиле "сделать это, сделать то".
*Рассмотрю
>Мой минимум - научиться пользоваться фреймворком
Так используй тогда либу ларавеля для работы с файлами.
Забавно, что это моя вторая крупная задача. По поводу прошлой один анон писал, что я должен был заранее, перед задачей, сесть и подумать какие у меня будут классы и т.д. И я вот сейчас перед второй задачей сижу-думаю. И голова просто пустая. 0. 0 мыслей. Отчасти, мб, потому что приходится иметь дело с фреймворком, а не чистым php.
>либу ларавеля
Я даже о такой не слышал.
Я пока что только в общих чертах знаю про контроллеры, виды, шаблоны и прочее, что у них описано в Architecture Concepts и Basics, ну и работу с БД.
Ну, думаю, попробую погуглить про эту либу. Гляну, мб пойму как с ней работать и нужна ли она мне.
>Я даже о такой не слышал.
А где ты "слушал"?
https://www.google.com/search?q=ларавел+файлы
https://laravel.su/docs/10.x/filesystem
>JsonPhrase
а если я хочу XMLPhrase? а что в твоей структуре переводит из реквеста в JsonPhrase?
>SayPhrase
>SayJsonPhrase
и ещё вопросик - что же такое SayPhrase в твоей структуре, почему оно лежит именно в этом неймспейсе а дальше по твоей же логике - а зачем нам называть класс SayPhrase если в неймспейсе есть слово Phrase, хватит просто Say
>а если
>а что
CreateXMLPhrase(Http\Phrase $request): Domain\XMLPhrase
XMLPhrase::from($requestPhrase->toPhraseDTO()): self
>почему оно лежит именно в этом неймспейсе
Да похуй в каком оно неймспейсе. И абсолютно похуй как эти неймспейсы переставлять. Главное чтобы эти неймспейсы и термины были ОСМЫСЛЕННЫМИ сука. И ЧЕЛОВЕКОЧИТАЕМЫМИ блядь. Чтобы названия отражали суть процесса, который МОДЕЛИРУЕТСЯ.
Потому что код нужно будет легко ПОНЯТЬ. Понять не только что он делает, но и что он ДОЛЖЕН делать. А в коде вместо описания того что на самом деле происходит: service, result, processProperty. Бессмысленная дженерик хуйня, мусор бесполезный.
по пути между пуком Xml мне нужно ещё зайти в базу и получить ид подписчиков на пук Xml'ем, потом это кинуть в эластик, и отдать клиенту жсон, где будем держать ид подписчиков на пук?
Че нибудь сделаю https://3v4l.org/AWrUo
Ну коллизия и коллизия. В конце концов контроллер может называться SayReceivedPhrase, а в модели будет универсальный объект Say, который может и поэму рассказать и анекдот спиздануть. Речь шла о том чтобы названия отражали моделируемый процесс, а не процесс твоей шизы.
>>091094
>где будем держать ид подписчиков
Ну создай класс Subscribers. Модель "говорения" тут причем? Моделируй процесс "подписки" и подписывайся, хуль тебе надо?
Нгинкс давно же уже
>который может и поэму рассказать и анекдот спиздануть
круто, ты изобрел такое понятие как "интерфейс"
>хуль тебе надо
понять как мы все это расположим в нашем проекте, и где будем проворачивать наши операции, и как мы назвоем наши классы
>Ну создай класс Subscribers
ну создал
Domain\Talking\Phrase\Subscribers
Domain\Talking\Phrase\JsonPhrase
Как и где мы будем из Http\Request\Talking\Phrase перегонять данные в Subscribers и JsonPhrase? А как мы будем это передавать в Domain\Talking\SayPhrase? $sayPhrase->hruknut($subscribers, $jsonPhrase), вот так что ли? А если завтра мне нужно будем передать данные про хрюкнуть, пукнуть, свистнуть и еще с десяток других?
не используй, просто ты в итоге напишешь тот же самый фреймворк у меня на проекте из сторонних либ только фреймворк и доктрина, например, из фич фреймворка пользуемся только роутингом
>изобрел такое понятие как "интерфейс"
А точно не абстрактный класс?
>понять как мы все это расположим в нашем проекте
Создавай репозиторий, создавай проект. Будем располагать. Могу лекцию по проектированию веб приложений прочитать, чтобы бодрее располагалось.
>Как и где
А как и где мы Http\Request\Talking\Phrase создавали?
>А как мы будем это передавать в Domain\Talking\SayPhrase?
Так это SayPhrase или SubscribeToPhrase?
>А если завтра мне нужно будем передать данные про хрюкнуть, пукнуть, свистнуть и еще с десяток других?
Ну надо так надо. Садишься и пишешь код, который будет пукать, потом код который будет хрюкать, а потом десяток других. Если код не написать, то хрюкать не будет.
>А, или ты это собрался все в одном униврсальном классе Say разместить?
Если Say универсальный, то разместить. Если не универсальный, то не разместить. Вопросы?
>точно не абстрактный класс
точно, абстрактный класс знает как хрюкать, а интерфейс говорит, что может издать звук, а будет это хрюк, пук или свист уже не от него зависит
>Создавай репозиторий, создавай проект
вне работы использовать пхп? нет спасибо
>А как и где мы Http\Request\Talking\Phrase создавали
в нашем абстрактном проекте
>Так это SayPhrase или SubscribeToPhrase?
так а мне откуда знать, я понятия не имею, что за сущность SayPhrase, как и любой человек, который поддерживает твой проект без ненужных постфиксов в виде Service, Assembler, Interface и т.д.
>Садишься и пишешь код, который будет пукать, потом код который будет хрюкать, а потом десяток других
Да это-то понятно, а как мне понять, куда мой код писать? Что делает SayPhrase, что делает SayJsonPhrase? Это сущность ОРМ, сервис, ДТО?
>Если Say универсальный, то разместить. Если не универсальный, то не разместить.
>Вопросы?
Да:
1)Как мы из Http\Request\Talking\Phrase будем перегонять данные в SayPhrase/SayJsonPhrase (что они делают я так до сих пор и не могу понять, не заглянув в сам код).
2)Где мы будем перегонять данные из Http\Request\Talking\Phrase в SayJsonPhrase
3)Что мы будем делать, если завтра нам понадобится добавить еще десять таких же сущностей, как JsonPhrase и Subscribers?
4)Почему твой класс JsonPhrase говорит, в какой он умеет формат, но не говорит, что он такое, я должен в голове держать, что это ДТО, а не сервис? А если у тебя еще увеличится вложенность неймспейса, и внизу появятся сервисы, как я должен визуально отфильтровать что у тебя дто, что у тебя бизнес-логика, а что у тебя просто перегоняет из реквеста в дто?
5)Что именно делает твой универсальный класс Say? А как мы будем расширять его логику? А что будем делать, когда Say научится хрюкать, пукать, писать в базу, эластик и отправлять эмейлы? А как мне на это написать юнит-тест? А как мне добавить в него логику, чтобы ничего не сломать? А как мне по нему ориентироваться, если в нём уже более 5к строк кода и идешка сама начинает реализовывать его функционал в виде пукать при индексации?
>точно не абстрактный класс
точно, абстрактный класс знает как хрюкать, а интерфейс говорит, что может издать звук, а будет это хрюк, пук или свист уже не от него зависит
>Создавай репозиторий, создавай проект
вне работы использовать пхп? нет спасибо
>А как и где мы Http\Request\Talking\Phrase создавали
в нашем абстрактном проекте
>Так это SayPhrase или SubscribeToPhrase?
так а мне откуда знать, я понятия не имею, что за сущность SayPhrase, как и любой человек, который поддерживает твой проект без ненужных постфиксов в виде Service, Assembler, Interface и т.д.
>Садишься и пишешь код, который будет пукать, потом код который будет хрюкать, а потом десяток других
Да это-то понятно, а как мне понять, куда мой код писать? Что делает SayPhrase, что делает SayJsonPhrase? Это сущность ОРМ, сервис, ДТО?
>Если Say универсальный, то разместить. Если не универсальный, то не разместить.
>Вопросы?
Да:
1)Как мы из Http\Request\Talking\Phrase будем перегонять данные в SayPhrase/SayJsonPhrase (что они делают я так до сих пор и не могу понять, не заглянув в сам код).
2)Где мы будем перегонять данные из Http\Request\Talking\Phrase в SayJsonPhrase
3)Что мы будем делать, если завтра нам понадобится добавить еще десять таких же сущностей, как JsonPhrase и Subscribers?
4)Почему твой класс JsonPhrase говорит, в какой он умеет формат, но не говорит, что он такое, я должен в голове держать, что это ДТО, а не сервис? А если у тебя еще увеличится вложенность неймспейса, и внизу появятся сервисы, как я должен визуально отфильтровать что у тебя дто, что у тебя бизнес-логика, а что у тебя просто перегоняет из реквеста в дто?
5)Что именно делает твой универсальный класс Say? А как мы будем расширять его логику? А что будем делать, когда Say научится хрюкать, пукать, писать в базу, эластик и отправлять эмейлы? А как мне на это написать юнит-тест? А как мне добавить в него логику, чтобы ничего не сломать? А как мне по нему ориентироваться, если в нём уже более 5к строк кода и идешка сама начинает реализовывать его функционал в виде пукать при индексации?
>Как мы из Http\Request\Talking\Phrase будем перегонять данные в SayPhrase/SayJsonPhrase
Так же как из $_POST в Http\Request\Talking\Phrase
>Где мы будем перегонять данные из Http\Request\Talking\Phrase в SayJsonPhrase
Там же где будет создаваться SayJsonPhrase.
>Что мы будем делать, если завтра нам понадобится добавить еще десять таких же сущностей, как JsonPhrase и Subscribers?
Добавлять сущности. Если нужно добавить в модель новое поведение, а этого поведения в модели нет, то его нужно добавить. А если нужное поведение уже есть, то добавлять его не нужно.
>Что именно делает твой универсальный класс Say?
Если он универсальный, то все что нужно. На то он и универсальный.
>А как мы будем расширять его логику?
Если нужно расширять логику, то получается что он не универсальный.
>А что будем делать, когда Say научится хрюкать, пукать, писать в базу, эластик и отправлять эмейлы?
Сами классы ничему не учатся. Это ты их учишь что делать. Нахуя ты его всему этому научил?
>А как мне на это написать юнит-тест?
Тебе нужно по очереди протестировать каждый возможный сценарий использования класса.
>А как мне добавить в него логику, чтобы ничего не сломать?
Проверить, после добавления логики, что ничего не сломалось.
>А как мне по нему ориентироваться, если в нём уже более 5к строк кода
Я бы рекомендовал использовать IDE. В современных IDE навигация и поиск очень помогают ориентации.
Еще вопросы?
Прям чувствую что подбираемся к экзистенциальному. Как написать тест, как добавлять логику, как ничего не сломать. Не стесняйся. Спрашивай сразу: как быть охуенным, как жить заебись, смысл и суть вселенной. Все расскажу.
>Я бы рекомендовал использовать IDE
спасибо за предложение, только не очень понятно как ориентироваться по твоему шизофреническому проекту, к тому же не очень понятно чем поможет иде в твоей куче говна на 5к+ строк кода
итого какие выводы делаем из написанного
>Так же как из $_POST в Http\Request\Talking\Phrase
абстрагироваться от сущности реквеста - нинужна
>Там же где будет создаваться SayJsonPhrase
понял, DI тоже не нужно, делаем руками
>Добавлять сущности
я так понял если завтра в твоём неймспейсе ниже Phrase что-то появится, то я должен буду догадаться, что это ДТО, а в них вложен ещё один уровень сервисов ниже?
>Если он универсальный
>Если нужно расширять логику, то получается что он не универсальный.
если пользоваться твоим методом наименования то проект крутой, а если не пользоваться - то возможно существование проекта
>Нахуя ты его всему этому научил?
так это ты кучу говна научил и хрюкать и пукать вместо SayingInterface и дальше к частному в виде FurtingService и т.д.
>Тебе нужно по очереди протестировать каждый возможный сценарий использования класса
>Проверить, после добавления логики, что ничего не сломалось.
товарищ архитектор, а вы хотя бы раз писали код за деньги? а поддерживали кучу легаси говна?
>не очень понятно чем поможет иде в твоей куче говна на 5к+ строк кода
5к строк это маленький проект.
IDE помогает навигации. Например, в шторме при нажатии на ctrl+click на вызов метода перейдешь к его объявлению и наоборот. Ctrl+q вызовет окно с описанием сигнатуры. Также есть поиск всех мест использования класса/метода в проекте. И многое другое.
>будем?
>будем
>выводы: нинужна
Ну если нинужна, то не будем.
>DI тоже не нужно, делаем руками
А когда ты в di конфиге имплементацию интерфейсу прописываешь это уже руками или еще нет?
>если пользоваться твоим методом наименования то проект крутой
Называй вещи своими именами, а не своими именами не называй.
>SayingInterface
Супертип должен принимать в виде параметров также супертипы и сохранять свои сигнатуры для всей иерархии. Это подразумевает пресуппозицию что нужные элементы в эту иерархию в принципе вписываются. Если все твои нафантазированные "пуки" и "с десяток других" сводятся к одному супертипу и к одной и той же сигнатуре обрабатывающего их метода, то универсальный супертип SayingInterface возможен, а если не сводятся то нет.
>товарищ архитектор, а вы хотя бы раз писали код за деньги? а поддерживали кучу легаси говна?
Да.
И в принципе готов доказать это словом и делом. Без "нет спасибо" "голова болит" и "сейчас некогда". Давай хоть сейчас телегу/дискорд - дядя сеньор будет по губам тебе водить.
Если говорить о том же битрексе, там 1с, всякие платежи и т.п.
Зачем переубеждать? Пока зумеры, вкатунье и прочий скам так думает, нам же лучше
>IDE помогает навигации
Это я понимаю, и активно использую шорт-каты, например, два раза нажать клавишу Shift, а зачем ввести, что я хочу найти, из-за чего, собственно, и был затеян спор. В предложенной тобой архитектуре это сделать намного проблемнее, поскольку надо в голове держать большое количество деталей, и предложенные тобой неймспейсы только усложнят навигацию
>А когда ты в di конфиге имплементацию интерфейсу прописываешь это уже руками или еще нет?
так это другое, из твоего ответа складывается мнение, что планируешь руками прокидывать все, просто потому что можешь
>Называй вещи своими именами, а не своими именами не называй.
так я и хочу чтобы п.1, пытаюсь понять, как именно мы будем различать сущности в проекте!
>дядя сеньор
готов признать, что я, потенциально, слабее тебя технически, сомнения сложились из-за твоего чрезвычайного максимализма
>Это я понимаю, и активно использую шорт-каты, например, два раза нажать клавишу Shift
Поиск по всему слишком "шумная" команда. Нахуя тебе файлы искать если они так же как классы называются? Ctrl+N поиск класса, но тоже вопрос: откуда тебе знать какое имя искать вообще?
Alt+F7 - вот самый часто используемый поиск. Читаешь код, видишь че-то непонятное - ctrl+Q, если все еще непонятно alt+F7. Сразу видно код класса, где и как его создают, где и как его методы вызывают.
>В предложенной тобой архитектуре
Вот и довкатывались. Пчел, именование классов это не "архитектура". И даже раскладывание по папочкам это не "архитектура".
Вот двойной EventLoop собранный из "большого" асинхронного HTTP EventLoop'а и внутреннего "малого" синхронного Domain EventLoop'а - это уже похоже на архитектурный стиль. Только ни о чем подобном речи не было. Потому что это тема на несколько книг только чтобы термины прояснить, а не пуками на дваче перекидываться.
>как именно мы будем различать сущности в проекте!
Ты даже термин "сущность" неправильно используешь. Сущность - это то что по определению уникально и отличимо.
>из-за твоего чрезвычайного максимализма
"Ну вы кароч давайте называйте моделируемые вещи так как они в реальности называются, а то непонятно нихуя".
Ебать максималист. Бунтааарь. Парадигму ломает, эджи бой.
Все правильно. Присутствие ларавеля в твоем коде больше чем присутствие симфони. Симфони у себя в проекте вообще хуй найдешь. А вот ларавель это ОГРОМНЫЙ кусок говна в каждом твоем классе.
Поэтому да, LARAVEL > symfony
Ну все правильно. Спор же ларка вс симфони. В апи платформ больше магии чем в базовой симфони, но кода писать значительно меньше чем в ларке.
Хуйня, там слишком много ссылок на сторонние ресурсы, будешь постоянно меду пдф и браузером свитчится.
Если я разрешаю пользователю загружать .htaccess и сохраняю его на сервере только после переименования, то северу ничего не будет?
А если я сохраняю vzomsraki.sh или spizditparol.vba или neminer.exe и сохраняю их на сервере, то серверу ничего не будет?
Здесь забава - отвечать не по существу?
Вот мне нужно принимать файл от пользователя. Все страницы крутятся вокруг файла. Мне нужен ресурсный контроллер?
Я должен проверить файл, подготовить его и сохранить на жесткий диск. Вопроса твоего я не понял.
Показывать форму и принимать с неё данные нужно разными экшенами, да.
Ты про ларавель?
Ресурсный контроллер - это контроллер для круда. Можешь создать его и запретить методы, которые не нужны в роутах, а можешь сам создать нужные методы да и всё. Этот не принципиальный вопрос
Пользователь заполнил форму, выбрал файл и отправил тебе запрос.
Твой код начал этот запрос обрабатывать. Проанализировал ссылку, выбрал контроллер, метод контроллера. Дальше начинает работать твой код. Так вот файл, отправленный пользователем, он где? Что с ним вообще можно сделать? Его можно передать в какой-то другой контроллер?
У апача говна есть ещё всякие .htpasswd, если ты назовешь его так то повлияет (в целом названия каких файлов ищет апач вроде в его конфигах настраивается), если задашь имя, которое конфиг не ищет - не повлияет, но нахуя так делать с кем я блядь сижу? Уж лучше принимай содержимое файла вместо самого файла, валидируй и сохраняй, но и это тоже говно и сам апач говно. Скорее всего ты хуйню какую-то делаешь
>Что с ним вообще можно сделать?
Нужно сохранить о нем данные в БД и сохранить сам файл на жёсткий диск. Затем будут 2 страницы: на одной выводится информация об одном, конкретном файле, на второй странице краткая информация о последних 100 загруженных файлах. Ну и рядом с информацией о файле должна быть ссылка, чтобы пользователь мог этот файл скачать.
>Скорее всего ты хуйню какую-то делаешь
Да я только учусь.
>принимай содержимое файла вместо самого файла, валидируй и сохраняй
Какие конкретно действия за этими словами стоят? Я вкатун и ничего серьезного не писал, а тем более не работал с файлами в php, поэтому сильно не обессудь.
В любом случае, спасибо за ответ. И тому челу спасибо, который отвечал мне про контроллеры!
>Ты про ларавель?
Да
>Проанализировал ссылку, выбрал контроллер, метод контроллера
У меня главная проблема, что я не знаю какие контроллеры и/или экшены должны быть в контроллере.
У меня есть главная страница, которая должна показывать форму.
Получается это экшен index() в контроллере?
Принимать результаты формы должен другой экшен. Не знаю как по стандарту называют такой экшен. Ну вот уже 2 экшена. Один показывает форму, другой принимает. Потом нужно показывать отдельный файл. Это уже третий экшен? Потом нужно показывать список файлов. Это уже 4-ый экшен?
Как я понял, ресурсный контроллер соответствует CRUD аббревиатуре. У меня из глаголов "создать, изменить, посмотреть, удалить" можно только будет создать (сохранить файл) и посмотреть. Собственно это то, что немного отталкивает от мысли, что нужен ресурсный контроллер.
Не нужно серьезно воспринимать мою простыню. Я всего лишь вкатун, который ничего не понимает и еще не освоился с понятиями. Пощадите, двачеры.
>какие конкретно действия...
Ну ты принимаешь файл. Пусть клиент отправляет тебе просто текст этого файла и название, если надо, а ты создавай файл сам и заполняй его этим текстом. Как проверить файл на валидность, это уже отдельная песня
Каких-нибудь требований к тому как называть экшоны нет. Как понятней - так и называй. И да, на каждый запрос - ответ - один экшон
Еще один.
Ты не "показываешь форму". Не "вызываешь сервис".
Ты даешь пользователю выполнить конкретное действие в твоей системе. "Сохранить файл", "задать дату рождения", "пернуть".
"Форма" это просто рюшечка, красивая обертка. Нет никаких "результатов формы". Ты предоставляешь АДРЕС РЕСУРСА в виде ссылки. Чтобы этим ресурсом пользоваться никакая форма вообще не нужна. И вообще не важно каким образом пользователь этот адрес получил. Хоть по почте, хоть случайно набрал. Важно что если он отправил по этому адресу правильные данные - твой код эти данные обработал.
>результатов формы
Ну да, выразился мб нескладно. Под "результатами формы" имел ввиду данные, которые приходят с формы.
А толку? Доктрина, твиг и ещё куча сторонних библиотек - это отдельные ресурсы со своими доками.
Мне нужно принимать комментарии к файлам.
Правильно хранить комментарии в той же таблице, в которой будет храниться информация о файле или нужна отдельная таблица и потом создавать ключи, чтобы связать таблицы?
Ок.
>Неужели они там не догадались
Догадались. И написали Ларавел. Заодно гайд и доки по нему сделали, и вообще по-челоечески всё оформили. Ларавел - это Симфони здорового человека.
Проблемы лары в антипаттернах, что усложняет жизнь при ентерпрайз разработке. С другой стороны всё это можно обойти: отказаться от елоквента, отвязаться от фасадов сервис локаторов при тестировании, валидировать данные не через реквест объект в самом хттп контроллере и пр. Но во первых придётся поебаться, а во вторых это не ларавель вей, что делает его не ентерпрайз фреймворком
Но богатая экосистема вокруг лары хороша: джетстрим, ливеваре, реверб и пр
кому нам скуфидзе ты же тупой
Какие есть вменяемые альтернативные решения, чтобы было сравнимо по стоимости и скорости разработки (точнее совокупной стоимости готового продукта - полностью рабочего интернет-магазина, учитывающего законодательство РФ, с интеграцией с онлайн-кассами, онлайн-оплатой, системой учёта и всеми прочими приблудами)? Делать всё это на ларавеле выйдет сильно дороже и дольше?
Скажем так запуститься быстро и дёшево это правда на битриксе, если ему нужно прям то что поставляется из коробки. А вот дальнейшее сопровождение это будет пиздецкая боль, где за небольшую хуйню будут насчитывать 40+ часов. Плюс работа с со скидками тоже пиздц боль, там всё через жопу и если у него интеграция с 1С, то она будет постоянно косячить и 1сники с битриксоидами будут валить друг на друга.
Короче зависит от задачи, если небольшой ассортимент и работа с товарами вручную, то проще взять это говно, поскольку битриксоиды за еду натянут верстку с жиквери.
>Знакомый планирует делать интернет-магазин, и хочет для этого использовать БИТРИКС. Как отговорить человека?
А зачем тратить время на душевнобольных?
Дело тут даже не в битриксе. Нахуя в 2к24 интернет магазин? Какой долбоеб в него вообще полезет? Все кто хочет легко и быстро торговать, торгуют на маркетплейсах, в вк, в телеге в инсте.
Как траффик в эту никому нахуй не нужную парашу нагнать? Вот ты бы сам полез закупаться на хуй пойми каком сайте? Это сегодня что-то из разряда "вот создам щас свою соц сеть и стану миллиардером".
Два чая адеквату. Но расширю предъяву до: кому нахуй нужны сайты в принципе, в 2024?
Ну да, это так и работает: каждый заходящий в оффлайн магаз берет на выходе буклет и заходит на твой сайт. Потому что там такое... нихуя? Единственный способ кого-то из оффлайна заманить - это материальный интерес. Скидки/бонусы "только на сайте". Проблема в том что это РАСХОДЫ. Причем большие. А бляди без нового купончика на твой сайт один хуй не придут, а даже если и придут, то не придут в оффлайн магаз. Клиенты-то нужны НОВЫЕ.
Пиздец, курс маркетинга для даунят. В этом треде вообще никого не из под мамкиной сиськи нет? Ни в чем блядь не разбираются.
>Ни в чем блядь не разбираются.
Вижу ты осведомлен и у тебя есть бизнес, приносящий дохуя денег, а таксуешь битриксуешь для души.
Если кабанычи готовы за это платить деньги, то наверное это имеет смысл для них, но мамкин маркетолог, поедая макарошки "красная цена", лучше всех знает как им обустроить их бизнес.
Магическое мышление в деле. "Наверное", ну охуеть теперь.
То что в этом треде вообще пишется слово "битрикс" это результат маркетинга. За это заплачены большие бабки. А кто заплатит за маркетинг Drupal?
Удвоил.
Ну не битрикс, а чего-нибудь другое, я просто что-то близкое к твоему интеллекту написал. Суть в том что кабаныч несёт студии деньги за определённые услуги и ты либо оказываешь ему услугу, либо идёшь нахуй и он закажет у других. А как и для чего ему это надо он лучше знает., твоё дело написать код с нужным ему функционалом.
>Магическое мышление в деле. "Наверное", ну охуеть теперь.
"Наверное" в данном контексте, это для разгона нейронов в твоей голове чтобы ты сам себе задал этот вопрос.
Ты так и будешь на разный лад повторять "ну значит так надо", "не нашего ума дело"?
Если ты не видишь причинно-следственную связь - это не значит что её нет.
Вот это и называется тупостью.
Сайт -> маркетинг -> клиенты
CMS -> маркетинг -> клиенты
Студия -> маркетинг -> клиенты
И студия и владельцы битрикса за привлечение клиентов ПЛАТЯТ. И не просто льют траффик, а формируют спрос. Студия лечит про бренд и узнаваемость, битрикс лечит про интеграцию с 1С.
И эта схема умерла. Вся блядь, нет её в 2к24 году. Битрикс сейчас продает не CMS, а CRM. "Студии" в бодишопы и галеры перестраиваются. Никому нахуй не нужен очередной "интернет магазин". Никто не ходит в 2к24 по случайным сайтам. Бля, да обыватель сегодня вообще интернетом через браузер почти не пользуется. Все делается через приложения.
>Сайт -> маркетинг -> клиенты
>CMS -> маркетинг -> клиенты
>Студия -> маркетинг -> клиенты
Мы сейчас о каких услугах или товарах говорим? О каких объёмах продаж? О какой сфере? А клиенты b2b или b2c? Ожидает заказчик увеличение клиентов или упрощает существующие процессы для тех же b2b клиентов? Нужна ли клиенту интеграция с crm и 1С? И ещё сотни вопросов.
Ты пытаешься блеснуть какой-то частью интеллекта, но забываешь что каждый клиент разный и у каждого разные задачи. Ты чего-то как-то усреднил до примитивной модели рассказываешь про каких-то маркетологов из 1С, они подливают масла в огонь, но скорее это то что клиенты хотят именно битрикс и настаивают на нём не рассматривая другие варианты и это плохо.
>И эта схема умерла. Вся блядь, нет её в 2к24 году. Битрикс сейчас продает не CMS, а CRM. "Студии" в бодишопы и галеры перестраиваются. Никому нахуй не нужен очередной "интернет магазин". Никто не ходит в 2к24 по случайным сайтам. Бля, да обыватель сегодня вообще интернетом через браузер почти не пользуется. Все делается через приложения.
Уровень экспертизы прямо прёт, разумеется у тебя есть статистка, которая подтверждает свои слова. Возможно в сегменте b2c маркетплейсы отжали большую часть рынка, но помимо этого сегмента есть множество других задач
Ещё раз двачну адеквата. Даж в моей галере клиенты сайты почти не заказывают, в основном это парсеры, апи для приложух, боты какие-нибудь
>>095119
>Тогда лучше на каком-нибудь ларавеле все сделать, с битриксом наебутся в перспективе
Спасибо, попробую продавить этот вариант.
>Мы сейчас о каких услугах или товарах говорим?
Вейк ап джо байден. Ты с кем и о чем до этого разговаривал?
Речь шла про "интернет магазин" в 2024 году от рождества христова. И что эта концепция умерла, по тому что "виртуальной улицы", по которой покупатель должен в этот "интернет магазин" попадать, больше нет. Никто больше не набирает в гугле "Мои пердя купить скорожарку ДЕШЕВО". Твоя скорожарка либо висит на озоне, либо твоя телега рекламится в группе "любители скорожарок".
>>095857
>Ебать вы тут накидали охуительной аналитики, даже не зная, что за интернет-магазин
Это очередной маркетплейс хуйни, который вы хотите сбацать по прайслистам поставщиков и оптовиков.
Какая там у вас мулька? "Мы будем продавать в конкретной нише"? "Мы будем продавать эксклюзив. Нигде нет, у нас есть." Или может "Вот есть предприятия, мы знаем точно что им надо, вот будем им пихать ГАРАНТИРОВАННО"?
> Это очередной маркетплейс хуйни, который вы хотите сбацать по прайслистам поставщиков и оптовиков.
Нет.
>Вейк ап джо байден. Ты с кем и о чем до этого разговаривал?
Сам обосрался и теперь меня долбоебом пытаешься выставить лол
>>095884
>Речь шла про "интернет магазин" в 2024 году от рождества христова
Я тебе несколько постов пытаюсь объяснить что магазины разные и задачи у них разные, нет ты приводишь пример одну нишу b2c продажа всякой хуйни. Если ты только анальную самзку на озоне заказываешь да самотык скорожарку это не значит что все товары именно такие.
>"Мои пердя купить скорожарку ДЕШЕВО"
А если эта хуйня не присутствует на маркетплейсе, либо требует дополнительных услуг связанных с транспортировкой и установкой или нужно выставлять счет на юрлицо.
Например те же спилт системы, ты можешь купить на озоне, потом искать васяна который прикрутит и тебя пошлют нахуй с гарантией, потому что монтажник сделал что-то не так, либо найти те кто оказывает услугу в комплексе и будет нести гарантию за всё.
Те же электротовары, тебе нужно подбирать по характеристикам, на маркетплейсах фильтры не всегда сделаны как надо и не всегда есть то что нужно для сборки того шкафа. А подобрать под одну рамку розетки с выключателями целая история. В специализированных магазинах эти вопросы уже решены, плюс там почти всегда приложены всякие сертификаты и пдфки с харатеристиками, они бывают часто нужны тем кто выходит на тендеры.
По сантехнике отдельная история, попробуй набери все причиндалы для пвх труб и сами трубы на маркетплейсе, это даже в леруа проблематично сделать иной раз не говоря о том что они не в каждом регионе есть
Вот тебе 3 случая, плюс там может быть различные интеграции с crm и 1С, свои кабинеты для b2b партнеров чтобы с ними работать в автоматическом режиме и тд и тп.
Пчел. "Большой ассортимент", но на нормальных программистов денег нет. Тут не надо гением быть, все и так понятно.
>магазины разные и задачи у них разные
А я тебе говорю что покупателям в этих магазинах неоткуда взяться. Органического траффика туда нет. Точка. Если обывателя не устраивают фильтры на озоне он не идет в гугл и не перебирает две страницы выдачи в поисках удобных фильтров. Для него существует ТОЛЬКО ТО ЧТО ОН ВИДИТ.
Качество самого магазина никакой роли тут вообще не играет. Чтобы получить клиента тебе нужно соревноваться с маркетинговой машиной озона, сбера и прочей хуйни. Поэтому те кто поумнее учатся этой машиной пользоваться. Учатся предельно точно таргетировать свой товар, используя трайбализм соцсетей.
Для этого не нужен никакой "сайт". Он прибыль в этой схеме не приносит. Системы учета нужны, парсеры конкурентов нужны, управление продажами/маркетингом нужно. "Интернет магазин" не нужен.
"Душный" забыл написать.
Конгресс, немцы какие-то… Голова пухнет. Надо значит надо. Че тут думать.
>Конгресс, немцы какие-то… Голова пухнет. Надо значит надо. Че тут думать.
Вот вот, прям как Шариков, только тут вместо взять всё и поделить, взять всё и сравнить с маркетплейсами. Советы кабанчикам космических масштабов как им обустроить бизнес лол.
Покормил
Ну ты и Шерлок, как ты раскусил-то меня? Всё в точку.
regex
Или на завод
Ебать диван пукнул. Сейчас бы изучать инглиш, в эпоху переводчиков любой хуйни, даже текста на картинках
"Технический уровень" - это самый распространённый уровень владения английским среди айти-пидорунделей. Когда грамматика и говорение на нуле, но доку прочитать могут + про ШЕДУЛЕР, ПАФ и СЕСУРИТИ попиздеть могут три слова.
Точно, у скуфов это ещё называется инженерным английским (чего, блядь?). Вспомнил древний образец такого фрукта, он всерьёз думает, что умеет читать правильно.
ну тут ты не прав, у слова два произношения и оба валидные
То, которое приводит скуф с картинки выше, ни разу не правильное, но интеллектуальное большинство повторяет за ним. Так что надо переучивать их.
Ты заебал уже срать этой хуйней во всех тредах, шиз ебаный.
нашёл
Ты читать умеешь транскрипции? У слова router ДВА произношения - рутер и роутер, оба правильные. Если ты дальше с этим споришь, то ты еблан
Второе произношение на русский правильно передаётся раутер. Это ты транскрипцию не умеешь читать. Тоже учил инженерный английский?
Примеры слов, которые на русский правильно передавать с -оу-: load (highload — хайлоуд), roadmap (роудмэп). Только их как раз тут почему-то почти все читают неправильно. Придётся учить вас.
Если задаешь такой вопрос, то тебе это не надо.
А, твой доёб к раутер/роутер, ок, согл, тут ты прав.
Ибо в database.php у меня в поля 'mysql' вписано нечто, не относящееся к реальности, а все работает
Есть ли способ заставить переключаться между базами (например, отдельные базы для разных регионов), меняя поле name в этом самом DB::connection?
> на кой вот эта штука нужна
Чтобы выбрать к какой БД подключиться
> если используется все равно только .env файлик?
Хуявлик. В енв файлах ты переопределяешь то, что в конфиге
> Ибо в database.php у меня в поля 'mysql' вписано нечто, не относящееся к реальности, а все работает
А еще у тебя туда переменные из енв файлика вписаны, но твой мозг их проигнорил, потому что для него это сложно
> Есть ли способ заставить переключаться между базами (например, отдельные базы для разных регионов), меняя поле name в этом самом DB::connection?
Для этого и создано
То есть вот от этой секции в env можно безболезненно избавиться, чтобы она не перезаписывала конфиг?
>А еще у тебя туда переменные из енв файлика вписаны, но твой мозг их проигнорил, потому что для него это сложно
Переменные там как раз не вписаны, что меня и дизориентировало
>Для этого и создано
Спасибо за пояснение, попробую!
> То есть вот от этой секции в env можно безболезненно избавиться, чтобы она не перезаписывала конфиг?
Ага и хранить пароли там. Потом ещё на гитхаб выкати
> Переменные там как раз не вписаны, что меня и дизориентировало
Вписаны. Скрином пруфай, они там по дефолту стоят
Ну что ты сразу набрасываешься, это же клуб изучающих.
А где тогда нормально хранить пароли от баз если их несколько десятков? Как это устроить?
Ничосе он там объясняет. Спасибо большое
а, то есть надо насоздавать в енв строчек вида
DB_base01=pw123
DB_base02=pw234
и в конфиге database.php ларавеля писать для каждого подключения
'password' => env(DB_base01, ' ')
Такое?
Еп. Только переменные окружение принято писать большими буковами. И после того, как напишешь это скорее всего нужно будет кеш конфига скинуть
Каждому элементу нужно задать id.
id внутри whileeach меняется.
Так вот, эта хуйня (whileeach) просто берет значение id (то ли на последней, то ли на последней итерации) и вставляет, блять, всем.
Как убрать это ебучее поведение? Никакие, блять, передача по ссылке не помогли. Как заставить это говно изменять переменную и класть в объект именно то, чему равна переменная на итерации?
Пошел нахуй, пидор.
Под производительностью подразумевается всё: и скорость работы, и количество потребляемой памяти.
Охуенно вы перекатили, конечно, ничего не скажешь
ЛГБТ нынче запрещено, поэтому гей-клуб закрыли
Как у вас, блядь, такие вопросы вобще возникают?
Или большинство людей сумасшедшие или адекваты перестали совсем в интернет отписываться
>что-то из этого шустрее
Шустрее в чем? Чтобы создать stdClass тебе изначально нужен массив, гений.
>скорость работы
Какую "работу" выполняет "массив"?
>количество потребляемой памяти
"Массив" - это данные, а объект - те же данные + метаданные. Как сам думаешь, шерлок?
>>109603
>Или большинство людей сумасшедшие или адекваты перестали совсем в интернет отписываться
Весна. Тут и так не самая умная часть программача сидит, а весной резьбу и у людей покрепче рвет.
Пожалуйста. Кроме array_filter() обрати также внимание на функции array_map(), array_reduce(), array_walk(), array_walk_recursive(). Многие манипуляции над массивами можно свести к применению этих функций в том или ином порядке.
>>109900
>>110783
>>111284
Способов куча. Какой из них лучше подходит, зависит от того что в действительности нужно сделать https://3v4l.org/p3I5k Из твоего примера непонятно что конкретно тебе нужно.
В целом числовые ключи вещь ненадежная, в пхп куча функций которые их постоянно переписывают, за этим хуй уследишь. Поэтому нужно сразу мыслить категориями: "первые четыре ЭЛЕМЕНТА", "последние четыре ЭЛЕМЕНТА", а не "где значение КЛЮЧА наверное вот такое". Либо у тебя ассоциативный массив, в котором ключи это не рандомно сгенерированные циферки.
Не шарю в них. Да и думал, что проект будет маленький, чисто добавить и удалить задачу, как ту ду лист, а потом то одно захотелось прикрутить, то другое, в итоге стало трудно разобрать где что лежит.
>на чистом php, без ООП
А это как? Дай гитхаб.
Я такой хуйни литературно за десять лет ни разу не видел. У тебя типа файлы с десятками функций или че? А как ты эти файлы подгружаешь? Типа инклудишь каждый раз как функцию из файла используешь или все сразу как-то? А с данными че? Ты типа гоняешь просто массивы по этим функциям?
Может как в пхп 3 писали: без без единой точки входа. Пхп файл == страница, содержит хтмл, логику на пхп и сиквель запросы к субд.
чем не микросервисная архитектура... только каждый микосервис рендерит хтмл
Я такую хуйню не застал. Я когда учился уже пятая версия вышла. Я сразу на классах писал.
А как делать то что "не рендерит"? Типа роутинг тот же? Роутер получается должен нужный файл инклудить или как?
Главное говолангерам не показывать, а то тоже начнут так писать.
Ты будешь сильно удивлен, но в рест апи именно хтмл как формат по умолчанию упоминается.
То есть в каждом файле ВЕСЬ код ВСЕГО? Это даже на процедурный подход не похоже. Это какой-то новый уровень говнокода.
Почему всего? В файле post.php редактирование и просмотр поста, в файле list.php список постов и т. д. Общую логику тебе ничто не мешает вынести в отдельные либы.
Так я об этом и спрашивал. Как это устроено? Списки функций? Как с неймингом быть? Что эти функции принимают? Как хранятся переменные и конфиги?
Я не знаю как тот анон сделал. В микросервисах тоже зачастую один и тот же код дублируют от сервиса к сервису и еще для этого монорепы создают. Только в современных микросервисах фронт контроллер все же есть.
Бля, мне не нужна лекция по микросервисам, меня от этого говна уже блевать тянет.
Я хотел узнать как работает то чего я никогда не видел.
Этот как рабочее авто из пивных банок, или вертолет из жигулей. Настолько всрато, что вызывает восхищение и удивление: как оно вообще работает? Оно ведь по законам физики не должно.
С оформлением.
>>111504
>А это как? Дай гитхаб.
Всм как? Просто код без классов и методов. Гитхаб не дам, там деанон.
> У тебя типа файлы с десятками функций или че?
Да. А должен быть отдельный файл под каждую функцию?
>А как ты эти файлы подгружаешь?
>Типа инклудишь каждый раз как функцию из файла используешь или все сразу как-то?
Через include каждый файл в свою страницу или часть страницы.
>А с данными че? Ты типа гоняешь просто массивы по этим функциям?
Да.
>>111553
Я как будто читаю школьника, который в первый раз увидел дисковый телефон и не может понять, где на нем тачскрин.
>>111557
Так легко, что ты даже не написал как.
Давай выкидывай нахуй из своего голанга структуры, модули и систему типов. Тогда и пизди. Легко ему, вообще охуеть.
Модули и структуры это не ооп это модульная парадигма https://ru.wikipedia.org/wiki/Модульное_программирование
И хули? В голанге ты это используешь вместо ооп, а в пхп этого всего нет, долбоебина. Ты в каком треде пишешь, чучело?
Ну так если тебе действительно нужна помощь, то создавай новый акк, копируй код и кидай сюда с дискордом или телегой. Или ты думал тебе помощь по почерку оказывать будут? Без всего этого тебе так и отпишут "нормально делай - нормально будет".
А за ооп можешь Бертрана Мейера почитать
https://en.wikipedia.org/wiki/Object-Oriented_Software_Construction
https://vk.com/doc64104152_423568378?hash=xitHQivyObzyqbzPbHtgU7yYCrBAAfP4bK2x4EVObZs
семьсот страниц чистого кайфа - врачи вместо снотворного прописывают.
Что это, ебанушка? Ты стекломоя объебался что ли, не можешь понять кому отвечаешь.
Бес попутал. Я за здоровьем слежу - как настоящий пхп программист пью только бояру. Не в глазах беда, диавол за руку дернул.
Должна быть абстрактная фабрика синглтонов с фабричными методами возвращающими репозитории для дтошек
Поперхнулся малиновым пориджем
Я просто хочу разобраться, а нахуя в самом лучшем языке постоянно писать пикрелейтед залупу?
>Объективно, php - лучший ЯП на текущий момент
Это ты смешно пошутил, назвав расширение для HTML лучшим языком программирования.
Сейчас бы пиздеть на фичу, которая делает пых, самым легкочитаемым яп
Сейчас бы в 2024 веке не знать хтмл тегов
Не. На пыхе написано 80% интернета и какая-то часть это домашние странички из нулевых. Что поделать, лучше языка пока не придумали, приходится на топ 1 писать, не лапшу же на го говнокодить
Я просто хочу разобраться, а сколько DNS серверов написано на пыхе? Да и вообще, работу каких сегментов сети интернет обеспечивает пхп? А то тут пишут что это пхп - просто шаблончики с хтмл страничками, ето так?
Границы пхп нигде не заканчиваются...
Ты тупой? Язык и есть шаблонизатор, все пхп файлы и есть файлы шаблона. В старину и в битриксе обращались напрямую к файлу .php где был шаблон страницы. Это сейчас на нём пытаются писать на фреймворках полноценные приложения с жизненным циклом в один реквест di и прочими закосами под спринг
Это говно, почему вообще до такого додумались? Как так получилось что конкатенация через точку из-за чего стало невозможным применить её в другом месте и пошли костыли со стрелками
А конкатинация строк точкой из перла https://www.perl.com/article/8/2013/3/31/Perl-string-functions-concatenate-substring-and-split/
Ну как бы так. Когда Расмус Ледорф делал пыху то
1) Крутыми языками считались сишка и перл, а питухон и руби были магргинальными язычками, которые только только появились. Ты бы не стал сейчас писать коммерческий софт на nim или zig. Вот и Расмус Ледорф за основу взял языки на которых он писал в то время.
2) Пыха изначально не планировалась как язык, подобно питону. Делали быстрый шаблонизатор, с килерфичей - визуальной отладкой ошибок прямо на странице, а не логированием в файлы.
Так через стрелку лучше же. Более наглядно и код лучше читается. Одно из удачнейших решений, наряду с долларом
Пхп - для веб приложений практически любой сложности. В тех, редких случаях, когда он с чемто справляется похуже, используют подпорки на го
Ну дык. Было - сплыло.
Шаблоны спиздили себе жс макаки. Апач пиздой накрылся, мускуль об стену уебали. Теперь пхп ходит за джавой и подбирает кал пятилетней давности. При том сама джава считается устаревшим говном мамонта. Получается пхп говно говна?
>>113774
Знак евро объективно лучше доллара € > $
Не пытаются, а успешно пишут. В топе популярных веб фреймворков, пхпшные уверенно лидируют
Ты хотел сказать "писали"? Пикрелейтед активность языка на гитхабе. Пхп ныряет прямо в могилу. Нихуя нового на нем написано не будет уже.
>Пхп - для веб приложений практически любой сложности. В тех, редких случаях, когда он с чемто справляется похуже
А с чем пхп справляется лучше джавы или шарпа? У пхп макак так-то всегда только одно преимущество было - ДЕШЕВИЗНА.
Скорость разработки продукта того же качества, например. Более низкий порог входа
>Более низкий порог входа
>того же качества
Пчел. Нам-то не гони.
Мы тута в пхп треде сидим, говно нюхаем. То валидаторы на трейтах с магией, то бирикс скуфы на массивах, то целые сайты на иклудах.
Также как и на пыхе. А если я сервак ребутну после того как запущу то, что на пыхе? Ирл почти любой сервак запускается командой: docker compose up -d
Как это относится к тому, что ты с гитхаба притащил? Давай тогда стату по юзанию бана с тайпскриптом vs пыха. Покекаем всем тредом
>успешно пишут
>Вот статистика что не пишут
>врети неправильна
>Все правильно
>А зато...
Обтекай. Нового аналога симфони или ларавеля на пхп не будет никогда.
Можешь переходить к стадии "ИНУЖНО".
Того же качества определённый процент и определённый процент говна. Дурачка включить решил?
Пчел. Это интерактивный график. Ты его как не крути, а пхп в жопе. Никто на нем писать либы не хочет. https://tjpalmer.github.io/languish/
>>113825
Это ты решил включить дурачка. Порог входа ниже, а качество кода такое же. Динамическая типизация качество повышает и знаки доллара, не иначе.
Двачую. Я когда шапку делал в прошлых тредах немного приуныл пока искал подходящий логотип с слоном.
Ну круто, формы мы вам перезвоним на ларавеле должен же кто-то писать
Почему не отправлять данные из одной формы на один адрес? Визуально разделить форму fieldset'ами, а в контроллере данные из реквества отправлять в соответствующие сервисы?
>данные из реквества отправлять в соответствующие сервисы
У меня такая ситуация:
Пользователь выбирает файл для загрузки на сервер и по желанию может написать комментарий к файлу.
Сейчас и файл, и комментарий летят на один адрес и обрабатываются одним экшеном, комментарий сохраняется в ту же таблицу, в которой хранятся метаданные файла.
Но в будущем я планирую добавить древовидные комментарии.
И вот тут, наверное, нужен другой контроллер, который будет этим заниматься. Какой-нибудь, например, CommentController. Который будет добавлять новые комментарии и показывать. И раз уж у меня будет отдельный контроллер для комментов, то зачем оставлять добавление комментария в том контроллере, который принимает файлы? Вот я и думаю как сделать так, чтобы файлы сохранял на диск и в БД один контроллер, а комментарий к файлу другой контроллер. Но при этом у формы был бы один адрес, по которому она показывалась, одна кнопка submit. Чтобы пользователь если не ввел ничего в поле комментария, то все равно бы отправлялись обе формы и обрабатывались разными контроллерами.
Надеюсь ты меня понял.
Мне просто не нравится, что область, которую условно можно назвать "комментарии" будет в разных местах в коде - в контроллере FileController (сохраняет содержимое файла и добавляет метаданные файла в БД) и в контроллере CommentController.
Раз уж работаю с комментариями, то логично работать с ними в одном месте. И даже если это комментарий, который добавляется при загрузке файла, то, наверное стоит поместить его не в FileController, а в CommentController.
Я пока еще не начал реализовывать у себя древовидные комментарии. Но сейчас представляю так:
пользователь загружает файл, добавляет комментарий (если хочет).
Комментарий к файлу, который добавил пользователь при его загрузке - это начало обсуждения. Любой желающий может ответить на этот комментарий и начнется цепочку комментариев.
>>114697
>>114699
>>114701
Пчел, ты понимаешь разницу между:
Создать файл и прокомментировать содержимое.
И
Ответить на комментарий?
У тебя будет форма ответа на еще не существующий комментарий при создании файла? У тебя отвечающие на комментарии будут создавать свои файлы?
Пиздец, ребенок, который никогда не видел RGHost пытается на ощупь его воссоздать.
У тебя отдельно есть сущность файла с атрибутами: название; описание(комментарий); путь, по которому он хранится; владелец, возможно что-то еще.
И отдельно сущность комментария с атрибутами: текст, владелец, родительский комментарий.
Поэтому у тебя отдельно контроллер для файлов и отдельно для комментариев.
У меня есть еще один смутный момент.
FileController отдает страницу, на которой отображается информация о конкретном файле.
Но на этой же страницы, наверное, внизу должна быть форма для комментариев и сами комментарии. А раз у меня будет отдельный контроллер под комментарии, то как я буду это реализовать...Т.е. экшен FileController достает из БД метаданные файла, подключает Вид с переданными данными, а как теперь туда присобачить контроллер для комментариев, чтобы он вытаскивал комментарии из БД?
Вообще нихуя не понимаю какими критериями я должен руководствоваться при создании контроллеров. Я создал один контроллер - FileController, потому что изначально мое приложение только с файлами и работало в основном.
И я не знаю как контроллеры могут взаимодействовать друг с другом...
У тебя файл связан с комментариями отношением один ко многим. Соответственно orm позволяет тебе получить коллекцию связанных с файлом комментариев, обратившись к соответсвующему атрибуту файла. Изучай документацию по отношениям. И вообще изучай документацию.
https://laravel.com/docs/11.x/eloquent-relationships
https://symfony.com/doc/7.1/doctrine/associations.html
Я знаю, что я глупенький, поэтому не сильно обессудь.
Ты хочешь сказать, что мне комментарии к файлу получать в FileController?
Если да, то чем будет заниматься CommentController? Только добавлять новые в БД (принимая данные с формы отправки комментария)?
Пока что изменение и удаления комментария не планируется.
Хочу сказать, что ты можешь получить коллекцию связанных с файлом комментариев как очередной атрибут файла: $file->name, $file->description, $file->comments, $file->...
Контроллеры нужны для того, чтобы собственно держать управление взаимодействием разных частей приложения в одном месте. В идеале сами по себе они вообще ничего не делают.
Ну ладно, в любом случае спасибо тебе, анон, за человеческий ответ.
>/home/bitrix/www/local/templates/webu/components/bitrix/news/practicum/bitrix/news.detail/.default/res
Бля, мне хуево.
Знай, малолетний дебил, что самый крутой язык это язык твоей мамки, это тебе любой из треда подтвердит.
Дед, уроки сделал?
Ну и дебс. Теперь будешь все руками делать, когда лариане и симфонисты готовые решения накатывают и скафолдингом пукают.
Да мне похуй. Я хочу работать с современными йобами типа grpc, микросервисов и нормально тестировать приложение без ларавельских сервис локаторов, фасадов и актив рекордов. А на ларе я уже без недели 8 лет хуярю. Нужно развиваца
за 8 лет пыхи надо развиваться в го или жабу, учить сети, кубер, глубины субд, а не эту хуиту.
Го может и стоит глянуть, как подпорку для пыха. Может какнить видосов на ютубе накачу, хоть ознакомиться что там к чему. Джавы рот ебал. По спиралю взялся доку читать, покамест доставляет, глянем, что дальше будет. Хуйово, что её никто не знает, даж в гугле хуй че нагуглить, а про итт тред и говорить смысла нет
Ты не понял. Ты микропенисы с куберами и жрпс в пыхе не изучишь. Надо сначало идти туда где эти проблемы правильно решаются, а потом уже это в пыху тащить. Это как бы Тейлор Отвель никогда рельсы не щупал и не писал на них, но ларку с них стал копировать. Ты просто не поймешь проблем связанных с мипросервисми или IaC, если будешь все время вокруг пыхи крутится. Потому что большинсто пыхарей скажет - А НАМ НИНАДА, У НАС И ТАК ВСЕ РАБОТАИТ и будут по-своему правы. Вот к примеру API кубера. Понадобится тебе в кубере ингрес кофигурировать динамически. Будешь качать говнолибу от Васяна на пыхе или возьмешь широко используемые библиотеки на питоне или голанге? Или еще лучше пример, где ты возьмешь в пыхе хорошие примеры того как накатывать миграции в кубере, как это правильно делается без костылей?
>Го может и стоит глянуть, как подпорку для пыха. Может какнить видосов на ютубе накачу, хоть ознакомиться что там к чему. Джавы рот ебал.
Это так забавно выглядит, ведь ГО это буквально джава на минималках. Это как из джавы выкинуть даже те немногие удобства что там есть и сидеть хуярить классах с публичными полями, статическими функциями, без обработки исключений (привет if err != nil), и вручную ресайзить массивы копированием (привет append). Такого говнокода на джаве даже в кошмарах индусов нет, а люди прямо ГОРДЯТСЯ что так пишут. А почему?
Потому что не джава! омномномном
Голенг свободный язык развиваемый сообществом как и пыха, хоть и спонсируется корпорацией, а жава разрабатывается внутри корпорации и как ее можно использовать решает корпорация. Нету двух версий голенга, коммерческой и бесплатной. Некоторым людям срамно стакой технологией работать.
мимо
>а жава разрабатывается внутри корпорации и как ее можно использовать решает ко
нет, джава развивается сообществом через JCP
>err != nil
Это старая холиварная тема, лол. Мне самому это не нравится, но сторонники подобных проверок считают ексепшены антипатерном. И не без основательно, ведь тебе приходится прикидывать эту хуйню из слоя в слой и пр
где работу искать сука, три вакансии нахуй на линкедоне
походу только в рф на нём и пишут
1280x720, 0:05
ХЭЙ! Петухи-свидетели неумирания. Объясните человеку, что его вордпресс кал до смерти копейкой обеспечит.
Я очень смутно представляю что такое протокол. Ну, совокупность правил...В моем представлении. Пока знакомлюсь с ними и они ощущаются так, что я не понимаю "а как их трогать-то?".
Как-то вообще с протоколами можно что-то делать?
Что именно?
В php это вообще возможно?
И вообще зачем это нужно?
Я ничего серьезного не писал, я вообще не понимаю зачем мне работать с протоколами, но нужно же учиться новому.
Расскажите манячке-ньюфане как работать с дыраколами в php.
Я очень смутно представляю что такое дырокол. Ну, совокупность железяк...В моем представлении. Пока знакомлюсь с ними и они ощущаются так, что я не понимаю "а как их трогать-то?".
Как-то вообще с дыроколами можно что-то делать?
Что именно?
В php это вообще возможно?
И вообще зачем это нужно?
Я ничего серьезного не писал, я вообще не понимаю зачем мне работать с дыроколами, но нужно же учиться новому.
А нормальный ответ будет?
У тебя либо желчь к вкатунам, либо сам ничего не знаешь, а писать чешутся руки.
Спасибо большое, анон.
630x360, 0:01
Но есть жи графики. Есть жи статистика что 80% говна в интернете написано на пхп! Язык жи развивается, вон атрибуты как в джаве сделали почти.
Ну и отлично, главное чтобы на пожрать и хату хватало, на остальное как то похуй. На заводе не все работать могут, вот меня например трясёт от людей а таблетки я пить не хочу
Все так. Что ты забыл в треде если токарный станок тебя давно ждет?
Это битриксрвый пхп макарий, который работает за еду. Посмотрел пару инфоциганских видосов за современные тренды и теперь бегает по всей доске со своим го
Уже бомжевал, теоретик?
- Монолитная архитектура;
- Микросервисная архитектура;
- Сервис-ориентированная архитектура (SOA);
- Бессерверная архитектура (Serverless-архитектура);
- Service Mesh;
- Twelve-Factor Apps («12-факторное приложение»);
- Гексагональная архитектура;
- Чистая архитектура.
На что из этого списка стоит обратить особое внимание? Не хочу разбираться в том, что в профессиональном мире считается отжившем говном, которое используется полтора калеками
Начни с того что никакой "гексагональной архитектуры" не существует. Чел тупо выдумал хуйню чтобы красивые слайды нарисовать.
А остальное просто совсем разные вещи. Это как написать: "пацаны вот есть архитектура стула, архитектра залупы и архитектура танца, что из этого устарело?"
Зачем джуну углубленно знать архитектуру? Его в самом деле посадят что-нибудь проектировать, а не перекладывать джейсоны?
Ну представление-то иметь надо.
С чего-то же придется расти?
Ну и наверное плюсик к кандидату, что он такой умный-заумный, знает такие умные слова как микросервисная архитектура...
>из этого списка:
Все эти слова о том как делить приложение на большие логические блоки, но они ничего не говорят о том как писать код. У тебя может все быть красиво разложено по логическим модулям и файликам, но внутри быть полная неразбериха.
>в профессиональном мире
В современной разработке профессионалов очень мало. Мейнстрим почти полностью состоит из говна и движется все глубже в говно. Впрочем, так происходит не только в разработке.
Мне написали на следующий день: "Здравствуйте, ваш отклик нас заинтересовал" (я им описал какие проекты делал), вот вам тестовое задание".
Я сделал, скинул на следующий день. Сначала этот пидорас не читал сообщения с этим тестовым, а потом прочитал и начал молчать.
Что в головах у таких людей?
Причем самое смешное эта вакансия висит где-то дней 20. И что, никого до сих пор не могут найти?
>о каких типах архитектуры стоит знать джуну из этого списка
Нет такой должности как "джун", это образное выражение, не буквально.
>- Монолитная архитектура;
В пхп мире самая распространенная.
>- Микросервисная архитектура;
Имеет смысл использовать в больших компаниях.
>- Сервис-ориентированная архитектура (SOA);
Ну это тоже самое, что и микросервисы. Микросервисы эволюционировали из SOA.
>- Бессерверная архитектура (Serverless-архитектура);
Считается самой продвинутой на данный момент.
>- Service Mesh;
Ну это вариация микросервисов. Где коммуникация осуществляется через прокси.
>- Twelve-Factor Apps («12-факторное приложение»);
Это просто чьё-то оценочное мнение, а не архитектура.
>- Гексагональная архитектура;
Неведомая ёбаная хуйня. Первый раз слышу.
>- Чистая архитектура.
Это вообще название книги.
>На что из этого списка стоит обратить особое внимание?
На монолиты, микросервисы и serverless.
>о каких типах архитектуры стоит знать джуну из этого списка
Нет такой должности как "джун", это образное выражение, не буквально.
>- Монолитная архитектура;
В пхп мире самая распространенная.
>- Микросервисная архитектура;
Имеет смысл использовать в больших компаниях.
>- Сервис-ориентированная архитектура (SOA);
Ну это тоже самое, что и микросервисы. Микросервисы эволюционировали из SOA.
>- Бессерверная архитектура (Serverless-архитектура);
Считается самой продвинутой на данный момент.
>- Service Mesh;
Ну это вариация микросервисов. Где коммуникация осуществляется через прокси.
>- Twelve-Factor Apps («12-факторное приложение»);
Это просто чьё-то оценочное мнение, а не архитектура.
>- Гексагональная архитектура;
Неведомая ёбаная хуйня. Первый раз слышу.
>- Чистая архитектура.
Это вообще название книги.
>На что из этого списка стоит обратить особое внимание?
На монолиты, микросервисы и serverless.
>Ну представление-то иметь надо.
Тоже верно.
>С чего-то же придется расти?
Расти придётся с говноцмс как правило. Вордпресс, битрикс. Либо интернет-магазины - cs cart, woocommerce, magento и проч.
>Ну и наверное плюсик к кандидату, что он такой умный-заумный, знает такие умные слова как микросервисная архитектура...
Да нет, всем похуй. Мир пхп - это почти всегда один монолит. Вся фишка пхп в том что ты можешь скачать цмс, за 3 копейки накатить готовых плагинов, купить двух васянов за две палки колбасы и у тебя опа! Интернет-магазин готов. Фреймворки всякие типа symfony, laravel есть, но это уже не 2 копейки. Те кто хочет всякие микросервисов, изначально пхп не выберут, а возьмут какой-нибудь golang или java или на крайний случай c#. Потому что на них разрабатывать приятнее. Ну и скорость у них лучше.
1) На чтение 2 меньше времени тратится, а значит она лучше. Код в функии выносят не только для переиспользования, но и для самодокументорованности кода
2) Коммерческий код это не шарады. Всем поебать какой ты умный. Людям хочется меньше тратить время на чтение твоего кода.
Вторую как раз я и написал. Спасибо, так и скажу.
У тебя прослеживается стереотип, что монолит это плохо, а микросервисы хорошо. Но мода на микросервисы закончилась пару лет назад.
Может он тупо занят срочной задачей? Скорее всего они поручили проверять задания сеньору, и ему надо как-то успевать и работу делать и десятки тестовых проверять.
>У тебя прослеживается стереотип, что монолит это плохо, а микросервисы хорошо
Я так не говорил это ты за меня додумал. Моя позиция что каждая архитектура уместна в определенных ситуациях и не уместна в других.
На заводе надо таскать тяжелые бованки, которые не каждый тут поднимет, много грязи, заусенцев, грубой работы, стружки, искры, масло летит во все стороны, переработки, грохот, визг. А для программирования сил много не надо, лишь бы кнопки нажимать мог.
Протокол это правила обмена информацией: в каком формате она передается, в каком порядке. Для примера, представь, к примеру, что у тебя есть термометр, который засунут в какой-нибудь бак и просто должен передавать температуру раз в минуту.
Данные практически всегда и везде передаются как набор байт (например, данные в Интернете передаются как байты, данные на диске и в памяти компьютера хранятся как байты). Байт это (если по-простому) целое число от 0 до 255. Соответственно, все, что может термометр передать это один или несколько байт. Вот протокол как раз и определяет, как преобразовать температуру в байты и обратно.
Если у тебя температура всегда целая, и в диапазоне от 20 до 80 градусов, то ты можешь просто передать ее в виде одного байта с значением температуры. А если она может быть отрицательной, например от -20 до +80, то ты можешь перед передачей прибавить к ней 20, а при получении вычесть 20. То есть, -15 градусов передается как (-15 + 20) = байт с кодом 5. Это называется "бинарный протокол": данные напрямую преобразуются в значения байт.
Есть еще вариант использовать текстовый протокол. В этом случае мы сначала преобразуем температуру в текст, а затем передаем коды букв в получившемся тексте. Например, пусть температура -10 градусов. Мы передаем коды символов -, 1, 0, "конец строки". Для кодирования символов используем кодировку ASCII:
Текст - 1 0 конец
Коды 45 49 48 10
То есть, -10 кодируется как 45, 49, 48, 10. Текстовый протокол требует больше байт, но зато его легче читать человеку и отлаживать.
> Как-то вообще с протоколами можно что-то делать?
Обычно с помощью протокола ты кодируешь или декодируешь команды и данные. Обычно ты делаешь это не руками, а используешь готовую библиотеку. Но если готовой библиотеки нет, то ты ее сначала должен написать.
В примере с термометром, ты бы написал две функции: закодировать температуру в байты и раскодировать из байт. Это была бы библиотека для работы с протоколом термометра.
> И вообще зачем это нужно?
Чтобы обмениваться данными с другими устройствами, другими компьютерами. Представь завод, например, где много датчиков, и они обмениваются данными с центральным компьютером. Или представь мобильное приложение, которое обменивается данными с сервером: показывает пользователю картинки с сервера, а когда пользователь лайкает их, оно посылает данные на сервер. В обоих случаях нужен протокол для передачи данных.
Протокол это правила обмена информацией: в каком формате она передается, в каком порядке. Для примера, представь, к примеру, что у тебя есть термометр, который засунут в какой-нибудь бак и просто должен передавать температуру раз в минуту.
Данные практически всегда и везде передаются как набор байт (например, данные в Интернете передаются как байты, данные на диске и в памяти компьютера хранятся как байты). Байт это (если по-простому) целое число от 0 до 255. Соответственно, все, что может термометр передать это один или несколько байт. Вот протокол как раз и определяет, как преобразовать температуру в байты и обратно.
Если у тебя температура всегда целая, и в диапазоне от 20 до 80 градусов, то ты можешь просто передать ее в виде одного байта с значением температуры. А если она может быть отрицательной, например от -20 до +80, то ты можешь перед передачей прибавить к ней 20, а при получении вычесть 20. То есть, -15 градусов передается как (-15 + 20) = байт с кодом 5. Это называется "бинарный протокол": данные напрямую преобразуются в значения байт.
Есть еще вариант использовать текстовый протокол. В этом случае мы сначала преобразуем температуру в текст, а затем передаем коды букв в получившемся тексте. Например, пусть температура -10 градусов. Мы передаем коды символов -, 1, 0, "конец строки". Для кодирования символов используем кодировку ASCII:
Текст - 1 0 конец
Коды 45 49 48 10
То есть, -10 кодируется как 45, 49, 48, 10. Текстовый протокол требует больше байт, но зато его легче читать человеку и отлаживать.
> Как-то вообще с протоколами можно что-то делать?
Обычно с помощью протокола ты кодируешь или декодируешь команды и данные. Обычно ты делаешь это не руками, а используешь готовую библиотеку. Но если готовой библиотеки нет, то ты ее сначала должен написать.
В примере с термометром, ты бы написал две функции: закодировать температуру в байты и раскодировать из байт. Это была бы библиотека для работы с протоколом термометра.
> И вообще зачем это нужно?
Чтобы обмениваться данными с другими устройствами, другими компьютерами. Представь завод, например, где много датчиков, и они обмениваются данными с центральным компьютером. Или представь мобильное приложение, которое обменивается данными с сервером: показывает пользователю картинки с сервера, а когда пользователь лайкает их, оно посылает данные на сервер. В обоих случаях нужен протокол для передачи данных.
Нет, так не делают. Логичнее посылать один запрос к серверу, в котором будет и файл, и при желании, комментарий. И обрабатывает этот запрос один контроллер. А когда другой пользователь отвечает на комментарий, то вызывается другой контроллер.
В чем проблема с двумя контроллерами? Ну хотя бы в том, что чтобы добавить к файлу комментарий, тебе сначала надо "создать" этот файл на сервере.
Если тебя беспокоит дублирование кода (это хорошо если так), то просто сделай отдельно функцию сохранения файла и отдельно функцию добавления комментария и вызывай их из контроллера.
Вынеси работу с комментариями в отдельный класс или набор функций и вызывай их из контроллеров.
Тогда почему "те, кто хочет микросервисов, выберут golang или java"? Не вижу связи вообще. На PHP тоже возможно переусложнять код и разбазаривать деньги работодателя на микросервисы.
А что касается "приятнее", то приятнее писать на Питоне. Го это не "приятнее", это "терпеть и мучаться чтобы выжать побольше производительности", а java/c# это километры бойлерплейта.
>Тогда почему "те, кто хочет микросервисов, выберут golang или java"?
Потому что вся фишка пхп - большое количество готовых плагинов, cms. Ни у кого нет такого количества маркетплейсов, где можно за 3 копейки купить готовый скрипт. Но когда не нужен готовый скрипт, ты пишешь микросервисы с нуля - какой смысл выбирать пхп? Он слишком дохуя прощает разной хуйни. Типа прощения необъявленной переменной или конверсия в другой тип. Асинхронный код писать сложно. Язык уже старичок. Можно использовать для чего угодно, но какой смысл?
Бля, какой же кал.
А че ты int написал? Писал бы уже mixed тогда. Че только на null проверять, проверял бы еще и на Int. А еще надо на неотрицательные значения проверить. Иксы блядь какие-то. Короче хуйня полная.
Вот так это делается в реальности https://3v4l.org/HIUHb#v8.1.12
А вот так это принято делать в ооп языках https://3v4l.org/VvrQN#v8.1.12
Озаботиться что у него правильные данные это задача того, кто код вызывает. А ооп и система типов позволяют в принципе неправильные состояния предотвратить.
Причем этот говнокод это чисто пхпшное явление. Вот по этому к пхп макакам как к говну относятся.
Вот пример того как это будет выглядеть на функциональном F# https://onecompiler.com/fsharp/429yg5uum Все понятно, четко. Мы еще на уровне системы типов задали корректное поведение. Никакой ебанутой угадайки, пятилетке этот код покажи и он все поймет.
Пиздец ты ебанутый
Подскажите, можно ли написать одно универсальное правило для автозагрузки в composer.json?
Чтобы не добавлять каждый раз "Codemu\\demo{number}\\": "src/d{number}"?
--------------------------------------------------------
"psr-4": {
"Codemu\\": "src/",
"Codemu\\demo02\\": "src/d02",
"Codemu\\demo03\\": "src/d03",
"Codemu\\demo04\\": "src/d04"
}
--------------------------------------------------------
Структура катологов:
codemu
src
d01
d02
d03
d04
...
d99
-----------------------------------------------------------
То есть типа:
"psr-4": {
"Codemu\\demo[0-9][0-9]\\": "src/d[0-9][0-9]"
}
Подскажите, можно ли написать одно универсальное правило для автозагрузки в composer.json?
Чтобы не добавлять каждый раз "Codemu\\demo{number}\\": "src/d{number}"?
--------------------------------------------------------
"psr-4": {
"Codemu\\": "src/",
"Codemu\\demo02\\": "src/d02",
"Codemu\\demo03\\": "src/d03",
"Codemu\\demo04\\": "src/d04"
}
--------------------------------------------------------
Структура катологов:
codemu
src
d01
d02
d03
d04
...
d99
-----------------------------------------------------------
То есть типа:
"psr-4": {
"Codemu\\demo[0-9][0-9]\\": "src/d[0-9][0-9]"
}
Подскажите, можно ли написать одно универсальное правило для автозагрузки в composer.json?
Чтобы не добавлять каждый раз "Codemu\\demo{number}\\": "src/d{number}"?
"psr-4": {
"Codemu\\": "src/",
"Codemu\\demo02\\": "src/d02",
"Codemu\\demo03\\": "src/d03",
"Codemu\\demo04\\": "src/d04"
}
Структура катологов:
codemu
-src
--d01
--d02
--d03
--d04
...
--d99
То есть типа:
"psr-4": {
"Codemu\\demo[0-9][0-9]\\": "src/d[0-9][0-9]"
}
Подскажите, можно ли написать одно универсальное правило для автозагрузки в composer.json?
Чтобы не добавлять каждый раз "Codemu\\demo{number}\\": "src/d{number}"?
"psr-4": {
"Codemu\\": "src/",
"Codemu\\demo02\\": "src/d02",
"Codemu\\demo03\\": "src/d03",
"Codemu\\demo04\\": "src/d04"
}
Структура катологов:
codemu
-src
--d01
--d02
--d03
--d04
...
--d99
То есть типа:
"psr-4": {
"Codemu\\demo[0-9][0-9]\\": "src/d[0-9][0-9]"
}
compare(), equalTo(), plus(). Да любые действия, которые можно выполнять с возрастом, почему нет? Value Object же.
Проще всего будет называть директории demo02, demo03. Но если тебя это не устраивает, ты можешь зарегистрировать собственный автозагрузчик, в котором опишешь нужные тебе правила.
https://getcomposer.org/doc/01-basic-usage.md#autoloading
>Код в функии выносят не только для переиспользования, но и для самодокументорованности кода
И даже это не самое главное почему пишут функции.
И зачем ты подорвался? Свойств тоже будет столько, сколько нужно сущности предметной области.
ну давай, перечисляй свойства, червь книжный
Одна из версий.
Ему либо похуй
Либо он боится ставить какие-то дедлайны.
Одно дело молчать - молчание это неопределенность ответа.
Другое дело написать "Давайте я посмотрю ваше тестовое к следующей субботе и тогда же напишу свой ответ". Это ж реально придется брать и в субботу что-то там смотреть, отвечать человеку.
Но отклик он до сих пор не отклонил.
А они должны быть? Речь ведь не о количестве полей. А о том что "возраст" это не просто "int". Возраст нельзя складывать, возраст не может быть отрицательным, да куча правил.
Нормальный человек соберет их в одно место и гарантирует что никаких отрицательных возрастов быть в его программе не может. А пхп макака размажет эти правила по остальному коду. Это же так интригующе, когда любой параметр может содержать хуйню. Каждый день - праздник дебага.
А по поводу того удобно ли это, красиво ли это. Ответ: конечно это неудобно и уебищно. Вот именно это и имеют ввиду, когда называют пхп устаревшей парашей.
Я привел пример как это делается в современном языке, с нормальной системой типов:
type RawAge = Int of int32 | String of string
type NonZeroNaturalInt = NonZeroNaturalInt of uint16
type Age = Age of NonZeroNaturalInt
type ValidateAge = (RawAge option) -> Result<Age,string>
И все. Не надо ниче городить, на каждый тип одна строчка. Причем пишущий функцию валидации ОБЯЗАН проверить все варианты. И вернуть ОБЯЗАН неотрицательное число. А тот кому нужен Age ОБЯЗАН использовать функцию валидации на том говне, из которого он этот Age пытается получить.
Но это все лирика. В реальности пхп макаки до сих пор "считают классы", как семечки в кульке или спички в коробке, срут нулами повсюду, а главное, не могут ни ооп код писать, ни функциональный. Ни в пизду ни в красную армию. Застряли в каком-то говенном лимбо, на каждом собесе долбят этот ебучий солид, паттерны, ооп. А хули толку? Определение заучил, башкой с умным видом покивал и пошел хуярить функции, которые принмают хуй пойми че, и хуй пойми че возвращают.
У тебя супер класс Age, как я должен понять что это возраст а не музыкальный жанр или название фильма ? Age может быть у человека, у планеты, у продукта.
Как минимум UserAge <- TimeAge <- abstract Age <- Object
Та же история про говноязык. В пхп нет модулей. Поэтому только неймспейсы.
А строить шизофренические иерархии это точно такой же говнокод. Наследование еще лет десять назад прикопали.
>в говне обязан, а в пхп не обязан, поэтому язык говно
Кто обязывает не пилить объект-значения? Бог? Или так принято? Ну так с этим можешь проследовать нахуй, у жс вон принято было онли снежинки на странице делать, а оно вон как вышло
Сейчас бы в 2024 о качестве языка переживать. Промптеров будет с каждым днем все больше...
Почему ты сделал тип MinAge? Чем он отличается от Age? Чисто теоретически, MinAge для одной группы людей может быть больше чем MinAge во второй, ты для сравнения их еще одну функцию и еще один тип создашь?
>Бог? Или так принято?
А кто обязывает завязывать шнурки и ходить еблом вперед? Да никто в общем-то. Можешь ходить задом-наперед, постоянно спотыкаясь. Но как только ты со своей походкой влетишь в нормального пешехода - получишь в еблет. Так это и работает.
>>119644
>Чисто теоретически, MinAge для одной группы
Ты когда берешь "первое" значение массива, тебя ебет что в мире есть массив, в которых это значение не первое?
Тип говорит о том что гарантированно был проведен процесс отбора. А чтобы гарантировать правильность процесса отбора существуют юнит тесты. В них и проверяют правильно ли функция отбора выбирает минимум, что мы на самом деле считаем минимумом итд. Мы когда СВОЙ код пишем нас это все в принципе не ебет.
Если я правильно тебя понял, то ты добавил файлы в индекс и теперь хочешь сделать коммит.
Тогда так:
git commit -m 'First commit'
Если сделать так, то откроется редактор по умолчанию (у меня Vim):
git commit
Там нужно написать в самом верху: First commit
Потом нужно сохранить изменения. Если редактор Вим, то нужно нажать:
esc
:
wq
Я другой анон, бля круто расписал, было интересно прочитать
Это не он молодец, это ты дегенерат каких нельзя допускать до программирования.
>Зашел в интерактивный режим git консоли, сделал индексацию недавно измененных файлов, а как выйти-то теперь, чтобы сделать коммит?
Классика
Все читай - все учи. Сейчас можешь только обзоры почитать о них, но готовься что ничего не поймешь, т.к. большинство из них вращается на DDD и на паттернах и принципах.
А так, сначала ООП, разбираешься с паттернами. Паттерны покажут как работает ООП. Потом принципы. Потом DDD. Как поработаешь с фреймворками и как напишешь свои подобия фреймворков, свои качественные велосипеды, библиотеки. Только потом можешь соваться в архитектуру. А то банально не будешь понимать для чего ты делаешь архитектуру.
Всякую залетную хуету не слушай, типа вордпресс-мастеров/обрыганов-быдланов, они сами на дне и тебя утянут к себе, им профессия не по кайфу, они ее терпят
>Паттерны покажут как работает ООП.
Каким образом? Паттерн - это просто способ сделать что-то.
>разбираешься с паттернами
Как можно разобраться с паттернами не написав много кода, где возникнет проблема и возможность применить паттерн. Типо здрасьте я вот паттерны в туду листе применяю, ну или в моем фреймворке.
Это же хуйня в вакууме. Так же как с ООП. Вот я наебашил тыщу строк кода в одном файле императивно, повторил 10 одинаковых кусков кода, походу мне надо почитать про ООП.
А обычно так - прочитал про переменные, про циклы, а потом давай ооп учить с интерфейсами, собачками.
это база
Или только параметры маршрута?
Или параметры маршрута это и есть get-параметры?
Ебанат, как изучение паттернов объясняет ООП? Как способ сделать что-то может объяснять концепцию другого понятия?
прочитай про http, нативно есть только post и get, и да, в ларке они есть.
На уровне контроллера ей все равно гет там или пост. Используй объект запроса для получения его параметров - там одинаково.
Ты дебил, тебе объяснять смысла нет, раз ты мозгом подумать не можешь и найти связь между ними. Такие как ты - залетная хуета в айти. У тебя даже базовой способности мыслить нет. И быдлячая тупорогость быка, держиморды.
Из твоих ответов уже ясно, что ты нихуя не умеешь писать ООП-код и непонимаешь паттерны, но зато в комментах ебальник свой малограмотный разкрываешь
> Этот модуль включён по умолчанию.
> Windows-пользователи должны подключить идущий в комплекте поставки php_fileinfo.dll DLL файл в php.ini для включения данного расширения.
На основании этого противопоставления я предполагаю, что включён он в жму/пинус. Однако, я посмотрел php.ini из php8.2-common от debian bookworm, и увидел там:
> ;extension=fileinfo
Важная оговорка только, я смотрел не на реальной системе, а скачав сорцы пакета из репозитория debian, так что, возможно, где-то обосрался.
И чё, и как это понимать? Было предположение о том, что на жмупинус это расширение статически компилировано в сам PHP, но судя по тому, что в этот пакет входит файл
> /usr/lib/php/20220829/fileinfo.so
Это нихуя не так. Есть линуксоиды, у которых девственный php.ini? Чё там как? Строка закомментирована, расширение работает? Алсо, я понимаю, что дистрибутивов много, но debian это база. И было бы странно заявлять такое в доке, когда debian ведёт себя иначе.
А задался я этим ебанутым вопросом вообще через попытку понять, как вообще устроены расширения в PHP. Есть вот PECL, это понятно. Есть расширения, которые идут с пыхой в комплекте, и их нужно включить в php.ini. Ага. А есть JSON, который вроде расширение, но идёт в комплекте, и идёт в комплекте в другом смысле. Его не нужно включать в php.ini, он интегрирован в ядро. Хотя, вроде как, расширение. А есть DateTime, который находится в разделе расширений, но судя по
> Для использования этих функций не требуется проведение установки, поскольку они являются частью ядра PHP.
Вообще не расширение. И вот я нихуя не понимаю, где граница между
1. Не расширения
2. Расширения, которые расширения вроде как, но интегрированы в PHP и не особо отключаемы (если только на сборке пердолиться)
3. Расширения, которые расширения, и включены по умолчанию, но могут быть отключены в php.ini
4. Всякие другие расширения, типа PECL
Граница между 1 и 4 понятна, а между 2 и 3 не особо.
Типа fileinfo это как JSON? Тогда почему у fileinfo есть so/dll-файл, а у JSON нет? А если ответ нет, то каким образом он включён по умолчанию, если судя по тому, что видел я (а я, напоминаю, мог видеть левую хуйню), в php.ini у дебиана он отключён?
> Этот модуль включён по умолчанию.
> Windows-пользователи должны подключить идущий в комплекте поставки php_fileinfo.dll DLL файл в php.ini для включения данного расширения.
На основании этого противопоставления я предполагаю, что включён он в жму/пинус. Однако, я посмотрел php.ini из php8.2-common от debian bookworm, и увидел там:
> ;extension=fileinfo
Важная оговорка только, я смотрел не на реальной системе, а скачав сорцы пакета из репозитория debian, так что, возможно, где-то обосрался.
И чё, и как это понимать? Было предположение о том, что на жмупинус это расширение статически компилировано в сам PHP, но судя по тому, что в этот пакет входит файл
> /usr/lib/php/20220829/fileinfo.so
Это нихуя не так. Есть линуксоиды, у которых девственный php.ini? Чё там как? Строка закомментирована, расширение работает? Алсо, я понимаю, что дистрибутивов много, но debian это база. И было бы странно заявлять такое в доке, когда debian ведёт себя иначе.
А задался я этим ебанутым вопросом вообще через попытку понять, как вообще устроены расширения в PHP. Есть вот PECL, это понятно. Есть расширения, которые идут с пыхой в комплекте, и их нужно включить в php.ini. Ага. А есть JSON, который вроде расширение, но идёт в комплекте, и идёт в комплекте в другом смысле. Его не нужно включать в php.ini, он интегрирован в ядро. Хотя, вроде как, расширение. А есть DateTime, который находится в разделе расширений, но судя по
> Для использования этих функций не требуется проведение установки, поскольку они являются частью ядра PHP.
Вообще не расширение. И вот я нихуя не понимаю, где граница между
1. Не расширения
2. Расширения, которые расширения вроде как, но интегрированы в PHP и не особо отключаемы (если только на сборке пердолиться)
3. Расширения, которые расширения, и включены по умолчанию, но могут быть отключены в php.ini
4. Всякие другие расширения, типа PECL
Граница между 1 и 4 понятна, а между 2 и 3 не особо.
Типа fileinfo это как JSON? Тогда почему у fileinfo есть so/dll-файл, а у JSON нет? А если ответ нет, то каким образом он включён по умолчанию, если судя по тому, что видел я (а я, напоминаю, мог видеть левую хуйню), в php.ini у дебиана он отключён?
Ебанат, паттерны != ООП и ООП != паттерны. На вопрос ты так и не ответил, сдулся, ожидаемо.
>найти связь между ними
А хули её вообще надо искать? Почему эта связь не очевидна, тебе в твою объебанную солями башку не приходило? Может авторы паттернов использовали функциональные принципы, а на ооп хуй клали?
Каждый раз в голос в таких дегенератов. У тебя тупо определения ооп сформулированного нет, а ты какие-то связи говна с мочей фантазируешь. Ты просто очередной процедурный хуесос, который классы использует как папочки для своих говенных функций. ООП-КОД ебать.
>>120920
Быдлос подъездный, всеми силами пытаешься узнать но тебе не говорят)). Я тебе нихуя больше не скажу, потому-что ты залетная поебень в айти и отрицала. Тебе нужно быстро, чтобы еще мозг не пух и еще чтобы не работать и еще чтобы деньги давали. Но в результате ты получишь хуй и потеряешь время. Пиздуй на завод гайки крутить, пока не поздно. С твоей психологией отрицалы не место в профессии. Ты почему отрицаешь? Потому что у тебя голова нагружается когда ты это все читать начинаешь, тебе плохо от этого, тебе в тягость сидеть весенним днем учить, разбираться, поэтому ты визжишь НЕНУЖНА ЭТА, РРЯЯ, ЗОЧЕМ ПАТТЕРНИ, транслируешь свою боль всем окружающим. Ты в инете увидел что это НАДО, у тебя сразу жопная боль, НЕТ НИНАДО, тебе хочется пойти погулять или поиграть, а не учить. Но жопная боль неспроста, ты подсознательно понимаешь что надо, а твоя животная сущность говорит что не надо, ты с этого эндорфинчики неполучишь и твой скулежь направлен не для того чтобы разобраться, а чтобы себя успокоить, это твоя маня-защита.
Поэтому я тебе хуй что напишу, чтобы ты вкатывался лет 10, себя успакаивая)).
Если бы хотел реально получить ответ, ты бы впитывал каждую строчку и пытался бы разобраться, а не спорил и не вел себя как обезъянка малолетняя, визжащая
У меня на макоси также, то есть расширения закомментированы, но они работают.
В файле php.ini:
;extension=fileinfo
;extension=mbstring
При этом,
> php -m | grep fileinfo
fileinfo
> php -m | grep mbstring
mbstring
То есть данные библиотеки работают "из коробки" без дополнительных манипуляций.
Соответственно скомпилированы заранее и включены по дефолту.
Там в исходниках есть файл типа Configure (или как-то так) и в нем указано, какие модули нужно подключить во время установки php.
Спасибо. А можешь глянуть, mbstring.so и fileinfo.so в ext вообще лежат? Ну или что на макоси вместо so.
И совсем классно будет, если в случае их наличия, ты попробуешь их удалить временно, и запустить какую-нибудь функцию из mbstring/fileinfo. Потому что если у тебя так, как я нарыл в debian (в php.ini отключено, но работает, но so-файл есть), то варианта два. Либо, несмотря на то, что в php.ini строка закомментирована, грубо говоря, дефолтное значение true. Если её раскомментируешь, директива перезапишется тем же самым, ничего не произойдёт. Либо это статическая компиляция расширения прям в бинарник PHP, и нахера тогда so-файл вообще кидают. Просто, чтобы был, вдруг кому надо?
>Почему эта связь не очевидна
Тебе она неочевидна потому-что ты не знаешь ни паттерны, ни принципы.
Ты глупый, а мнение имеешь.
Потому-что если бы ты знал паттерны и принципы, то у тебя бы вопросов не возникало и ты бы видел как они пересекаются между собой. Видел бы использование принципов в этих паттернах. Есть простые паттерны, а есть и не простые, но большинство из них использует принципы ООП (базовые принципы ООП + солид с граспом).
Паттерны тебе показывают как конструировать объекты, где создавать объекты, как интегрировать различные системы, есть паттерны которые ослабляют связь между слоями, другие позволяют подменять реализации.
И зная паттерны ты уже знаешь как писать код, там примеры кода, в какое место что вставлять, а не просто уже пишешь спагетти-кодом. А знание принципов - тебе позволяет осмысленно понимать эти паттерны и осмысленно писать уже качественный ООП код.
Поэтому, если учить ООП - то это принципы, а примеры кода можно смотреть в Паттернах, а зная принципы ты будешь понимать эти примеры из Паттернов и будешь понимать для чего это все.
Поэтому тебе правильно сказали - иди уроки делать, дурачок
>паттерны которые ослабляют связь между слоями
Я просто хочу разобраться, а как измерить "ослабление" связи? Или хотя бы что такое "слой"? Если у меня "толстый" контроллер, то слой тоже "толстый"? Ладно, нахуй подробности, эти слои они вертикальные или горизонтальные?
Собес решил провести под видом дурачка?
>измерить "ослабление" связи
Паттерн - pub-sub, еще Observer. В народе: События.
По принципу инверсии зависимостей, принимаем что-то внешнее (объект событий) что соответствует интерфейсу с ним и работаем, не привязываясь к чему-то конкретному, при этом не привязываемся к тому кто эти события будет получать или публиковать.
>то такое "слой
Уровни приложения: Сущности, Сервисы приложений/домена, Ядро, Инфраструктура
>Если у меня "толстый" контроллер, то слой тоже "толстый"
А если код захотите переиспользовать? Будете контроллер копировать? Не хотите Сервис запилить для этого?
>эти слои они вертикальные или горизонтальные?
Смотря какая архитектура.
Ну что, берете меня, товарищ-собеседующий?
>По принципу инверсии зависимостей, принимаем что-то внешнее
И чего? Ты как зависимость не инвертируй, а она все равно никуда не девается. "Связь" не ослабляется нихуя, додстер.
>что соответствует интерфейсу
>с ним и работаем, не привязываясь к чему-то конкретному
И какое поведение выражает этот интерфейс? В интерфейсе будут "конкретные" методы, с конкретными типами. И все возможные объекты событий должны в эти "конкретные" рамки вписываться.
>при этом не привязываемся к тому кто эти события будет получать или публиковать.
С этого вообще в гилос. У тебя в твоем супер независимом и "отвязанном" классе будет прописан USE всей этой требухи. И твой код намертво будет к этой событийной модели прикручен. И если когда твой универсальный интерфейс придется поправить под очередное хитровыебанное событие, ты попрешься все это переписывать.
Итого. связи никуда не делись, конкретика осталась, зависимость есть.
Независимо отвязался. Ебать ты кукоретик.
Бля, иди нахуй. Просто я сейчас осознал что ты конченный, когда прочитал первый твой ответ. Пошел нахуй школьник. Еще перед свиньей бисер метать
>Я просто хочу разобраться, а как измерить "ослабление" связи?
Смотря про какой код речь. Есть связанность или зацепление (coupling) и связность или прочность (cohesion). Ни то ни другое не никак не зависит от ООП и наличия в языке классов. Почитай сначала про это.
https://medium.com/german-gorelkin/low-coupling-high-cohesion-d36369fb1be9
>Или хотя бы что такое "слой"?
Это логическая (абстрактная) единица кода. Физически может выражаться по разному. Как объект, функция, модуль, не важно на самом деле. Важно чтобы нижние слои ничего не знали про верхние, и чтобы любой слой можно было заменить не меняя ничего в других слоях. Достигается это использованием интерфейсов (имеется ввиду интерфейс как абстракция ввобще, не имеется ввиду именно фича языка, как например интерфейсы в Java). Советую почитать 2 главу СИКП чтобы понять интерфейсы.
http://aliev.me/runestone/Introduction/WhyStudyDataStructuresandAbstractDataTypes.html
>mbstring.so и fileinfo.so в ext вообще лежат?
> ls include/php/ext
curl dom gd hash json mbstring mysqlnd pdo random simplexml spl xml
date filter gmp iconv libxml mysqli pcre phar session sockets standard
В этих каталогах находятся только файлы с расширением .h.
Попробовал удалить mbstring - все также работает.
Даже если целиком удалить каталог ext, все модули загружаются.
> find . -type f -name ".so"
./lib/php/20230831/opcache.so
./lib/httpd/modules/libphp.so
А вот если удалить файл opcache.so, тогда появляется увеломление об ошибке:
> php -v
Failed loading /usr/local/opt/php/lib/php/20230831/opcache.so: ...
Тоже появляется ошибка если удалить файл xdebug.so, который находится в другом месте
pecl -> /usr/local/lib/php/pecl
> cd /usr/local/lib/php/pecl
> find . -type f -name '.so'
./20220829/xdebug.so
./20210902/xdebug.so
./20230831/xdebug.so
Но там нет других файлов, кроме xdebug.so.
>mbstring.so и fileinfo.so в ext вообще лежат?
> ls include/php/ext
curl dom gd hash json mbstring mysqlnd pdo random simplexml spl xml
date filter gmp iconv libxml mysqli pcre phar session sockets standard
В этих каталогах находятся только файлы с расширением .h.
Попробовал удалить mbstring - все также работает.
Даже если целиком удалить каталог ext, все модули загружаются.
> find . -type f -name ".so"
./lib/php/20230831/opcache.so
./lib/httpd/modules/libphp.so
А вот если удалить файл opcache.so, тогда появляется увеломление об ошибке:
> php -v
Failed loading /usr/local/opt/php/lib/php/20230831/opcache.so: ...
Тоже появляется ошибка если удалить файл xdebug.so, который находится в другом месте
pecl -> /usr/local/lib/php/pecl
> cd /usr/local/lib/php/pecl
> find . -type f -name '.so'
./20220829/xdebug.so
./20210902/xdebug.so
./20230831/xdebug.so
Но там нет других файлов, кроме xdebug.so.
Бля, нахуй ты ему отвечаешь, пусть нахуй идет. Он же ебнутый, базы даже не знает а со взрослыми пытается разговаривать. Харкни ему в ебало макротой и дай пинка детенышу, именно такого отношения он заслуживает. Что нихуя не знает основ, а клюв зато свой открывает
Да, кстати, после того как раскомментировал mbstring в php.ini, появилась ошибка:
PHP Warning: PHP Startup: Unable to load dynamic library 'mbstring' (tried: ...)
>мера того, насколько взаимозависимы разные подпрограммы или модули.
>мера
Начали за здравие. Ух бля, щас начнут мерять.
>Cвязность характеризует то, насколько хорошо все методы класса или все фрагменты метода соответствуют главной цели
>насколько хорошо
Так насколько блядь? Хорошо делать хорошо, а не хорошо делать не хорошо. Мы че бля в детском саду? -У тебя там связность больше или зацепление? -ХОРОШО.
Правильно там автору в комментах по губам водят.
>Достигается это использованием интерфейсов (имеется ввиду интерфейс как абстракция ввобще, не имеется ввиду именно фича языка
А можно пример "интерфейса как абстракции вообще"? Похуй на каком языке, просто интересно.
То что ты пытаешься криво и странно объяснить называется ПОЛИМОРФИЗМ. Но что такое в итоге "слои"? Это синоним полиморфизма? Это что-то что просто использует полиморфизм? Исходя из того что ты написал это "неважно что на самом деле", но с использованием полиморфизма. Тут чисто по логике получается что ты просто обозвал полиморфизм как-то по другому. https://www.wolframalpha.com/input?i=%28a+%7C%7C+%21a%29+%26%26+b
> dom
> json
> random
> session
Это ещё что за нафиг? JSON в виде расширения? Ещё и .h. Выглядит так, как будто это исходник PHP. Или, как минимум, что-то специфичное для макоси. Но ты подкинул мне хорошую идею, глянуть https://github.com/php/php-src/tree/master/ext И что я там вижу? Например, директорию JSON.
Короче, складывается ощущение, что положняк такой.
1. Вообще ни разу не расширения, прям сердцевина ядра, ёпта. Например, "Arrays". Несмотря на то, что в документации оно находится в разделе "Variable and Type Related Extensions", это прям вообще база, и в папке ext такого нет.
2. Расширения, которые, однако, были интегрированы в ядро, и теперь они не совсем расширения. Например, JSON когда-то был расширением PECL, а потом его добавили в ядро. А, скажем, random - расширение, которое изначально делалось из расчёта на то, что его интегрируют в ядро, и отдельно никогда не существовало.
3. "Внешние" расширения, которые подключаются в php.ini с помощью extension. При этом, в зависимости от того, как PHP собран, 2 может переходить в 3 и обратно. Вот, например, для винды fileinfo это внешнее расширение. А для твоей сборки - интегрированное в ядро, не требующее активации в php.ini.
Видимо, чтобы окончательно разобраться, нужно будет установить линукс в виртуалку и попробовать самостоятельно собрать PHP пару раз.
Хотя, хуйню сказал.
> https://github.com/php/php-src/blob/master/ext/spl/spl_array.c
Значит, есть разница между расширением в том смысле, как организуют код разработчики PHP (в этом смысле, почти всё - расширение). И расширением в том смысле, что есть какой-то стандартный базовый набор расширений, подразумевается, что они активны во всех мало-мальски стандартных сборках, и, следовательно, можно считать их частью языка. А есть то, что где-то может быть включено, где-то - нет. С точки зрения внутреннего устройства PHP всё это расширения, но с точки зрения того, что расширениями принято называть при использовании PHP, расширения только второе.
Таксистом, который не знает что такое .h файлы.
>А можно пример
https://share.sourceacademy.org/asovhsih
>называется ПОЛИМОРФИЗМ
Нет, но мне сейчас некогда это обсуждать. Позже.
PWNED by VKatun
И что в этом примере "интерфейс"? Функция принимающая хуй пойми че и возвращающая хуй пойми че - это щас абстракцией называется?
Интерфейс это шизик, он предоставляет тебе доступ к своим высерам где он НОД итеративно считает. Тыкаешь на шизика получаешь высер, реализацию высера не обязан знать.
Рисунок наглядно демонстрирует, что такое абстрактный тип данных и как он работает. Пользователь взаимодействует с интерфейсом, используя операции, определённые в АТД. По сути, абстрактный тип данных - это оболочка, с которой работает клиент. Реализация скрыта на уровень ниже, и её детали пользователя совершенно не беспокоят.
http://aliev.me/runestone/Introduction/WhyStudyDataStructuresandAbstractDataTypes.html
У меня установлен Apache, как я понял, он сам делает логирование.
Мне, как новичку, это логирование вообще нужно?
Что вообще имеет смысл логировать? Всякие exception, которые я явно буду выкидывать?
Я прочитал доку Laravel, хочу закрепить на практике, но не знаю что именно мне делать для этого.
>Рисунок наглядно демонстрирует
Как одна область может значить разные вещи? Ты дебил? Это не вопрос.
Глянь курса Лаврика по основам пхп на рутрекере, он там что-то аодобное делает
если есть какие-то интеграции, то всё что туда отправляешь и что получаешь, когда какой пользак в приложуху залогинился/разлогинился, поменял пароль, тронул что-то важное, когда данные валидацию не проходят, чтобы когда пользак придёт "пук хрюк ни работаит" ты бы мог по логам глянуть и ему ткнуть, и да, когда exception то логируешь вместо того чтоб юзеру показывать
> fileinfo
> Этот модуль включён по умолчанию.
Теоретически, расширения включаются и отключаются через правку php.ini. Но на практике, как минимум дебилыанщики (и, соответственно, все deb-based) вертели это, они могут включать и отключать расширения, путём создания файла типа fileinfo.ini по адресу /etc/php/8.2/mods-available/
Пакет PHP под линуксом содержит в себе скрипт, который запускается при установке пакета. Пикрелейтед. Таким образом, мы и получаем такую ситуацию: so-файл в ext есть, но в php.ini он отключен, но расширение работает.
Список:
CodeSniffer
Psalm
Phan
PHPStan
CodeSniffer
CodeSniffer, PHPStan
+
плагин для шторма (Php Inspections (EA Extended)), который анон советовал в одном из прошлых тредов.
А можно поинтересоваться у владельца тренда, нахуя ставить пхп на виртуалку с дебианом, если есть альпин?
А нахуя усложнять себе дев экспириенс? Не смешивай технические критерии для продовой конфигурации, и для платформы для разработки
мимо
>docker compose up -d и все
>усложнять
>они могут включать и отключать расширения, путём создания файла типа fileinfo.ini по адресу /etc/php/8.2/mods-available/
>Таким образом, мы и получаем такую ситуацию: so-файл в ext есть, но в php.ini он отключен, но расширение работает
>не усложнять
Ты под солями?
Я бы поставил пыху через homebrew (в виртуале если под виндой) и не ебал мозги в его ситуации. Про докеры можешь мне не расказывать, та же отладка с дебагером усложняется. Попробуй еще в кубернетесе локально разрабатывать.
Докер для пыхи нужен локально, когда другого варианта нет. В той же симфони в дефолтной конфигурации докера, которая создается symfony new project, в докере только постгрес
не виртуалке если под виндой конечно, а в WSL, хотя это тоже VM
Я на уроке русского или что, блять?
>Докер для пыхи нужен локально, когда другого варианта нет
Бля, каждый раз проигрываю с таких петушиных голов. Ну если ты не работал никогда, так нахуй ты высираешься пиздежом?
Все твои маняфантазии работают только в мире где ты единственный разработчик. Очевидно что наманяфантазировать ВЗАИМОДЕЙСТВИЕ с остальными сотрудниками ты не можешь, потому что его у тебя никогда и не было.
Уже когда разработчиков двое, все становится понятно. А их всегда минимум двое: тот кто писал код и тот кто дописывал. Конфигурацию надо придется синхронизировать. Добавить сюда тестировщика, а даже если его нет, то как минимум манагер захочет сначала посмотреть че ты высрал, перед тем как это на люди вываливать.
А виртуалка это одновременно и способ хранения конфигурации и способ её доставки в точности куда надо. Это наиболее удобный и быстрый способ решения неизбежных проблем. Неизбежных блядь. Поэтому кукаретическая пиздабольская скотина легчайше палится, когда начинает кукарекать о том чего не знает.
У меня сейчас пыха в кубере вообще, потому что субд в кубере и другие микросервисы в кубере и все это локально будет запускаться и локально деплоится тилтом. А еще я девконтейнерами остоянно пользовался в микросервисном проекте,а другие разрабы локально запускали для удобства.
Твоя доставка конфиграции нужна для манек, которые нихуя не понимают, что делают. Любой разраб сделает по своему на своем компе. Так что твой совет, обязательно запускать пыху через докер, да еще в кастррованом альпине имеет нулевую ценность.
Ты видел, блять, какие там проверки?
Вот тебе пример:
Избыточные определения. В правильно составленном предложении не должно быть больше одного придаточного определения.
Я лингвист или пхп-макака?
>Любой разраб сделает по своему на своем компе
Ага, въебет восьмую версию когда проект под 7.4, подключит пару новых модулей модулей и будет с кайфом писать атрибуты. Я так-то про соли пошутил, а ты внатуре угашенный.
Чтобы это не делать, докер не нужен чтобы пыху запускать. Достаточно понимать что делаешь.
>Я лингвист или пхп-макака?
Ты не умеешь грамотно писать по русски. Шторм тут при чем? Нахуя вообще писать в коде по русски отдельный вопрос. Пиши по английски, он проще.
Слушай, вкатун. О том и было написано, пенек осиновый, что понимать нужно не только тебе. А если бы люди так легко понимали бы друг друга, то ты давно завалил бы свое ебало. Но ты все еще пердишь в тред, смекаешь?
>Шторм тут при чем?
Просто неожиданно, что в редакторе КОДА почему-то такой сильный дроч на правила рандом-нейм языка.
И ладно бы он подчеркивал, если бы я писал "отрибут", а не "атрибут". А он еще и анализирует, нет ли у меня лишних придаточных определений.
Как будто пишу сочинение на ЕГЭ по русскому.
У тебя просто включен плагин, скорее всего этот https://plugins.jetbrains.com/plugin/12175-grazie-lite Он просто берет отсюда https://languagetool.org/ru правила и делает проверку. В шторма можно отключить вообще все, даже проверку самого пхп.
Твоя маня конфигурация не будет работать на задачах у другого разраба. За семь лет своего вкатунства не раз сталкивался, когда кто-то предлает все унифицировать, а потом все нахуй шлют эти докер композы велосипедные. Спрашиваешь такого унификатора, а почему ты так сделал, мне надо очереди у ларки дебажить, ты все в один контейнер запихнул? А ему НИНАДА.
Еще раз. Я не утверждал что контейнеризаци не нужна для разработки. Я сказал что она не обязательна. А еще она палки в колеса ставит. Если контенеризация неизбежда, то придется терпеть, а не кайфовать от удобства.
Тебовать кастрированый альпин для разработки - это и есть вкатунство чистой воды.
Хуй знает, пойдём от обратного. phar.readonly выключен. Внутри phar-файла дырявый говнокод, так что хацкер заставляет phar-файл модифицировать свои внутренности. Чё дальше? Во-первых, нужно дать по ебалу тому, кто этот дырявый говнокод написал. Во-вторых, если хацкер может заставить пыху внутри phar выполнить что-то лишнее, то он уже может это сделать, ёпт. Что мы потеряли от отключения phar.readonly?
В доках сказано, что всё ради безопасности, и строго наказывают phar.readonly не трогать. А профита особого я не вижу. Если код внутри phar-файла нормальный, то и вопроса нет. Если дырявый, то phar.readonly насрать не помешает.
>Твоя маня конфигурация не будет работать на задачах у другого разраба.
Что блядь значит "моя"? Она одна всего. Если нужно новое расширение в пхп подключить что по твоему делают, наркоман? Конфигурацию меняют блядь. Но меняют ВСЕ. В этом вся суть, конфигурация привязана к коммиту с кодом. Сразу с кодом ты получаешь конфиг под которым он гарантированно работает. И если тебе за чем-то нужно поменять конфигурацию, то ты точно так же меняешь её для всех.
Даже если вы ебанулись, обкурились, полирнули стекломоем и сделали каждому свой конфиг, то в конечном счете все эти конфиги один хуй придется свести к одному единственному - тому который на проде блядь. Потому что твой код должен работать на проде, иначе это не код, а куча мусора.
Короче, давай сворачивай пиздежь, ты заебал тупостью троллить.
Пишу:
User::query()->count().
Мне нужен int, а этот пидорас возвращает мне коллекцию Eloquent.
Как преобразовать в скаляр?
Зато можешь говорить людям что работал в касперском
Если в phar-файле дырявый говнокод, который позволяет хацкеру заставить пыху выполнить свой код, то хацкер всё равно сможет удалить какой-нибудь файл вне пределов phar, например
Ты не понимаешь как выглядит экплуатация этой херни. Когда у кулхацкера есть исполнение кода ему уже нахуй не сдалось ебаться с pharами. phar нужен чтобы чтение файлов с возможностью подставить protocol wrapper превратить в rce. Как phar архив попадёт на систему - другой вопрос, он может попасть тупо upload-ом, или через такую же кривую запись с protocol wrapperом.
Дальше, эта опция не запрещает менять твой phar файл. Точнее это и тоже, только оно сделано чтобы запретить создавать любые phar файлы из пыхи. В целом ты прав, что способ поднасрать найдётся, только RCE придётся делать на гонках, а не тупо записью.
Я пишу
User::count()
Шторм мне пишет, что нет такого метода у Модели.
А код мне выводит, что это экземпляр Collection.
>А код мне выводит, что это экземпляр Collection
https://github.com/illuminate/database/blob/master/Query/Builder.php#L3321
>return (int)
А мне телки из тиндера шлют нудесы, а кореша говорят что я пиздабол, потому что я там не зареган даже.
Он не возвращает коллекцию елоквента. Не пизди
А я говорю что у меня хуй до колен. Еще могу рассказать что работаю в гуголе и получаю 300к в наносек. А вот показать не могу, смекаешь?
У меня в коде написано:
$test = User::count();
dump($test).
Что показывает dump:
Illuminate\Database\Eloquent\Collection
Я хуй знает почему так.
>У меня в коде написано:
>$test = User::count();
>dump($test).
> Ну и нахуя ты пиздишь? Там не так написано.
>Бля буду, так
>Запости код
>А, да. Там не так.
Как называется эта болезнь?
Болезнь называется на сонливую голову пошел писать код.
Я упустил момент, что значение из формы приходит не int, а string (ебучий "0", а не 0!).
Вот и не заметил, что код пошел не по тому if.
Сорри, пацаны, вы правы, а я дурак.
> оно сделано чтобы запретить создавать любые phar файлы из пыхи
Моей проблемой было то, что я как-то упустил этот нюанс. А сейчас уточнил - да, действительно. Параметр phar.readonly можно читать как
0 пыха может и читать и создавать phar
1 (дефолт) пыха может только читать phar
Тогда его существование выглядит более оправданным. Единственное, мой комментарий о безопасности ведь не снимается? То есть, нельзя сказать, что эта фича заметно влияет на безопасность. Скорее, ридонли-режим включают по принципу типа KISS, всё, что тебе не прям нужно, должно быть отключено, ибо мало ли что? Потому что я не вижу больших потенциальных угроз и проблем в факте того, что на этой системе можно собирать phar-файлы. Совсем не eval или какая-нибудь подобная ебанина, с которой легко отстрелить свою ногу. Если код дырявый, то миллион способов насрать и без phar. Если код не дырявый, то phar никак не повлияет на безопасность в негативную сторону. В чём я не прав?
Ты "упустил момент" что если хочешь помощи, то запости блядь код, который "не работает", а не свои фантазии. Каждый раз одно и тоже.
>Каждый раз одно и тоже.
Вкатывальщики ссут свой код показывать.
Каждый вкатывальщик думает, что уважаемые мидлы ИТТ говна в своей жизни не видели и его засрут как это бывает у них в конфочке вайтишников, где они только туториалы видят с тремя строчками кода.
>Вкатывальщики ссут свой код показывать.
Предлагаешь все репы с хеллоу-ворлдами и API генерирующими бугурт-пасты выкладывать публично?
>все
Где я написал про все? Ты имбецил?
Когда ты к врачу приходишь с жалобой на боль в жопе, то все жопы мира ему показываешь или только свою - которая захворала?
Множество жеп состоящее из одной жопы, тоже описывается квантором Все. Даже больше я, тебе скажу, что в теории множеств любой предикат к элементам пустого мнодества будет истенен, для Всех элементов этого пустого множества. См пикрил
мимо шел
Так это тавтология. Тавтологию, как и твой пост, можно отбросить, потому что она нерелевантна для вывода.
Так это яскозительство. Яскозительство как и твой пост можно отбросить, потому что оно вообще не несёт информационной нагрузки.
Да, имхо ты прав, оно закрывает простые вектора эксплуатации, но скорее всего изначальный вектор можно эксплуатировать как-нибудь ещё. Надо поднимать историю появления этого флага, мб в pr будет больше кейсов.
И можно ли перезаписывать текущий файл, который сейчас выполняется?
> как мне теперь его вызвать из PHP?
include 'hello.php'
>можно ли перезаписывать текущий файл
можно
> Отличный вопрос! Термин "рекурсивный" в названии RecursiveDirectoryIterator может вызвать недоумение, так как сам по себе этот итератор не производит рекурсивного обхода подкаталогов. Однако, его называют "рекурсивным", потому что он предоставляет возможность обрабатывать структуры каталогов, которые потенциально включают вложенные каталоги, и он способен быть использованным в рекурсивном контексте при помощи RecursiveIteratorIterator. Вот почему его название отражает его потенциальное применение, а не непосредственное поведение
> Да, вы правильно поняли суть использования RecursiveDirectoryIterator. В большинстве случаев, когда разработчики используют RecursiveDirectoryIterator, они делают это в сочетании с RecursiveIteratorIterator, чтобы полноценно реализовать рекурсивный обход файловой структуры. Эта связка позволяет эффективно и удобно перебирать все файлы и подкаталоги в заданной директории.
Меня нигде не наебали?
Да, тебя наебали. Это классика пхп кала.
Что в RecursiveDirectoryIterator "рекурсивного"? Чем он от обычного итератора отличается? Он имплементирует интерфейс RecursiveIterator. А там че? Там два новых метода: getChildren() и hasChildren(). А кто будет эти методы вызывать? Надо же блядь их вызвать, проверить что там есть куда "рекурсировать". Можно вызвать самому. А можно использовать итератор, который "итерирует по рекурсивным итераторам" и умеет сначала проверять есть ли там вложенность.
А вот какого хуя RecursiveDirectoryIterator имплементируя RecursiveIterator и зная что у него может быть вложенность сам не итерирует по подкаталогам? Потому что пошел нахуй, вот почему. ЗАХОТЕЛИ ТАК. Ага блядь, я наследуюсь не для того чтобы изменить поведение, а чтобы "предоставить возможность изменить поведение". Или не изменить, а отнаследовался чисто по приколу.
И такие "приколы" в этой параше на каждом шагу. Начиная от разного порядка аргументов и заканчивая тем, что массив это на самом деле функция.
Язык - бардак, язык - куча мусора. Фрактал отсоса.
Спасибо. В ответе, выходит, ничуть не наебали. А вот разработчики PHP - На-ду-ли! Просто нагло обманули! Просто водят за нос, обманывают! Насрали в язык какой-то неинтуитивной сранью, а ты разбирайся с этим, пытаясь понять, что имели в виду эти реально контуженные обиженные жизнью имбецилы.
У всех всегда так. Они просто пиздят
Массив - каллабл, потому что каллабл кал. Как из этого следует, что массив это функция?
> $bitmask = $flags | $defaultFlags
Например, сигнатура метода:
> public RecursiveDirectoryIterator::__construct(string $directory, int $flags = FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO)
Я передаю в качестве $flags значение FilesystemIterator::UNIX_PATHS. Значит, по идее. в функцию вместо FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::CURRENT_AS_FILEINFO передаётся FilesystemIterator::UNIX_PATHS. Но как показали мои наблюдения, фактическое поведение относительно $key и $current не меняется. Из чего следует два предположения:
1. В данном случае, нет никакого технического смысла в том, что $flags имеет значения по умолчанию в сигнатуре. Потому что эти значения совпадают с тем, что указано где-то в теле метода. Нахуя, в таком случае, они дублируются в сигнатуре? У меня одно предположение - чтобы сигнатура метода являлась как бы документацией. Смотришь на сигнатуру и сразу понятно, с чем переданные тобою флаги мерджится будут.
2. Передача 0 в качестве битовой маски - способ как бы сказать "используй значения по умолчанию", возможность пропустить указание аргумента.
Базарю - шторм с парой макросов может половину местных вкатунов без работы оставить.
Осталось только научить его убирать пустые переносы строк, наверное отдельное расширение с ии запилить придется
Пердолить конфиги чтобы иде удалила пустые места в коде
Мда, уж лучше и проще нейронку попросить
Он настолько восхитился тем, что плагин может пустые строки убрать, что решил, что это будущее, которое заменит ждунов. Какого кода ты от него ожидаешь?
"Дорогая нейронка, вот тебе двести мегабайт нашего с пацанами кода. Ну вообще то он не наш, а нашего работодателя. Но мама учила что нужно делиться. Пусть этот код попадет в датасет и послужит компании микрософт хорошим подспорьем.
В общем, удали пожалуйста в коде пустые места. Где? Нуу... вот тебе список правил, как и где удалять, типа конфиг такой. Заранее спасибо."
До последних дней никогда в жизни не видел линукс.
Только вчера создал ВМ, поставил на нее гостевую ОС - lubuntu последней версии.
Короче, задача такая:
написать скрипт php, который выводит Hello, завершается, ждет 15сек и снова сам запускается и так по циклу.
Написал php-скрипт, где просто:
echo 'Hello',
потом установил cron, написал ему задание:
* /usr/bin/php /opt/lampp/htdocs/dasboard/hello.php
Я знаю, что пока что эта хуйня будет выполняться раз в минуту что-либо, но я бы хотел добиться хотя бы этого.
И я хуй знает, работает ли это, вводил команду:
grep CRON /var/log/syslog
Но мне вывод этой команды нихуя не сообщил
Я нихуя не понимаю, выполняется мой скрипт или нет и если да, то куда летит этот Hello.
Такие пироги, найдутся тут те, кто может помочь? Маюсь уже второй день.
Я еще там указывал файл, куда писать (что писать - я хуй знает, потому что этот cron понял поверхностно), но файл только создавался и в него нихуя не писалось.
Нужно, чтобы именно скрипт завершался после вывода Hello.
А потом сам запускался через 15с.
И снова вывод Hello и снова завершение.
И так по кругу.
Каждый раз одно и то же. Рассказал про свой первый раз, про цвет залупы и про то что делаешь хуйню. А по сути дела ничего не рассказал. Ты понимаешь разницу между тем что "нужно сделать" и тем что ты "решил что нужно сделать"?
Откуда ты взял про линукс? Откуда ты взял про крон? Ты буквально следующим постом "уточняешь" задачу и там ниче про линукс и крон нет. Ты пишешь "задача написать скрипт php". Ты этот скрипт вместо с кроном и линуксом будешь отдавать? Или может задача на самом деле "заставить скрипт запускаться раз 15 секунд под линуксом"? Так какого хуя ты именно это не написал?
Короче, похуй что там НА САМОМ ДЕЛЕ от тебя хотят, вот тебе твой крон.
/usr/bin/php /opt/lampp/htdocs/dasboard/hello.php >> /tmp/date.log
sleep 15; /usr/bin/php /opt/lampp/htdocs/dasboard/hello.php >> /tmp/date.log
Первый запуск в первую секунду минуты, второй в пятнадцатую, третий... итд.
>> /tmp/date.log запишет вывод скрипта в нужный файл.
Чувствую себя долбаебом.
Спасибо, анон!
Можешь еще подсказать, как заставить cron не просто выполнять php скрипт, а выполнять его, открывая в браузере?
У меня стоит xampp.
Ага.
Я хочу так:
Запустить локальный сервер
Запустить крон задачу
И вот чтобы крон переходил по адресу http://localhost/dashboard/hello.php
И так каждые 15с.
Можешь подсказать?
https://stackoverflow.com/questions/6971595/how-to-set-a-cron-job-to-open-a-web-page-in-the-browser-using-crontab
https://askubuntu.com/questions/514167/how-to-start-a-gui-application-from-cron
Бля, я надеюсь это пранк, типа открывающегося сидирома. Не могу имаджинировать ебало того кто будет сидеть за компом.
Я не он и читал жопой, но у тебя какая-то каша в голове. Каким образом крон должен переходить по адресу? Тебе чё надо вообще? Надо, чтобы просто исполнялся PHP-скрипт - одно. Надо, чтобы дёргалась страница на твоём локальном сервере - другое. Это тогда по крону нужно дёргать curl, который будет идти на http://localhost/dashboard/hello.php А если окажется, что тебе курла мало и на самом деле там будет какая-нибудь клаудфлара, то смотри в сторону puppeteer.
Я в процедурном делаю
Если знаешь хорошо лару, почитай архитектуру на ней из оп поста. Я сам читал и смотрел дохуя по паттернам и никак не мог въехать нахуя нужна эта отдельная дисциплина. Там же норм поясняются проблемы и как паттерны их решают
А я не знаю хорошо лару, я только чуть чуть голую пыху позадротил на хеллоу ворлды
Подписка на Хекслете, там есть трек по ООП
И нахуя ты в паттерны тогда лезешь?
Нахуя ты это делаешь, если у тебя руки из очка? Ты куда-то опаздываешь? В тематике треды до тысячи постов спокойно висят.
Я ничего никуда не перекатываю. Потому что нахуя? Там до сих пор прошлый тред с нормальной шапкой висит, залупа ты понурая.
А знаешь, пожалуй я его перекачу. И побампаю. Надо же такому охуевшему вафлеру по губам провести. Десять лет сидели с кайфом, щас какое-то чмо залетное будет тут че-то пиздеть.
С нормальной шапкой и сохранением нумерации.
>>3128882 (OP)
>>3128882 (OP)
>>3128882 (OP)
Битрикс тред создай и там сиди лол. В целом мне похуй на самом деле. Делай что хочешь
На вашем этом пхп такое не напишеш.
Вы видите копию треда, сохраненную 16 июля в 04:26.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.