Этого треда уже нет.
Это копия, сохраненная 15 мая 2023 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Клуб изучающих PHP #130 php 2571790 В конец треда | Веб
Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL) и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

ОП довольно занят, но постарается ответить на все вопросы. Также, ответы и решения задач можно поискать в архиве тредов phpclub.

Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.

Предыдущий тред был тут: >>2511483 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (впрочем, иногда он не работает).

С чего начать

Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не запоминайте его, он временный). Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.

Если не знаешь как решать, запости код и попроси подсказку или поищи задачу в архиве тредов.

Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование. У нас есть задачи для изучения этого:

- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Laravel/Symfony: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- Если ты все решил, переходи к Symfony или Laravel
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.

Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:

https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md

Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md

Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра.

Вот неофициальный роадмап (карта того, что желательно изучить): https://miro.com/app/board/o9J_lbUUBBQ=/

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.

- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md

Что почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1
- Новости IT на англ. https://news.ycombinator.com/
- какой-то древний, устаревший, но большой и на русском справочник по веб-разработке, посоветованный аноном: https://starcat.dp.ua/doc/wdh/

Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492

У ОПа нет аккаунтов и групп вконтакте, в фейсбуке, в твиттере, все "пхп-треды" там поддельные.

Платиновые вопросы

- Почему PHP? Потому что вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Clone or Download -> Download ZIP, распакуй на рабочий стол и получи личную копию сайта, не требующую интернетов.
- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу (ищи в архиве по слову "устроился").
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.

Я другой ОП
2 2571805
>>571790 (OP)
Как можно реализовать перенаправление с site.ru/profile/1, на файл site.ru/profile? Типа пользователь вбивает нужный ему профиль в браузер site.ru/profile/1, где 1 это id профиля, а далее этот профиль обрабатывается в файле profrile.php?
3 2571822
Какой бук посоветуете почитать по PHP?
От начинающего уровня до адвансет, по ларе можно. Желательно с заданиями.
Очень люблю именно книжный формат
4 2571846
>>571805
При помощи htaccess. Хотя я думаю, что можно и c get запросами справится.
Унтерменш 5 2571862
Вкатился в тред но не на работку...
7 2571896
>>2571233 →

>Ещё как есть


Покажешь как оно реализованно? Т.е байтоёбство в чистой пыхе.

>Сходи в ВК


Сходи ка нахуй в интернет и почитай, что есть KPHP

>Про пакетный менеджер и асинхронность тебе уже отвечали


Пакетный менеджер - composer
Асинхронность - реализуемая самой (однопоточной) пыхой.

Вы тут все колитесь, что-ли?
8 2571991
>>571862
А чего так? После праздников кол-во вакансий подросло, для джунов даже есть, даже БЕЗ битрикса. Правда оффлайн в основном, но что поделать? Полгода-год в офисе, и ты свободен как птица-кодер, работай где хош.
Унтерменш 9 2572103
>>571991
Страшно идти на собеседование. Все время кажется, что я еще не готов и нужно сначала пройти все темы, а потом уже откликаться.
Я наоборот хочу хотя бы год-два в офисе поработать. Если возле дома получится найти, то вообще заебись
10 2572133
>>571790 (OP)
(репост с прошлого треда)
Это вообще нормально что Phpstorm просит по умолчанию fast-cgi -интерпритатор? Почему не FPM?

Первый раз с php работаю, настраиваю phpstorm-локальный сервер. Поставил пак (по уроку)
- sudo apt install php-fpm php-cli php-common php-json php-mysql php-phpdbg php-mbstring php-imap php-dev php-curl php-xdebug
Пришлось еще устанавливать (потому-что шторм ругался)
- sudo apt install -y php8.2-cgi

И еще вопрос, новая версия шторма уровень языка 8.2 поддерживает, или нет пока-что?
11 2572327
>>571790 (OP)

>Клуб изучающих PHP


За пару дней эту шляпу изучил.
А пидоры тут клуб организовали, неиначе, как для интимных встреч
12 2572386
>>572327
Ето не клаб а форпост. Сюда иногда набигают питонисты с жсерами, чтобы по ебалу получить от четких пхп поцанчиков.
13 2572404
Разработчик Bitrix Framework - это человек, который натягивает сайт на CMS Bitrix или нет? https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43 Это курс для CMS Bitrix?
14 2572445
>>572404
Битриксоид это лох, который закапывает свою жизнь в болоте этого говна. Курс для разработчиков, но он тебе мало поможет на практике там все пилят костыли разной степени всратости потому что чаще всего бизнес логика выходит за пределы взглядов на жизнь разработчиков этой хуйни. На работе предстоит натягивать верстку на говнокод, пилить свои говнокомпоненты, наебывать заказчика и постоянно колупаться в админке как веб-мастер из нулевых.
Учи сразу ларавель и английский
Работал с этой хуйней первые 8 месяцев когда вкатывался
15 2572475
>>572445
Сейчас мне нужно изучить именно битрикс, поэтому спрашиваю.
А есть варик без опыта вкатиться в LAravel на фриласн?
best-guilty-pleasure-anime-u1.jpeg99 Кб, 1877x983
16 2572587
>>572133
Анончики, расскажите же ну, вы тоже PHP-CGI Server в шторме используете, или я один такой лох?
17 2572598
>>571866
Держи дружок-пирожок
https://habr.com/ru/company/skyeng/blog/666626/
18 2573269
>>572445
Ну видишь, ты же вкатился. Значит и я так же вкачусь. Да, битрикс кал, но зато сразу на удаленке, еще и 30к/мес, а в моем селе такие бабки получают только люди проработавшие 3-4 года+, выше 35-40к тут только начальники. Потом через полгода-год перекачусь на "тру"-фрейворк, наверное на лару.
19 2573402
>>573269
Он имеет ввиду что потратишь время. И понимание как правильно программировать, сейчас везде требуют понимание ооп, solid и тд. Проекты делают со ставкой на расширяемость. От себя скажу, битрикс это очень необоснованно тяжелый фреймворк, магазины на нем у меня даж с рабочего компа (и с некоторых телефонов) не открывались, с чего я кекал, оперативку или проц нахлухо сажает - просто сайты не открываются. А для бизнеса важны такие вещи как CRP, FCP, RAIL (если коротко это скорость и реакция интерфейса, скорость загрузки на стороне клиента). Лучше выдрочить html5/css конкретно, и потом в нормальный фреймворк лезть. Ты плохому только голову набьеш, изучая битрикс и не дай боже 1С(который с ним связан). 1С можно и к laravel например прикрутить, но это уже другая история.

Мало того, скоро на go полностью или частично перелазить будем, в РФ он приживается, судя по всему - и на эту работу часто требуют хороший опыт с PHP. Ну если ты хочешь стать кибер-таджиком, которого ни заказчик свинорылый не будет уважать, ни другие программисты - это конечно твое дело. Кто-то же должен толчки мыть как говориться.
20 2573428
>>573269
А можно сразу вкатываться в тру фреймворк и не тратить время на говно
21 2573546
>>573402

>магазины на нем у меня даж с рабочего компа (и с некоторых телефонов) не открывались, с чего я кекал, оперативку или проц нахлухо сажает - просто сайты не открываются



Чел, ну ты как-то совсем не шаришь. В том же и смысл, что это говно из коробки может поднять любая домохозяйка. Но оно будет еле шевелиться. Вот тут и нужны ПОГРОМИЗДЫ 1С. Это как демо-версия, поднимающая продажи лучше любой рекламы. Популярность есть, база уже готовых решений есть, работы уйма. Да любая макака с правильным фреймворком сто раз успеет от голода сдохнуть, пока битриксогосподин будет от лишних бабок отмахиваться.
22 2573580
>>573546
1C это десктопное приложение, с битриксом он не связан. 1с 'программист' пишет всякие модули на русском языке для бухгалтерш в основном.

Тебе от 1С нужно только мелкие данные типа остаток товаров и цены, это можно и так отправить по http, на любой твой фреймворк.
Сам битрикс написан на корявом php/js на сколько мне известно. И копаться во всем этом дерьме мне например гордость не позволит, я хрчу любить свой язык, и уважать своих клиентов.
Снимок экрана от 2023-01-14 14-39-32.png40 Кб, 799x272
23 2573603
>>573546
Вот пример по запросу на битрикс на hh(пикрил)

> — Увеличение скорости загрузки сайта, обеспечение бесперебойной работы сайта при высоких нагрузках;



Это уже смешно, какой нахуй highload и быстрота интерфейса на битриксе? Это задание из разряда "чисти унитаз вилкой". И когда я слышу Jquery - сразу у меня реакция либо молча развернуться и уйти, либо узнать как дохуя платят или нет, потому что за легаси браться я буду только в хорошей компании и за хорошие деньги.
Они там фантазируют, и Vue им подавай, и spa наверное хотят и быструю загрузку и хайлоад. Это же просто детские фантазии, из разряда что у меня есть кнопочка "сделать пиздато" и она у всех программистов есть
24 2573826
>>572587
Какая блять разница, что ты используешь в шторме? Это же максимум для дебага или запуска скриптов используется и обычного CGI для этого более чем достаточно.
А проекты в наше время разворачиваются в докерах как правило.
25 2573940
Как генерировать определенное кол-во чисел в заданном диапазоне,но чтобы они не повторялись за один проход.
язык php
26 2573963
>>573940
Два варианта:
1) они должны быть сгенерированы не случайно, а по какому-то алгоритму, гарантирующему неповторяемость. Самое тупое это инкрементом, повторяться точно не будут ;) Ну или к примеру есть такая штука, как uuid (хотя это не совсем число, но ты понял), шанс повторения крайне низок. Хотя, я сейчас подумал, у тебя же известное количество чисел из диапазона, так? Ну так и разбей диапазон на n интервалов и генерируй случайные числа уже внутри них. Повторяться не будут точно, но "случайность" тогда будет не совсем случайной всё же.
2) либо после генерации убеждаться, что таких чисел ещё не сгенерировано, для чего нужно хранить уже сгенерированные числа в некой структуре, подходящей для быстрого поиска. В php вариантов по сути и нет, юзай хэш мапу, то бишь, ассоциативный массив. Сгенерировал число, проверил нахождение его в массиве -и или записал в массив или перегенерировал.
27 2573995
>>573963
Первый вариант я нихрена не понял,тк новичок
28 2574051
>>573995
Гуглить видимо все не научишься тоже?
Мимопроходил
29 2574092
>>573603
>>573580
>>573402
>>573428
>>573546
Понятно, битрикс это кал. Но у меня на собеседовании на неоплачиваемую стажировку в Ylab спрашивали про дизайн паттерны, про mvc, ооп, про теорию бд типа что такое нормализация, денормализация, были вопросы по запросам sql, ну и конечно простые вопросы по синтаксису пхп.

Вот если они такие вещи спрашивают, значит они норм разрабы? Или нет? Я просто думал что дизайн паттерны и теория бд это вообще не про битрикс, я думал там хуяк и готово, не надо в такие подробности вдаваться. Ну выучил битрикс орм, инфоблоки да их mvc-битрикс и всё клепай на здоровье, разве не так?
30 2574114
>>574092
Говорят на собесах все профессионалы, а когда устроишься - обомлеешь какая тупая контора

Ну если начал, работай. Относись как к работе, просто я бы психологически такое не вывез, для меня кодить это труд, это много энергии забирает, а кодить говно не могу. Хз, долго ли вообще на этой параше (битриксе) можно работать. Это просто велосипед на велосипеде, при том быстро-устревающий. Все хотят магазы типа озона или wb, кому нахуй усрался этот битрикс. В рф ничего хорошего не делают сами, фреймворки и новые языки это выход из ямы, эволюция читай, а поддерживать это преступление против природы, называемое битрикс или 1С только шизы могут.
31 2575825
>>571805

Вот ответ: >>2575823 →
32 2575833
>>572327

Наверно разочарую тебя, но это клуб именно для изучения PHP.
33 2575845
>>573603

Я подозреваю, что под "увеличением скорости работы" там подразумевается прикручивание кеша страниц (не работает для авторищованных пользователей, а также вызывает проблем с устареванием кеша, что обычно решается кнопкой "сбросить кеш") + может быть какой-то склеивальщик статических файлов в многомегабайтный JS + CSS вместо отдельных файлов на каждый раздел.
34 2575854
>>573603

> и spa наверное хотят и быструю загрузку



Сколько я не видел SPA, там почти всегда медленная загрузка: вместо того, чтобы показать сразу контент, пользователю показывают круг, потом грузят мегабайты яваскрипта, от которых почтенный проц скрипит и греется, а потом грузят данные из 10 API по очереди.

Хотя SPA может дать преимущества, такие, как поддержка работы оффлайн, на практике он почему-то только замедляет загрузку и иногда ломает навигацию.
35 2575865
>>573940

Есть пара вариантов:

1) если чисел немного, то сделать из них массив, перемешать и взять первые N элементов

2) если много, то запоминать выпавшие числа, и, если они выпадут снова, то генерировать их заново
36 2575963
>>575845
А кеш через php(или js) нельзя чистить?
Например при новой сессии?

Или доступ к браузерному кешу вообще заблокирован? (знаю что в html-api вроде полный доступ к local storage/session storage/cookie есть)
37 2575965
>>575854
А не спа типо медленной загрузки не бывает. Полчаса висит белая пустая страница, а потом хлоп - говно из БД прилетело. Причем здесь спа? Ты наверно просто вообще нихуя не видел и не с чем сравнивать.
38 2575966
>>575865
Нужна шафл функция
39 2575993
>>575966
берешь постое число p большее чем тебе надо сгенерировать последовательность, берешь первообразный корень q по модулю p и вычисляешь
q1(mod p), ..., qp-1(mod p)
40 2575995
>>575993
Я не шарю в такой математике
41 2576001
>>575865

>2)


При объеме выборки -> генеральной совокупности время выполнения -> бесконечности.
42 2576031
>>575995
Cтепени еще не проходили? Пиздец, уже третьеклассники во вкатуринг пришли, скоро в 15 на пенсию отправлять начнут.
43 2576092
>>576031
Проходили,я но я плох в этом
44 2576099
>>576092
Короче, умножаешь число на самого себя, а в качестве результата на итерации берешь остаток от деления произведения на другое число. Только нужно нагуглить пару чисел q и р, чтобы последовательность хоть немного походила на псевдорандомную.
47 2577899
Проработал на первой работе год, теперь ищу новую работу, но планирую в резюме указать два года опыта, дабы проще в поиску было и зп побольше. Насколько это вообще действенно и как меня могут раскрыть, если к тех вопросам я хорошо подготовлюсь? Расскажите мб кто делал подобное
48 2578000
>>575965

Покажи быстрый SPA без мегабайтов JS. Сколько я не видел SPA, они все тормозные. Сбербанк - грузится медленно, например.

Быстрая загрузка без SPA бывает часто, например, https://news.ycombinator.com/ отдает главную за 183 мс, и это при том, что он в США. То есть из этих 183 мс больше половины это пинг до сервера.

Очевидно, что SPA при прочих равных медленнее, чем отдача с сервера готового HTML. Так как SPA нужно загружать тяжелое JS приложение, делать REST запросы на выборку данных итд. Это конечно можно оптимизировать и "впечь" в страницу, но тогда это будет уже не совсем и SPA.

SPA имеет смысл для "приложений" с высокой степенью интерактивности, например, электронные таблицы, графический редактор, мобильное приложение, где надо прокручивать ленту с картинками и лайкать их, и тд. Для обычного сайта со страницами или магазина он больше мешает, чем помогает. А глупцы этого не понимают, не понимают, что бывают разные типы сайтов и просто думают ,что SPA всегда лучше чем не SPA. Этим они лишь демонстрируют свою глупость.
49 2578001
>>575963

Кеш на сервере, чистить можно, но тогда теряется его смысл.
50 2578003
>>575993

В твоем варианте последовательность чисел всегда будет одинаковая и не очень-то случайная. Хотя в задаче ничего не написано про случайность. Но если случайность не нужна, то проще сгенерировать последовательность 1..n, чем заморачиваться с поиском простых чисел, что само по себе нетривиальная задача с огромной сложностью.
51 2578006
>>576001

Возможно, что и так. Тогда можно сделать альтернативный алгоритм: сделать массив чисел, брать из него случайное, и удалять его из массива. Тут сложность будет O(N × M) в худшем случае, если не оптимизировать поиск/удаление из массива.
52 2578007
>>576099

Есть линейный конгруэнтный генератор, он похож по принципу, но не использует возведение в степень, а лишь умножение.
53 2578036
Есть php файл, воткнул в него html код с фронтом от бутстрапа, он работает и показывается в браузере, вот только сам php нет, пробовал и через include разсметку подключать - она есть а бэка нет. Из-за чего такое?
54 2578121
>>578036
Ну у тебя вебсервер-то есть?
55 2578232
>>578036
У меня весь мой проэкт в инклюдах и рекверах
56 2579440
Мертвый тред,скоро будет как руби
image.png326 Кб, 1165x777
57 2579773
Два Ч, спешу поделиться радостью! 7 лет ждал вката в программрование. Всё это время учил PHP (psr-*), дрочил алгоритмы, разные фрэймворки... ну короче, я джуниор битрикс разраб!

Спасибо тому анону, что 7 лет назад уговорил меня уйти с работы и заняться самообразованием. Это время прошоо незаметно. Джун в 35 это нормально.
000034349056.Jpeg128 Кб, 600x598
58 2579930
>>579773
толсто
59 2580239
>>579440
Вот кстати да, где-то во времена выхода php7 мне казалось, что пыха не умрет вообще никогда, но сейчас что-то уже такое назревает. Слишком много новых языков, слишком динамически всё развивается, слишком устарел дизайн самого php.
Джуны и прочий аутсорс уйдёт в голанг. Да и в целом я что-то смотрю, почти всё, что возможно, переписывается с php на go, даже странно, почему так
Ну и джуны может в питон, что-то он прям активно продвизается всякими говноскиллбоксами
Геи в nodejs
Копораты за $$$ так и останутся сидеть на джаве и шарпах
И тп.

Будет как с руби, легаси есть, какой-никакой движняк есть, а треды мертвые и тому подобное околоболото.
Полной и окончательной смерти конечно не будет, но только потому, что её в принципе не бывает, единичные решения можно найти на любом существовавшем языке, от фортрана до делфи. Кроме хаскелля, лол.
60 2580249
>>580239

>Слишком много новых языков


Кек, и че там слишком много такого появилось за последние несколько лет?
61 2580257
>>580239

>Джуны и прочий аутсорс уйдёт в голанг


Земля металлом этим джунам.
62 2580395
>>580249
Ну эликсир например. Также руби набирает популярнось.
16741574125000.mp45,4 Мб, mp4,
1280x720, 0:24
63 2580397
64 2580664
>>580395
Бля, то руби сдох, то опять набирает популярность. Вы определитесь уже
65 2581045
>>580664
Руби Шредингера
66 2581136
При асинхронных запросах скрипт должен быть отдельный под каждый запрос? Или в тот же самый можно вызвать, откуда идет запрос и там же его обрабатывать?
67 2581173
>>580239
За питоном ничего не стоит
68 2581308
>>581136
Рассылаешь пачку запросов и ждешь ответы, какие скрипты?
69 2581317
>>581308
Если запрос идет к этому же серверу. Асинхронно там в таблице данные поменять например.
70 2581989
>>580249
Kotlin перестал быть экспериментом и теперь уже де факто стандарт в мобилках и серьезно наступает на бекенды.
Rust медленно завоёвывает популярность, у него другая ниша относительно php, но хайлоад и хайлоад-корпораты будут уходить туда (ну или сначала в го, а потом туда).
Про го уже всё сказано сто раз, это отличный компромисс между отличным перфомансом и простотой/уровнем входа. Сам язык мне может и не очень нравится, но просто по моему опыту, целая куча компаний с кодом php находятся в переезде на него, хотя бы под соусом "микросервисов". То есть, вижу сильный тренд php->go, но вообще не вижу чтоугодно->php.
Java и C# тоже развиваются, особенно шарпы. Корпораты с них никогда не слезут, а с новыми свестелками (да даже с появлением и популярностью сраного spring boot) всё больше проектов просто сразу начинается на них.
Typescript и всякие эксперименты типа deno тоже становятся всё популярнее.

Понятно, что явного конкурента нет и пыха не умрет в ближайший год или даже пять лет, загнивание может длиться годами.
Я скорее говорю о том, что пыха была хороша как простой и нетребовательный к разработчикам язык, чтобы делать дело, отсюда и всякие CRM на нём, и бложеки, и тд и тп.
Сейчас же есть уже куча языков или сразу простых, или с упрощающими жизнь фичами, нет такого копроративного ада, что был лет 10 назад. И это убивает "уникальность" пызи из-за которой он и был так популярен.
Теперь пыха это просто язык, "один из". Причем даже не самый модный, далеко не самый. А это означает, что новые проекты будут писаться в основном на модных, а php будет жить в основном в виде поддержки легаси, ну и фанатиков. Ещё не смерть, но уже и не жизнь, так, анабиоз.
71 2581990
>>581989
TLDR раньше был простой php и сложная страшная джава.
Сейчас есть простой go, простой nodejs (точнее нубы так думают) модный kotlin, модный c#, супер модный rust и тд и тп. И простой немодный php.
Итог немного предсказуем.
72 2582001
>>581990
Сейчас понабегут люди, которые воспримут мои слова о том, что пыха слабеет на свой счет и начнут спорить просто из чувства несправедливости.
Так вот, ребят, вы -это не язык, не принуждайте себя. Исчезнет один - пересядете на другой, вы ж не тупые. Язык это просто инструмент, и когда вам говорят, что ваша дрель начала хуже работать, вы не спорите, а меняете её на любую, какая понравится.
73 2582011
>>582001
Самое время влетать в пхп. В течение 2 лет изучаете го. Через эти 2 года пересаживаетесь на смежный проект. Через год работы на смежном проекте полностью переходите на го. Вот и всё. Ну еще можно пойти учиться, да и сразу устроиться в "крутой" стек. Но мне кажется это потеря времени, да и пхп знать надо любому веб-разрабу.
74 2582117
>>581990

> nodejs


это платформа,а не язык
75 2582218
>>582011

> пхп знать надо любому веб-разрабу.


Пиздеж, не надо. Можно знать вообще любой язык и это будет нормально. Я знаю кучу очень сильных инженеров, которые про php только слышали.

> Ну еще можно пойти учиться, да и сразу устроиться в "крутой" стек. Но мне кажется это потеря времени


Лолчто. Потеря времени это как раз тратить лишние два года
76 2582479
>>582218
Что здесь забыл, если такой умный?
77 2582584
>>581989

Ошибки в твоих рассуждениях:

- Kotlin основан на экосистема Java и чтобы его изучить, надо сначала изучить Java и все, что с ней связано. При работе с Kotlin нужно взаимодействовать с Java-библиотеками. Это явно не простой язык для начинающих.

- Rust это улчшенный Си, тебе сначала надо изучить Си и все его низкоуровневые тонкости, чтобы понимать Rust. Rust это язык для людей с 10+ годами опыта в системном программировании, а не для вкатывальщиков в поисках легких денег. Плюс, по Rust нет русской документации.

> хайлоад


Это (цифра с потолка) 1% проектов, ничтожная доля рынка. Никому не нужен твой хайлоад. Битрикс, например, намного востребованнее.

> Сам язык мне может и не очень нравится


Язык мягко говоря со странностями, если ты меняешь тип поля с закрытого на открытое, надо менять регистр букв.

> целая куча компаний с кодом php находятся в переезде на него, хотя бы под соусом "микросервисов".


Если у людей много лишних денег, то это конечно их дело как их тратить.

> Java и C# тоже развиваются


Их проблема (как и PHP) в том, что они поддерживают совместимость и ты не можешь изучить просто Java 17. Тебе заодно надо изучать легаси из всех предыдущих 16 версий, так как оно может встретиться. Мне не очень нравится это совместимость, нужно в определенный момент просто выбрасывать легаси и переделывать язык с нуля.

> Сейчас же есть уже куча языков или сразу простых, и


Приведенные тобой языки не простые и их вряд ли освоит вкатывальщик. Странно, что ты не привел Swift, он подходит под твои требования гораздо лучше чем этот энтерпрайзный хлам.
78 2582590
>>581990

Твое мнение подтверждается ли статистикой вакансий на hh без опыта?

Извини, но я статистике доверяю больше, чем анонимным экспертам с форумов с картинками.
79 2582605
>>582584

>пхп круто потому что он для бедных, для далеких от айти домохозяек и дегенератов, которые не способны изучить что-то сложнее


Это как тебя бы защищали словами "Отстаньте от юродивого! Как вам не стыдно!".
Ахуенная защита пхп! Если бы ты адвокатом работал по уголовным делам, прокурор бы на суде офигевал и начинал защищать подсудимых от тебя.
80 2582660
Хватит холиварить. Лучше чекайте мою придуманную регулярку для проверки моб. ном. телефона:

^(([+]\s7)|(8))(\W[0-9]){10}$
81 2582663
Звёздочка исчезла. Амбу чини хули ты вобще хоть чтото делаеш на своём тугом сайте кроме как добавлять тупые всратые капчи????>>582660
82 2582846
>>582605
А вдруг этот анон был адвокатом? Но потом его сын загадал желание, чтобы папа не мог врать. Желание сбылось. И теперь анон адвокат не может врать?
83 2582915

>пхп круто потому что он для бедных, для далеких от айти домохозяек и дегенератов, которые не способны изучить что-то сложнее


ну так анон же про это и говорил? Что для бедных есть модный го и мб другие языки, а для богатых пхп это не лучший выбор?
84 2582996
>>582915
Хз, чисто посмотрев украинский рыночек я сделал вывод, что ПХП достаточно хороший выбор для быстрого вката. Даже сказал бы, единственный если ты джун. На условном вротенде 500 человек на вакансию, на любом бекенд ентерпрайсе по 100+-, а тут Пыха с самым большим количеством вакансий и 10-20 откликами.
85 2583085
>>582996
Откликов поменьше, вакансий побольше, но на удаленке почти та же ситуация, что на любом стеке. Вместе 500 откликов увидишь 200-300. А вот в офисе да, действительно 10-20-30 в зависимости от милионника. Если дс, то может и до сотки дойти.
86 2583142
>>582996
Ну и ты сам подумай, что вообще означает много вакансий с 10-20 откликами. Что там придется делать и чему ты там научишься. И кто там работает.
Скорее всего это говноаутсорсы на говносрмках с бывшими строителями в сотрудниках, которые тебя не научат ничему хорошему.

Количество почти всегда противоположно качеству, особенно в плане работодателей.

И "найти работу программистом" ващет нифига не равно "действительно решать инженерные задачи". Я видел таких людей, просидев десять лет за каким-нибудь drupal или bitrix, они умеют накликивать веб формочки или странички, но при этом от джуна они ушли очень недалеко. И больше, чем "за еду" они не получают и получать не будут. Ну, тут со скидкой на российские реалии, где жалкие 50к это уже космические деньги в регионах.

А я считаю, что сравнивать результаты надо не с нулём, а с тем, что ты мог достичь, но не достиг.
Взяв тех же знакомых, о которых я говорил. Некоторые просидели всю жизнь в аутсорсе и радуются "сеньорским/тимлидским" 80к рублей.
А другие, сразу попав в нормальную контору, получают под 500к и очень ждут, когда кризис закончится, чтобы устроиться в модный стартап и ещё раз удвоить свою зарплату.

Я к чему это всё написал, где черт возьми ваше честолюбие? В какой момент для вас "легко найти работу айти-бомжом" стало рассматриваться, как вариант?
87 2583211
>>583142

>Я к чему это всё написал, где черт возьми ваше честолюбие? В какой момент для вас "легко найти работу айти-бомжом" стало рассматриваться, как вариант?



Да, действительно, обычно об этих конторах ещё отзывы паршивые.

Лично за себя отвечу.
Очевидно на говноработы идут не из хорошей жизни. Для меня найти работу в той области, куда я хочу вкатиться просто невозможно ни по времени ни по средствам, ни по вводным. Конкурировать с другими вкатунами просто не вижу перспектив, всегда буду в пролёте среди таких же но всегда немного лучше меня. На 30 вакансий(из которых большинство с 1 годом работы(знаю) и аппер интермедиат инглишем, много из которых даже не на удалёнке, когда я в селе живу) по всей Украине(мобилизация). Даже резюме несчего состряпать.
Сидеть сложа руки? Считаю лучше попытаться отработать на говноработке год, потратить на себя немножко денег и с уже полученным опытом, с прокачанным инглишом перекатиться в куда получше место и на лучший стек.
88 2583230
>>583142
В любом случае, скорее всего если не найду работу, потрачу этот год ниначто буквально. Или 100 откликов, и ситуация в стране, когда вакансий стаём все меньше и меньше - не так страшно как мне кажется? Я просто не опытный, могу чушь нести.
89 2583346
>>583142
С каких пор laravel/symfony вакансии стали нереспектабельны? На них те же 20-50 откликов в провинциях. На удаленке частенько появляются вакансии, пусть и по 300 откликов, но в пхп тенденция такова, что найти шарящего человека здесь сложнее, чем в java/spring или .net'e.
image.png40 Кб, 817x206
90 2583423
>>583346
В Украине как я понимаю рынок всё таки другой немного. В провинциях нет вообще вакансий, либо я не знаю как их искать, лтбо не знаю что ты имеешь ввиду под провинцией. А на удалёнке не то чтобы много откликов.
Да и ЗП, про которые выше анон написал, таких низких для лидов/синьоров нет.
image.png150 Кб, 854x763
91 2583450
Решения задач по порядку:
https://onlinephp.io/c/92722 - проверка и исправление моб. номера
https://onlinephp.io/c/984d2 - цензура
https://onlinephp.io/c/f60fa - вытащить email'ы из текста
https://onlinephp.io/c/b8b62 - grammar Nazi
https://onlinephp.io/c/03ff6 - grammar Nazi replace

Если честно устал даже. Вроде сейчас кажется всё простым, но когда решал было не очень просто. Решения конечно не совсем полные, но и описания заданий тоже не до конца точны, как мне показалось. Спасибо ОП'у за такой чудесный туториал. Пока нигде ничего лучше я не видел. Завтра продолжу изучать и решать задачи.

Кстати, а можно ли выставлять решения на гитхаб сразу? Создать там, например, репу с названием "php playground", где будут вот такие простые задачи? Или как такие репы называют? Или их вообще не заводят? Мне просто хотелось бы сохранять эти решения, во-первых, для проверки прогресса со временем, во-вторых, возможно, когда-то где-то мне что-то из этих решений понадобится, кто знает...

вкатун в PHP 26 лвл тнн рнн сыч шиз
92 2583495
>>583450
В мыле не стал искать "+", т.к. вроде в мылах не бывает плюсиков. С другой стороны, какая разница? Это же просто задание... Ну да ладно, там ничё сложного вроде, докинуть к точке и черточке еще "+".

По поводу задания граммар наци - как выводить ошибки? Вот например есть текст "Ты умный?Шызанутый но умный.". Как сделать так, чтоб регулярка вытащила и ошибку, где пробел пропущен, и ошибку, где ШЫ вместо ШИ, и ошибку, где нет запятой?

Просто в задании ведь написано "выводить кусок текста". Но для того, чтоб вывести кусок текста, мне приходится написать \\S+[,.;:!?]\\S, либо через {N, N} обозначить количество символов с двух сторон. Но в таком случае, регулярка найдет сначала самую первую слева ошибку, там, где нет пробела после знака вопроса. Затем она вытащит мне сразу, скажем, по 20 символов слева и справа от этой ошибки, а там ведь еще и другие ошибки есть! Но они не будут учтены, а просто пойдут в текст первой ошибки.

Но по заданию, как я понял, надо учесть каждую. Для этого мне что, отдельно делать миллион регулярок и через цикл проходить по ним? Для пропущенных пробелов одна регулярка, для неправильных букв - другая. Так? Но это ведь получается громоздко? Ладно, я устал кароче!!! Завтра может еще подумаю, а может просто дальше пойду, хз.

Сорри, если показался грубым. Я не наезжаю или еще что, просто... просто вот так пишу наверной!
93 2583637
>>571790 (OP)

>Знание REST API будет плюсом.


В REST API страница смотрит на запрос, который был ей отправлен, url, далее она из этой информации либо добавляет(POST), либо обновляет (PATCH), либо показывает (GET) информацию, и т.д. Что еще нужно знать о REST API? на juniour?
И можете, пожалуйста, поподробней сказать, что это такое?
header("Access-Control-Allow-Origin: ");
header("Access-Control-Allow-Headers:
, Authorization");
header("Access-Control-Allow-Methods: *");
header("Access-Control-Allow-Credentials: true");
header("Content-type: application/json; charset=UTF-8");
94 2583670
>>583637
К сожалению тебе еще на стажера рано. Изучи хотя бы минимум. Не по двачу.
95 2583672
>>583637
Читни вот это. https://www.kobzarev.com/wp-content/uploads/books/php/PHPbook.pdf Хотя оно устарело. Но для твоего уровня незнания матчасти подойдет
96 2583757
>>583672
Что за матчасть то?
https://www.youtube.com/watch?v=COb-KpOfCSw я вот по этому иузучал, что езе есть?
97 2583795
>>583211

> и с уже полученным опытом


> с прокачанным инглишом


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

>>583346
Сами по себе фреймворки норм и на них встречаются нормальные вакансии. Но сам фреймворк мало что значит, значат конкретные работодатели. И если ты видишь перез собой вакансию laravel-разраба с копеечным рейтом и малым количеством откликов - значит в этом месте на ларавеле будешь делать какую-нибудь херню, без бест практисов, стайлгайдов и тп, как понравится владельцу, так и будешь делать.
Я видел и местечковые интернет-магазины на ларе, знаешь ли.

> найти шарящего человека здесь сложнее, чем в java/spring или .net'e.


Из чего кстати элементарно следует, что большая часть "коллег" и лидов не шарят. Ты точно хочешь работать вместе с таким контингентом? И чему они тебя научат? Даже если ты сам будешь самообразовываться, представь, что ты такой приходишь и говоришь "давайте юзать гит, я поизучал, это правильно и технологично", а они тебе "а нам и по фтп норм, всегда так делали". И будешь как дурак один со своим гитом сидеть :)
История кстати невыдуманная, я где-то в начале-середине десятых с такой конторой сталкивался.
Нужно сразу работать в системе, которая задизайнена под инженерию. В одиночку ты ничего не выстроишь, только в лучшем случае сопьешься.

>>583230
Ищи, конечно и удачи тебе. Речь о том, чтобы по возможности сразу искать подходящее место с перспективой роста.
Иначе можно стать аналогом охранника из пятерочки. Да, тепло и денежки есть, только вот годы идут, а лучше жизнь не становится и не станет.
98 2583933
>>583795

>фтп


А как гит и фтп связаны? Разве фтп не для доступа к файлам на сервере должен использоваться?
99 2583945
>>583933
В олдскульном пхп он используется для "деплоя" и потом для редактирования скриптов на живом сайте.
Это потом хипсторы всякие новомодные гиты эти ваши принесли.
100 2583958
>>583945
типа гитом деплоить это ок
101 2583959
>>583958
Особенно охуительно когда при таком колхозе ветка на проде постоянно не в мастере находится.
102 2584025
>>583945
Речь даже не про деплои, а про то, что в некоторых конторах гита нет вообще, просто каждый редактирует свои файлики локально, а потом заливает их на продовый сервер по фтп и всё. Если чьи-то правки уже перетерли - это его проблемы.

>>583958
Без гита обычно сложно использовать какой-нибудь гитлаб или гитхаб, на которых уже и настраивается нормальный пайплайн деплоя в современном мире.
103 2584341
>>583142

> А другие, сразу попав в нормальную контору, получают под 500к и очень ждут, когда кризис закончится, чтобы устроиться в модный стартап и ещё раз удвоить свою зарплату.



Ну кого ты пытаешься обмануть. Если бы было можно вместо PHP изучить другой язык за то же время и с 0 опыта получать от 500к, все бы так и делали. Но почему-то этого не происходит. Наверно, потому что твои фантазии не совсем соотносятся с реальностью.

Я вообще, замечаю, что среди анонимов не популярны реальные языки, на которых можно делать реальные проекты для бизнеса, а какие-то экзотические языки, которые никто не использует. Потому, что аноним любит изучать экзотические языки, а не работать.
104 2584361
>>582660

Надо постить регулярки на сайте вроде regex101, там ее и проверить легко.

Твоя регулярка, как я понял, выглядит так:

^(([+]\s*7)|(8))(\W*[0-9]){10}$

В общем, неплохо. Цифру 8 не надо было брать в скобки, они там не нужны. В остальном верно.
105 2584368
>>583795
Спасибо анон, и тебе удачи.
Я прислушаюсь, и попробую понастороженее быть в поиске работы. Если что попробую побыстрее(когда смогу) перепрыгнуть на понравившийся стак На инглиш я хочу денег накопить и с нейтивами по вечерам за деньги разговаривать - для этого деньги нужны, собственно для денег нужна и хоть какая работа.
106 2584381
>>583450

Если хочешь, ты можешь завести репозиторий на гитхабе, но думаю, скоро ты такие простые задачки уже будешь на автомате решать, так что если только для истории, чтобы потом вспоминать, с чего начинал изучение PHP.

Спасибо за замечания по учебнику, они очень полезны.

> https://onlinephp.io/c/92722 - проверка и исправление моб. номера



В общем, верно.

> https://onlinephp.io/c/984d2 - цензура



Верно.

> https://onlinephp.io/c/f60fa - вытащить email'ы из текста



Увы, неправильно составлена регулярка. Например, email вида vsevolod0JX-ryurikovichANUSmaqknilPUNCTUMr6!hu она не найдет. Вообще, есть спецификация, какие символы могут входить в email, но она очень сложная и там получится километровая регулярка (если любопытно, гугли RFC 2822, пункт 3.4.1 ).

Для этой задачи email считается следующее:

- конструкция вида имя@домен
- имя может содержать 1 или более букв (включая кирилицу), цифр, минусы, точки, плюсы, подчеркивания
- домен состоит из 2 или более частей, разделенных точками. Каждая часть состоит из букв (включая кирилицу), цифр, минусов.

> В мыле не стал искать "+", т.к. вроде в мылах не бывает плюсиков



Бывают, просто редко используются и не везде поддерживаются.

> https://onlinephp.io/c/b8b62 - grammar Nazi



Почти верно, но выдает ошибку на правильное слово "разделал": https://onlinephp.io/c/a9b5b

Думаю, нужно проверять, что "зделал" идет в начале слова, а не в середине.

> https://onlinephp.io/c/03ff6 - grammar Nazi replace


Тут та же проблема со словом "разделал".
106 2584381
>>583450

Если хочешь, ты можешь завести репозиторий на гитхабе, но думаю, скоро ты такие простые задачки уже будешь на автомате решать, так что если только для истории, чтобы потом вспоминать, с чего начинал изучение PHP.

Спасибо за замечания по учебнику, они очень полезны.

> https://onlinephp.io/c/92722 - проверка и исправление моб. номера



В общем, верно.

> https://onlinephp.io/c/984d2 - цензура



Верно.

> https://onlinephp.io/c/f60fa - вытащить email'ы из текста



Увы, неправильно составлена регулярка. Например, email вида vsevolod0JX-ryurikovichANUSmaqknilPUNCTUMr6!hu она не найдет. Вообще, есть спецификация, какие символы могут входить в email, но она очень сложная и там получится километровая регулярка (если любопытно, гугли RFC 2822, пункт 3.4.1 ).

Для этой задачи email считается следующее:

- конструкция вида имя@домен
- имя может содержать 1 или более букв (включая кирилицу), цифр, минусы, точки, плюсы, подчеркивания
- домен состоит из 2 или более частей, разделенных точками. Каждая часть состоит из букв (включая кирилицу), цифр, минусов.

> В мыле не стал искать "+", т.к. вроде в мылах не бывает плюсиков



Бывают, просто редко используются и не везде поддерживаются.

> https://onlinephp.io/c/b8b62 - grammar Nazi



Почти верно, но выдает ошибку на правильное слово "разделал": https://onlinephp.io/c/a9b5b

Думаю, нужно проверять, что "зделал" идет в начале слова, а не в середине.

> https://onlinephp.io/c/03ff6 - grammar Nazi replace


Тут та же проблема со словом "разделал".
107 2584388
>>583495

> Как сделать так, чтоб регулярка вытащила и ошибку, где пробел пропущен, и ошибку, где ШЫ вместо ШИ, и ошибку, где нет запятой?



preg_match_all выбирает только не-перекрывающиеся части строк. Чтобы вывести каждую ошибку, есть несколько вариантов:

1) добавлять в вызов preg_match_all флаг PREG_OFFSET_CAPTURE, чтобы она вернула позицию (в байтах) где найдено совпадение, и далее по этой позиции вытаскивать часть строки

2) как-то разбить строку на массив слов или на части и проверять каждое слово по очереди.
108 2584408
>>583637

Вообще, под REST подразумевается архитектура REST или принципы REST, которые нетрудно нагуглить, по крайней мере на английском: https://restfulapi.net/

REST API - это API, построенное с соблюдением принципов REST.

API - здесь это набор правил, следуя которым мы можем получить информацию или сделать действие (например, получить список популярных постов или поставить лайк посту).

На практике "REST" API часто не следуют принципам REST, и их правильнее называть HTTP API - то есть API, основанные на протоколе HTTP.

Начать стоит с изучения HTTP. В HTTP есть "методы" и "ресурсы", которые напоминают действие и объект действия. Например, мы можем сказать "погладь кота Василия". Здесь "погладь" это действие, а "кот Василий" это объект. Так же и в HTTP, запрос DELETE /photo/123 значит "удали фото 123", здесь DELETE это метод, а /photo/123 это идентификатор ресурса, над которым делается действие (фото). Ресурс - это не строчка /photo/123, а само фото, а URL /photo/123 лишь указывает на него.

Как я написал выше, URL - это указатель на ресурс (идентификатор, позволяющий отличить ресурс от других).

Поверх этих ресурсов и строится архитектура REST. Изучи 6 принципов REST и ты поймешь, какие API на самом деле являются REST API.

> И можете, пожалуйста, поподробней сказать, что это такое?


> header("Access-Control-Allow-Origin: ");



Это HTTP-заголовки. Тебе нужно почитать про протокол HTTP сначала.

> В REST API страница смотрит на запрос



не страница смотрит на запрос, а код на сервере или "сервер".
109 2584764
>>584368

>для этого деньги нужны, собственно для денег нужна и хоть какая работа.


https://youtu.be/bXzTXD_OJo0?t=195
110 2584862
>>584341
Никто не говорил об 500к с нуля, такого не бывает, тут ты прав. Речь о том, что условно став битрикс-разработчиком, ты никогда вообще не получишь 500к (если забудем про инфляцию), в этом стеке просто нет таких рейтов. И при этом битрикс это crm, то есть такой маленький мирок, для работы в котором тебе не нужно знать ничего из программирования кроме базы для накликивания страничек ну и там по мелочи всякого. В том числе и по такой причине, что битрикс просто не используют для серьезных и сложных задач, поэтому ты там просто не встретишь заданий, где нужно будет что-то такое поизучать и потом применить. Речь даже не про алгоритмы какие-то, а про базовые инженерные навыки, миграции, базы данных, сети, протоколы, паттерны проектирования и всё такое.

Так что речь не про то, что ты где-то там сразу начнешь получать дохуя, совсем нет, джунам везде мало платят. Речь про том, что идти джуном надо туда, где вообще возможно дорасти до условных 500 какосеков.
Потому что протирая штаны и тратя годы в разработке на битриксе ты останешься настолько же далек от таких сумм, как и был, когда приходил в битриксоиды.

Битрикс здесь использую как имя нарицательное,вместо него можно подставить разные технологии и даже языки
111 2584869
>>584862
Придумал отличную аналогию, представь, что ты играешь в WoW и хочешь заработать денег. И можешь начать качать какую-нибудь алхимию или любое другое собирательство с которой со временем можно будет зашибать кучу денег на аукционе с продаже редких ресурсов, а можешь условную первую помощь, в раскачку которой ты можешь вложить 100500 часов, но денег с этого всё равно не получишь.
Так вот, с реальными профессиями всё точно так же и нужно сразу выбирать такую, у которой выше потолок. Потому что переключаться между профами трудно и это не всегда происходит с сохранением экспы.
112 2585015
>>584869
Ну тогда надо сразу в джаву или в дотнет и забугор, т.к. у нас на дотнете мало платят. Но мне кажется на любом современном стеке можно примерно одинаковые суммы зарабатывать. Хоть пхп хоть нода хоть джава. Главное не идти в CMS, твой посыл ясен.
113 2585202
>>585015
Не совсем. Как раз примерно одинаково мало платят на любом стеке джунам, а вот потолок сеньоров от стека к стеку отличается.
К примеру, взяв php ты вообще никогда не сможешь зарабатывать столько же, сколько перфоманс C++ник в гугле, майкрософте или каком-нибудь оракле. Не уверен, что в них вообще есть вакансии на php, но не проверял
Не потому, что php плохой, а потому что специфика языков определяет задачи, которые этим языком решаются. А ценность и сложность этих задач различна, отсюда и разница в рейтах.

Поэтому, выбирая стек, нужно смотреть на две вещи:
1) Возможность для вката лично для тебя потому что у скажем haskell есть топовые рейты, но кривая вката очень велика, ещё и вакансий нет;
2) Потолок стека, чтобы он был больше, чтобы не выбрать "1C программиста" и не уперется лбом в потолок в два раза ниже потолка у других языков. Твоя же цель зарабатывать как можно больше, правильно? :)
114 2585209
>>585202
Но кстати C++ лучше не выбирай и даже не смотри в эту сторону, я серьезно. Шизанешься.
115 2585231
>>585202
Что лучше, битрикс или 1с? Я понимаю что это задача уровня двух стульев, но все же.
116 2585306
>>585231
Это одно и тоже, чел...
117 2585361
>>585306
Не обманывай! Битрикс это фреймворк на пыхе с открытыми сорцами. 1С предприятие это десктопная платформа на плюсах с закрытым кодом, которая предоставляет специальный язык для описания предментой области документооборота на предприятии.
118 2585368
>>585361
Чел, эта хуйня идет стеком. Никому не всралась пхпмакака без знания 1с. Толку от твоего магаза на битрихе, если ты его к обороту не прикрутишь?
119 2585377
>>585368
Чел есть еще облачный битрикс, там тоже самое http апи от пыхобитрикса, но ты можешь там хоть на хаскеле приложения для маркета писать. Я писал, никто с меня знания одинаса не требовал.
120 2585387
>>585377
Кстате сейчас стало много компаний которые на питоне и ноде приложения пишут для битрикс24. Даже в моем мухосранске.
121 2585501
>>585387
Угу. Я даже удивиля. Но б24 хороший продукт. Удлятья безмылено .
122 2585741
>>585231
С моей колокольни кажется лучше битрикс, который phpшный фреймворк, так как это всё же что-то на php и поэтому всё же подразумевает какую-никакую близость хотя и очень маленькую к глобальному миру php-разработки. А 1С это чисто локальная СНГшная история, ещё и залоченная на одного вендора не на уровне фреймворка даже, а вообще на уровне языка. В этом языке хоть дженерики то есть? Лол.

Но конечно это выбор из двух сортов говна и лучше, как Геральт, не выбирать вовсе. Вот не поверю, что у тебя в доступности нет местячкового аутсорса на ларавеле или хотя бы yii, хоть второй мне и не нравится.
123 2585971
Ну что, сделали "офер" на испытальный срок но его как я понял все проходят. Только прикол в том, что я встретился с эйджизмом, хотя мне слегка за 25.Собеседующий сказал, что хоть я и был лучше предыдущих собеседуемых, но все равно плавал и вообще есть люди, которые в 18 лет уже являются специалистами, а я вот такое недоразумение, поэтому мне нужно работать в режиме x5. Только я не понял, это он выделил молодых или сказал, что мне нужно догонять "себя", чтобы стать специалистом?
А может мне послышалось, и в телефонном звонке сказали, что офер сделали на какую то другую вакансию? Или как объяснить, почему вакансия еще висит?
>>584408
Да, спасибо, анон ОП?,я даже удивился, что они спрашивали принципы REST вообще собеседование в основном было на темы, которые в вакансии были указаны как желательные, а не обязательные.

Только мне уже тимлид сказал, что я тут https://codeshare.io/OdVyqA нарушил один из принципов SOLID (класс должен решать одну задачу), а я думаю, а как мне нужно было это реализовать то, чтобы не нарушить этот принцип? Плюс он сказал, что у меня каждый файл подключается к базе данных, что затратно. А что можно сделать?
124 2586012
>>585971
Это на джуна?
125 2586034
>>586012
Стажер/Джун только я не хотел никого демотивировать, я в мухосарани живу, если что
126 2586042
>>586034
А тестовое сложное было?
127 2586043
>>586034
Ясен хуй в мухосрани. В дсах такого старпера только подрачником бы выпнули, насмехаясь вдогонку.
128 2586047
>>586042
Тестового не было, я сам написал проектики для портфолио
129 2586051
>>585971
1. У тебя класс авторизации сам себе создаёт подключение к бд, так делать нельзя. Погугли про паттерн dependency injection, принцип D в solid и интерфейсы: класс должен в конструкторе принимать интерфейс подключения к бд, а сам объект создаётся где-то снаружи, и AuthModel не должен знать, как это делается, чтобы не зависеть от конструктора другого класса или от функции, как в твоём коде.
2. Класс авторизации вообще не должен знать, откуда у тебя берется юзер. Твой класс AuthModel одновременно авторизует юзера и ищет его в бд, взаимодействие с бд не должно быть его задачей. Нужно сделать интерфейс UserRepositoryInterface и его имплементацию DatabaseUserRepository, соответственно, в нем должен быть метод findUserByЧеТоТам. AuthModel в конструкторе должен получать интерфейс репозитория и дальше использовать его для поиска юзера. Соответственно, передавать в AuthModel объект подключения бд вообще не нужно, он понадобится только в DatabaseUserRepository, так как запросы у нас происходят в нем, а AuthModel не должен взаимодействовать с бд. в фреймворках на паттерн репозитория часто ложат хуй, что иногда оправдано, а иногда - нет. Например, в laravel ёлка работает как active record и там класс сущности сам себе является репозиторием. Тем не менее подобный код поиска сущности все ещё можно и нужно выносить в сервисные классы, экшны или query, если код по CQRS организован, чтобы не захламлять и не дублировать логику
3. Класс авторизации не должен сам проверять хеш. Нужен отдельный класс PasswordVerifier с методом для проверки пароля, принимающим аргументы из хешированного пароля и открытого. Соответственно, точно так же он должен передаваться в AuthModel через конструктор вместе с репозиторием из пункта 2.
4. субьективщина Нейминг говно, AuthModel я бы назвал AuthService, Authenticator или ещё как-то.

Да, удивительно, конечно, как тебя вообще взяли, без обид. Я думал, что до такого кода даже в последней галере доебутся если галера не на битриксе или вордпрессе, конечно, там в ядре код хуже написан
129 2586051
>>585971
1. У тебя класс авторизации сам себе создаёт подключение к бд, так делать нельзя. Погугли про паттерн dependency injection, принцип D в solid и интерфейсы: класс должен в конструкторе принимать интерфейс подключения к бд, а сам объект создаётся где-то снаружи, и AuthModel не должен знать, как это делается, чтобы не зависеть от конструктора другого класса или от функции, как в твоём коде.
2. Класс авторизации вообще не должен знать, откуда у тебя берется юзер. Твой класс AuthModel одновременно авторизует юзера и ищет его в бд, взаимодействие с бд не должно быть его задачей. Нужно сделать интерфейс UserRepositoryInterface и его имплементацию DatabaseUserRepository, соответственно, в нем должен быть метод findUserByЧеТоТам. AuthModel в конструкторе должен получать интерфейс репозитория и дальше использовать его для поиска юзера. Соответственно, передавать в AuthModel объект подключения бд вообще не нужно, он понадобится только в DatabaseUserRepository, так как запросы у нас происходят в нем, а AuthModel не должен взаимодействовать с бд. в фреймворках на паттерн репозитория часто ложат хуй, что иногда оправдано, а иногда - нет. Например, в laravel ёлка работает как active record и там класс сущности сам себе является репозиторием. Тем не менее подобный код поиска сущности все ещё можно и нужно выносить в сервисные классы, экшны или query, если код по CQRS организован, чтобы не захламлять и не дублировать логику
3. Класс авторизации не должен сам проверять хеш. Нужен отдельный класс PasswordVerifier с методом для проверки пароля, принимающим аргументы из хешированного пароля и открытого. Соответственно, точно так же он должен передаваться в AuthModel через конструктор вместе с репозиторием из пункта 2.
4. субьективщина Нейминг говно, AuthModel я бы назвал AuthService, Authenticator или ещё как-то.

Да, удивительно, конечно, как тебя вообще взяли, без обид. Я думал, что до такого кода даже в последней галере доебутся если галера не на битриксе или вордпрессе, конечно, там в ядре код хуже написан
130 2586063
>>585971
поздравляю!
Сколько, где учился?

мимо вкатун 27 лет 4 месяц полета
131 2586070
>>586063
Спасибо, учился 8 лет, пытался вкатиться во что-то 4 года, но само php я изучал недолго. Мне верстка сложнее довалась
ir1Fs4wfCw8.jpeg75 Кб, 1560x859
132 2586073
Очень интересует вопрос, насколько разумно получить первую работу в php, отработать 1 год и после этого пойти на вакансию java? О том, что не смогу учить параллельно работе, не переживаю.

Слышал от некоторых медиа личностей, что рекомендуют вкатываться через php, т.к. востребовано (без битриксов, вордпрессов и проч). Особенно когда сейчас так пугают, что попасть на вакансию тяжело. Важно, что для первой работы мне нужна удалёнка, дальше уже офис. Что думаете?
133 2586089
>>586073
А нах это надо? На пхп не проще ни разу.
134 2586095
>>586043

>В дсах такого старпера только подрачником бы выпнули, насмехаясь вдогонку.


На счёт старпёра, это ты не шутишь?
135 2586103
>>586073
Если хочешь в итоге вкатиться в джаву, лучше с неё и начинать, перекатываться всегда непросто.
Если вариантов для вката в джаву сейчас нет, а в пхп есть - то пробуй пыху сейчас, а там посмотришь.
136 2586156
>>586073
php умер
137 2586314
>>586073
Не легче. Просто больше возможностей для вката из-за битрикса.
138 2586336
>>585971

> Только мне уже тимлид сказал, что я тут https://codeshare.io/OdVyqA нарушил один из принципов SOLID (класс должен решать одну задачу),



Не очень понимаю, где тут нарушение SOLID в таком маленьком классе. Но тут есть 2 других косяка:

- ты подставляешь переменную напрямую в SQL-запрос, чем открваешь возможность SQL-инъекций. Нужно использовать плейсхолдеры

- ты из класса подсоединяешься прямо к БД. Это плохо, нужно было передавать объект mysqli в конструктор класса. То есть, класс не должен сам искать, где ему взять соединение с БД, ему это соединение должны передать снаружи.

Наверно дурацкая аналогия, но когда ты приходишь на завод, ты не покупаешь сам инструменты в магазине, а тебе дают уже готовые. Так же и твой класс, ему должны были дать соединение к БД, которое нужно для работы.
139 2586379
>>586051

> Нужно сделать интерфейс UserRepositoryInterface и его имплементацию DatabaseUserRepository, соответственно, в нем должен быть метод findUserByЧеТоТам.



Если честно, это выглядит как бессмысленное переусложнение.

По моим ощущениям, паттерн Repository плохо работает в реальных проектах. Представь, что у тебя 20 сервисов, каждому из которых нужно искать юзеров по разным критериям. Тебе придется в репозитории сделать под сотню методов для них. Проще в этих сервисах искать то, что нужно. Так будет проще, потому что логика сервиса будет только в сервисе, а не размазана между сервисом и репозиторием.

Плюс, обычно Репозиторий по задумке отвечает за работу с одной таблицей, но на практике часто требуется выбирать данные из несольких таблиц сразу (например, юзер + история его платежей + подключенные тарифы).

Есть ли у тебя какие-то убедительные примеры, статьи, где использование паттерна Repository дает выгоду и это не проект уровня TodoList?

Пока что у меня ощущение, что Repository это неудачный паттерн.
140 2586405
>>586336
Да, про инъекции я особо не заморачивался, а про SOLID он сказал, что мой класс выполняет две функции. И авторизует и подключается к базе данных. Но это подключение же должно хоть где-то происходить? Если оно не должно было происходить в модуле, то оно должно было бы происходить в контроллере. Но в контроллере и так своих подключений достаточно контролёр вообще может придерживаться принципа Solid?, хотя отображение за подключение не считается, наверное.
Ладно, спасибо, глянуть надо, что и как
141 2586498
>>586314
битрикс - гной и помойная яма

начать с битрикса - поставить крест на своей карьере разработчика
142 2586504
>>586405

>Но это подключение же должно хоть где-то происходить?


в бутстрапе происходит, и потом в конструктор передаётся хэндлер (объект mysqli или pdo)
а у тебя фактически происходит коннект к базе при инстанцировании AuthModel
если ты будешь гонять тесты, в которых AuthModel создаётся десять раз - у тебя будет десять подключений, что абсолютно не нужно
143 2586529
>>586504
$conn = new mysqli("localhost", "root", "", "social");

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

return $conn;
Но я же возвращаю в конструктор объект mysqli, равзе нет?
144 2586533
>>586529
Ну то есть да, получается, что

>фактически происходит коннект к базе при инстанцировании AuthModel


Но если бы я это делал в контролере, то было бы то же самое, нет?
145 2586547
>>586533
Типа да, но вообще ты и в контроллере это делать не должен. Должен быть конфигуратор, который инстанцирует все синглтоны (класс подключения к БД - это синглтон, потому что он нужен в одном экземпляре в отличии от entity и DTO), и пихает pdo в конструктор модели, а контроллер к модели обращается, но сам её не инстанцирует. Выучи Symfony, там всё это есть.
146 2586885
>>586547
Файл конфигуратор - это тот же bootstrap.php или ты про php.ini.
147 2587157
Тяжело решить задания "Yoda speak" и "Числа прописью". Йода спик решил, но не понимаю, как сохранить знаки препинания. Прям голова взрывается, я просто не понимаю, как найти решение в моей башке. То же и с заданием "Числа прописью", я просто хуею насколько это сложно.

Неужели у меня нет шансов вкатиться? Я такой тупой? Как так! За что? Или это у всех так в начале пути? Решал первый день эти задания, пока вот такие ощущения: что я ничтожество и никогда никуда не вкачусь, что "думать" это не про меня. Пока не хочу поддаваться нытью, поэтому продолжу думать. Если за неделю не решу эти два задания, то придётся смириться.

26 лвл тнн рнн сыч
148 2587163
>>587157
Пиздуй на Хекслет, там бесплатный вводный курс по пхп есть, прорешай его сначала
149 2587197
>>587163
Не, там всё просто. Даже проще заданий про кредит здесь. Там же чисто по синтаксису дрочат и всё. Я вот прям щяс прошел 15 уроков, потом чекнул что там дальше, ну как и сказал - дрочка синтаксиса. Синтаксис я и так уже знаю. Спасибо за совет.
150 2587198
>>587157
Ты еще не дошел до рекурсии, вот где засада. Не бросай так быстро в любом случае, часто бывает на следующий день лучше соображается.
151 2587261
Можно вкратце, что вы изучали, чтобы из Джуна стать Мидлом? Путь был не простым?
152 2587317
>>587261
Я говорю вам о трех превращениях духа: о том, как трейни стал джуном, джун – мидлом и, наконец, мидл – сеньером.
Много трудного существует для духа, для духа сильного и выносливого, способного к почитанию: всего самого трудного и тяжелого жаждет сила его.
"Что такое тяжесть?" – вопрошает выносливый трейни, становится, как джун, на колени и хочет, чтобы его хорошенько навьючили.
Но там, в безлюдной пустыне, свершается второе превращение: там мидлом становится дух, добыть себе свободу желает он и сделаться господином пустыни своей.
Там ищет он своего последнего владыку: врагом хочет он стать ему, последнему господину и Господу своему, до победного конца хочет бороться с великим кабаном.
Кто же он, великий кабан, которого дух отныне не хочет признавать господином и владыкой? Имя того кабана – "Ты должен". Но дух мидла говорит "Я хочу в гэп".
Зверь "Ты должен" лежит на пути его, переливаясь золотой чешуей, и на каждой чешуйке блестит золотом "Ты должен!".
153 2587504
>>586885
bootstrap.php или его аналог
154 2587708
>>587504
Я правильно понимаю, что PHP таким образом создаст один экземпляр класса для всех клиентов, которые запросили информацию у сервера. То есть сервер не будет повторно инициализировать экземпляр для каждого клиента? А когда этот экземпляр удалится? И когда он первый раз инициализируется?
155 2587716
>>587708
Нет не правильно. Пыхо процесс инициализируется для каждого запроса отдельно. У тебя в каждом запросе будет создаваться экземпляр синглтона. При шатдауне процесса память будет очищаться. С fpm немного сложнее но не принцириально. Вообще для персистент коннекшион синглтон инкапсулирующий подключение не нужен. Оно и так из коробки работает. Синглтоны или звездные объекты удобны архитектурно и для экономиии памяти. Например User текущий - ты знаешь что работаешь с одним объектом в конторолере и мидварах. Или Request и тд
156 2587717
>>587716

>неправильно

157 2587823
Всё ещё рекомендуете вкат в PHP? Меня заебало, что вокруг меня одни айтишники, хвастающиеся своими доходами, да и сам я в техподдержке за копейки работаю пару месяцев. Постоянно желание вкатиться, технические темы интересуют, хуё-моё.
158 2587832
>>587823
Я просто понял, что тут надо быть настоящим задротом, иначе хуй ты че сделаешь. Это тебе не учить детей или работать гейологом и описывать керн ёбанный. Там думать не надо, запомнил один раз как че описывать, как кого чему учить и усё, там больше пиздеть надо. А вот тут ты ебать пиздец задачи сука решай хуё-моё туда-сюда. Это тебе не это дружочек. Надо сидеть и красноглазить по 6-10 часов в день С ИНТЕРЕСОМ, иначе ты ничему не научишься.
159 2587834
>>587832
Вкатываюсь в дальнобойщики тогда?
160 2587843
>>587834
Мне кажется это физически изнурительно очень ну и опасно.
161 2587868
>>587834
+геморрой, мне кажется еще хуже чем кодерство, даже не встанешь из руля. Когда кодишь можешь хотя бы вставать на минутку каждые полчаса-час, жопку размять, покрутить бедрами из стороны всторону и всё такое. А там все пизда будут вырезать тебе уже лет в 35-40. Нахуй надо. Придумай что-то получше или стань задротом и вкатывайся с нами в бекенд.
162 2587879
>>587843
>>587868
Пиздос.
163 2587889
>>587868
Дальнобоев штрафуют за то что они из-за руля не вылазять и жепой не крутят. Там цифровой анальный контроль на двигателе.
164 2588044
Как насчёт удаленки. С каким опытом можно пытаться устроиться? Что требуют?
165 2588206
>>588044
Нужно быть мидлом судя по всему.
166 2588225
>>588044
Шансов мало, в битриксе шансов много, это супер изи. На норм стек хуй там плавал. Надо прям везде светиться: хх, дискорды, группы в тг и т.д. Чем больше активности, тем больше шанс дойти до интервью. Правда не стоит это делать не подготовленным, иначе засрешь один шанс, некст раз не раньше чем через полгода будет - раньше этого срока на тебя не будут обращать внимание, если ты уже обосрался.

По поводу знаний в шапке всё есть. Можете еще задачи на литкоде поебашить и почитать поверхностно про алгосы в книге типа "Грокаем алгоритмы" или на метаните, правда там шарп, но знания шарпа нужны поверхностные, больше "основы программирования", чтоб понять о чем речь.
167 2588543
>>571790 (OP)
Аноны, меня, почему то, очень гложет тот факт, что я не могу работать в топ компаниях, потому что я тупо не смогу решить их задачи, да и не шарю я в вышмате, в алгоритмах или в чем нужно шарить? Я даже задачу понять не могу, а как решать, тем более. Можно ли это исправить, или в том же Яндексе без знаний вышмата лучше не сказаться?
168 2588661
аноны выручайте

пытаюсь установит nginx по этой инструкции.
все хорошо до момента, когда пытаюсь на http://localhost:8080
должно быть "Вы должны увидеть такую страницу с текстом «Welcome to nginx!».", а у меня страница не найдена. В чем проблема?
Я гуглил нихуя найти не смог.
В логах вот эта ошибка 2023/01/26 21:56:28 [emerg] 18053#0: unexpected end of parameter, expecting ";" in command line

Погуглив ошибку, я понял, что могут быть забыты скобки в конфе nginx, проверил все в редакторе, все заебись. Я ХУЙ ЗНАЕТ ЧТО ДЕЛАТЬ.

Рассмотрим как установить веб-сервер самостоятельно.

Установим последнюю версию nginx:

brew install nginx
Поскольку порт 80 требует прав администратора, а homebrew по умолчанию устанавливает софт с пользовательскими правами, то работать nginx будет на порту 8080.

Запускаем nginx, чтобы он работал в фоне и обслуживал наши запросы:

brew services start nginx
Индикатор успеха:

==> Successfully started `nginx` (label: homebrew.mxcl.nginx)
Проверяем, что всё установилось корректно, и nginx успешно работает на нашем компьютере. Откройте любой браузер и введите в адресной строке следующий URL:

http://localhost:8080
169 2588665
>>571790 (OP)
А зарубежом как обстоят дела с php? Тоже недолюбливают или нет?
170 2588667
>>588661
Это про локальный сервер? Тогда ой зряяя ты все это вручную делаешь. Ты потратил на это кучу сил, а забудешь как ты это делал сразу, так как тебе это знания долго не понадобятся если вообще понадобятся. Качай спокойно openserver, mamp или другое и не делай себе мозги.
171 2588675
>>588667
Да)

Но у меня так и не получилось сделать(
Хуй знаеь в инструкции все было описано, как супер простая вещь)
172 2588677
>>588667
Не слушайте этого долбаеба. Элементарные админские навыки нужны вебразработчику. Не говоря о том что почти каждый сколько-нибудь опытный разработчик держит впску с докером. Попенсервер - 100% ый детектор лоускила.
173 2588680
>>588677
И вообще руководствуйтесь принципом тяжело в учении легко в в работе.
174 2588686
>>588677
я хочу доделать, я на это весь вечер убил
два варианта со стейкофферло нихуя не помогли
как эту хуйню запустить, чтобы он мне мой проект показывал в браузере?
175 2588687
>>588680
я хочу доделать, я на это весь вечер убил
два варианта со стейкофферло нихуя не помогли
как эту хуйню запустить, чтобы он мне мой проект показывал в браузере?
176 2588693
>>588687
Ну и почему ты не скинул на пастбин конфик нжинкса? На телепатов надеешься?
177 2588697
>>588693
проверить ксате конфиг ты можешь командой
nginx -t
178 2588700
>>588693
я в нем ничего не менял, я пытаюсь по инструкции зайти на Локал хост 8080 и увидеть welcome nginx

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

server {
listen 8080;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;

# location / {
# root html;
# index index.html index.htm;
# }
#}

# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;

# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;

# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# root html;
# index index.html index.htm;
# }
#}
include servers/*;
}
178 2588700
>>588693
я в нем ничего не менял, я пытаюсь по инструкции зайти на Локал хост 8080 и увидеть welcome nginx

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

server {
listen 8080;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;

# location / {
# root html;
# index index.html index.htm;
# }
#}

# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;

# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;

# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# root html;
# index index.html index.htm;
# }
#}
include servers/*;
}
179 2588718
>>588700
Что у тебя в servers/ лежит
И вывод команды
nginx - t
180 2588723
>>588718
вывод команды
[emerg] open() "/usr/local/var/run/nginx.pid" failed (13: Permission denied)

"Что у тебя в servers/ лежит" не понимаю, что надо предоставить.
181 2588728
>>588723
до этого момента он мне только ошибку про не закрывающий символ выводил.
182 2588731
>>588718

>Что у тебя в servers/ лежит



через sudo
sudo nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
183 2588732
>>588728
Ты домохозяйка? Не видишь Permission denied? Запускай с правами

в servers своми конфиги не клал?
184 2588735
>>588731
Ну вот с конфигом все впорядке. У тебя на порту 8080 ничего не висит другого? Может твой нжинкс и не зарущен. И ли там остатки твоих нужавшихся попыток в процессах весят. Перезагрузи свой мак
185 2588736
>>588732
я выше разобрался с проблемой связанной с правами.

нет.
186 2588737
>>588543

А тебе в принципе интересно разобраться, как решать такие задачи, или неинтересно? Если интересно, то ты можешь начать с изучения базовых вещей, таких, как алгоритмы и структуры данных. Порешать задачи с codeforces или leetcode. Если непонятно, можно в нашем треде спросить совета.

Математика не очень нужна, если только тебя не интересуют нейросети и машинное обучение (это очень крутые технологии). Тогда придется математику подтянуть.
187 2588738
>>588735

> не зарущен


не запущен
188 2588739
>>588735
делал.
я уже и на другой мак поставил такая же хуйня локалхост не видит(
189 2588740
>>588738

>нужавшихся


неудавшихся )
пора спать уже...
190 2588742
>>588661

Ты можешь проверить правильность конфига самим нгинксом:

nginx -t

он выведет, если есть какие-то ошибки.

> а у меня страница не найдена


Возможно, в веб-директори нгинкса надо создать index.html с каким-нибудь текстом и тогда страница появится.
191 2588743
>>588739
Теперь подробнее что значит не видит?
Что в браузере http://localhost:8080
192 2588750
>>588743
safari не может найти страницу тк не удается подключиться к серверу.
193 2588754
>>588750
что конфиг ок не значит что нжинкс запущен
194 2588755
>>588754
Стартани с правами
nginx
195 2588758
>>588755
sudo brew services start nginx
Warning: Taking root:admin ownership of some nginx paths:
/usr/local/Cellar/nginx/1.23.3/bin
/usr/local/Cellar/nginx/1.23.3/bin/nginx
/usr/local/opt/nginx
/usr/local/opt/nginx/bin
/usr/local/var/homebrew/linked/nginx
This will require manual removal of these paths using `sudo rm` on
brew upgrade/reinstall/uninstall.

sudo brew services info nginx
nginx (homebrew.mxcl.nginx)
Running: ✘
Loaded: ✔
Schedulable: ✘

к странице так же не подключиться
196 2588766
>>588758
Ты не можешь просто в консоли запустить?
sudo nginx

Если захочешь остановить
sudo nginx -s stop
197 2588770
>>588766
да заработало!!!
а в чем проблема была?

почему так не стартует "brew services start nginx"?
198 2588776
>>588770
https://htmlacademy.ru/blog/php/php-on-macos#server
пидорасы официально я сука весь вечер проебал на настройку Nginx по их инструкции.

если кто-то будет делать на маке, то вместо того что они пишут
Запускаем nginx, чтобы он работал в фоне и обслуживал наши запросы:
brew services start nginx

Пишем в консоле nginx и все работает.

Спасибо, что помог!
199 2589030
>>587708

>Я правильно понимаю, что PHP умер?


правильно
200 2589308
Допустим, у меня в ларавеле есть модели постов и комментов к ним. Должны быть такие эндпоинты, возвращающие жсоны:
- все посты + к каждому последний коммент
- просто все посты без последнего коммента
- один конкретный пост + все комменты к нему

Я не понимаю, как нормально расщепить на два сервиса, чтобы один занимался только постами, а другой только комментами, чтобы не делалось лишних запросов к бд

Типа сделать сервис для постов с методами getAll и getById

И сервис для комментов с методами getAllByPostId и getLatestByPostsIds(array). Но это как-то пиздец всрато, этому последнему методу приходится передавать массив айди постов, для которых надо достать последний коммент, чтобы избежать н+1. И я хз как даже нормально запрос в нём написать

Я бы мог просто сделать eager loading для комментов, но мне же не на всех эндпоинтах нужны комменты, иногда только один коммент нужно достать из бд

Я запутался, я нихуя не понимаю
201 2589452
>>589308
зависит от твоей схемы. если посты хранят id комментариев, то можно сделать
Post::getAll($criteria, $order, $offset, $limit)
сделать $commentIds = array_map(fn($post) => $post->commentIds->orderBy('date', 'desc')->take(1), $posts)
и сделать Comment::getByIds($commentIds)
202 2589469
>>589308
чтобы получить айдишники комментов

from comment
where comment.post_id in (1,2,3)
group by comment.post_id
select comment.post_id as post_id, max(comment.id) as comment_id
203 2589789
>>588677
Я это настраивал, а потом забыл. Для начала есть больше других полезных вещей, которые нужно пройти, потом уже можешь свой сервер настраивать
204 2589916
>>589308
Короче я вместо отдельных сервисов для постов и комментов просто сделал методы withLatestComment(builder) и withAllComments(builder), которые к квери билдеру на посты через with добавляет комменты
205 2589978
>>588737
Не, я говорю больше про работу на большие компании, если честно. Так то php особо в таких компаниях не используется, только Яндекс могу сказать и больше не знаю.
Алгоритмы я допустим на базовом уровне выучу, но этого будет не достаточно. Я посмотрел в тестовом контенксте от Яндекса задачи на backend, я даже понять не могу что они хотят.
206 2590780
>>571790 (OP)
Чтобы изучить docker, подойдут ли видео, где настраивают node js или python? Или для php другой подход?
https://www.youtube.com/watch?v=n9uCgUzfeRQ
207 2590874
>>589308

А кто сказал, что каждый сервис должен работать только со своей таблицей? Это, как ты убедился, не работает в реальности. Сервисы надо делать не по таблицам, а по задачам.

Здесь можно сделать сервис постов, который умеет выбирать и комменты к ним. Для управления комментами можно сделать отдельный сервис.
208 2590889
>>590780
Там нечего учить, почитай документацию и попробуй запустить проект с докером - всё. Тебя никто не заставит писать docker image, поэтому можно посмотреть и для node или python, но больше запутаешься
209 2591791
>>571790 (OP)
Что почитать чтобы разбираться в сортах Api - rest, soap, rpc - итд? Или может какой-нибудь курс внятный есть?
210 2592651
Насколько php популярен на западе? На нем начинают новые проекты?
211 2593869
>>571790 (OP)
В принципах rest api что-то написан про КЭШ, но как вообще кэш в php реализуется?
212 2594150
>>588770

Обрати внимание, что brew services ... и sudo brew services ... работают немного по-разному. Первый управляет сервисами, запущенными с правами пользователя, а второй - с правами администратора. Я бы сначала пробовал без sudo, если можно без прав администратора, то так проще.

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

Как я понял, команда services start работает успешно, но services info показывает, что сервис не запущен. Наверно, это из-за каких-то ошибок при запуске, информация о которых должна быть в логах.

Я бы советовал ориентироваться не на сторонние статьи, а на информацию проекта homebrew: https://formulae.brew.sh/formula/nginx

Там написано, что права администратора не требуются, и перечислены папки, которые используются nginx. То есть, должно все работать без sudo. Но если ты уже запустил nginx с sudo, то может быть, поменялись права на файлы и сначала нужно его остановить и вернуть права обратно.
213 2594153
>>589978

> я даже понять не могу что они хотят.



Если ты будешь разбираться и изучать, то рано или поздно поймешь. Можешь скинуть пример задачи, а я скажу, что надо изучить, чтобы научиться ее решать.

Может быть, тебе надо начать с решения более простых задач, а не браться сразу за самые сложные.

И не надо бояться математики. Она довольно логичная, и в ней можно разобраться при желании. Хотя, должен заметить, что часто статьи про математику используют усложненный язык, например, в Википедии часто все объясняется самым сложным образом.
214 2594154
>>590780

Давай посмотрим, что такое Докер? Докер это система для создания контейнеров, запуска и управления ими. Контейнер - это что-то вроде изолированной системы, куда устанавливается программа и все ее зависимости (библиотеки, расширения). Например, ты можешь создать контейнер с PHP определенной версии.

Контейнер создается с помощью консольных команд Линукса. Изначально Докер дает тебе абсолютно пустой контейнер, в котором ничего нет. Например, чтобы создать контейнер с PHP, ты пишешь команды, которые:

- устанавливают в контейнер базовые бибилиотеки из дистрибутива вроде Alpine Linux
- скачивают в контейнер исходный код PHP
- скачивают нужные зависимости
- устанавливают в контейнер компилятор Си и его зависимости
- компилируют и собирают интерпретатор PHP
- устанавливают в контейнер нужные конфиги для PHP

Чтобы полноценно пользоваться Докером, уметь решать возникающие проблемы, тебе придется изучить:

- основые Линукса (файловые системы, права, процессы и тд)
- основы командной строки Линукса
- основные консольные команды Линукса
- как использовать компилятор, как компилировать и собирать программы на Си, попробовать самому что-то собрать
- документацию по Докеру

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

То есть, если ты думал, что надо начать с изучения Докера, то нет, ты ошибся, надо начать с изучения Линукса.
215 2594155
>>591791

- изучить протокол HTTP
- изучить принципы REST (их, по моему, 6 штук)
- почитать про SOAP

Что касается RPC, то это значит "удаленный вызов процедур". Процедура это по сути функция, которой можно передать какие-то параметры и она вернет в ответ какой-то результат. Отличие RPC от обычного вызова в том, что функция находится на другом компьютере. Поэтому ты не можешь ее просто так вызвать, а должен отправить параметры, с которыми надо ее вызвать, и в ответ получишь результат.

Или ты имел в виду JSON RPC? Тогда надо просто погуглить этот протокол.

>>593869

Кеш реализуется разными способами:

- с помощью БД (не очень эффективно)
- с помощью внешних хранилищ вроде memcache, redis
216 2594220
>>584408
Можешь, пожалуйста, ответить на вопросы?
Что такое единый интерфейс в rest api? Как можно идентифицировать ресурсы? .../post/123 - вот это и есть идентификатор?
Что вообще такое ресурсы? Index.php может выступать в роли ресурса?
217 2594238
>>594154

> Такое бывает, но не всегда.


Лол. Такое только всегда и бывает.
218 2594421
Как организовать лучше ветки в учёбном репозитории гита?
У меня два источника задачек которые я решаю и хочу закидывать в две разные папки в один реп.. Все просто скидывать в мейн?
219 2594431
>>594421
Или для каждой папки создать свою ветку, а потом, когда все задачки решу, слить в мейн?
220 2594890
>>594220
Уже не нужно
221 2594903
Есть какие-нибудь советы, как изучить OPENAPI? А то смотришь в спецификацию, и чет не очень
222 2594907
>>594153
Спасибо, я изучал математику по mathprothi, но это все равно долго, да и не получилось освоить. А какие разделы нужно изучить, чтобы решать такие задачи? Все?
223 2594920
Начал учить php по слитому курсу от Skillbox, хотел узнать у вас подобные курсы это норм для базового изучения или они не охватывают чего то важного, а может нужно больше практики.
Мимо проходил, хотелось поинтересоваться, что не трачу время неэффективно.
224 2594927
>>594920
Псры дрочил, миддлвари дрочил, мвц дрочил, сборку проекта из отдельных элементов вместо цельного фрумворка дрочил?
На стандартные функции блевал?
Убунты, пхп-фпмы настраивал?
Если нет, то плохой курс.
225 2594935
>>594220

Ресурсы - это какие-то объекты на стороне сервера, с которыми мы хотим что-то сделать. Например: фото, комментарий, пост, пользователь, выданный бан, ит.д.

Многие команды состоят из действия и объекта, например: "погладь кота Василия". В HTTP действие это метод (GET, POST, DELETE), а ресурс это объект над которым делается действие.

URL это идентификатор ресурса, например, /post/123 или /user/ivan/bans/12345.

> Index.php может выступать в роли ресурса?



Только в том случае, если у тебя система управления файлами и index.php является одним из файлов, с которым ты хочешь что-то сделать (удалить, отредактировать и тд).
226 2594936
>>594927
Мне не знакомо все что ты перечислил, но вот здесь список того что затрагивают курсы. Я только на 4 уроке, в первой части.
227 2594938
>>594421

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

В твоем случае ветки не требуются.
228 2594958
>>594903

Попробуй начать с понимания, зачем это придумано. Зачем вообще нужно документировать API? Очевидно, для взаимодействия между людьми:

- проектировщик может описать API и отдать кодерам в качестве задания
- бекендер может дать документацию фронтендеру
- компания может дать документацию партнерам или клиентам
- разработчик может дать документацию тестировщику для тестирования API
- новый пришедший разработчик может ознакомиться с документацией и быстрее влиться в проект

Документация может быть написана хоть в Ворде текстом, но машинночитаемый формат вроде OpenAPI лучше. Это позволяет:

- генерировать из нее красивую человекочитаемую документацию наподобие такой: https://api.apiship.ru/doc/ (это реальная документация к реальному сервису)
- делать автоматические тесты, проверяющие, например, что возвращаемый формат данных соответствует описанному
- генерировать заготовки кода, а когда нейросети станут помощнее, то наверно и сам код будут генерировать

OpenAPI позволяет описывать (по моему, в формате YAML, его тоже надо изучить) способы авторизации, все эндпойнты, все типы параметров и возвращаемых значений.

Ее не всегда пишут руками, иногда с помощью каких-то GUI утилит, иногда генерируют из кода.

Если что-то конкретно непонятно, то уточняй.
229 2595022
>>593869

>как вообще кэш в php реализуется?


https://www.php-fig.org/psr/psr-6/
https://symfony.com/doc/current/cache.html
230 2595225
>>594920

>курсу от Skillbox


Говнище
231 2597371
Что делать с вложениями в API, если нельзя создавать, если нельзя создавать вложения третьего и более уровня?
Ещё вопрос. Есть сущность главная, а эта главная сущность имеет ещё сущности зависимые.
Получается нужно сделать
Главная сущность/зависимая сущность/главная сущность? Но три вложенности делать нельзя, да и странно это выглядит. А что делать тогда?
Вот пример: в научном портале есть научные статьи - это главная сущность. А есть ещё авторы этих статей.
Так как мы должны использовать логические вложения, а статья тут главная сущность, то получается, что
Научные статьи/авторы статей. Чтобы получить всех авторов определенной научной статьи, пишем
Статьи/id/авторы.
А что делать, чтобы получить все статьи определенного автора?
Статьи/автор/id/статьи же не напишешь, тут три уровня вложенности.
232 2597532
>>597371
Поправлю вопрос.
Как правильно писать пути в API?
Вот пример: в научном портале есть научные статьи - это главная сущность. У статей есть авторы.
Так как мы должны использовать логические вложения, а статья тут главная сущность, то получается, что
articles/authors
Но статьи и авторы имеют свои поля (пример: название, количество страниц, авторы для статей и имя, в каком ВУЗе учится/преподает для авторов) И мы должны уметь вносить изменения, добавлять, получать новые сущности статей и авторов.
Дело в том, что есть ограничения, нельзя использовать вложения третьего уровня. И так же не понятно, что делать, чтобы получить все статьи определенного автора.
Как пример: articles/authors/{id}/articles может ли подойти? Ведь тут articles повторяется, да еще, возможно, тут вложения третьего уровня (хотя я, если честно, не совсем понимаю, точно ли это, ведь второй articles тут выступает в своем роде в роли команды, мол покажи мне все статьи определенного автора).
Либо делать
articles/{id}/articles. Но тут получается, что есть и такой вариант и такой articles/authors,я не уверен, что это правильно?
233 2597941
Сап линукс стоит год на основной машине. Терминалом пользуюсь, но многое все равно делаю через гуи. Как научиться делать всякие изощренные цепочки команд? Может есть какие-то задачки по типу "сделайте такую-то сложную операцию в терминале"? Кодить понемногу учусь, задачек полно, а с этим проблема.
234 2598374
>>597941
Научишься тогда, когда тебе это понадобится. К примеру, если будешь писать баш скрипты развесистые или мейкфайлы скажем.
235 2598382
>>597532
Эта хуйня про вложенные функции это во многом пережиток нулевых, когда все топили за REST, HATEOAS и прочее. История показала несостоятельность всего этого, потому что апи - это штука не для людей, а для машин, которым не важны такие "самоописуемые красивости".
В GRPC к примеру просто есть сервисы и методы у них.
Рекомендую тебе не запариваться и делать плоскую схему, отдельно `/users`, отдельно `/articles`.
Тем более что вложенность тут может быть вообще не очевидной. Что, если у статьи несколько авторов? А что, если статья написана не автором, а скажем импортирована откуда-то? И тд и тп. Короч плоская схема гибче и удобнее для всех.
236 2599666
В регулярках htaccess используется тот же синтксис, как и в preg функциях пхп? Ну и что вообще можно годного почитать про работу с этим файлом?
237 2599789
>>599666
Там pcre, так что да.
Читать документацию, очевидно.
238 2599844
>>599789
Ну документация это для шарящих, а для тупых может какой гайд?
239 2600286
Сап, завтра иду устраиваться на работу. Может кто-то рассказать как все это происходит ?
Собес уже был, и офер скинули. Я просто приду, попизжу с начальством, подпишу договор и все?
240 2600292
>>600286
скинули не офер, а предложение о работе(ну дали офер что аналогично вроде бы), ошибся немного
241 2600301
>>600286
Тебе HR все покажет
242 2600382
>>600301
А что мне сказать когда я туда приду? Всем привет я новенький ?
(я омега жесткая если че, первая моя работка в жизни)
243 2600435
>>598382
Спасибо
244 2600439
>>600301
Не все. Самое интересное она не покажет.
245 2601700
Вопрос по html, наверное. Проблема уже решена, но мне любопытно узнать о ней больше.

Итак. Решил я подреактировать книгу в epub-формате, хотел сделать курсивом стихотврные вставки.
И столкнулся с проблемой - теги <i> и <em> хоть и выделяют текст курсивом, но ломают его (в Суматре не отображаются первые буквы, а в телефоне отображаются, но некоторые буквы в средине слова почему-то выделяются жирным шрифтом, хуйня всякая).
Методом научного тыка и заглянув в другие электронные книги, поменял класс Z на Z1 и все пофиксилось.

Где можно прочитать про эти классы - Z и Z1, в чем разница? Гугл ничего не говорит, он знает только про z-index, но это что-то другое.
Стикер63 Кб, 233x170
246 2601791
>>571790 (OP)
По ларавелю есть ларакасты, по симфони есть симфоникасты, а что есть Yii внятное?
247 2601939
>>597371

Авторы не вложены внутрь статей. Так как один автор может, например, написать много разных статей.

И статья не вложена внутрь автора, так как у нее может быть много авторов.

Потому правильное решение тут сделать авторов и статьи отдельно:

/author/123
/article/123

Если тебе нужен отдельный URL для получения статей автора, можно сделать так:

/author/123/articles/ - вернет список статей.

Ты можешь вернуть либо просто список id, либо краткую выжимку о каждой статье (название, реферат, дата публикации итд).

А можно просто эти данные отдавать при запросе /author/123. У каждого подхода есть плюсы и минусы.

Пример вложенной сущности - это пост и коменнтарии к нему: /post/123/comment/456. И то, мы можем захотеть сделать раздел "последние комментарии" и тогда логичнее будет сделать комментарий отдельной сущностью.
248 2601945
>>597941

Изучи базовые команды работы с файлами вроде ls, cp, mv, rm, find, затем команды обработки строк вроде grep, sort, head, tail, wc, cut, sed, затем команды получения системной информации вроде ps, ip, mount, lsof, df, du.

Этого хватит для 80% случаев, когда тебе надо решить задачу вроде "вывести 3 процесса с наибольшим потреблением памяти" или "найти 5 самых больших файлов на диске".
249 2601950
>>599844

Найди в гугле первую статью про регулярки и прочитай. Не понял? Найди вторую статью и прочти. Не понял? Посмотри видео. Не понял? Сделай перерыв хотя бы на несколько часов, а потом прочти что-то еще.

Если после 5 статей/уроков тебе все еще что-то непонятно, напиши здесь что именно непонятно, и я попробую помочь.
250 2601955
>>600382

Просто можешь сказать "привет". Ну и если кто-то подойдет к тебе, скажет, например "Иван" и пожмет руку, скажи в ответ свое имя и запомни его.
251 2601961
>>601700

Наверно, надо читать документацию по формату epub, так как я его не знаю.
252 2601990
>>601961
Спасибо, анон.
253 2602848
>>601950
Да, еще немного погуглил и нашел неплохую статью, может еще кому пригодится. Но спасибо, может если еще возникнут вопросы, потом спрошу тут.
https://beget.com/ru/kb/how-to/other/volshebnyj-fajl-htaccess
image.png64 Кб, 1446x688
254 2607301
Можете пояснить почему указание класса впереди не засчитывает правильный ответ, а если его убрать засчитает?
Как мне тогда искать локатор в нескольких классах?
255 2607613
Сап анон. Переодически слышу от разных людей, что пыха, мягко говоря, не самый хороший язык. Может кто рассказать, откуда такой хейт в сторону этого языка и почему? Сам писал на петухоне, когда только начал знакомиться с программированием, сейчас с недавнего времени пишу на Go в одной конторе, но чувствую, что останусь там ненадолго, поэтому посматриваю в сторону пыхи, чтобы вкатиться куда-нибудь уже через нее.
256 2607616
>>607613
Если ты пишешь как говоришь, то почему у тебя нет своего мнения на счет технологии? Такие воросы только вкатуны задают обычно.
257 2607641
>>607616
Все просто. Потому что я не пишу на PHP. Мне интересно мнение от людей, которые непосредственно работают с этой технологией, потому что они уже споткнулись о множество подводных камней.
258 2607671
>>607641
Ну тут тенденция перехода наоборот на го с пыхи, а ты назад собрался.
259 2607719
>>607613
Хейт потому что надо что-то хейтить. Хейтить имеет смысл только популярное, желательно, максимально доступное массам и имеющее какие-то альтернативы. Вот поэтому и хейтят пыху. При этом настоящие кривое в рот ебаное говнище говна из жопы, вроде крестов и жс, никто особо не хейтит, ведь в их парашных нишах альтернатив нет.
260 2608173
>>607613
Гугли "Фрактал плохого дизайна"
261 2608176
>>608173
Ну раз фрактааааааааааааааал, то все - пиздец!
262 2608266
Можно ли вкатываться в 2023? Когда то давно пытался вкатиться в пхп, но забил (у меня депрессия тогда была). Смотрю ща вакансии, чет не много совсем, а на джунов вовсе ноль.
Стоит?
263 2608302
>>608266

>Смотрю ща вакансии, чет не много совсем, а на джунов вовсе ноль.


Это ты где такое смотришь? И на хх, и на хаброкарьере и в тг-каналах есть вакансии для джунов. Я в пятницу сделал первый отклик, на следующей неделе пойдут первые собесы.
Думаю, вкатыватсья стоит.
264 2608379
>>608302
Не все живут в ДС внезапно. В моей мухосрани 0 вакансий джуна.
265 2608398
>>608266
есть одно простое правило как понять, стоит ли вкатываться или нет: не стоит вкатываться тем, кто спрашивает, стоит ли

остальным однозначно стоит пробовать в этой жизни что-то новое, но не держаться слишком долго за то, что и не нравится, и не получается

есть каста людей, которые постоянно что-то начинают делать, но не продолжают, еще в народе обычно говорят "не доводят дело до конца", вот в IT такие люди проявляются в том числе вопросами "стоит ли вкатываться?", опытные прогеры в сообществах постоянно видят таких персонажей, некоторые из них по несколько лет только и спрашивают, стоит ли вкатываться, работают какими-нибудь эникейщиками или поступают на очередное высшее и сидят параллельно в чатах и спрашивают, а стоит ли вкатываться, но не вкатываются

я видел много успешных прогеров, которые стеснялись спросить что-то толковое по делу, но не могу вспомнить еще ни одного состоявшегося "стоитливкатываться"
266 2608413
>>608398
Чел ну как бы... можно и вкатиться в переводчика с исландского на русский.. тока вряд ли я работу найду такую. Смекаешь о чем я?
267 2608435
>>608413
Продолжай работать курьером, кто тебе не дает, даунище.
268 2608439
>>608413
Почему? Будешь бородатым переводчиком, похожим на моряка, разъезжать по нефтянным платформам в океяне вместе с очень богатыми кабанами.
269 2608458
>>608413
Бля, чел.
Я вот сам пока не вкатился, но даже для меня очевидно, что в таком случае надо самому чекнуть вакансии на рынке, количество откликов на одну вакансию, порог входа и динамику на рынке - из этого делаешь выводы и вкатываешься(в твоём случае). Может какие подводные есть, тогда спрашивай по сути.
Вот как ты сам бы ответил на вопрос "Можно ли вкатываться в 2023?"
Как по мне на PHP в целом потупее конкуренты, можно выделится. Да и ~10-20 человек на вакансию всего(в сравнеении с другими бекенд языками где по 100 человек), ЗП тоже не сильно отличается если не планируешь всю жизнь на цмске сидеть. Но это для рынка в моей стране, у тебя по другому может быть.
270 2608607
>>608379
Да я и не в ДС, ты на удаленке смотри
271 2609191
>>584862

>Битрикс здесь использую как имя нарицательное,вместо него можно подставить разные технологии и даже языки


Какие еще например?
272 2609492
Почему пхпшники перекатываются в го?
273 2609898
>>609492
потому что похожие, потому что го многопоточный, современный язык и красивый. в рф он довольно востребован и оплачиваем
274 2611428
>>608266

> Можно ли вкатываться в 2023? Когда то давно пытался вкатиться в пхп, но забил (у меня депрессия тогда была). Смотрю ща вакансии, чет не много совсем, а на джунов вовсе ноль.



Джуны больше не нужны (уже лет пять как), единственный вариант наебать с опытом но это сложнее чем сам вкат хех
275 2611668
>>611501 (Del)

>хорошего, качественного джуна


Где посмотреть критерии подразумевающие качественность?
276 2612813
>>611668
Вообще у разных контор они могут отличаться, но нанимай я джуна (обычно впрочем не нанимаю), то мыслил бы так:
Чего я хочу? Чтобы он приносил какую-то пользу.
Чего я не хочу? Чтобы он ебал мне мозг или тратил моё время сверх необходимого.

Соответстенно, у хорошего джуна я бы ожидал хорошее понимание основ и, главное, концепций. Что такое клиент-сервер, миграция, мок, транзакция в базе и тд.
Чтобы можно было ему написать "Нужно сделать ручку в апи, которая делает вот это, в рамках транзакции и ещё нужно будет адвизори лок на вот это сделать, а то вот тут рейс кондишен будет. Ну и тест потом напиши, вот этот сервис надо будет замокать" и джун не просил значение прям каждого из слов, а мог пойти и попробовать по аналогии с уже существующими ручками/тестами что-то написать, какой-то псевдокод и прийти ко мне с уже более осмысленными вопросами.
К примеру "ты сказал, что нужен адвизори лок, как это правильно сделать вот тут? Мне нужно прям в методе репозитория для такой то сущности его реализовать?". А я бы ответил "нет, у нас используется компонент Locker для этого, подключи его через DI и юзай, вот тут смотри примеры использования".

Обобщая, джун, которого бы я хотел нанять, может не знать, как сделать что-то правильно, но он хотя бы понимает, о чем концептуально идет речь и как это можно было бы погуглить и где посмотреть. Ну и знать бест практисы своего стека, хотя бы теоретически, на словах.

По софт скиллам, это сеньор может выглядеть, как усталая выгоревшая котлета и то не стоит, проверено на своем опыте, hr такое в штыки воспринимают, так как им платят за опыт и навыки. Джун же первое время работает в минус работодателю, пока не освоится, поэтому он на собесе продает грубо говоря ожидание того, что он быстро станет профицитным. То есть, должен выглядеть как чел, который или разбирается, или готов в короткие сроки разобраться с чем угодно. Быстро думает, быстро пробует, адекватно воспринимает критику и всё такое. Ну и что готов въебывать, да.

В идеале также джуну бы иметь какие-то примеры кода, выполненных тестовых заданий или пет проектов. Банальный туду лист (можно даже чисто апи) и то хорошо подойдет. Но только он должен во первых быть хорошо сделан (по бест практисам и гайдлайнам), а во вторых в идеале джун должен иметь возможность пояснить, почему он сделал именно так или хотя бы своё мнение почему бест практисы советуют делать что-то именно так.

Может показаться, что тут много всего, но то, что джун же первое время работает в минус работодателю - это к сожалению не шутка, я от самих владельцев бизнеса слышал, что средний джун вообще в принципе начинает работать в плюс в среднем через год после найма. А всё это время ему платят запрлату и он ещё и отвлекает других сотрудников, причем зачастую они тратят от трети до половины своего времени на менторство. Отсюда и надо действовать.
276 2612813
>>611668
Вообще у разных контор они могут отличаться, но нанимай я джуна (обычно впрочем не нанимаю), то мыслил бы так:
Чего я хочу? Чтобы он приносил какую-то пользу.
Чего я не хочу? Чтобы он ебал мне мозг или тратил моё время сверх необходимого.

Соответстенно, у хорошего джуна я бы ожидал хорошее понимание основ и, главное, концепций. Что такое клиент-сервер, миграция, мок, транзакция в базе и тд.
Чтобы можно было ему написать "Нужно сделать ручку в апи, которая делает вот это, в рамках транзакции и ещё нужно будет адвизори лок на вот это сделать, а то вот тут рейс кондишен будет. Ну и тест потом напиши, вот этот сервис надо будет замокать" и джун не просил значение прям каждого из слов, а мог пойти и попробовать по аналогии с уже существующими ручками/тестами что-то написать, какой-то псевдокод и прийти ко мне с уже более осмысленными вопросами.
К примеру "ты сказал, что нужен адвизори лок, как это правильно сделать вот тут? Мне нужно прям в методе репозитория для такой то сущности его реализовать?". А я бы ответил "нет, у нас используется компонент Locker для этого, подключи его через DI и юзай, вот тут смотри примеры использования".

Обобщая, джун, которого бы я хотел нанять, может не знать, как сделать что-то правильно, но он хотя бы понимает, о чем концептуально идет речь и как это можно было бы погуглить и где посмотреть. Ну и знать бест практисы своего стека, хотя бы теоретически, на словах.

По софт скиллам, это сеньор может выглядеть, как усталая выгоревшая котлета и то не стоит, проверено на своем опыте, hr такое в штыки воспринимают, так как им платят за опыт и навыки. Джун же первое время работает в минус работодателю, пока не освоится, поэтому он на собесе продает грубо говоря ожидание того, что он быстро станет профицитным. То есть, должен выглядеть как чел, который или разбирается, или готов в короткие сроки разобраться с чем угодно. Быстро думает, быстро пробует, адекватно воспринимает критику и всё такое. Ну и что готов въебывать, да.

В идеале также джуну бы иметь какие-то примеры кода, выполненных тестовых заданий или пет проектов. Банальный туду лист (можно даже чисто апи) и то хорошо подойдет. Но только он должен во первых быть хорошо сделан (по бест практисам и гайдлайнам), а во вторых в идеале джун должен иметь возможность пояснить, почему он сделал именно так или хотя бы своё мнение почему бест практисы советуют делать что-то именно так.

Может показаться, что тут много всего, но то, что джун же первое время работает в минус работодателю - это к сожалению не шутка, я от самих владельцев бизнеса слышал, что средний джун вообще в принципе начинает работать в плюс в среднем через год после найма. А всё это время ему платят запрлату и он ещё и отвлекает других сотрудников, причем зачастую они тратят от трети до половины своего времени на менторство. Отсюда и надо действовать.
277 2612817
>>612813

> средний джун вообще в принципе начинает работать в плюс в среднем через год после найма. А всё это время ему платят запрлату и он ещё и отвлекает других сотрудников, причем зачастую они тратят от трети до половины своего времени на менторство


И при этом кстати половина джунов через полгода-год любит уволиться или потому что поняли, что это не их или потому что внезапно решают поменять работу. И ещё часть джунов же не справляется и их приходится увольнять, то есть они в принципе не окупились.
Поэтому нет ничего удивительного в том, что джуну сложно найти работу, для работодателей джуны это боль и гемор зачастую.
278 2612909
>>607613

Все языки мягко говоря, не самые хорошие. Почитай статью: https://habr.com/en/post/315152/

В Go я, например, не могу терпеть дебильную привычку писать часть свойств с маленькой буквы, а часть с большой. Идиотизм какой-то.
279 2612911
>>607301

Может быть, там просто заложен определенный ответ?

Мне не нравится твое решение, так как ты написал "третий элемент с конца", в то время как тебя просили найти "первый элемент bento". То есть, ты делаешь не то, что требовалось. Если на стол добавить пару других элементов, и бенто перестанет быть третьим с конца, то твой селектор перестанет работать.

Тут бы больше подошел https://developer.mozilla.org/ru/docs/Web/CSS/:nth-of-type
280 2612946
>>612909
У го есть много черт, за которые его можно справедливо критиковать, но чего я не понимал никогда, так это критики блять маленькой и большой буквы. Это как критиковать php за $ перед переменной.
Казалось бы, какая разница, писать Property или вместо public property?
Кстати, по опыту (на го пишу уже несколько лет), первое потом даже легче воспринимается на месте использования, а не объявления. Примерно как с php, кстати, глаз тренируется цепляться за $ и код очень легко читать.
281 2612952
>>612946
На пхп и перл много пиздели про сигилы, а когда интреполяцию переменных влепили почти во все популярные языки, то как-то притихли.
282 2615817
>>574114
Вот вроде здесь чел говорит, что сейчас на битриксе можно писать нормально. Пиздит? Или конторы говно и не могут в нормальную разработку?
https://youtu.be/Jx-Us1Hs8-U?t=25
283 2615875
>>615817
Битрикс никогда не переписывался. Что значит это твоё "сейчас"? Как было - так и осталось.
284 2615910
>>615875
Новое ядро D7? Или оно тоже старое?
285 2615915
>>615817
Можно можно. Мойдодыр, принимай пополнение. В полку ассенизаторов прибыло.
http://bxapi.ru/src/?module_id=main&name=CDatabaseMysql::CompareDates
286 2615918
>>615910
У них даже в документации написано, что не весь функционал перенесли, не все доки. Это все сыро.
287 2616719
>>571790 (OP)
Насколько быстро можно вкатиться в битрикс, если я неплохо знаю пхп для вкатуна, и на базовом уровне знаю ларавель (состряпал небольшой круд с аутенификацией, которая из коробки)? С джуновскими вакансиями сейчас не оч, а на те что есть на удаленке 100-200 откликов.
288 2617082
>>615910

>D7


Лол, тупо для маркетинга высрали тонну говнокода с ООП ради ООП, который под капотом использует весь предыдущий говнокод, забили хуй на полпути и в итоге получили переплетение D7, говна мамонта и окаменелого говна мамонта
289 2617124
Если рендерить шаблоны на сервере и отдавать их фронтенду по ажаксу, а там уже в dom их руками встраивать. Часто такое практикуется?
290 2617128
>>617124

В этом есть плюсы, например, не надо писать огромное JS приложение, не надо утяжелять им страницу. Более того, уже есть готовая библиотека (pjax) для этого.

Практикуется редко.
291 2617171
>>617124
Вроде livewire примерно так работает
292 2617197
Что почитать про использование ajax в пхп? Особенно когда приходит ответ и в зависимости от него разное поведение на конечной странице.
293 2617581
>>571790 (OP)
Почаны, а вы перед тем как вкатиться на первую работу учили все эти там Kafka, микросервисы хуе мое?
294 2617590
>>617581
Когда пыханы вкатывались, до микросервисов и прочей хуйни было ещё срать и срать.
295 2618088
>>617581
На пыхе оно не особо часто используется, если не брать крупные компании.
Большинство вакансий на пыхе - это один монолит среднего размера на symfony / laravel и слава богу, всем бы так
296 2618150
>>617590
>>618088
Спасибо большое, теперь понятно почему в шапке про микросервисы и Kafka и прочее подобное ничего не написано.
iScreen Shoter - 20230221023726139.jpg257 Кб, 666x926
297 2618157
Битриксоид на техподдержке. Полагаю, до тех пор, пока магу не закончу.
Недавно столкнулся с таким приколом
298 2618177
>>618157
Беги оттуда, это всё, что можно посоветовать. Ты приобретешь очень мало полезного опыта, по сравнению с тем, что мог бы приобрести.
Я с 3 курса уже работал в аутсорсе, в итоге к окончанию маги уже был миддл+ левела и имел в портфолио проекты всяких крупных европейских и американских контор типа johnson & johnson.
Хороший старт по сравнению с теми одногруппниками, которые только начали искать работу после окончания маги. Подозреваю, что обгоняю большинство из них по зп на ~200к, но мне ещё пару раз везло с работодателями уже после аутсорса
299 2618214
>>618177
Я не он но джунов/интернов не берут на удаленку, а тут у меня в глубинке только битрикс.
300 2618260
>>618214
С чего взял, что тебя возьмут в удаленку на битрикс?
301 2618270
>>618260
Не возьмут конечно, вот я пишу поэтому про локальные доступные вакансии.
302 2618751
>>618214
Нехуй жить в глубинке, что сказать. Как бы, по определению, в глубинке меньше хороших вариантов и больше всратых.
По увеличению качества работодателей и суммы зп: Штаты > Европа > Москва > прочая Российская глубинка
Кстати, универов это тоже касается.

> у меня в глубинке только битрикс.


А только ли он? Хз, скажи название глубинки
303 2621104
>>621093 (Del)
Смотря что ты понимаешь под битриксом, но вообще нет. Битрикс - кусок говна и crm.
Ларавел - неплохой фреймворк.
Это в первую очередь разные инструменты, с, во вторую очередь, различным уровнем качества исполнения.
304 2621152
>>621114 (Del)
Да ты тоже собственно кусок говна, если говорить прямо. Чего уж там...
305 2621285
>>621114 (Del)
Поясни
306 2621378
>>621152
Сначала научись правильно реплаить
307 2621629
Есть ли у Laravel объективные плюсы перед Bitrix кроме бесплатности? У Bitrix тоже есть ORM, контроллеры, роутинг, middleware, кеши, итд, но в дополнение еще идет множество разных интеграций, готовы компоненты, админка.
308 2621649
Поясните, пожалуйста, какая связь 1С, Битрикса и PHP? Есть смысл иметь стек из всех трех технологий? Сам зеленый-вкатыш в 1С, но часто в ваках мелькает и битрикс и пхп и всё остальное, что с пхп связано.
309 2621653
>>621649
1С это желтая программа, там всякая бухгалтерия, учеты итд

Под 1С Битрикс может подразумеваться два продукта "1C-Битрикс Управление Сайтом" (БУС/CMS) и Bitrix24 (CRM), при этом второй сделан на основе первого

БУС и CRM написаны на PHP, и дорабатываются на нем же. 1С написан на С++ и дорабатывается обычно на своем встроенном языке 1С.

1С и 1С-Битрикс и Bitrix24 могут работать отдельно, но часто их связывают Bitrix24 (CRM) + БУС (Интернет магазин) + 1C

Можно знать что то одно и спокойно работать, а можно знать всю связку, если сможешь применить свои знания, то смысл иметь будет.
310 2621659
>>621653
А если я знаю игру Ил-2 Штурмовик это поможет с Битриксом?
311 2621661
>>621649
>>621653
Че ж ты самое главное не написал: приставка "1С" у битрикса это разводка для гоев, чтобы они думали что если у них есть бухучет 1С, то сайт будет легко интегрировать, типа совместимые продукты.

Что разумеется не так и битрикс имеет такое же отношение к 1С как к >>621659 Ил-2 Штурмовик.
312 2621682
>>621629
Лара это не локальный инструмент.
313 2621739
>>621661
Хуйню несёшь, ты наверное видел только 1с бухгалтерию, а надо управление торговлей, вот именно она интегрируется с битриксом из коробки
314 2621753
>>621739
Я другой анон, хотел спросить вот что - ты учил всю эту 1С-ную подноготную? Ну там 1с бухгалтерия, 1с управление предприятием, 1с кадры, 1с управление тороговлей?
315 2621816
>>621753
Ну да, а вопрос в чем?
316 2621823
>>621816
Какой ужас! Ещё что ли и весь это звиздец один ассный надо знать на зубочек? Чтоб в этой стране работать на пхп
317 2621833
>>621823
С точки зрения программиста они ничем не отличаются, во-первых. Во-вторых, программисту нужно уметь все, а не какой-то один пхп
318 2621853
>>621833
Значит пока я вкатываюсь в пхп мне надо на работу устроиться оператором 1С чтобы изнутри узнать подноготную всех этих 1С программ! Как они работают - как в них работать
319 2622053
>>621739

>Хуйню несёшь, она интегрируется с битриксом из коробки


Сильное заявление. То есть этот модуль не кусок говна, который просто не будет работать по миллиону причин, а прямо из коробки все у него охуенно? А доказательства этому какие-то есть?

А то я как не напишу в гугле "битрикс интеграция с 1С" так там обязательно кто-нибудь рассказывает про газовую еблю длинной в месяц, подводные камни или вообще советует писать самому. А на официальном форуме самая популярная тема с гигантским отрывом это тот самый "Модуль обмена для БУС". 4к ответов 5 лямов просмотров https://dev.1c-bitrix.ru/community/forums/forum26/ . Наверное люди просто "спасибо" пишут. При этом в теме по обновлениям документации всего 500к просмотров, кек.

Коробочное решение, ага. Ищи его на Говнокод.ру бесплатно без писечек и смс.
320 2622133
>>621649
Разделяй эти вещи. PHP это язык программирования, одна история. На этом языке написана CMS (то есть некий конструктор для создания сайтов), это вторая история.
Битрикс принадлежит компании 1С, это третья история.

Соответственно, знать php это норм и делает тебя php-программистом.
Знание битрикса делает тебя "битрикс программистом", что не очень, потому что CMS сиречь конструкторы сайтов это довольно ограниченные штуки, которые ориентированы на то, что ими будут пользоваться не особо технические люди, поэтому они ориентированы на накликивание всяких настроечек в интернете, натягивание "готовых" тем из магазинов и всё такое. Поэтому чаще всего "работа" битриксоидом это сравнительно тупая работа накликивателем сайтиков на заказ, она не особо ценится и за неё мало платят по сравнению с настоящей разработкой каких-нибудь сложных технических продуктов.
Плюс, битрикс сам по себе очень некачественно сделан с точки зрения программирования, очень плохой код, плохие паттерны и тд и тп. Статей на эту тему много на том же хабре.

Про 1С ничего конкретного сказать не могу, это компания с кучей продуктов. К примеру, "1С предприятие" и аналоги это видимо стандарт на СНГшном пространстве и от них не уйти. Но программирование этих средств для автоматизации предприятий и бухгалтерии - это отдельная штука и с битриксом общего не имеет.

>>621629
Главное, это очень разные вещи, примерно как раскладной столик (битрикс) и чемоданчик с инструментами (лара). То есть, первое - это конструктор для создания сайтов и заточен он на конкретно создание сайтов и управление сайтами, возврат веб страничек с содержимым, управление страницами, стилизацию этого дела и тд и тп. Со скидкой на то, что это очень грубый инструмент, потому что заточен под "накликивание". А второе это фреймворк, то есть набор компонентов/инструментов, с помощью которых ты можешь делать сайты, апи, телеграм ботов, бекенд для игр лол и тд и тп. Ты сейчас скажешь, что на битриксе тоже есть все эти компоненты, но проблема в том, что они там есть довольно условно, их никто и никогда не создавал с мыслями об универсальности, они написаны исключительно для того, чтобы быть в составе битрикса и хорошо исполняют только эту задачу. С CMS вообще это популярная проблема, ты 30% времени ставишь новый модуль, а потом 70% времени сражаешься с ним, пытаясь заставить его делать не то, что он хочет, а то, что тебе нужно. С фрейморком ты простом сам запрограммируешь себе нужную логику под задачу.

Другое различие это качество. Лара - это один из двух самых популярных и качественных фреймворков на php. И при этом из этих двоих он несколько дружелюбнее к новичкам. При этом он известен и популярен по всему миру.
А битрикс - это популярная только на постсоветском пространстве (то есть никаких западных заказчиков с $$$ нет и быть не может, что влияет на зарплаты) штука. По качеству она точно не входит в топы даже среди CMS. И по сравнению с точки зрения просто качества исполнения программного продукта, ларавел гораздно лучше запрограммирован, чем битрикс.
320 2622133
>>621649
Разделяй эти вещи. PHP это язык программирования, одна история. На этом языке написана CMS (то есть некий конструктор для создания сайтов), это вторая история.
Битрикс принадлежит компании 1С, это третья история.

Соответственно, знать php это норм и делает тебя php-программистом.
Знание битрикса делает тебя "битрикс программистом", что не очень, потому что CMS сиречь конструкторы сайтов это довольно ограниченные штуки, которые ориентированы на то, что ими будут пользоваться не особо технические люди, поэтому они ориентированы на накликивание всяких настроечек в интернете, натягивание "готовых" тем из магазинов и всё такое. Поэтому чаще всего "работа" битриксоидом это сравнительно тупая работа накликивателем сайтиков на заказ, она не особо ценится и за неё мало платят по сравнению с настоящей разработкой каких-нибудь сложных технических продуктов.
Плюс, битрикс сам по себе очень некачественно сделан с точки зрения программирования, очень плохой код, плохие паттерны и тд и тп. Статей на эту тему много на том же хабре.

Про 1С ничего конкретного сказать не могу, это компания с кучей продуктов. К примеру, "1С предприятие" и аналоги это видимо стандарт на СНГшном пространстве и от них не уйти. Но программирование этих средств для автоматизации предприятий и бухгалтерии - это отдельная штука и с битриксом общего не имеет.

>>621629
Главное, это очень разные вещи, примерно как раскладной столик (битрикс) и чемоданчик с инструментами (лара). То есть, первое - это конструктор для создания сайтов и заточен он на конкретно создание сайтов и управление сайтами, возврат веб страничек с содержимым, управление страницами, стилизацию этого дела и тд и тп. Со скидкой на то, что это очень грубый инструмент, потому что заточен под "накликивание". А второе это фреймворк, то есть набор компонентов/инструментов, с помощью которых ты можешь делать сайты, апи, телеграм ботов, бекенд для игр лол и тд и тп. Ты сейчас скажешь, что на битриксе тоже есть все эти компоненты, но проблема в том, что они там есть довольно условно, их никто и никогда не создавал с мыслями об универсальности, они написаны исключительно для того, чтобы быть в составе битрикса и хорошо исполняют только эту задачу. С CMS вообще это популярная проблема, ты 30% времени ставишь новый модуль, а потом 70% времени сражаешься с ним, пытаясь заставить его делать не то, что он хочет, а то, что тебе нужно. С фрейморком ты простом сам запрограммируешь себе нужную логику под задачу.

Другое различие это качество. Лара - это один из двух самых популярных и качественных фреймворков на php. И при этом из этих двоих он несколько дружелюбнее к новичкам. При этом он известен и популярен по всему миру.
А битрикс - это популярная только на постсоветском пространстве (то есть никаких западных заказчиков с $$$ нет и быть не может, что влияет на зарплаты) штука. По качеству она точно не входит в топы даже среди CMS. И по сравнению с точки зрения просто качества исполнения программного продукта, ларавел гораздно лучше запрограммирован, чем битрикс.
321 2623081
PHP будем изучать
322 2623715
>>623081
Помянем
323 2623897
Как проще всего реализовать проверку регистрации? Чтобы при переходе по ссылке отображалась страничка что нужно регнутся для просмотра
324 2623951
>>623897
Смотря на чём ты разрабатываешь. В двух словах, маркируешь страницы или пути в роутере или allow-auth-only, или allow-everyone.
Потом в отдельной подсистеме (в условном middleware, хотя зависит от архитектуры твоего фреймворка) проверяешь, если текущий путь allow-auth-only, а текущий пользователь это аноним - то выкидываешь или ошибку, или вызываешь фоллбек на показ страницы с инфой о том, что путь закрыт для анонимов. Лучше выкидывать ошибку (скажем 403, но оно конечно зависит) и потом просто задать для такой ошибки рендеринг в виде страницы с инфой.
325 2624059
>>623897
if (empty($_SESSION['login']) {
header("Location: /register.php");
die;
}
326 2624101
>>622053

Возмжно, проблема в том, что "1С" это не одна программа, а фреймворк, на котором сделаны тысячи решений. Ну представь, например, задачу "сделать обмен данными с магазином на Симфони". Ты можешь написать такой обмен для всех существующих магазинов на Симфони? То же самое и с 1С. Практически в каждой компании используется своя разработка на основе 1С, а не стандартная программа.

То есть, по моему ты просто не понимаешь сложности проблемы, а спешишь объявить, что 1С "кривой", потому что его авторы не смогли заложить возможность обмена чем угодно с чем угодно.
327 2624111
>>624101
Это не фреймворк даже если они пытаются его так называть, а CMS, прекрати блять путать людей. Это пиздец какая натяжка. С этой точки зрения и джумла фреймворк, и вики-движок фреймворк и вообще всё что угодно фреймворк.
328 2624148
>>624059
Проиграл
329 2624153
>>624148
Да я вроде серьезно...
магистр разработчик битрикс
330 2624196
>>624101

>Возмжно, проблема в том, что "1С" это не одна программа, а фреймворк


Ну во первых я ничего не писал про 1С, хотя там тоже свой атмосфера. Я написал что "битрикс" никакого отношения к 1С не имеет, а приписка "1С" это наебка чтобы заманить клиентов, которым нужна функция обмена, на свое говно. Написанное десять лет назад школькниками за дошик.
screen.jpg57 Кб, 818x214
331 2624309
Как фиксить? Пробовал обычны фтп и сфтп
332 2624813
>>624309
Запостить не инфу, что где-то была ошибка, а текст и код самой ошибки
333 2625838
Как правильно с урлами обходится? Вроде как если идёт речь о директории то должен быть слеш в конце example.com/dir/, а если файл то не должен - example.com/page.html, но сейчас понятно что никто .html файлы не использует и на разных сайтах вижу разное и example.com/page?param=value и example.com/page/?param=value. И как с корнем правильно - example.com/ или example.com?
334 2626029
>>625838
Это всё херня из интернета девяностых и нулевых, когда это ещё были прям веб странички, которые тебе возвращал сервер.
Сейчас уже пути, которые ты видишь в браузере не имеют вообще и тотально никакого смысла, потому что нет ни отдельных страниц (только роутинг и рендеринг на сервере), ни даже реального контента по этим путям (всякие js приложения рисуют или управляют этими путями как угодно).
Поэтому правило одно - чем проще людям и чем меньше избыточности, тем лучше.
То есть, никаких лишних знаков, слешей, расширений.
https://www.google.com/a/b.html -> https://google.com/a/b
https://google.com/ -> https://google.com
335 2626256
>>625838
ЧПУ
336 2626371
>>626279 (Del)
Ничего лучше сделать html а потом вызвать wkhtmltopdf в докере ещё для этой задачи не придумано, сорян.
337 2626631
>>626371
html статикой тоже надо поднять веб сервисом в докере, иначе как лох.
338 2626736
Когда я изучаю новую технологию, я по привычке, оставшейся от школы и универа, делаю краткие конспекты по ней (например, знакомясь с Redis, записываю в txt-файл самые полезные опции конфига, основные CLI-команды и функции).
Вроде бы в документации это всё уже есть, но там либо много избыточной и сложной инфы (которой я никогда в жизни не воспользуюсь), либо наоборот недосказанность (не поясняют человеческим языком, как это юзать). К тому же своё говно роднее если долго не работал с технологией и надо быстро освежить память а память у меня как у печеньки , то на руках этакий мини-справочник.
Но минус: технологии меняются, и мои шпаргалки становятся либо неполными, либо неактуальными. Приходится следить за апдейтами технологий и тратить время на правки, да и создавать их тоже долго.
Вопрос: я занимаюсь фигнёй и стоит отвыкать от такого подхода, или смысл в этом есть?
339 2626947
>>626736
Это только тебе решать.
340 2627152
>>626957 (Del)

> В итоге нашел какую-то говнолибу для пдф


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

При этом варианты, запускающие хедлесс хром или анаглоги хороши тем, что html позволяет тебе сверстать и отдебажить через Ctrl+P прям в хроме что хочешь (можешь даже js запускать внутри страницы, чтобы что-то подправить), а хром гарантированно качественно рендерит pdf.
Если у тебя проект не маленького размера, то полюбому есть какая-нибудь очередь задач, самописаня на раббите, gearman, celery, что угодно. Просто создаешь там таск, который делает docker run -it wkhtmltopdf и получаешь пдфку.

Кстати, если тебе нужно показать пользователю pdf прям в реалтайме, то тебе вообще не нужны никакие либы, показываешь ему html и браузер пользователя сам соберет из этого pdf, примерно так:
https://stackoverflow.com/questions/42324435/using-js-to-print-page-as-pdf-in-chrome-and-open-it

>>626736
Это помогает, когда ты совсем зеленый джун. Со временем понимаешь, что во первых инструментов настолько дохуя и они нсатолько часто меняются, что ты заебешься это все поддерживать и актуализировать, во вторых, научишься быстро читать спеки и в третьих уже будет достаточно опыта, чтобы представлять, что ты хочешь сделать, как оно называется и где оно лежит, поэтому любую инфу просто одним коротким запросом из гугла тебе будет быстрее достать, чем копаться в своих самописках.
Короче, болезнь новичка и пройдёт.
341 2627297
Аноны нужно ваше мнение
Я сильно хлебну говна при переходе на лару с симфони?
342 2627600
343 2627624
>>627297
Нет, но лучше сразу на спринг переходить.
344 2627626
>>627624
а БЛЯ прочитал ЖОПОЙ...

>при переходе с лары на симфони

345 2627889
Не знаю, тут ли спрашиваю, но в htaccess rewrite rule работает только одно после группы условий? Мне нужно объединить 2 разных rewrite в один, если у первого не ставить флагов, а второму задать r=301,L - это будет работать?
346 2627942
Подходит ли сей язык для быстрого вката с последующим унижением на собесах или работе за Доширак на фрилансах? Или же есть языки программирования приносящие профит быстрее?
347 2627986
>>627942
Твоя ошибка в том, что ты хочешь выучить один язык, это так не работает
348 2627989
Симфони в офисе или битрикс на удаленке - куда сам сядешь, куда джуна посадишь?
349 2628049
>>627989
Если от этой жизни чего-то хочешь, то бери симфони. В офис походить пару лет не очень западло, зато потом человеком будешь.
А битрикс это как подсесть на хмурого, закончишь в бомжатнике с разрушенной нервной системой.

>>627942
В любом случае быстро не получится. Даже не так, задрочить что-то простенькое и потом сидеть на 40к в месяц можно изи, но тебе ведь не это надо?
А для хороших рейтов нужно что-то уметь и для этого нужно многому научиться, во многом разобраться и при этом перестроить мышление на алгоритмическое, что непросто, если тебе не повезло со школой и в школьные годы этому не научили.
Ещё программирование на любом стеке - это работа с целым набором технологий, всегда используешь какие-то протоколы, какие-то базы данных, какие-то разметки и файлы конфигурации и тд и тп. В-общем один "язык" ничего не решит, как тебе правильно сказали выше.
Решит знание базы, которая +- одинакова везде (алгоритмы и структуры данных, сети и прочее) и при этом знание технологий конкретного стека.

Как стек для вката php в целом ок, удалёнка есть, дошик найдешь. Хотя я бы первые несколько лет порекомендвоал в офис-то походить, по моим наблюдениям, пока люди стоят в курилке или на кухне, да и просто вместе сидят и работают, они обмениваются многими знаниями и навыками.
На ремоут лучше уходить уже миддлом хотя бы, когда нечему учиться у других и учишься уже у себя

>>627889
Ну ты спросил, кто-то вообще использует апач. Офигеть. Я думал, что все уже на nginx пересели, лет 10 назад. по-моему все rewrite rule применяются последовательно, но могу сильно наврать

>>627297
В целом нормально, хотя и не огонь. Чуть менее академично и чуть более грязно (всё-таки их фасады и работа через static это ну такое), но не критично. Если на ларе больше предлагают или проект интереснее (или просто больше/сложнее), то переходи.
350 2628063
Как реализовать доступ к файлу по ссылке, типа как у гугл диска?
Просто добавить страницу в игнор robots.txt норм будет если в урле uuid и ссылка доступна в течении суток?
Вроде рандом чел не сможет найти такую ссылку, даже если будет брутфорсить?
351 2628072
>>628049

>Ну ты спросил, кто-то вообще использует апач. Офигеть. Я думал, что все уже на nginx пересели, лет 10 назад.


А там как редиректы делаются?
352 2628131
>>628072
Да обычно тоже через rewrite, просто htaccess это чисто апачевская тема, я на неё и триггернулся

>>628063
Да даже в robots.txt можешь не добавлять, гугловый краулер никогда не узнает о ней и потому никогда туда не перейдёт. Так что да, решается генерацией особо уникальной ссылки, если не вспоминать уже про авторизацию и нарезку доступов к ссылке по пользователям.
353 2628217
>>628131

>Да даже в robots.txt можешь не добавлять, гугловый краулер никогда не узнает о ней


Ошибка вот так думать. Лично видел как приватные страницы с uuid'ами в ссылке попадали в выдачу гугла. Лучше сразу подумать есть ли там что-то критичное и закрыть доступ на всякий.
354 2628263
>>627989
Мать на Yii - сам на колени!
355 2628758
Доставьте годный мануал как максимально просто и быстро запилить регистрацию с авторизацией, в гугле и ютубе слишком много говна пихают
356 2628801
>>628217
Да, они могут все равно попадать через третьи страницы. Надо meta тег добавлять noindex nofollow
357 2628807
Тимлиды, подскажите чё должен знать мидл? Я так понимаю технологии на первом месте, а потом уже задрачивается архитектура приложения/бд?
Я вот начал учить redis, memcached, rabbitmq. На первый взгляд достаточно простые в использовании штуки, разве что пока не понимаю как работает репликация, но это, наверное, только для высоконагруженных приложений актуально.
Достоин ли я буду звания мидла после изучения и практики вышеперечисленных вещей?
358 2629004
>>628807
И практики? Покажешь практику?
359 2629071
>>628758
Да, когда к тебе на хату заходит новое тело, кидай ему под ноги полотенце. Если перешагнет - значит можно авторизовать.

>>628807
Нормально базу (алгоритмы и структуры, плюс конечно же паттерны, хотя бы gof), нормально язык (стандарты и практики), нормально экосистему (самые популярные либы + свой фреймворк, включая его архитектуру и бест практисы), нормально сети (http1, 1.1, 2, https как минимум), нормально базы и очереди (хотя бы одну postgres/mysql/oracle/sqlserver + сам по себе sql как стандарт, ну и какой-нибудь rabbitmq или kafka. Redis или memcahed уже бонусом), нормально сопредельные технологии (git + git workflow, nginx, docker).

> На первый взгляд достаточно простые в использовании штук


Если забыть про acid, нормальные формы, уровни изоляции, индексы, оптимизацию запросов и вообще представление того, как работает планировшик, всякие особенности конкретного движка типа вакуума в постгре и тп. Ну и репликация, шардирование и партиционирование туда же, бонусом.
Ну и наверное нужно понимать что-то про архитектуру, хотя бы те же паттерны, что-то слышать про ddd и вообще, структурирование домена, понимать, какая у вас используется архитектура (MVC к примеру или MVP, хотя это больше мобильная тема) и почему именно она. Слышать что-то про active record и почему это плохо. Про тот же DI знать и про разделение ответственностей между компонентами.
360 2629076
>>629071
А, и я забыл пункт "радуешься, что пишешь на кастрированном языке и тебе особо не нужно учить особенности гц, рантайма, планировщика и тому подобные штуки".
Пехапешникам на внутренности языка как правило похуй, хотя иногда всякие дрочилы на собесах любят спросить как массивы работают под капотом.
361 2629116
>>629071
А на сениора тогда что надо?
362 2629119
>>627942

Подходит. Я так вкатился, сначала делал сайты в вебстудии за 20 тыщ, потом перешел в парашу на laravel за 80 тыщ, потом перешел в крупную компанию с дохулиардом кода на 250 тыщ.

Щас вот думаю куда дальше развиваться. В крупнопараше боюсь застрять. Я уже начал петпроджекты писать потому что с работой в крупняке забываешь че такое базы данных, забываешь че такое верстка, и так далее. Потому что не пользуешься. Ты пишешь пакет composer который другие ставят через composer require
363 2629414
>>629116
Да в целом то же самое, но на более глубоком уровне. Условно, на миддла я бы ждал от тебя ответа на то "как и когда использовать индексы в бд", а на сеньора "как они работают, какие их типы бывают и какими ограничениями обладают, что такое селективность, когда имеет смысл их создавать, а когда это вредно, что, если их слишком много, что делать, если деградирует запись, что делать, если деградирует чтение" и тд и тп..
image.png2,2 Мб, 1200x1600
364 2629474
>>629414

Сдвинь на 1, то что у тебя на синьора это мидл, то что на мидла это ждун. У синьки спрашивают системный дизайн. А лучше - с примерами из рабочей практики.

Вот вам нужно спроектировать приложение для института информационных технологий. Там должна быть интеграция с гитхабом, возможность проходить тесты, сдавать лабы и тд. Ну и вопросы.
365 2629518
>>629474
Не спрашивают.
Спрашивают все тот же солид и ебут загадками на индексы в базе.

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

Скорее всего спросят твое мнение по некоторым вопросам, типа нужны ли тесты, пидар ли мартин, в гробу какого цвета ты видел пср стандарты. И если твое мнение кого-то не устраивает, то скажут что перезвонят. Это гораздо эффективнее чем часами ломать голову над какими-то прожектами тех с кем ты срать в одном офисе не стал бы.
366 2629549
>>629474

> У синьки спрашивают системный дизайн


Одно из - да. Но всё остальное, что я сказал, тоже спрашивают. Норма это 2-3 собеса, алгоритмы, технологии и дизайн.
367 2629999
На какую ЗП может расчитывать ПХП-джун?
PHP, MySQL(EAV, NS, AL, MP), Docker, RabbitMQ, Yii2, Регулярные выражения, JS (es5), CSS, HTML, GIT, Debian, SSH, Xdebug, Smarty, SOLID и другие паттерны по категориям, Codeception/php-unit
368 2630000
>>629999
А, еще nginx+php-fpm куда ж без них
369 2630041
>>629999
Все эти волшебные слова ничего не гвоорят, потому что непонятно, насколько глубоко ты это всё знаешь. Кстати, любопытно, что ты ничего не написал про алгоритмы или паттерны. я бы просто из любопытства глядя на такое резюме попросил тебя синглтон реализовать
Вообще мне казалось, что в регионах джун может расчитывать примерно на 50к +- 20к в зависимости от своих скиллов, стека и везения/степени захолусться, в котором он живет. Ну и в Москве и Питере умножай на 1.5-2 всё, и доходы, и траты.
Сейчас правда с рынком чёрт знает что происходит и никто тебе точно не скажет, кроме тех, кто прям сейчас нанимает или ходит по собесам.
370 2630042
>>629999
Тысяч 70 наверное, хз насколько хорошо ты умеешь со всем этим работать и как ты записывал технологии в список, сам понимаешь
371 2630062
>>629999
Ты случайно не херка? А то ты намешал(а) все в кучу как херка. Smarty это привет из 2000 Про mysql какая-то шиза. Ты в mysql EAV знаешь? EAV это модель данных. Непосредственно к знанию бд отношения не имеет.
372 2630093
>>630041
Попробуй читать глазами, тогда увидишь про паттерны
373 2630100
>>629999

>SOLID и другие паттерны


Тут все. Интервьюер встает и уходит проржаться.

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

Правильным ответом на вопрос "используешь ли ты солид" будет ответный вопрос "а вы сами-то как?", интервьюер отвечает "да по маленьку" и понимает что перед ним человек опытный, который шарит что пользоваться этой хуйней попросту невозможно.
374 2630102
>>630093
SOLID это не паттерн, если что
375 2630105
>>630100
Если устраиваться в бомжатник с веб макаками то да
376 2630106
>>630100
Если устраиваться в бомжатник с веб макаками то да
377 2630108
>>630100
Если устраиваться в обезьянник с веб бомжами то да
378 2630110
>>630105
И тут ты такой называешь контору где пишут по солиду. Даже похуй на каком языке.
Жаль что дальше пойдут маневры и виляния сракой, но ни одного конкретного названия не будет.
379 2630116
>>630100
Ты дурачек какой-то, ты даже не джун как я, тут только с тебя поржать можно. Паттерны разбиты на категории, пораждающие, поведенчиские и тд- https://designpatternsphp.readthedocs.io/ru/latest/README.html

А чтобы не писать по SOLID нужно быть уебаном.

1. Принцип единственной ответственности - тут и так понятно. Если в классе есть методы которые лезут в бд за инфой, обрабатывают ее и рендереят результат - то разбиваем все на тематику. и получится типа $o = new OrderRender(new Order(new OrderRepository())) и далее можно развить это в сервис, все это засунуть в OrderService который будет все это собирать внутри себя и для людей уже человеческие методы и уже его юзаем в контроллере фреймворка, а низкоуровневые классы в нем ебутся

2. Принцип открытости/закрытости - то что есть не меняем, а расширяем за счет классов на основе интерфейса. Допустим есть класс Storage() который сохраняет сессии, он принимает класс new Session - $s = Storage(new Session);, сам Storage закрыт для изменений, но открыт для расширений, мы ему передаем $s = Storage(new RedisSession); на основе интерфеса и он уже сохраняет сессию в редисе а не в сессии или в $s = Storage(new MySQLSession);
Либо класс Storage отнаследовать и дополнить новым функционалом, а не менять то что уже есть.

3. Принцип Барбары Лисков - Объекты классов могут быть заменены их наследниками. Дает возможность использовать дочерние классы как и родительские. Допустим есть Который получает json книг из файла, мы от него наследуемся и получаем книги из mysql сохраняя один и тот же метод $x->getBooks(); - но сам принцип так себе, лучше на основе интерфейсов все делать без такого наследования, а то есть не наследуемые классы типа квадрат и прямоугольник и методы прямоугольника к вадрату присовывать? Нет.

4. Принцип разделения интерфейсов - есть интерфейс Птица, у него методы кушац и летать. А есть класс Пингвин, он как бы тоже птиц, но летать не может, разделяем интерфейсы (Птица->кушать(), ЛетающаяПтица->летать(), БегающаяПтица->бежать()) и вот все эти интерфейсы дописываем классу Утка и так же пингвину, только ему не дописываем летающая птица. А вот если бы был большой интерфейс то пизда. Так же можно с хостинг провайдерами, у кого облако Cloud, у кого CDN

5. Инверсия зависимостей. Ну как обычно у нас есть класс мы в конструктор передаем объект и его используем, так? А сейчас мы указываем интерфейс в __construct(Zaloopa $o) и вообще поебать что там теперь придет, внутри класса работает только с методами из интерфейса Залупа, а вот теперь в наш класс хуй пойми что не вставишь, туда только залупа влезет, и вот теперь мы уже голову ломаем не что туда придем и что нам ловить, а что туда теперь нужно всунуть чтобы заработало. - вот это и есть инверсия зивисимостей. Залупа неизвестно сколько см - это абстракция и мы теперь зависим от абстрации а не от чего-то конкретного, а 14-15см это детали, мы не должны зависить от деталей. Детали должны от абстракций, сколько хочешь см в анус столько и будет.
Классы верхних уровней не должны зависеть от классов нижних уровней. Оба должны зависеть от абстракций. То что нам приходит - это классы нижнего уровня, шныри, ходят в базу, принеси-подай или может нарисовать че захочешь. А это, ебать, класс высокого уровня - содержит бизнесс логику, кручу-верчу наебать хочу, скидочки, денюжки, на черную пятницу цену якобы понизим лохам - но они опираются на классы низкого уровня. Так вот когда мы пишем под интерфейс мы вызываем метод save() сохраняя данные и вообще похуй как и где оно сохранится, мы только передадим класс репозиторий, а репозиторий чего это уже похуй, у них у всех один и тот же интерфейс, аналог PDO который и в мускл может и в постгресс и код один

Все эти принципы взаимосвязанный друг с другом
379 2630116
>>630100
Ты дурачек какой-то, ты даже не джун как я, тут только с тебя поржать можно. Паттерны разбиты на категории, пораждающие, поведенчиские и тд- https://designpatternsphp.readthedocs.io/ru/latest/README.html

А чтобы не писать по SOLID нужно быть уебаном.

1. Принцип единственной ответственности - тут и так понятно. Если в классе есть методы которые лезут в бд за инфой, обрабатывают ее и рендереят результат - то разбиваем все на тематику. и получится типа $o = new OrderRender(new Order(new OrderRepository())) и далее можно развить это в сервис, все это засунуть в OrderService который будет все это собирать внутри себя и для людей уже человеческие методы и уже его юзаем в контроллере фреймворка, а низкоуровневые классы в нем ебутся

2. Принцип открытости/закрытости - то что есть не меняем, а расширяем за счет классов на основе интерфейса. Допустим есть класс Storage() который сохраняет сессии, он принимает класс new Session - $s = Storage(new Session);, сам Storage закрыт для изменений, но открыт для расширений, мы ему передаем $s = Storage(new RedisSession); на основе интерфеса и он уже сохраняет сессию в редисе а не в сессии или в $s = Storage(new MySQLSession);
Либо класс Storage отнаследовать и дополнить новым функционалом, а не менять то что уже есть.

3. Принцип Барбары Лисков - Объекты классов могут быть заменены их наследниками. Дает возможность использовать дочерние классы как и родительские. Допустим есть Который получает json книг из файла, мы от него наследуемся и получаем книги из mysql сохраняя один и тот же метод $x->getBooks(); - но сам принцип так себе, лучше на основе интерфейсов все делать без такого наследования, а то есть не наследуемые классы типа квадрат и прямоугольник и методы прямоугольника к вадрату присовывать? Нет.

4. Принцип разделения интерфейсов - есть интерфейс Птица, у него методы кушац и летать. А есть класс Пингвин, он как бы тоже птиц, но летать не может, разделяем интерфейсы (Птица->кушать(), ЛетающаяПтица->летать(), БегающаяПтица->бежать()) и вот все эти интерфейсы дописываем классу Утка и так же пингвину, только ему не дописываем летающая птица. А вот если бы был большой интерфейс то пизда. Так же можно с хостинг провайдерами, у кого облако Cloud, у кого CDN

5. Инверсия зависимостей. Ну как обычно у нас есть класс мы в конструктор передаем объект и его используем, так? А сейчас мы указываем интерфейс в __construct(Zaloopa $o) и вообще поебать что там теперь придет, внутри класса работает только с методами из интерфейса Залупа, а вот теперь в наш класс хуй пойми что не вставишь, туда только залупа влезет, и вот теперь мы уже голову ломаем не что туда придем и что нам ловить, а что туда теперь нужно всунуть чтобы заработало. - вот это и есть инверсия зивисимостей. Залупа неизвестно сколько см - это абстракция и мы теперь зависим от абстрации а не от чего-то конкретного, а 14-15см это детали, мы не должны зависить от деталей. Детали должны от абстракций, сколько хочешь см в анус столько и будет.
Классы верхних уровней не должны зависеть от классов нижних уровней. Оба должны зависеть от абстракций. То что нам приходит - это классы нижнего уровня, шныри, ходят в базу, принеси-подай или может нарисовать че захочешь. А это, ебать, класс высокого уровня - содержит бизнесс логику, кручу-верчу наебать хочу, скидочки, денюжки, на черную пятницу цену якобы понизим лохам - но они опираются на классы низкого уровня. Так вот когда мы пишем под интерфейс мы вызываем метод save() сохраняя данные и вообще похуй как и где оно сохранится, мы только передадим класс репозиторий, а репозиторий чего это уже похуй, у них у всех один и тот же интерфейс, аналог PDO который и в мускл может и в постгресс и код один

Все эти принципы взаимосвязанный друг с другом
380 2630117
>>630110
Может тебе еще всех тимлидов назвать поименно, которые тебя на ревью попустят без солида? Мальчик, ты там не охуел?
381 2630118
>>630116
Больное животное, нахуя мне твоя шизофазия?
Ты давай мне лучше расскажи как мне отличить открыто там в коде или закрыто? Это ведь не сектантский бред, можно ведь код проверить на соответствие солиду? Напиши алгоритм, по пунктам, чтобы применив его к любому классу я мог сказать закрыт он или приоткрыт.

>>630117

>пук


Ну это слишком ожидаемо. А мог ведь и не оправдывать моих ожиданий и просто промолчать.
382 2630119
>>630118
Больное животное тут только ты
383 2630121
>>630119
По солиду есть че пукнуть? Или дальше переписывания википедии ты в его "изучении" не добрался?
384 2630122
>>630121
Веб-мастер, ты себя уже похоронил
Screenshot 2023-03-05 023131.png819 Кб, 1852x992
385 2630123
>>630122

>Веб-мастер


Кто?
386 2630233
>>630146 (Del)
Говорим правильно:
1. Специалист сервисного центра
2. Системный администратор
3. Фронтенд-разработчик
4. Трафик-менеджер
387 2630387
>>630146 (Del)

>сеошник


они и сейчас же существуют
388 2630405
>>630387
Экстрасенсы и маги тоже сейчас "существуют" на деньги доверчивых буратин
389 2630420
>>630387
Они существовали, когда поисковики были малы и глупы, сейчас они обоссывают таких умников.
390 2631155
Сеньоры привет. У нас тут есть задачка со списком студентов. Нашел на гите вариант от анона https://github.com/Bocmah/student-list можно ли считать его вариант как хорошее решение? И если кто уже проходил местные испытания, то поделитесь эталонными решениями
391 2632136
>>571790 (OP)
Можете, пожалуйста, привести простые ну или не очень примеры принципа Code on done (код по требованию) в REST API?
И можете объяснить про манипулирование ресурсами, самоописывающее сообщение принципа единого интерефеса?
392 2632152
>>631155
Ну так... мне не совсем нравится его писанина. Вместо

class Student {
private $name;

public function __construct(string $name) {
$this->name = $name;
}
}

Можно просто было написать

class Student {
public function __construct(private string $name) {}
}

Ну и тому подобные мелкие косячки, но так в целом сойдёт. Если сильно не придираться.
393 2632155
>>632152
Критик-хуитик, ты бы хоть год написания кода чекнул. Обоссал не снимая штанов.
FireShot Capture 184 - student-listAuthManager.php at master · Bocmahstudent-list · GitHub - github.com.png12 Кб, 405x177
394 2632156
>>631155
А, ну и плюс - тут авторизация беспонтовая. Она ни от чего ни защищает. По идее, нужно было делать jwt токен, потом делать валидацию токена https://developer.okta.com/blog/2019/02/04/create-and-verify-jwts-in-php Если срок токена истёт, надо было выписывать новый токен. Короче тут лапотно сделано.
395 2632165
>>632136

>Code on done


Че-то в гилос, правильно https://en.wikipedia.org/wiki/Code_on_demand
Это хуйня в рест была придумана дидами для джава апплетов https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_7 . Тогда они думали что таких космических технологий будет еще много, вот и добавили в стандарт костылик. А апплеты оказались нахуй никому не нужны. Кукаретики щас пердят че-то там про джаваскрипт, но по факту никто джаваскрипт из апи не качает.
Короче забей, отмерло за ненадобностью.
396 2632177
>>632156
Ты мало того что читать не умеешь, так еще и не отличаешь авторизацию от аутентифкации.

Аутентификация происходит здесь https://github.com/Bocmah/student-list/blob/ddf4c2b5e2fb0302faec6cfaa4800be7c2edb9b5/app/Controllers/ProfileController.php#L83
Если умеешь читать, то поймешь что отредактировать можно только того пользователя под которым ты зарегистрирован. Да можно придумать десяток улучшений и сделать пизже, но речь о том что ты, еблан, выдумал какую-то хуйню, да еще и токен за каким-то хуем приплел.

Короче.

>Она ни от чего ни защищает


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

Кстати, светанешь свою реализацию парсинга jwt? У пацанчика там чистый самопис, без компромиссов и сторонних библиотек. Так что? Набросаешь нам примерчик или будет стандартная шарманка про то что ты ничего никому не должен и пошел я нахуй? Чел вот не забздел и сделал приложуху. А ты хотя бы мааааленькую частичку его работы в состоянии сделать?
397 2632213
>>632177
Эксперт по безопасности закукарекал. Если у тебя какая-то обида, пиши в жалобную книгу двача. Я просто проходил, мне некогда дотошно каждую строчку анализировать и разводить с тобой длинные дискуссии. Это самая топорная реализация которую можно было придумать. Проверять, существует ли куки или не существует. Это просто ебать смешно, утверждать типа "если по хешу студентов не найдёт", значит защита работает. Колхозная реализация.
398 2632223
>>632213
Еще раз: то что ты написал в первом посте не соответствует действительности. Топорная, хуерная, самая, не самая. По факту работает. Кстати если в куке будет токен, то процесс мало изменится, ты расшифруешь токен, вытащишь из токена хэш и точно так же полезешь с этим хешем в базу.

Прочитать код тебе некогда, а выебываться на двачах тебе есть когда.
Как итог - хотел выебнуться, а получилось только обосраться.
b2b7c451cbddc634ecc0dc37031fb4d6.jpg107 Кб, 1024x768
399 2632224
>>632223

>По факту работает

400 2632248
>>632224
Обосрался - обтекай.
401 2632259
>>632248
Это детская защита. Через CSRF картинку можно увести куку элементарно. Тем более, у тебя нет привязки девайса, нет ротации кук. Ты как один хеш поставил, так им можно пользоваться до пенсии. Токены сессии должны ну как минимум меняться при каждом логине.
402 2632308
Спасибо за ответ парни, не ругайтесь особо. Выж не ебанутые школьники из пистон-треда, а мужи веб-ремесла.
403 2632530
>>632253 (Del)
Просто у тебя наблюдается расхождение желаемого с действительным. "Синьор должен". Ну охуеть теперь. Тебе хочется чтобы сеньор был кем-то особенным, какие-то новые обязанности, новые дела.

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

Про ответственных за модуль очень смешно. У меня за последние лет пять меньше трех одновременно открытых проектов в шторме не было. Сколько там сотен "модулей" я даже не ебу. Ты создаешь мердж реквест, парни делают код ревью, все.

Какой нахуй "ответственный"? Если косяк в бизнес логике - за это отвечает аналитик и продакт, без их отмашки ты даже не начинаешь код писать. Если косяк в качестве кода - для этого и делают код ревью. Если им всем похуй, тесты прошли и код работает без ошибок, то тебя это тем более ебать не должно.

>Можно потерпеть, не каждый день синьора нанимаем.


Ну тут ясно, собесы ты не проводил.
Ты нанимаешь сеньора каждый день в течении двух месяцев. Тебе постоянно несут на посмотреть какую-то хуйню мутных и гиблых людей. У тебя постоянно как кол осиновый стоит это интервью на пять часов и твое расписание скачет вокруг него как на ярмарке - это откладываем, это сегодня не успею, это без меня. И на этом ебаном интервью надо ведь и самому не выглядеть дегенератом, быть бодрячком, шевелить мозгами. А если их несколько в один день, то вообще пизда.
404 2632540
>>632530
О чем речь. ПХП сеньки с 15 лет опыта с print_r отлаживают код...

мимо
9562991066515ca6be3febccefd37626a3955c8a800.png649 Кб, 558x473
405 2632545
>>632259

>Это детская защита. Через CSRF картинку можно увести куку элементарно.


У меня перманентно в фоксе выключены third party куки. Ссу на твое обосранное туловище. Можешь начинать фантазировать про XSS, хакать моего хостера и заливать шелл.
406 2632548
>>632253 (Del)

> Просто у тебя наблюдается "инфляция терминов". У тебя синьорами называют мидлов. Синьор должен быть руководителем. Руководить участком кода. Модулем. Быть ответственным не только за код который он пишет, но и за код который другие пишут в его модуль.


Вы все увлекаетесь цветовой дифференциацией штанов и забываете, что нет точного определения сеньора.
В некоторых конторах сеньор = лид и все разработчики со временем растут в менеджеров и они искренне могут тебе сказать, что ты не сеньор, если не руководил хотя бы 6 сотрудниками.
В некоторых конторах сеньор = архитектор.
В некоторых конторах сеньор = технарь, который может погрузиться в лоу-левел и найти ошибку в сишном pecl экстеншене к примеру, ещё и пофиксить, форкнуть, скомпилить и на прод катануть.
А в некоторых вот таких остерегайтесь, самые говнистые сеньоров меряют просто по возрасту. Мне как-то на собесе заявили, что я слишком много денег хочу и что они такие зп платят только тем, кто старше 30 лет, лол. И не завод был, а какой-то дата-аналитический стартап

Короче, прекратите выебываться конкретикой, терминология была и есть условная.
Джун - начинающий разработчик.
Миддл - разработчик средней руки.
Сеньор - опытный разработчик.
Всё остальное - это вопрос квалификации в конкретном направлении.
Сеньор менеджер может быть миддл разработчиком и джуниор оптимизатором, условно.

>>632540
Соответственно, может эти "сеньоры" зато охуенно управляют людьми, сроками и требованиями. Вопрос нейминга.

Есть ещё другая проблема, php сам по себе, как экосистема, очень сильно замкнут и часто не даёт условным миддлам вырасти в сеньора. К примеру, как ты научишься программировать что-то лоу-лейтенси на php? Да никак, в таких областях php даже не используют. Поэтому ты и развиться в этом направлении толком не сможешь, ил ипридется стек менять. То же самое и с байтомолотилками и с прочим. Но это отдельная история.
photo-176424.jpg17 Кб, 600x479
407 2632582
>>632548

>погрузиться в лоу-левел и найти ошибку в сишном pecl экстеншене


Ебать фантазер. Твое место у вордпресс параши. В лоу левел ты погружаешься только приняв пивандепалы после тяжелого дня формошлепства.
Сеньор-архитектор ебать ахахахахахах, да ты прямо сейчас угашенный сидишь походу ахахахахаха
408 2632727
>>632582
По делу есть что сказать? Если ты формошлепишь говно всякое, это не значит, что все так делают. pecl я впрочем не трогаю, да и в целом это уже устаревшая штука, я привел его для примера лоу-левела. Лично у меня половина проектов на golang и вот там периодически приходится нырять в рантайм, тыкать pprof и всё такое.
409 2632775
>>632727
По какому делу, залупа ты понурая? Ты навыдумывал у себя в башке какой-то хуйни, а когда тебя попустили, начал выдумывать новую хуйню, теперь про какой-то го. Ну так и пиздуй в го тред, тебя там быстро обслужат. Нахуй ты тут свой шизофренический бред высираешь?
410 2633173
Сап, аноны, есть вопрос. Я отправляю в своём сервисе запрос на сторонний апи, мне приходит ответ в виде джейсона, который я сразу конвертирую в массив. Чтобы достать оттуда нужные данные, мне приходится обращаться к массиву по длинному паравозу ключей, например:
$title = $response["foo"]["bar"]["mocha"]["govno"]["title"]
Как чище всего это офорить? Не хочется на каждую скобку городить if isset. Просто проверить итоговый $title на null и кинуть эксепшон? Пыха даёт обращаться к несуществующим ключам, кидая warning, но выглядит это грязновато.
Вопрос номер два: у меня есть сервис, который отвечает за запросы и получает большой-большой джейсон и сразу же конвертирует в массив. Из массива ему надо наковырять данных и создать из них сущность. Разбирать массив на запчасти прям в сервисе, или вынести это в отдельный класс? В сущность заносить метод createFromApiResponse() или вроде того не хочу, т.к. будет жёсткая привязка к конкретному АПИ, а они могут меняться. Раздумываю над абстрактной фабрикой, которая будет спавнить как сервис для запросов к апи, так и фабрику сущностей из массива запроса, но хз.
411 2633186
>>633173
В дополнение ко второму вопросу спешу добавить, что к апи будет делаться много разных запросов, и соответственно как это всё вынести в отдельный класс я не понимаю, т.к. придётся делать ему на каждый эндпоинт по методу, и где-то логика будет повторяться. Например, в каком-то методе нужно найти чисто название сущности, а в другом найти все атрибуты сущности. Ничего лучше паровоза индексов в методе запроса не могу придумать.
412 2633247
>>633173
Конвертируй не в массив а в DTO, делай класс для работы с этим api, поверх него класс для того что бы не зависеть от конкретного api и сайта, и иметь возможность заменить его на схожий сервис с другим протоколом.
413 2633259
Нормально будет -
foreach(str_split($s) as $ch) {...}
- или он каждую итерацию сплитит будет?
414 2633262
Наверное, не будет... Ибо тогда счётчик бы сбивался.
415 2633315
>>633173
Ну какие нахуй массивы. Привыкай работать с объектами. К объекту ты можешь написать пхпдок и будет работать автокомплит и видна ожидаемая структура. По этой структуре ты можешь написать иерархию валидаторов.

Вот тебе простейший пример https://3v4l.org/LJB3k#v7.4.33 проверяет есть ли значение в жсоне и соответствует ли оно типу. Я для краткости все сделал на статике, но никто не мешает сделать на объектах, с прямыми вызовами функций. Добавить обработку массивов и будет универсальная штука, которая любой жсон завалидирует. А если заморочиться, то можно сделать фабрику, которая по скормленному ей конкретному жсону создаст уникальный валидатор.

Короче, завязывай с массивами. Это недокументируемое, непроверяемое нечто, пользы никакой, а гемора дохуя.
416 2633826
>>633247
Ну у меня так и есть по сути: интерфейс работы с апи и классы его реализации. Я не уверен насчёт ДТО, ведь он больше нигде в коде не будет использоваться. Т.е. методы сервиса выглядят примерно так:
public function getEntity(int $id): Entity
{
$response = $this->client->request(["id" => $id])->toArray();
return new Entity($response['foo'], $response['bar'], ...);
}
подобным образом выглядит большинство методов апи, но какие-то возвращают не сущности, а простые типы. Если добаить ДТО, то ничего не поменяется. Ну мб связность системы уменьшится, но хз, я всё равно этот класс потом никуда выносить не буду.
Да и потом, этот DTO всё равно придётся как-то создавать, и тут мы снова возвращаемся к паравозу индексов массива либо стрелочек объекта.

>>633315
Интересно, спасибо, надо будет разобрать. Я стажёр-вкатун, учу симфони сейчас, и там почему-то нет встроенного компонента для валидации жсона. Респонс можно получить либо строкой, либо массивом, и я подумал, что удобнее работать с последним, а такой подход ещё не встречал.
417 2633843
>>633315
Получается, придётся делать абстрактную фабрику конкретного апи, которая будет создавать как сервис запросов, так и валидаторы на каждый жсон?
Выглядит стильно, но ещё такой вопрос: у меня в респонсе большая вложенность всяких мусорных слоёв. Мне для каждого слоя создавать свой класс и валидатор? Типа
{ "response": { "data": { "result": { "matches": { "entity": "title"} } } }
Тут из трёх слоёв мне нужно только одно поле: следующий слой. Твоим способом получится три класса, делающих плюс-минус одно и то же. Это норм?
изображение.png170 Кб, 994x1544
418 2633912
>>633843

>абстрактную фабрику конкретного апи


Фу блядь, слова какие мерзкие. Как на рукав высморкался блядь. Нахуя ты так усложняешь?
Для начала переведи код на работу с объектами. Потом напиши типизацию этих объектов, чтобы с ними блядь в IDE можно было работать, чтобы ctrl+q нажать и увидеть что это поле улица в адресе, строка. Чтобы автокомплит работал.

Если. Если блядь. Если приходят не полные данные, то сначала задумайся с какого хуя они неполные блядь. Какой пидорас неполные данные отправил тебе. А уже если ничего с этим поделать нельзя, то напиши валидаторы на конкретные сущности, возвращаемые апи, как в моем примере или как в другом, похую.

И только если там какие-то огромные жсоны, и сто эндпоинтов, то можно написать код, который распарсит пример жсона, скумекает какие там типы, создаст валидатор под этот конкретный жсон, и закеширует его. А если ты это вынесешь в отдельный пакет, да выложишь на гитхаб, то тебе в любой конторе за такой ништяк будут пятки целовать и деньги в трусы засовывать, потому что ты будешь человееек блядь, а не обезъяна ебаная.

>у меня в респонсе большая вложенность всяких мусорных слоёв


Ну так вычищай мусор перед валидацией, какие проблемы? Можешь хоть прямо по строкам хуярить еще до парсинга. Вообще в нормальном рест апи можно выбрать какие поля хочешь получать. Вот тебе пример пикрелетед как должно быть https://mailchimp.com/developer/marketing/api/account-exports/ .
419 2633950
>>633912
Я хз, как это сделать без абстрактной фабрики, т.к. объекты респонсов жёстко привязаны к конкретному апи, и у другого апи будут другие валидаторы. Ну и соответственно ДТО будет по-другому создаваться. Например, в одном апи приходит
{
"name": "slavik",
"second name": "sychev",
"age": 33
}
В другом приходит
{
"full name": {
"name": "slavik",
"second name": "sychev"
},
"age": 33
}
Можно написать базовый ДТО, на основе которого создаётся сущность, но тогда придётся писать адаптеры под каждый из респонсов.
420 2633987
>>633950
Ладно, я тупанул, можно просто зависимости валидаторов оставить в самом классе запросов. Нахуй абстрактную фабрику.
421 2634077
>>633173

Давй начнем с простого варианта. Допустим, у нас есть APIб через которое можно получать посты в блоге и оставлять комменты. Простой вариант заключается в том, что вся работа с API засовывается в класс такого вида:

class SomeClient {
function getPostById(int $id): Post { ... }
function sendComment(Comment $comment): ?Error { ... }
}

То есть, на каждый метод API мы делаем метод в классе. Этот метод формирует запрос к API, вручную разбирает JSON и возвращает объект нужного типа, который заполняется из ответа API.

Все данные мы представляем в виде объектов. Для Поста один объект, для Комментария другой, для Пользователя третий и тд.

isset писать не надо, используй оператор ??, например

$x = $result['a']['b']['c'] ?? null;

Этот способ прост и эффективен для небольших API. Но когда тебе нужно интегрировать десятки больших API, ты начнешь замечать что работа становится однообразной. Здесь на помощь придет сериалиайзер. Он позволяет автоматически преобразовывать объекты с данными в JSON и обратно. Как именно это делать, ты описываешь аннотациями в классе:

class Post
{
#[SerializedName('post_id')]
int $id;

// Это поле может отсутствовать
#[Optional]
#[SerializedPath("[post][information][name]")]
?string $name = null
}

После добавления аннотаций ты можешь автоматически разбирать JSON. Есть много готовых сериалайзеров, смотри Symfony Serializer, в Ларавеле есть поддержка сериализации моделей, есть JMS Serializer.

Наконец, можно облегчить себе жизнь еще дальше, если написать генератор классов из описания API в формате OpenAPI, но это уже сложновато.
421 2634077
>>633173

Давй начнем с простого варианта. Допустим, у нас есть APIб через которое можно получать посты в блоге и оставлять комменты. Простой вариант заключается в том, что вся работа с API засовывается в класс такого вида:

class SomeClient {
function getPostById(int $id): Post { ... }
function sendComment(Comment $comment): ?Error { ... }
}

То есть, на каждый метод API мы делаем метод в классе. Этот метод формирует запрос к API, вручную разбирает JSON и возвращает объект нужного типа, который заполняется из ответа API.

Все данные мы представляем в виде объектов. Для Поста один объект, для Комментария другой, для Пользователя третий и тд.

isset писать не надо, используй оператор ??, например

$x = $result['a']['b']['c'] ?? null;

Этот способ прост и эффективен для небольших API. Но когда тебе нужно интегрировать десятки больших API, ты начнешь замечать что работа становится однообразной. Здесь на помощь придет сериалиайзер. Он позволяет автоматически преобразовывать объекты с данными в JSON и обратно. Как именно это делать, ты описываешь аннотациями в классе:

class Post
{
#[SerializedName('post_id')]
int $id;

// Это поле может отсутствовать
#[Optional]
#[SerializedPath("[post][information][name]")]
?string $name = null
}

После добавления аннотаций ты можешь автоматически разбирать JSON. Есть много готовых сериалайзеров, смотри Symfony Serializer, в Ларавеле есть поддержка сериализации моделей, есть JMS Serializer.

Наконец, можно облегчить себе жизнь еще дальше, если написать генератор классов из описания API в формате OpenAPI, но это уже сложновато.
422 2634081
>>633173

> Раздумываю над абстрактной фабрикой



По моему, ты не понимаешь, зачем нужна фабрика. Она нужна, когда ты используешь стороннюю библиотеку и не можешь править ее код, но хочешь повлиять на то, как она создает объекты. Ты не используешь стороннюю библиотеку и фабрика тебе не нужна.

> Разбирать массив на запчасти прям в сервисе, или вынести это в отдельный класс?



Сделай отдельный класс только для взаимодействия с API и в нем разбирай.
423 2634083
>>633186

> придётся делать ему на каждый эндпоинт по методу, и где-то логика будет повторяться.



Повторяющийся код можно вынести в приватные методы.

> Например, в каком-то методе нужно найти чисто название сущности, а в другом найти все атрибуты сущности.



Если производительность не важна, можно сделать метод который получает все атрибуты, вызвать его и вернуть только название.
424 2634096
>>633259

Нет, только 1 раз.

>>633315

Мне кажется, ты изобретаешь велосипед. Для валидации есть Symfony Validation, правила валидации описваются аннотациями к полям, например:

class User
{
#[NotEmpty]
#[Length(min: 4, max: 50)]
private string $username;
}

А ты свой велосипед написал. Например, в твоем велосипеде у правил валидации нет параметров (строка короче N символов) и нельзя добавить несколько правил на одно поле. А в Симфони Валидаторе можно. Там даже текст ошибки указать можно.

Далее, мне не нравится то, что ты используешь объекты-мешки (@property-read) вместо явного объявления свойств с типизацией. В чем тут выгода?

Далее, для разбора JSON в объект есть сериалайзеры вроде Symfony Serializer.
425 2634102
>>634081
Какое-то странное понимание абстрактной фабрики. В Симфони и в бандлах постоянно используются абстрактные фабрики и фабричные методы и к использованию библиотек никакого отношения. createForm и createFormBuilder. Не все нужно доставать из контейнера

мимо
426 2634105
>>633826

> интерфейс работы с апи и классы его реализации.



Зачем тебе интерфейс? У тебя есть несолько разных API с одинаковыми методами?

> Я не уверен насчёт ДТО, ведь он больше нигде в коде не будет использоваться.



Я думаю, анон имел в виду, что данные надо возвращать в виде объектов, а не в виде массивов. А не именно отдельный DTO и потом преобразовывать его в другой объект.

> Я стажёр-вкатун, учу симфони сейчас, и там почему-то нет встроенного компонента для валидации жсона



Плохо учишь. Есть Symfony Validation и он вешается на любой объект. Но сначала, конечно, JSON надо преобразовать в объект, а только потом валидировать. Хотя валидатор и массивы как-то умеет валидировать: https://symfony.com/doc/current/validation/raw_values.html

Если тебя интересует именно валидация JSON без его разбора в объекты, то используй формат JSON Schema и любую библиотеку валидации JSON по схеме.
427 2634112
>>633950

Зачем тут абстрактная фабрика, я не понимаю. Почему нельзя сделать так:

- сделать класс для объекта ответа
- в нем аннотации для валидации и десериализации
- сделать сервис для работы с API, в нем кучу методов, в каждом методе:
- отправить запрос
- сериалайзером распарсить JSON в объект
- валидатором проверить объект
428 2634115
>>633950

Ааа, как все запутанно. Тогда сериалайзер тебе мало поможет. Я тебе советую сделать массив, в котором сопоставляются поля из JSON и из сущности (для каждого API массив свой):

API1:

result.name -> name
"result['second name']" -> second_name

API2:

response.user['full name'] -> name
response.user.surname -> second_name

И по этому массиву делать сопоставление полей. А валидацию делать уже единообразно для всех.
429 2634119
>>634102

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

Если ты можешь обосновать, какие выгоды дает абстрактная фабрика, тогда пожалуйста. Если не можешь, то не трать деньги твоего работодателя на ерунду и не запутывай код, чтобы твои коллеги не тратили деньги, распутывая его.
430 2634121
>>632545

Так это защищает только тебя, а не всех пользователей сайта.
431 2634122
>>632530

> У меня за последние лет пять меньше трех одновременно открытых проектов в шторме не было.



Вообще, мне кажется, ты плохой работник. Ты быстро сделал что написано в задаче, отправил пулл реквест и забыл. А проверить правильность задачи? Может тот, кто ее писал, не проверил все и предложил неправильное исправление. А проверить код системы? Может, модуль, который ты правил, криво написан и в нем скоро возникнут новые баги, или он криво используется. Может там плохая архитекутра. Может ошибки в документации. Если это все не проверить, то и дальше будут возникать баги.

Нет, лучше, когда человек не прыгает между кучей проектов, а работает с одним.
432 2634124
>>632152

Эта фича в PHP появилась не очень давно. Но ты прав, что в новом коде ее стоит использовать.

>>631155

Если ты хочешь получить знания, то надо писать все с нуля целиком, а не взять и чуть подправить. Ты можешь подглядеть код, если непонятен какой-то момент, но стоит также прочесть комментарии к задаче, где подробнейше расписаны все подводные камни, на которые натыкались предыдущие аноны.
433 2634127
>>632156

JWT - это хорошая штука, и ее полезно изучить, но тут можно обойтись без неё. Здесь просто при регистрации генерируется случайный токен, ставится в куки и для редактирования нужно предъявить этот токен.

>>632259

Как через CSRF картинку увести куку, опиши сценарий, ибо я не понимаю.

Здесь, возможно, есть CSRF-уязвимость, которая позволяет обновить чужой профиль, но от нее можно защититься, добавив CSRf-токен или проверяя заголовок Origin или передавая хеш дополнительно в форме (используя его как CSRF-токен).
434 2634138
>>630118

Если есть слово final, то точно закрыт.

Но вообще, это субъективные критерии, которые люди понимают по-разному. Например, в классе нет слова final, но весь код собран в одном методе - и поменять тут ничего нельзя.

Более того, принцип открыт/закрыт можно применять не только к классу, а к модулю, библиотеке, фреймворку.

Но эти принципы есть. Я уверен, что можно легко привести пример класса, который делает 5 разных вещей и любому будет очевидно, что он нарушает SOLID. Просто есть случаи, когда нарушение явно, а есть когда мнения расходятся. Прямо как нарушения в спорте.

Формализовать можно как-то попробовать, как насчет такого критерия:

- математическое ожидание количества измененных строк при добавлении к библиотеке (не меняя код класса) простого функционала должно быть менее N, чтобы класс считался "открытым для расширения".

?
435 2634139
>>634119
А почему твой код не должен быть библиотекой для других? Почему другие разработчик должны знать как создавать объекты твоего домена/контекста в своем домене/контексте?
Ладно если это один клас, а ели это композиция 100500 классов 90% который написали до тебя?
436 2634140
>>630100

Почему не используют? А принцип единой ответственности?

А правило Лисков? Попробуй в PHP при наследовании поменять тип аргументов функции и ты получишь ошибку. А почему? Потому, что в PHP применено правило Лисков на уровне интепретатора (и правильно). И по этой же причине ты не можешь при наследовании удалять поля или методы.

Никто не использует - это ты точно погорячился. Принцип SOLID встроен в сам PHP, как видишь.
437 2634142
>>629414

Мне нравятся задачи от Яндекса и олимпиадные задачи, я бы хотел чтобы их задавали на собеседованиях для сениоров. Про структуры данных, алгоритмы, оценку сложности, немного математики и теории вероятности. Приятно поломать голову.
438 2634144
>>628807

Обычно миддлом считают при наличии опыта работы от 3 лет.
439 2634147
>>634140
Номинальная типизация все таки не принцип Лисков, больше на него похожа структурная типизация как в typescript или типизация интерфейсов в голанге
440 2634150
>>628758

Регистрация работает так:

- пользователь отправляет форму
- проверяем ее правильность
- если все ок, создаем в БД пользователя и генерируем ему токен, который тоже сохранен в БД. Ставим пользователю в куки токен. Пароль не храним в БД, храним соленый хеш от него.

Авторизация:

- пользователь вводит имя и пароль
- проверяем их в БД, если все ок, то берем токен и ставим в куки

Проверка авторизации:

- смотрим куки, ищем там токен, проверяем, есть ли такой в БД. Если нет, то это аноним, если есть то пользователь.
441 2634152
>>634147

Принцип Лисков проявляется в том, что при наследовании можно добавлять поля и методы, но нельзя их удалять или менять их тип несовместимо.
442 2634154
>>634139

Твой код может быть библиотекой или модулем в большом проекте. Но если ты можешь легко обойтись без фабрик, то лучше обойтись и не усложнять проект без необходимости.

Я видел случаи, когда вместо switch/case городили паттерн Стратегия, например. Тяжелое зрелище. Человек прочитал про паттерн и бежит рефакторить свитчи.
443 2634158
>>612946

Неудобно, тебе надо при написании кода помнить не только название свойства, но и с какой буквы оно пишется. И выглядит смесь названий в разном регистре страшно, как будто студент лабу писал.
444 2634160
>>625838

Правильно выбрать один какой-то стиль и придерживаться его. Я люблю ставить слеш, если в пути нет расширения:

/products/
/products/televizor.html
445 2634164
>>634152
Но метод square у квадрата и прямоугольника имееет ту же сигнатуру 🤡
446 2634166
>>626736

Многим запись информации помогает лучше ее запомнить. Хотя мне больше нравится писать на бумаге в альбоме или блокноте. Я предпочитаю A4, так как на маленькие листочки ничего не помещается. Также, на бумаге можно рисовать. Также, ты можешь сделать такие вещи:

- когда есть несколько алгоритмов решения задачи, ты можешь их выписать и кратко перечислить плюсы и минусы

Ну например для редиса, ты мог бы выписать:

- сильные стороны
- слабые стороны
- подводные камни

Также ты бы мог выписать основные структуры данных и их плюсы/минусы, что они делают быстро, а что нет. ЧТобы было легко сравнивать их.

Также названия основных команд.

Переписывать целиком документацию, наверно, не надо, пиши кратко только основные моменты.

Чтобы знания не становились неактуальными, надо изучать общие прицнипы, а не их особенности реализации в отдельном продукте. Например, структуры данных вроде словарей и множеств не устарели и не устареют в ближайшее время. Также, не устареют принципы, которые redis использует для персистентности.
447 2634167
>>628131

Ты ошибаешься. Есть факты, что Майкрософт через скайп собирает ссылки для индексации (то есть, пересылаешь ссылку и она появляется в Бинге).

Не полагайся на то, что URL не попадут в поисковики.
448 2634168
>>634122
Бля, ну наступит день когда сам пойдешь на работу и казаться перестанет.

>А проверить правильность задачи?


Это делается ДО начала выполнения. Это блядь первый шаг: условие задачи должно содержать критерии её выполнения и тестирования. Да что там говорить, хуево сформулированную задачу в беклог тупо не пропустят. И готовность задачи определяешь не ты, а QA или сам продакт в dev ветке.

>А проверить код системы?


Этим занимаются QA, и то если им выделили бюджет на такое широкое тестирование. У тебя есть команда и спринт, и если там нет задачи "проверить код системы", то и времени у тебя на это нет.

>Может, модуль, который ты правил, криво написан и в нем скоро возникнут новые баги


Сразу видно нубаса. Если ты написал говнокод, то ты не пройдешь ревью. Если ты написал бесполезный код, то не закроешь задачу, если твой код срет ошибками, то не пройдешь QA. Смекаешь?

А если всего этого - QA, бизнес аналитиков и код ревью нет, то и появляются модули прямо из твоих маняфантазий, с самозарождающимися багами, не читанные и не документированные. Тут уже реально похуй сеньор ты или нет, надо валить в нормальную контору.
449 2634170
>>634168

>>А проверить код системы?


> Этим занимаются QA



QA просто тыкают мышкой в кнопки, они никогда не увидят, что в алгоритме допущена ошибка, которая проявляется в 3% случаев. Программист увидит и исправит. А ты нет.
450 2634173
>>634152

И что дальше? Проблема ромбического наследования давно известна.
451 2634174
>>634166
Такое легко запомнить
Редис
+ 1 000 000 запросов в сек
- нихуя не умеет, нет роутинга, нет гарантии доставки до консумера
+ Прост как палка
Ребит
- 40тысяч запросов в сек
+ роутинг, гарантия доставки
+ Прост как палка
Кафка
+ 1 000 000 запросов в сек
+ Умеет все, даже заваривать кофе
- Сложна как управление самолетом
452 2634176
>>634173
Тетя Лисков про другое говорила
453 2634179
>>634174
s/запросов/сообщений
454 2634182
>>634170

>QA просто тыкают мышкой в кнопки, они никогда не увидят, что в алгоритме допущена ошибка, которая проявляется в 3% случаев. Программист увидит и исправит. А ты нет.


Если программист такое сходу видит, то откуда там эта ошибка, ебанько? Исправление и поиск багов всегда идет от логов, то есть от фидбека системы, а не наоборот. Никто еще не додумался перечитывать колд в надежде найти внем баг. Завязывай нести хуйню, лучше подтяни пхп и на собес сходи, авось возьмут на твою первую работу.
455 2634183
>>634174
Редис охуенная вещь, всё лучше с редисом.
А кафки-хуяфки это какой-то оверинжениринг, чтобы смуззихлебы ездили на конфы и рассказывали, что они там нахуевертили, а то нормальный человек не разберется.
456 2634192
>>634182

> Исправление и поиск багов всегда идет от логов, то есть от фидбека системы, а не наоборот.



Ну и логика. Выложим кривой код и подождем, пока он сломается.

Код ревью - а ты уверен, что ревьюверы, у которых 120 других дел, будут внимально читать код? Код ревью вообще не для этого. Код ревью это чтобы обнаруживать когда кто-то нарушает твои правила. То есть, если код твое правило не нарушает, то там может быть что угодно написано.

Ну условно ты разбираешься в финансовых API и видишь что кто-то передает рубли вместо целого числа копеек, и говоришь ему об этом. А не проверяешь каждую строчку.
457 2634193
>>634183

Кафка это распределенная обработка данных, то есть когда одна машина не справляется (данных слишком много или их слишком долго обрабатывать).
458 2634194
>>634193

Ой, перепутал кафку с хадупом, ну и ладно, все равно никто не заметит.
459 2634201
>>634174
>>634183
Мдаа, дожили. Тормознутый редис у них на первом месте.
Redis ето кал для черепах. Это однопоточный еле ворочающийся кусок говна. Какой нахуй миллион запросов в секунду? Ты на серверах разоришься нахуй, тебе сотня инстансов этого редиса понадобится или даже больше.

Memcached сучки вот кто реально быстрый. Это самое быстрое NOSql хранилище в природе.

>>634183

>А кафки-хуяфки это какой-то оверинжениринг


Просто ты пхп макака и с реально сложными задачами не сталкивался. Кафка решает, например, проблему exactly once delivery. Но в формошлепстве таки проблем офк нет.
460 2634207
>>634201

Но в мемкеше нет структур и персистентности.

Так что ты либо разоряешься на редис либо нанимаешь дорогих сишников, чтобы они тебе написали кастомное хранилище.
461 2634210
>>634201

> с реально сложными задачами не сталкивался


Как будто ты сталкивался.
462 2634213
>>634192
Завязывай фантазировать. Ты несешь хуйню и это мой последний ответ тебе. Результат выполнения задачи проверяешь не ты, а тот кто эту задачу ставил. Задачи перед релизом кучу времени висят в дев ветке, именно для того чтобы выловить возможные баги. Для проверки кода на соответствие стандартам существует code sniffer и стайлгайд, хуево оформленный код дженкинс пайплайн не пройдет. А в финансовых апи пишутся юнит тесты. Покеда.
463 2634215
>>634207

>Но в мемкеше нет структур и персистентности.


Лол, если ты хочешь выжать из редиса больше запросов, то у тебя тоже нет персистентности. Чтобы было хоть что-то на персистентность похожее нужно чтобы на диск писал отдельный инстанс.

Ну и дальше идет пример как структуры ускоряют, а не замедляют работу с кешем.
464 2634226
>>634201
Но речь о редисе не как о кивелью хранилише, а как о меседж брокере. Та есть простой пубсуб. Было бы странно тогда с рабитом и кафкой сравнивать
465 2634227
>>634112
Я хочу сделать что-то наподобие того, что предложил этот >>633315
Но не знаю, как лучше всего организовать код.
У меня есть папка Service, в ней папка под взаимодействие с api, в которой интерфейс и папки под разные апи. В папке под конкретный апи хранится реализация интерфейса. Куда мне девать кучу мелких классов на разные виды респонсов? Создать папку Responses и разбить каждый класс на собстввенный файл? Но там у 90% классов две строки: аннотация одного типа и название класса с пустым телом. Работать с такой хуйнёй, когда она разбита на 10 файлов по 2 строки, гораздо менее удобно, чем если бы они все были в одном, как конфиг. Но вроде как хранить несколько классов в одном файле - это говнокод. Только папку с этими классами ещё походу придётся разбивать на подпапки для всех методов апи, что ещё сильнее усложняет задачу.
466 2634230
>>634138
Надо отдать тебе должное - ты хотя бы пытался.

>Если есть слово final, то точно закрыт.


Согласен, но только частично. Это работает со сторонними библиотеками, но не с кодом проекта. В своем проекте final просто временная заглушка, которую убирают, когда посчитают нужным.

>Но вообще, это субъективные критерии


Ну тогда сектанство получается?

>Но эти принципы есть. Я уверен


Принципы есть, а критерия их фальсифицируемости нет, смекаешь?

>Формализовать можно как-то попробовать


Вообще достаточно того факта что они до сих пор не формализованы. Достаточно чтобы понять почему на вопрос "любите ли вы солид" все отвечают да, а на вопрос "как там с имплементацией" отвечают "мы пытаемся, пока в планах".

>- математическое ожидание количества измененных строк при добавлении к библиотеке


Жаль что ты это дело быстро бросишь и так ничего и не формализуешь. Я в свое время таки нашел способ определения single responsibility для любого класса.
467 2634231
>>634227
Ну так напиши правила валидации в виде конфига. Че там у тебя симфони? Ну и напиши Yml с конфигом валидации, а потом по этому конфигу создавай валидатор.
468 2634233
>>634230
Сингл респонсибили в SOLID это то что код отвечает не за одну задачу, а то что что у него одна причина для изменения. Вроде пожоже но есть нюанс... Так у дади Боба написанно, а у тебя?
469 2634235
>>634231
Так чтобы сделать валидацию, нужно сначала написать классы, которые нужно валидировать.
470 2634236
>>634231
Ямл вроде выкинули из симфони. не достаточно энтерпрайзно видать..
471 2634238
>>634236
Хз, в документации они везде предлагают ямл
472 2634240
>>634235
Пчел, просто парсишь json в объект и создаешь под него класс с пхп доком. Я же давал пример выше как это делается.

>>634236
Да какая хуй разница. Хоть плейн текстом напиши.
473 2634241
>>634240

>Просто парсишь json в объект


Так соль в том, что json многослойный, и под каждый слой нужен свой класс, который надо индивидуально валидировать, походу. Мало того, они ещё и отличаются в зависимости от метода апи.
474 2634243
>>634238
Значит я напиздел. Я в доктрине пытался не в анотациях схему задавать, а внешне в файле, только в XML можно было.
475 2634245
>>634241
И на это я тебе написал что нужно выкинуть нахуй бойлерплейт из жсона. Валидировать нужно сущности апи, а не мусор. Ну а если там эти сущностей сто, садись блядь и пиши. Нахуй тебе только такое большое апи тогда я хуй пойму.
476 2634246
>>634245
Ну бойлерплейт же тоже надо сначала валидировать, наверное. Типа смысл валидировать только часть джейсона? Вдруг внешний слой переименуют.
477 2634252
>>634246

>Вдруг внешний слой переименуют.


То есть сломают обратную совместимость не поменяв версию апи? КТо и нахуя?
Даже если так сделают все пизданется с исключениями. А нам ведь именно это и надо.
478 2634253
>>634252
/api/v1 поменяли на /api/v2
@
/api/v1 удалили (удалим через неделю быстрей переписывайте назуй)
479 2634258
>>634253
Ну и? Все как и должно быть. Где проблема?
480 2634266
>>634245
А как его выкинуть? Прямо стрингу руками парсить? Это дрочь же какая-то.
Если конвертировать в массив, выбрать нужное, а потом обратно закодировать в строку, будет медленно работать.
Если сразу сделать объектом, то обращение будет без автокомплита.
481 2634272
>>634252
А ещё ж есть проблема, что в жсоне свойство может называться не одним словом, а через пробел или снейк кейсом. Это его ещё отдельно сериализовать надо, получается. Я надеялся чисто вызывать json_decode() ...
482 2634278
>>634266

>Это дрочь же какая-то.


Мальчик, это не дотка и не серик. Это реальная жизнь.

>Прямо стрингу руками парсить?


Что блядь значит "руками"? Один раз написал и все.
Найди закономерность. Как? Ну я хуй знаю, попробуй думать. Жсон это строка. Удаляй все до какого-то ключевого слова или группы слов, ищи вхождение сроки, итерируй построчно пока не найдешь что-то. Короче мозгами шевели, я за тебя это делать не буду. Я походу вообще поспешил какой-то код тебе давать, какой-то ты ленивый слишком. Ты мог уже пол сотни примеров кода сюда скинуть, а до сих пор только болтовня.

>А ещё ж есть проблема, что в жсоне свойство может называться не одним словом, а через пробел


Ну вот тебе загадка от жака фреско: если в жсоне свойство может содержать пробел, а пхп не поддерживает пробелы в свойствах объектов, то каким хуем пхп может преобразовать любой жсон в объект? На размышление по классике 30 секунд.
483 2634280
>>634227

У тебя похоже структура папок в стиле Ларавель/Симфони. То есть, у тебя есть папки Controllers, Models, Services, и может что-то еще, а в них все свалено вперемешку. Минус в том, что связанные вещи хранятся далеко друг от друга, а не связанные рядом.

Ты можешь попробовать модульную структуру, когда делается папка под модуль. То есть, ты делаешь папку "Разные API", в ней "API службы доставки", а в нее кладешь клиент и классы сущностей, исключений и прочее.

> Но там у 90% классов две строки: аннотация одного типа и название класса с пустым телом.



Если у тебя все пути начинаются с result.response.data, то не надо создавать классы. Можно просто на уровне PHP выделить этот элемент из массива, а дальше уже разбирать сериалайзером. Плюс, сериалайзеры позволяют указывать путь с вложенностью, например:

#[SerializedPath('[result][response][data][name]')]
private string $name;
484 2634283
>>634241

Нет. Ты делаешь классы под сущности. Если в JSON описан Пост и Комменты к нему, то ты делаешь только эти 2 класса, даже если там еще много всего наверчено, что тебе не нужно.
485 2634284
>>634246

Я писал уже: валидировать JSON можно с помощью JSON Schema. Либо можно преобразовать JSON в сущности и валидировать их, что надежнее и правильнее.
486 2634286
>>634278

Работать с JSON как со строкой — бесконечная глупость.
487 2634287
>>634278
Нет, я-то не против, это не сложно. Просто это костыль. Как будто бы уже должно быть готовое решение под такие нужды. Собственно, ниже уже ты или не ты это решение и предложил. Надо короче доку сериалайзера читать, ещё не дошли руки до неё.
488 2634294
>>634287

>Нет, я-то не против, это не сложно. Просто это костыль. Как будто бы уже должно быть готовое решение под такие нужды.


Разумеется есть. Только нахуй это тебе если ты ничему не научился в итоге? Ты не вник в суть проблемы, ты не понимаешь решение, ты ничего не добавил в свое портфолио.

Даже я, с десятилетним опытом, написав тебе свой пример столкнулся в нем с парой неизвестных мне вещей и придумал пару решений новых для меня проблем. Какой смысл вместо получения опыта делать бессмысленную валидацию хуй пойми кем написанной библиотекой?
489 2634511
>>634294
Не хочу с тобой спорить, конечно, я понимаю, к чему ты клонишь, но мне кажется, компании ищут человека, который умеет работать с инструментом, который у них в ходу, а не того кто будет писать свои костыли и трепать всем нервы.
490 2634520
Куда в коде пихать сообщения, которые отправляет контроллер? Я просто сую их в константы вроде SUCCESS_MESSAGE = "Molodec", но мне кажется, это не самое чистое решение, ведь это почти хардкод и когда этих сообщений много, это говно сильно мылит глаза. Создать отдельную папку Constants и сделать что-то типа контейнера сообщений? В одном месте их все хранить тоже вроде как громоздко, да и в разных местах константы с одинаковым названием могут иметь разное значение. Ну а создавать параллельную иерархию классов констант - это вообще пиздец, как по мне. Передавать их через контейнер - тоже не очень решение, т.к. конфиг контейнера засрётся текстом.
Мимо тот же анон, который спрашивал про валидацию жсона.
491 2634551
>>634077
Не увидел этот пост, кстати. Если бы сначала его заметил, реализовал бы простой вариант, но уже взялся за сериализатор, добью его. Заодно научусь пользоваться.
492 2634723
Какие есть подводные при покупке домена?
493 2634735
>>634511

>компании ищут человека, который умеет работать с инструментом, который у них в ходу


А человека, который умеет писоть и какоть они ищут? Пульс щупают?

Умение взять в руки и начать пользоваться любым инструментом это как требование чтобы кандидат дышал. А для того чтобы выбрать инструмент нужно как минимум варианты оценить. А хули ты можешь оценить, если двух строчек не можешь написать и банально боишься кода?
От этой боязни и возникает "костыль" "не костыль". Эту либу на гитхабе писал обычный работяга, такой же каким и ты хочешь стать. Зачем ты обесцениваешь свой труд? Какое-то странное самовнушение.

Можешь обижаться, но мое впечатление такое:
Ты вместо того чтобы писать код и решать проблему мнешь писю. Все эти оправдания про то что когда-то в будущем тебе будут запрещать писать код (просто блядь вдумайся, нанять программиста чтобы запрещать ему писать код) это просто оправдания.

Вся эта болтовня "а не много будет классов?", "а это не дрочь?" никуда не ведет. Напиши блядь как умеешь сейчас, потом найдешь повторяющиеся паттерны, создашь обобщения и все красиво сократишь. А на третий раз будешь сразу писать коротко. Но первый шаг ты все равно не пропустишь.

Так что завязывай мять писю и пиши код, прямо сейчас. Если будет какой-то идейный тупик - поможем. Но код блядь тебе все равно придется написать.
494 2634801
>>634520

А зачем их вообще класть в константы? Почему нельзя просто использовать строку в коде (если ты отдаешь JSON) Или в шаблоне (если ты выводишь страницу)?
495 2634831
>>634801
На константу ты можешь нажать ctrl и легко найти все места где она используется, к константе есть комментарий и используя константу не будет опечатки.
496 2634894
>>634735
Не, это у тебя уже какие-то проекции пошли. Я как раз и пишу сейчас проект на портфолио, который уже почти готов. Да, по сравнению с дедом с 10 годами опыта это хуйня, но для меня это уже прорыв и я за его написанием изучил больше, чем за три месяца стажировки. Параллельно с изучением инструмента, пытаюсь разобраться в лучших практиках. А можно плюнуть и просто свой фреймворк написать. А можно и свой компилятор. И даже свою операционку. Полезно? Полезно. Но до вакансии ты так и не дойдёшь, отвлекаясь на фундаментальные штуки. Знаем, плавали. Да и задачек а-ля литкод easy я уже нарешался. Какой смысл изобретать велосипеды, если они никогда даже код ревью не пройдут? Это как если бы ты пришёл на языковые курсы, и тебе бы там сказали: размахивай руками, корчи рожи и издавай звуки, кое-как тебя всё равно поймут, а язык потом выучишь, как научишься доносить мысль.
497 2634922
>>634894

>Я как раз и пишу сейчас проект на портфолио, который уже почти готов. Да, по сравнению с дедом с 10 годами опыта это хуйня, но для меня это уже прорыв


До тебя самого не доходит что небольшая либа, которая решает конкретную проблему твоего работодателя, полезнее чем очередной туду блог по перекатыванию хуя по столу туда сюда? Писать меньше, а пользы больше.

>А можно плюнуть и просто свой фреймворк написать. А можно и свой компилятор. И даже свою операционку.


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

>Какой смысл изобретать велосипеды, если они никогда даже код ревью не пройдут?


Если кто-то нашел объективную ошибку в твоем коде - исправь её. Бля, ты реально в каком-то мире фантазий пребываешь. Версии ПО по твоему от нехуй делать придумали? Нахуя создатели симфони позорились и высирали первую версию? Могли бы ведь сразу пятую выдать и срывать овации и награды.

>Это как если бы ты пришёл на языковые курсы, и тебе бы там сказали: размахивай руками, корчи рожи и издавай звуки, кое-как тебя всё равно поймут, а язык потом выучишь, как научишься доносить мысль.


Я хуею как же насрано в башке.
А что в твоем понимании "не велосипед"? Бойлерплейт к фрефмворку? Прокидывание сервисов в конструктор? То что можно сделать командами make:controller и make:entity?
498 2634955
>>634922
Так я сейчас конкретно учу фреймворк и его возможности. Я-то могу написать свой костыль, но понимание фреймворка от этого у меня не возрастёт. У тебя подход прагматика, которому надо здесь и сейчас что-то сделать и отправить в прод, а я просто хочу освоиться, понять чё да как и как делать лучше. О некоторых концепциях вроде того же сериализатора я в принципе узнал только читая доку фреймворка. Ну и собственно если бы я писал как бог на душу положит, не интересуясь практиками, я бы просто оставил джейсоны на массивах и всё бы работало, а тут за пару дней двачевания вон сколько нового узнал.
499 2635001
>>634955

> но понимание фреймворка


Да ебаный по голове, какое понимание нахуй? Дока симфони это книжечка 100 страниц, которая читается за вечер, а типичные задачи давно покрыты генерацией кода, какое нахуй понимание, чего блядь понимание?

Ты столкнулся с проблемой, ты попробовал её решить, ты посмотрел как проблема решается в фреймворке. Ах вооот оно что, а вот это я не учел, а тут я лучше придумал, а это вообще лишнее. Вот это блядь ПОНИМАНИЕ. Я уже заебался скидывать в тред это видео https://www.youtube.com/watch?v=pz6VdH4_BSg

Вот оно идеально для обучения. Человек объясняет проблему, потом решает её прямо на сцене, на следующем этапе оптимизирует и углубляет решение, и так до тех пор пока его код не превращается в код симфони. Вот это способ ПОНЯТЬ, а не копирование бойлерплейта себе в проект.

Вообще непонятно откуда взялась эта идея что все проблемы в вебе давно решены и нужно только нагуглить нужную библиотеку. Где ты эту хуйню вычитал вообще?
500 2635135
>>635001
Дока читается за вечер, если у тебя уже есть опыт работы с другими фреймворками или просто опыт разработки. Читается за вечер, если ты понимаешь архитектуру веб приложения, знаешь какие в вебе задачи и какие у них есть способы решения, а не когда ты до этого три года писал хелоу ворлды в универе. У тебя просто за 10 лет исказилось представление о том, как люди учатся и сколько всё это учится с нуля. То, что тебе очевидно, большинством учится годами.
501 2635199
>>635135

>знаешь какие в вебе задачи и какие у них есть способы решения


Да ебаный рот этого казино. Я че блядь с луны прилетел со знанием веб задач? На твоих блядь глазах это произошло. Я засучил рукава и решил веб задачу. А когда предложил тебе решить ту же задачу с уже данными подсказками, но в формате ооп ты просто слился. Как будто речь идет не о двух сотнях сток кода, а каком-то невероятно сложном проекте.

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

Короче дело твое "учи фреймворки" чтобы не быть баттхертом, я что мог сделал.
503 2636086
>>636080
Ну так чел пишет про дорвеи и развод лохов на бабос. При чем тут разработка вообще? Если ты пробивной кабанчик, да еще и без моральных ограничений, то тебе и такое говно как пхп прибыль принесет.
504 2636089
>>636080

>PHP создаёт у человека адекватное восприятие веб-разработки


Хуета собачья. PHP максимум позволяет писать сайты быстро. И это все его преимущества.

>PHP ты можешь добавить на свой сайт админку, просто вставив <? if isset($_COOKIE['ADMIN']) { ?> и <? } ?> вокруг блока HTML кода


Шаблонизаторы? Не, не слышал.

>PHP освобождает тебя от головной боли от размышлений о типах, зависимостях, областях видимости, ивент-залупах, паттернах и прочей задротской хуйне


Проще говоря код может написать любая макака.

>Благодаря PHP ты можешь за 2 минуты реализовать микросервис


Если бы это уёбище осознавало семантику написанного, то никогда бы такую хуету не написало бы.
Микросервисы пишутся и на ГОше и на питоне и на решетках и на расте.

>И самостоятельно задеплоить этот микросервис можно на ВООБЩЕ любой хостинг


Как и проект на любом стеке, главное, чтобы был докер иначе секс, что там, что там.

А вообще слишком жирный пост.
покормил
505 2636140
>>636089
Так пхп это тоже шаболнизатор.
изображение.png145 Кб, 727x766
506 2640061
Кто там на битрикс пиздел? Оправдываейтесь.
507 2640324
>>640061
Ахахахахах
508 2642268
Сап, пхпач. При установке Slim через композер столкнулся с такой проблемой (пик 1). После добавления обработчика ошибок, браузер кидает 404 (пик 2). Полный листинг кода (пик 3). Как фиксить ? Гугол не помогает. И такой вопрос, если это не воконцове не пофикситься, можно ли прыгнуть сразу ну 3-ю задачу из шапки с тестами ?
509 2642314
>>642268
Это стандартный 404, у тебя нету зарегистрированного обработчика для твоего url который ты вводишь в браузере, ты обращаешься к папке а у тебя он на /
510 2643159
>>571790 (OP)
Меня заебало писать постоянно
echo "<pre>"
print_r($huynaName);

Есть какой-нибудь аналоговнет, чтоб я ебанул unknownShit($huynaName); и все работало также как с pre?
511 2643162
>>643159
Т.е. данные были в столбик, а не в строку.
512 2643326
>>643162
function unknownShit($hui) {
echo '<pre>';
print_r($hui);
echo '</pre>';
}
513 2643424
>>642314
А как добавить обработчик? В путь записать что то типа /index.php?
514 2643866
Как суметь понять как решать задачу "Числа прописью"? Какие темы надо понять, чтоб мозг додумался что и как? Я просто сижу и ощущение как будто тужусь в голове, но нихуя не происходит.

Начал вот читать "Грокаем алгоритмы", пока не понимаю, поможет книга мне или нет. Но по крайней мере я уже узнал что-то новое. Что такое бинарный поиск. Я честно охуел, насколько это круто и интересно.
515 2643901
>>643424
$app->get(/examples/uppuru, ...)
516 2644428
Изредка залетаю в ваш тред. Объясните мне, почему тут часто обливают помоями пыху, аргументируя это тем, что в ней многое написано на костылях, и это калечный язык. Мимо пхп-бэк стажёр. Мне пыха с точки зрения крудошлёпа нравится куда больше, чем те же питон или ЖС, при этом в ней нет столько бойлерплейта, как в джаве. Чё там на сисярпе не знаю. Мне не хватает компетенции, чтобы сравнить кишки пыхи с другими языками. Она вроде не сказать что медленная, уж точно не медленнее ЖС, особенно с тех пор как JIT добавили.
517 2644444
>>644428
1) Жс это дно говна, ты бы еще с брейнфаком сравнил.
2) Питон просто не ооп язык, а ты уже надрочен на ооп.
3) Пхп это джава для бедных, все что будет в пхп было в джаве десять лет назад.
4) Бойлерплейта в пхп тонна, тащи сюда модуль из пяти классов, я тебе 90% кода оттуда выкину как бойлерплейт.
5) Медленный = однопоточный. Однопоточный = медленный. Пока в пхп нет неблокируемого io по скорости он в будет в жопе.
518 2644449
>>644444

>Однопоточный


Как и Python & Js

>Пхп это джава для бедных


Где вордпресс на джава 10 лет назад?

>Пока в пхп нет неблокируемого io


Есть.
519 2644451
>>644449

>Как и Python & Js


Пхп быстрее питона и жс, но медленнее джавы. Пхп это джава для тех у кого нет денег на джава программистов.

>Где вордпресс на джава 10 лет назад?


На джаве своего говна хватает.

>Есть.


Давай код https://3v4l.org/
520 2644473
>>644444
Ну это всё специфика языка. Это я и так +-понимаю. Мне хотелось бы про костыли услышать. Что-то такое я тут много раз видел. А питон с ЖС никто не срёт, либо срёт, но это воспринимается скорее как мем. Питон-разработчик или ЖС-разработчик - это уважаемый наносек, пусть он и такой же крудошлёп, а ПХП-разработчик в глазах большинства - это какая-то непонятная фриланс-макака с вордпресса, и если спросить почему, то тебе начнут объяснять, что пыха - это мёртвый недоязык, но более адекватных аргументов обычно не приводят. Да, я в курсе про обилие низкоквалифицированных фрилансеров, но всё же интересно узнать, за что хейтят именно пыху как язык, а не как сообщество.
521 2644480
>>644473

>Мне хотелось бы про костыли услышать


Ну вот тебе загадка: что произойдет если ты попытаешься обратиться к несуществующей переменной или свойству объекта? Чем это плохо? И, наконец, почему в пхп так?
522 2644526
>>644480
в 8.2 notice выдаст
523 2644554
>>644480
Я знаю, что объекты на хэш-мапе реализованы в пыхе, но не знаю, почему это плохо. Типа хэш-функция вызывается каждый раз при доступе к свойству объекта? А вообще да, последняя версия ругается, теперь только мэджик методы юзать.
524 2644582
>>644526
Сначала думай, потом пиши. https://3v4l.org/Gp79b#v8.2.0

>>644554

>Я знаю, что объекты на хэш-мапе реализованы в пыхе, но не знаю, почему это плохо. Типа хэш-функция вызывается каждый раз при доступе к свойству объекта?


Какие нахуй хеш функции. Причем здесь это вообще?

>А вообще да, последняя версия ругается, теперь только мэджик методы юзать.


Что блядь значит ругается? Какие нахуй мэджик методы?

Вы прямо блядь сейчас показываетете почему "ПХП-разработчик в глазах большинства - это какая-то непонятная фриланс-макака с вордпресса".

Любому адекватному человеку очевидно что ситуация когда пропала переменная или свойство это пиздец нахуй. Это блядь бага стопроцентная. Здесь должно бросаться исключение. Что делает пхп? Нотис, варнинг. Ты как эти варнинги ебаные обрабатывать будешь? Начнешь ебашить костыли set_error_handler() restore_error_handler(). Ой бля а кто-то тут про костыли спрашивал?

А почему пхп не бросает исключение? Да потому же почему тебе нужно в начале каждого файла как еблану писать declare(strict_types=1); - легаси говно. Со всеми теми тоннами говнокода написанного раньше нужно поддерживать обратную совместимость. К восьмой версии подняли до варнинга, лет через десять и исключение будут кидать. А к 2050 начнут ошибку как значение возвращать.
525 2644605
>>644582

>Причем здесь это вообще?


При том, что под капотом у объекта в пыхе хранится хэш-мапа со всеми свойствами и их именами. Я думал, ты про это.
Про strict_types согласен. Но у того же питона, например, нет настоящих приватных свойств, и там тоже можно создать новую переменную. У ЖС хз как с этим, но вроде так же.
526 2644631
>>644605

>Но у того же питона, например, нет настоящих приватных свойств


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

>У ЖС хз как с этим, но вроде так же


Я тебе сразу написал что жс кал говна. Сравнивай с TypeScript.
527 2644701
>>643866

Эта задача решается путем разбиения ее на более простые и маленькие задачи.

Если ты возьмешь большое число вроде 123 456 789 и попробуешь его записать текстом, то ты увидишь, что в записи числа есть определенная структура:

сто двадцать три миллиона четыреста пятьдесят шесть тысяч семьсот восемьдесят девять рублей

или, если выделить основные части:

(число) миллиона (число) тысячи (число) рублей

То есть, мы можем разбить большое число на группы по 3 цифры от 0 до 999 и добавить к ним слова "миллионы", "тысячи" и "рубли". Тут, правда есть подвохи:

- слова могут иметь разную форму, например: 1 миллион, 2 миллиона
- числительные зависят от рода: один миллион, но одна тысяча
- группа может отсутствовать, например для числа 1 000 001 мы не пишем "ноль тысяч", а просто пропускаем группу с тысячами

Тем не менее, это позволяет нам упростить задачу: теперь нам нужно преобразовывать в строку только числа от 0 до 999. Если мы теперь запишем какое-то число вроде 444, то мы тоже увидим закономерность:

четыреста сорок четыре

Несмотря на то, что цифры одинаковые, они пишутся разными словами для сотен, десятков и единиц. То есть, мы можем просто сделать 3 списка: список слов для сотен (сто, двести, триста итд), для десятков (десять, двадцать), и единиц (один/одна, два/две, три...). Затем мы разбиваем число на разряды и для каждого разряда берем слово из списка.

Правда и тут есть подвохи:

- если разряд равен нулю, то мы пропускаем слово в нем: в числе 404 нет десятков
- для чисел от 11 до 19 эта схема не работает и нужен отдельный список для таких чисел. 11 это "одиннадцать", а не "десять один".

То есть, нужно сесть, выписывать разные числа, и искать закономерности, правила.

Про алгоритмы тоже, думаю, полезно будет почитать.
527 2644701
>>643866

Эта задача решается путем разбиения ее на более простые и маленькие задачи.

Если ты возьмешь большое число вроде 123 456 789 и попробуешь его записать текстом, то ты увидишь, что в записи числа есть определенная структура:

сто двадцать три миллиона четыреста пятьдесят шесть тысяч семьсот восемьдесят девять рублей

или, если выделить основные части:

(число) миллиона (число) тысячи (число) рублей

То есть, мы можем разбить большое число на группы по 3 цифры от 0 до 999 и добавить к ним слова "миллионы", "тысячи" и "рубли". Тут, правда есть подвохи:

- слова могут иметь разную форму, например: 1 миллион, 2 миллиона
- числительные зависят от рода: один миллион, но одна тысяча
- группа может отсутствовать, например для числа 1 000 001 мы не пишем "ноль тысяч", а просто пропускаем группу с тысячами

Тем не менее, это позволяет нам упростить задачу: теперь нам нужно преобразовывать в строку только числа от 0 до 999. Если мы теперь запишем какое-то число вроде 444, то мы тоже увидим закономерность:

четыреста сорок четыре

Несмотря на то, что цифры одинаковые, они пишутся разными словами для сотен, десятков и единиц. То есть, мы можем просто сделать 3 списка: список слов для сотен (сто, двести, триста итд), для десятков (десять, двадцать), и единиц (один/одна, два/две, три...). Затем мы разбиваем число на разряды и для каждого разряда берем слово из списка.

Правда и тут есть подвохи:

- если разряд равен нулю, то мы пропускаем слово в нем: в числе 404 нет десятков
- для чисел от 11 до 19 эта схема не работает и нужен отдельный список для таких чисел. 11 это "одиннадцать", а не "десять один".

То есть, нужно сесть, выписывать разные числа, и искать закономерности, правила.

Про алгоритмы тоже, думаю, полезно будет почитать.
528 2644703
>>640061

Наивняша, "доля в бизнесе" надо читать как "работа за бесплатно". Ты наверно еще работу никогда не искал и потому не знаешь.
529 2644709
>>643424

У тебя не очень удачно настроен проект. Ты поместил проект не в корень сервера, а в парпку /examples/uppuru. Соответственно, когда ты открываешь его в браузере, то браузер шлет запрос с URL /examples/uppuru/. Тебе нужно либо

- в коде перед всеми URL добавлять этот префикс,
- либо использовать решение отсюда https://discourse.slimframework.com/t/add-prefix-to-all-routes/515/3 чтобы добавить префикс
- либо, что лучше всего, делать так, чтобы твой index.php лежал в корне сайта

Переходить к следующей задаче совершенно неправильно, если ты с этой проблемой не можешь разобраться, то ты ни одну реальную задачу решить не сможешь и тебя уволят.
530 2644711
>>643159

Добавь в начале кода

header("Content-Type: text./plain; charset=utf-8");

и весь текст на странице будет как ты хочшь
531 2644713
>>644444

> Пока в пхп нет неблокируемого io



Во-первых, оно есть уже давно, во-вторых, оно никому не нужно, так как в бизнес-логике сайта по продаже каких-нибудь услуг оно только мешается. Синхронный код проще писать и проще читать, а распараллеливание часто не нужно.
532 2644718
>>644480

В Симфони выбросит исключение. А теперь встречный вопрос: что будет, если в JS ты опечатаешься в названии свойства объекта:

obj.invalid = 3

И почему так?

А если ты в JS поделишь на ноль, то отоже ошибки не будет. Почему так?

А вот в Питоне, кстати, с этим проблем нет, но есть другая проблема: Питон наглухо игнорирует тайп-хинты и можно передать в функцию любой мусор и она не падает с ошибкой. Почему так?
533 2644729
>>644582

> Здесь должно бросаться исключение



Ну в JS например можно обращаться к несуществующим свойствам, делить на ноль и никаких исключений не будет. Почему?

> костыли set_error_handler() restore_error_handler().



Это не костыль, а вполне станлартный способ, всего 3 или 4 строки и ошибки начинают превращаться в исключения. Почему не сделать так по умолчанию? Потому что тогда сломается легаси-код, а никому это не понравится. Надеюсь, со временем все же включат выброс исключений.

> Со всеми теми тоннами говнокода написанного раньше нужно поддерживать обратную совместимость.



Это очень важно для бизнеса. Язык, в котором постоянно все ломают и переделывают (как в линуксе постоянно все переделыывают) означает большое количество затрат труда. Лучше пусть такие, как ты, поноют на форуме, чем реальный бизнес будет тратить деньги на обновление.

И, кстати, не только PHP заботится о совместимости, и в JS легаси тащат, и в Си, и в Яве.
534 2644731
>>644631

Вообще-то в Питоне есть приватные свойства по соглашению.
535 2644744
>>644713
Запости код https://3v4l.org/
536 2644761
>>644744

https://reactphp.org/
https://openswoole.com/

Скопировать код оттуда ты можешь и сам.
537 2644769
>>644718

>если в JS


Жс кал говна. Сравнивай с TypeScript.

>Питон наглухо игнорирует тайп-хинты


Легко решается вне кода, ни строчки писать для этого не надо.

>Почему так?


Потому что питон создавался как язык для написания коротеньких скриптов и небольшой автоматизации работы с линух.

>>644729

>Ну в JS например


Жс кал говна. Сравнивай с TypeScript.

>Это не костыль, а вполне станлартный способ


Стандартный способ это try catch. А это хуита. Я уверен что ты названия этих функций впервые в моем посте прочитал.

>Это очень важно для бизнеса.


Ясен хуй важно. Только пока разрабы на джаве ждут изменений в виде кальяна и телок, сидя на диване в гостиной, пхп разрабы стоят по колено в говне и ждут когда к ним ассенизатор подъедет.

>Лучше пусть такие, как ты, поноют на форуме, чем реальный бизнес будет тратить деньги на обновление.


Где ты увидел что я ною? Чел спросил почему к пхп так плохо относятся, я привел пример. Ты эти доводы только подтверждаешь. Да пхп отсталый, да в нем много легаси говна. Какая разница почему? До тех пор пока все это легаси говно не отомрет будет говноязык с костылями.
538 2644771
>>644761
Пример кода с неблокиуемым io. До тех пор буду ссать тебе на ебло, фантазер.
539 2644842
Надо ли разбираться в структурах данных? В гайде ОПа есть какие-то объяснения или ссылки? В каком вообще порядке это всё изучается? Я так понимаю, структуры данных и алгоритмы изучаются в отрыве от определенного языка?
Пока читаю "Грокаем алгоритмы". Впервые узнал про связанные списки. Так и не понял, есть они в PHP или нет.

>>644701
Спасибо. Вроде выглядит уже не так сложно. Но я всё-таки дочитаю книгу для новичков по алгоритмам, потом вновь попробую прорешать все задачи с ОП-гайда. А то на этой задаче прям сильно застопорился, накалякал говнокод какой-то, который вызывает у меня отторжение.
540 2645120
>>644842

Память компьютера состоит из ячеек. У каждой ячейки есть номер от 0 до N (в зависимости от того, сколько у тебя установлено памяти), и в каждую ячейку можно записать целое число от 0 до 255 (один байт). Соответственно, все, что ты хочешь хранить: числа, строки, массивы, картинки, аудио - все должно быть в итоге представлено в виде байтов в ячейках памяти.

Структуры данных - это способы размещать информацию в памяти. Мы можем разместить данные разными способами, и в одном случае, например мы сможем быстро искать данные, но обновление будет долгим, а в другом случае мы можем быстро обновлять данные, но поиск будет не таким быстрым. А если не заморачиваться, то может получиться так, что и поиск и обновление окажутся медленными на больших объемах данных.

Поэтому полезно разбираться в структурах данных и понимать их сильные и слабые стороны.

Например, массивы в PHP построены на основе хеш-таблиц. Если ты изучишь эти таблицы, то ты будешь лучше понимать, какие есть слабые стороны у массивов PHP.

Также, чтение книги научит тебя оценивать сложность того или иного алгоритма: сколько операций надо сделать для решения задачи и как это число будет меняться при увеличении объема данных: пропорционально объему данных, пропорционально объему в квадрате или как-то еще.

Некоторые языки низкоуровневые (вроде Си) и дают возможность прямого доступа к ячейкам памяти. В них легко реализовать любую структуру. Язык PHP не дает прямого доступа к памяти, но и в нем есть способы реализовать ту или иную структуру данных:

- во-первых, у PHP может быть расширение, которое предоставляет нужные структуры данных
- во-вторых, некоторые структуры данных (вроде связанных списков или деревьев) можно реализовать без прямого доступа к памяти
- в-третьих, если первые 2 способа не помогают, ты можешь сам написать библиотеку на Си, которая реализует нужную структуру, и подключить к PHP с помощью FFI

По поводу первого: у PHP есть класс SplDoublyLinkedList, который реализует связанный список: https://www.php.net/manual/en/class.spldoublylinkedlist.php

По поводу второго: ты сам можешь сделать связанный список, используя объекты. Вот класс, который представляет один узел в списке. Он содержит полезные данные (строка $s) и ссылку на следующий узел ($next):

class ListNode
{
private string $s;
private ?ListNode $next = null;
...
}

В качестве домашнего задания, допиши класс списка и добавь в него методы для задания и получения строки, связи узлов и разрыва связей, чтобы можно было написать такой код:

// Создаем список
$list = new ListNode('a')->add(
new ListNode('b')->add(
new ListNode('c')
));

// Получаем длину
echo count($list) . "\n";
// Обходим список
foreach ($list as $s) {
echo "Value: $s\n"; // выводит a b c
}

Чтобы реализовать это, тебе нужно изучить ООП, в учебнике из шапки есть глава про ООП и там есть вся нужная информация. Чтобы список можно было перебирать с помощью foreach, тебе нужно изучить интерфейс IteratorAggregate и Interator. Чтобы получить длину списка с помощью count(), тебе нужно изучить интерфейс Countable.

Если ты пока не знаешь ООП, то можешь читать про алгоритмы, а потом изучить ООП и вернуться к этой задаче.
540 2645120
>>644842

Память компьютера состоит из ячеек. У каждой ячейки есть номер от 0 до N (в зависимости от того, сколько у тебя установлено памяти), и в каждую ячейку можно записать целое число от 0 до 255 (один байт). Соответственно, все, что ты хочешь хранить: числа, строки, массивы, картинки, аудио - все должно быть в итоге представлено в виде байтов в ячейках памяти.

Структуры данных - это способы размещать информацию в памяти. Мы можем разместить данные разными способами, и в одном случае, например мы сможем быстро искать данные, но обновление будет долгим, а в другом случае мы можем быстро обновлять данные, но поиск будет не таким быстрым. А если не заморачиваться, то может получиться так, что и поиск и обновление окажутся медленными на больших объемах данных.

Поэтому полезно разбираться в структурах данных и понимать их сильные и слабые стороны.

Например, массивы в PHP построены на основе хеш-таблиц. Если ты изучишь эти таблицы, то ты будешь лучше понимать, какие есть слабые стороны у массивов PHP.

Также, чтение книги научит тебя оценивать сложность того или иного алгоритма: сколько операций надо сделать для решения задачи и как это число будет меняться при увеличении объема данных: пропорционально объему данных, пропорционально объему в квадрате или как-то еще.

Некоторые языки низкоуровневые (вроде Си) и дают возможность прямого доступа к ячейкам памяти. В них легко реализовать любую структуру. Язык PHP не дает прямого доступа к памяти, но и в нем есть способы реализовать ту или иную структуру данных:

- во-первых, у PHP может быть расширение, которое предоставляет нужные структуры данных
- во-вторых, некоторые структуры данных (вроде связанных списков или деревьев) можно реализовать без прямого доступа к памяти
- в-третьих, если первые 2 способа не помогают, ты можешь сам написать библиотеку на Си, которая реализует нужную структуру, и подключить к PHP с помощью FFI

По поводу первого: у PHP есть класс SplDoublyLinkedList, который реализует связанный список: https://www.php.net/manual/en/class.spldoublylinkedlist.php

По поводу второго: ты сам можешь сделать связанный список, используя объекты. Вот класс, который представляет один узел в списке. Он содержит полезные данные (строка $s) и ссылку на следующий узел ($next):

class ListNode
{
private string $s;
private ?ListNode $next = null;
...
}

В качестве домашнего задания, допиши класс списка и добавь в него методы для задания и получения строки, связи узлов и разрыва связей, чтобы можно было написать такой код:

// Создаем список
$list = new ListNode('a')->add(
new ListNode('b')->add(
new ListNode('c')
));

// Получаем длину
echo count($list) . "\n";
// Обходим список
foreach ($list as $s) {
echo "Value: $s\n"; // выводит a b c
}

Чтобы реализовать это, тебе нужно изучить ООП, в учебнике из шапки есть глава про ООП и там есть вся нужная информация. Чтобы список можно было перебирать с помощью foreach, тебе нужно изучить интерфейс IteratorAggregate и Interator. Чтобы получить длину списка с помощью count(), тебе нужно изучить интерфейс Countable.

Если ты пока не знаешь ООП, то можешь читать про алгоритмы, а потом изучить ООП и вернуться к этой задаче.
541 2645123
>>644769

>> Питон наглухо игнорирует тайп-хинты


> Легко решается вне кода, ни строчки писать для этого не надо.



Сразу видно человека, который с статическим анализом сталкивался только в теории. Я использовал mypy и он генерирует ложные предупреждения. Необходимо либо ставить руками комментарии для их отключения, либо как-то отключать некоторые классы ошибок глобально.

Пример:

def false_positive(a: int):
b = a
if a > 10:
b = None

return b

В строке b = None mypy выдаст ошибку:

> mypy: error


> assignment - Incompatible types in assignment (expression has type "None", variable has type "int")



Если же поменять b = None на a = None, то и pyright начнет выдавать ошибку.

Это видимо и есть в твоем понимании "легко решается".
542 2645125
>>644842

> Надо ли разбираться в структурах данных?


Полезно, но если ты действительно разберешься, а не будешь пытаться заучивать не понимая толком материал.

> В гайде ОПа есть какие-то объяснения или ссылки?


По структурам данных и алгоритмам - нету

> Я так понимаю, структуры данных и алгоритмы изучаются в отрыве от определенного языка?


Да, ни не привязаны к языку. Но в разных языках одну и ту же структуру придется реализовать по-своему.

> Так и не понял, есть они в PHP или нет.


Есть, SplDoublyLinkedList
543 2645186
Sup, сделал проект на ларавел (а точнее телеграм бот на winter cms), там сделал систему сообщений ( в виде классов ), которые должны инстанцироваться через new $msgClass . Локально (OpenServer) всё хорошо работает, но на сервере почему-то PHP ругается что не может найти такие классы (путь в них полный, может разве что не начинается с /)

$msg = new $msgClass;

Естественно в файле где инстанцируются эти классы сообщений сами сообщения не импортированы, но как я сказал локально всё работало
544 2645219
>>645186
Всё, решил, сук пиздец, потому что папки с сообщениями были с большой буквы...
545 2645669
>>645123
Кому ты лечишь, дура. Ты не указал возвращаемый тип, ты не указал типы переменных.
Если бы ты сразу указал что b: int|None = a , то все бы было заебись
https://mypy-play.net/?mypy=latest&python=3.11&gist=64059fd2d1a8519d3d4ed541b95126b5
Очередное подтверждение что "ПХП-разработчик в глазах большинства - это какая-то непонятная фриланс-макака с вордпресса".
546 2646052
>>645219
На линухе так, да. И слеши еще другие.
547 2646053
Константы класса можно вызывать через static:: ? Если да, то почему в мануале нет про это?
548 2646055
>>645669

Зачем мне указывать тип каждой переменной? Я не хочу, я хочу, чтобы так все работало.
549 2646056
>>646053

Через static можно обращаться не только к константам, но и к статическим полям и методам, то есть static используется вместо имени класса.
550 2646061
>>646056
Ну это понятно, я думал через self:: внутри и имя класса:: снаружи только можно.
551 2646073
>>646055

>Зачем мне указывать тип каждой переменной?


Чтобы работал статистический анализ. Чтобы баги отлавливать до попадания в продакшен. Чтобы говнокод не писать.

Бля, я в ахуе. Ты еще тут >>644473 ? Смотри на этих ебаных животных в естественной среде. Вот это чучело залупоголовое причина почему все угарают над пхп и теми кто на нем пишет.
552 2646081
>>646061
А можно вот так: https://3v4l.org/RdVfs
С седьмой версии много всяких ебанутостей можно делать.
553 2646100
>>643901
НЕ ПОЛУЧИЛОСЬ
>>644709
БЛЯ Я РЕАЛЬНО УЖЕ ВСЮ ГОЛОВУ СЕБЕ НАХУЙ СЛОМАЛ С ЭТИМ СЛИМОМ, У МЕНЯ КСАМП СТОИТ И В КОРНЕВОМ КАТОЛОГЕ УЖЕ ЕСТЬ СВОЙ INDEX.PHP, ЛАДНО ПОХУЙ, СОЗДАЛ ПРОЕКТ НЕ В /HTDOCS/EXAMPLES/UPPURU, А СРАЗУ В /HTDOCS/UPPURU, СДЕЛАЛ ВСЕ ТАКЖЕ И НИХУЯ. ВСЕ ТАКЖЕ 404 С 76 СТРОЧКОЙ КАК НА ПИКАХ ВЫШЕ.
image2023-03-2004-54-31.png59 Кб, 906x452
554 2646107
>>646100
ОШИБОЧКА ВЫШЛА, СПАСИБО АНОНАМ СВЕРХУ КОД НА ПИКЕ РАБОТАЕТ ПРЕКРАСНО ! И ВЫВОДИТ ХЕЛОУ ВОРЛД
555 2646640
>>646073
На месте. Возвращаясь к твоему доёбу о том, что свойства появляются и пропадают, технически ты можешь сделать мэджик геттер и сеттер, которые будут выдавать ошибку. Да, это бойлерплейт, но всё же решает твою проблему.
556 2646740
>>646640

>почему тут часто обливают помоями пыху, аргументируя это тем, что в ней многое написано на костылях


>Мне хотелось бы про костыли услышать


>технически ты можешь сделать мэджик геттер и сеттер, которые будут выдавать ошибку


Попробуй у себя на стажировке так сделать. Интересно, леща тебе въебут или пинка.

Ты сам-то понимаешь вообще почему даже ебанутая конструкция set_error_handler() restore_error_handler() лучше магических геттеров? Да и вообще ты типа собрался эту поебень в каждый класс проекта вставлять? Ладно, это вопросы риторические, спросишь их там где стажируешься.

Вот тебе следующий костыль: есть в природе такая хуйня как солид, и там под буквой O находится open-closed principle. Вот тут парень >>634138 правильно написал что в пхп есть конструкция final , которая по солиду закрывает класс от изменений. Ты у нас хороший мальчик, солид уважаешь, и пометил классы своего домена как final.
А теперь внимание, вопрос: каким хуем теперь сохранять сущности домена доктриной и мокать эти объекты в юнит тестах?
557 2646754
>>646740

>почему даже ебанутая конструкция set_error_handler() restore_error_handler() лучше магических геттеров?


Пиздеть не буду, не понимаю. Я вообще не понимаю, в каких кейсах есть проблема пропадающих/появляющихся полей, если везде тайпхинты и интерфейсы.
Ну да, я понимаю, что вставлять геттер и сеттер в каждый класс, это пиздец, но опять же, я не представляю, где это вообще может быть проблемой.

>каким хуем теперь сохранять сущности домена доктриной и мокать эти объекты в юнит тестах?


Нихуя не понял тут. Доктрина сейвит объекты, а не классы. Каким хуем тут вообще final? А мокать можно с помощью декораторов, например, нахуя тебе вообще наследоваться от сущностей?
Если чё, мне реально интересно, я не пытаюсь с тобой спорить.
558 2647101
>>646754

>Нихуя не понял тут. Доктрина сейвит объекты, а не классы


По моему очевидно что раз я об этом спросил, то там есть проблемы.

>А мокать можно с помощью декораторов, например


Мокать ты будешь с помощью phpunit

Начни с того что загугли как доктрина работает с приватными свойствами и почему именно так.
559 2647126
>>647101
Бля, по-моему ты просто каких-то рандомных терминов нагородил. Все, которые знаешь. Final плохо, потому что в моках мы должны наследоваться, а это плохо, потому что приватные свойства в доктрине.
560 2647133
>>647126

>Final плохо


final не "плохо" final просто не работает с доктриной и phpunit.

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

С phpunit ты вроде понял почему не работает: все Test Doubles наследуются. Осталось написать твой вариант костыля. Там есть очень смешные и ебанутые варианты.

С доктриной вопрос по прежнему стоит: почему доктрина не работает с final? Вариантов костыля я знаю только один, и он уже не смешной, а грустный.
561 2647722
>>646740

>>технически ты можешь сделать мэджик геттер и сеттер, которые будут выдавать ошибку


> Попробуй у себя на стажировке так сделать.



Хватит демонтрировать неграмотность. Во-первых, чтение несуществующего поля выдает ошибку всегда. Во-вторых, создание несуществующего свойства пока работает, но уже выдает deprecation warning, и в будущем будет отключено. В третьих, если ты сделаешь магический сеттер для выброса исключений в такой ситуации, никто тебе ничего плохого не скажет, а наоборот поблагодарят.

> Ты у нас хороший мальчик, солид уважаешь, и пометил классы своего домена как final.


> А теперь внимание, вопрос: каким хуем теперь сохранять сущности домена доктриной и мокать эти объекты в юнит тестах?



Ответ очевидный, не использовать final. Я его вообще никогда не использую, так как он никаких плюсов не дает.

И кстати моки на сущности я тоже бы делать не стал. Бессмысленное усложнение кода. Видимо, тебе нужна еще помощь по тестированию?
562 2647724
>>646073

>>Зачем мне указывать тип каждой переменной?


> Чтобы работал статистический анализ.



В PHP я не указываю типы переменных, и статический анализ работает. А в твоем Питоне - не работает. PHP лучше Питона?
563 2647742
>>646100

Тебе надо разобраться с настройкой xampp (а точнее Apache в нем). В Apache есть "виртуальные хосты", то есть ты можешь поднять у себя локально несколько разных сайтов.

Сейчас у тебя поднят единственный вирт. хост и ты кладешь каждый сайт в свою папку на нем. Это не будет нормально работать с реальными проектами. Тебе надо вместо этого создать для каждого сайта свой виртуальный хост. Тебе все равно придется учиться это делать, лучше научиться сейчас.

Гугли по словам "как добавить виртуальный хост в xampp в Windows".

В качестве домена я советую выбирать названия, заканчивающиеся на .localhost, например http://uppuru.localhost. Такие имена автоматически преобразуются в 127.0.0.1 (адрес твоего компьютера) и тебе не надо лезть в файл hosts и что-то менять (даже если в инструкции будет написано, что надо).

То есть, тебе надо:

1) создать папку для нового хоста, например c:\xampp\htdocs\uppuru.localhost\

2) в ней создать папку public и подложить туда index.php

3) добавить новый виртуальный хост в конфиг Апача, указав домен (ServerName) uppuru.localhost и корень сайта (DocumentRoot) c:/xampp/htdocs/uppuru.localhost/public/ (в конфиге Апача слеши должны быть прямые)

4) перезапустить Апач

5) менять что-то в файле hosts не надо, все должно работать и так

Это делается за 2 минуты при наличии опыта.

В папку public ты кладешь файлы, к которым можно обращаться из браузера, а все остальное, например, PHP-код, конфиги, кладешь за ее пределами. Это повышает безопасность, а то сейчас у тебя все файлы доступны через браузер и это плохо. Любой сможет выполнить или скачать любой файл с твоего севрера.
564 2647745
>>646740

> Да и вообще ты типа собрался эту поебень в каждый класс проекта вставлять?



Можно просто подключить трейт:

use DisableDynamicProps;

ровно 1 строка. Теперь попробуй добиться того же в Яваскрипте.
565 2647754
>>647133

> С доктриной вопрос по прежнему стоит: почему доктрина не работает с final?



Ты сюда пришел разобраться в устройстве Доктрины? Доктрина использует прокси-классы для ленивой загрузки и они должны наследоваться от сущностей, потому сущности не могут быть final. Я тут проблемы не вижу вообще. Ты сам себе придумал зачем-то что надо ставить везде final и жалуешься, что это не работает с Доктриной. Либо убирай final, либо бери другую библиотеку.
566 2648160
>>647754
Козел ебаный, нахуй ты влез в разговор, который даже не прочитал? >>647126 Вот смотри, это какое уже по счету подтверждение что пхп макаки тупорылые животные.
TameRequiredJaeger.mp4292 Кб, mp4,
576x304, 0:08
567 2648171
>>647724

>В PHP я не указываю типы переменных, и статический анализ работает


>В пхп если в типах ошибка, стат анализ молчит


>работает



>А в твоем Питоне - не работает


>В питоне если в типах ошибка, стат анализ говорит что в типах ошибка


>не работает



Ты еблан?
568 2648172
>>648160
На связи >>647126
Могу сказать, что я нихуя не понял всё равно, т.к. с доктриной работал хуй да нихуя, пару атрибутов написал и всё, а из тестов писал только простые юниты, не ебу чё там с моками. Так что было бы интересно послушать твой ответ на ответ мимокрока. А вообще как бешеная собака, брызжащая слюной, пока что ведёшь себя в осноном ты.
569 2648177
>>648172
То есть ты сам не загуглил про прокси и как обходят проблему с final разработчики на пхп? Почему?
570 2648268
>>647742
Спасибо, анон! Ты няша.
571 2648307
>>647742
А как выйти из корневого каталога public в href ?
Допустим есть файл index.php, который лежит в корневом каталоге public, а там есть ссылка на скрипт вне этого каталога.
Прописывать что-то типо <a href="/../test.php">ссылка</a> ? Только что затестил и не получилось, апач просто не видит этот файл (я про test.php)
572 2648344
>>648307
Ты не понимаешь как работает интернет. И не понимаешь как работает веб сервер.

Веб сервер дает публичный доступ к файлам на жестком диске. Вот эта строчка в конфиге:
(DocumentRoot) c:/xampp/htdocs/uppuru.localhost/public/
означает что все ссылки в интернете с определенным доменным именем (например uppuru.com) будут обращаться к файлам в этой папке. А уже в настройках апача уточняется что не просто к папке, а именно к файлу index.php в этой папке.

Если сервер доступен в интернете, то его адрес и маршрут до него формируется с помощью DNS серверов. То есть когда кто-то вводит в браузере uppuru.com сначала идет запрос на получение адреса нашего сервера, а потом через длинный маршрут запрос таки доходит до нашей папки и файла index.php

Но локальный веб сервер работает не так. Он получает только локальные запросы, т.е. запросы к адресу localhost или 127.0.0.1. Чтобы вместо ничего не говорящего localhost можно было в браузере вводить uppuru.com и браузер не лез в интернет в поисках того чего там нет, можно винду заставить все запросы к uppuru.com перенаправлять на 127.0.0.1. Как? Правильно отредактировав файл hosts. Но вот этот анон >>647742 подсказал тебе более простой способ, вместо uppuru.com использовать uppuru.localhost . Таким образом и название будет понятное и переадресация на 127.0.0.1 будет работать сама.

Допустим ты все сделал как тебе написали >>647742

Наконец к твоему вопросу: как выполнить код из скрипта, который находится в другой папке, зарытой от доступа снаружи?
Ответ: только с помощью самого php. Вот так это делается вручную https://www.w3schools.com/php/php_includes.asp . Вот так это делается автоматически https://github.com/codedokode/pasta/blob/master/php/autoload.md
Предполагаю твой следующий вопрос: а как мне выполнять определенный код только для определенных ссылок?
Ответ: как раз с помощью slim и его роутинга https://slimframework.ru/v3/objects/router

Что в итоге? Твой веб сервер просто получает запрос из браузера и если в запросе доменное имя uppuru.localhost запускает index.php в папке, которую ты указал как (DocumentRoot) для этого домена. Это работает для любых ссылок: uppuru.localhost/../test.php uppuru.localhost/хуйс uppuru.localhost/пук.среньк
А вот интерпретацией этих ссылок и роутингом должен заниматься твой php код, который в index.php и находится, там включается автозагрузка, там ты запускаешь свое приложение и обрабатываешь запрос.
572 2648344
>>648307
Ты не понимаешь как работает интернет. И не понимаешь как работает веб сервер.

Веб сервер дает публичный доступ к файлам на жестком диске. Вот эта строчка в конфиге:
(DocumentRoot) c:/xampp/htdocs/uppuru.localhost/public/
означает что все ссылки в интернете с определенным доменным именем (например uppuru.com) будут обращаться к файлам в этой папке. А уже в настройках апача уточняется что не просто к папке, а именно к файлу index.php в этой папке.

Если сервер доступен в интернете, то его адрес и маршрут до него формируется с помощью DNS серверов. То есть когда кто-то вводит в браузере uppuru.com сначала идет запрос на получение адреса нашего сервера, а потом через длинный маршрут запрос таки доходит до нашей папки и файла index.php

Но локальный веб сервер работает не так. Он получает только локальные запросы, т.е. запросы к адресу localhost или 127.0.0.1. Чтобы вместо ничего не говорящего localhost можно было в браузере вводить uppuru.com и браузер не лез в интернет в поисках того чего там нет, можно винду заставить все запросы к uppuru.com перенаправлять на 127.0.0.1. Как? Правильно отредактировав файл hosts. Но вот этот анон >>647742 подсказал тебе более простой способ, вместо uppuru.com использовать uppuru.localhost . Таким образом и название будет понятное и переадресация на 127.0.0.1 будет работать сама.

Допустим ты все сделал как тебе написали >>647742

Наконец к твоему вопросу: как выполнить код из скрипта, который находится в другой папке, зарытой от доступа снаружи?
Ответ: только с помощью самого php. Вот так это делается вручную https://www.w3schools.com/php/php_includes.asp . Вот так это делается автоматически https://github.com/codedokode/pasta/blob/master/php/autoload.md
Предполагаю твой следующий вопрос: а как мне выполнять определенный код только для определенных ссылок?
Ответ: как раз с помощью slim и его роутинга https://slimframework.ru/v3/objects/router

Что в итоге? Твой веб сервер просто получает запрос из браузера и если в запросе доменное имя uppuru.localhost запускает index.php в папке, которую ты указал как (DocumentRoot) для этого домена. Это работает для любых ссылок: uppuru.localhost/../test.php uppuru.localhost/хуйс uppuru.localhost/пук.среньк
А вот интерпретацией этих ссылок и роутингом должен заниматься твой php код, который в index.php и находится, там включается автозагрузка, там ты запускаешь свое приложение и обрабатываешь запрос.
test.png68 Кб, 994x543
573 2648361
>>648344
Мне не нужно выполнять скрипт из директории снаружи корневой, мне нужно, чтобы пользователь нажал на кнопку и его ссылкой перенаправило на этот скрипт как на пике.
test2.png5 Кб, 560x54
574 2648370
>>648361
Попробовал даже так, ссылка становится просто напросто некликабельной, даже не перенаправляет на другую страницу.
575 2648374
>>648361
Ну и нахуя я все это писал? Все ссылки ведут на скрипт Index.php, я тебе даже написал почему и как.
576 2648389
>>648374
Я тебя понял, твоя информация супер полезная без иронии говорю, но вопрос остается открытым, как из индекса которая находится в корневой директории попасть через ссылку на скрипт находящийся вне . Пример на пиках не работает, так что надо сделать чтобы заработало, анончик ?
577 2648397
>>648389
В public создаешь controller.php где будет один require_once "../controllers/12312321.php"
578 2648401
>>648397
А как вы атрибуте href к нему обращаться то ? Я вообще не вдупляю.
579 2648404
>>648401
Мне просто нужно ПЕРЕЙТИ НА ДРУГУЮ СТРАНИЦУ КОТОРАЯ НАХОДИТСЯ НЕ В КОРНЕВОМ КАТАЛОГЕ ЧЕРЕЗ ТЕГ <a>, А НЕ ВЫПОЛНИТЬ СКРИПТ
580 2648408
>>648389
Я тебе все ссылки дал. Вот так в slim создается новый контроллер https://slimframework.ru/v3/objects/router#container-resolution

>>648401

>А как вы атрибуте href к нему обращаться то ? Я вообще не вдупляю.


ВСЕ ССЫЛКИ ВЕДУТ НА INDEX.PHP Вообще все. А в index.php код который читает ссылку и решает что с ней делать

>>648404

>ПЕРЕЙТИ НА ДРУГУЮ СТРАНИЦУ


Чтобы отобразить пользователю ЛЮБУЮ страницу нужно выполнить скрипт index.php
ПЕРЕЙТИ НА СТРАНИЦУ = выполнить Index.php
581 2648411
>>648404
Я не знаю как еще тебе объяснить.

Давай по русски тогда. У тебя ссылка uppuru.localhost/СДЕЛАЙ-БОЧКУ.
Веб сервер эту ссылку приносит в Index.php
У тебя в index.php условие:
если в ссылке есть "СДЕЛАЙ БОЧКУ" выполнить функцию "НОВАЯ БОЧКА"

Так понятно?
582 2648414
>>648411
>>648408
Аноны, есть ссылка на репозиторий где вся эта лабуда с пабликами хуябликами нормально для понимания настроена и можно чисто по коду понять как это работает, потому что я вас абсолютно не выкупаю, тут 2 варианта, либо я пиздец какой тупой, чего за собой раньше не замечал и вы открыли мне глаза, либо пхп явно не моя стезя.
583 2648416
>>648414
Заебал, специально для тебя сделал дискорд сервак, заходи я тебе за две минуты все объясню.

https:// discor d. gg / 6qXSDNQa
584 2648417
>>648401
href="controller.php", если у тебя нету Rewrite на index.php, если есть и у тебя Slim то создай роут /controller на этот свой файл.
585 2649124
>>648177

"Проблема с final" существует только в твоем воображении. Я, например, только от тебя узнал, что есть люди, которым нужно зачем-то везде писать final.
586 2649128
>>648171

В коде ошибки нету. Код работает корректно. Анализатор выдает ложное срабатывание, так как в отсутствие тайп-хинтов он попытался определить тип переменной из выражения b = a и сделал это неправильно.
587 2649131
>>648307

Ты не можешь в браузере выйти за пределы public, в этом и смысл. То есть, если ты хочешь открыть браузером test.php, то ты должен положить его в public.

А вот если ты хочешь просто подключить файл за пределами public через require, то это сделать можно.
588 2649134
>>648361

Тебе надо переложить файлы, к которым пользователь может обращаться через браузер, в папку public.

То есть если у тебя пользователь может перейти по ссылке viewFile.php (или отправить форму по такой ссылке), то этот файл нужно положить в public. Но только его, а не вообще все файлы. В public должен быть минимум файлов, только то, что нужно, а не все подряд.

Также, если ты используешь Slim, а не пишешь код с нуля, то у тебя из PHP-файлов в public будет только index.php. Остальные файлы ты будешь подключать за счет роутинга.

Если ты не используешь фреймворк, а пишешь все сам, то у тебя может быть в public несколько файлов-контроллеров вроде index.php, upload.php, viewFile.php и так далее. В этом случае роутером у тебя будет по сути Апач.
589 2649148
>>648361

И мне кажется, тебе надо разобраться с роутингом. Идея Слима в том, что все запросы к странцам сайта вроде:

uppuru.localhost/file/123
uppuru.localhost/upload
uppuru.localhost/about

перенаправляются на index.php (за счет конфига Апача), index.php подключает Слим, а Слим смотрит на URL и вызывает нужный контроллер. Вызов нужного контроллера в зависимости от URL это и есть роутинг.

То есть, при использовании Slim ты не используешь URL вроде /file.php?id=123, и не обращаешься к скриптам напрямую, а используешь нормальные URL вроде /file/123.

Когда ты у себя в index.php пишешь

$app->get('/upload', function (..) { .... });

то это читается как "если браузер запросит страницу /upload методом GET, то вызвать эту функцию. А эта функция может отдать какой-то текст или вызвать контроллер, или подключить шаблон или что-то еще.

То есть, если ты используешь Slim, то тебе надо:

- изучить и запомнить, из каких частей составляется URL: https://github.com/codedokode/pasta/blob/master/network/urls.md
- изучить хотя бы основы HTTP и знать что такое "метод" и чем GET отличается от POST: https://github.com/codedokode/pasta/blob/master/network/http.md
- настроить в Апаче mod_rewrite, чтобы при любых запросах вызывался index.php
- разобраться с роутингом и в index.php настроить роуты для всех страниц, которые будут на сайте
- и дальше уже спокойно писать код для этих страниц
590 2649400
>>649128
Хватит срать в штаны. Ты инициализировал b как int. В строгой системе типов переменной типа int нельзя присвоить None, о чем тебе и написал анализатор.

Так будет в C https://onlinegdb.com/ocs908ZGh
Так будет в C++ https://onlinegdb.com/BWS3BI5ts2
Так будет в C# https://onlinegdb.com/3avb7HDQo
Так будет в Java https://onlinegdb.com/LFYYA1pUU
Так будет в Go https://onlinegdb.com/vur0OGM3Ns

То что в твоем ебанутом мире пхп можно творить хуйню, означает не что все остальное сломано, а что пхп кал говна и ему до нормального языка как до луны раком.
591 2649406
>>649124
Ок, петух. Наводящий вопрос: ты когда пишешь свой говнокод используешь SOLID?
592 2649615
>>649400

>В строгой системе типов переменной типа int нельзя присвоить None


А в пыхе как будто можно https://onecompiler.com/php/3z3fdu2ub

>Так будет в C#


Впервые слышишь про nullable? https://onlinegdb.com/lOWZtwFpQg
А не будешь переносить скобки на новые строки приедет дядя Билл и купит тебя в рабство.

>То что в твоем ебанутом мире пхп можно творить хуйню


В любом языке можно творить неистовую хуйню и всё тут зависит от прокладки между клавиатурой и креслом.

> ему до нормального языка как до луны раком


Добавить асинхронность, автозагрузчик классов и пакетный манагер из коробки?
Действительно как до луны.
593 2649617
>>649400

>Так будет в C#


https://onlinegdb.com/Vj2QoDeAB

Ещё скажи, что это будет не хуйня в С#
594 2649619
>>649615
>>649617
Нахуй вы мне это пишете? Пишите это >>649128 дегенерату. Это его пример. Это он придумал инициализировать переменную через присваивание, это он придумал что потом её за каким-то хуем нужно менять на нулл, это он на серьезном ебале заявил что нормальное поведение стат анализатора хавать это говно, потому что в пхп можно на все хуй забить.
595 2649827
>>649400

Зачем ты выставляешь глупость напоказ? Ситуация, когда в переменной может лежать что-то или None, встречается очень часто.

Например, у тебя в переменной может быть лучший вариант доставки товара или None, если его не удалось определить.

Тип переменной не определяется присвоенным ей в первый раз значением. Если бы я сначала написал b =None, а потом b =a, то это значит что тип переменной b это None?

Это именно ошибка статического анализатра, который почему-то решил, что тип переменной определяется первым присвоенным ей значением.
596 2649830
>>649400

Твои примеры кода не эквивалентны моему. У тебя в Си явно указано, что b это int. У меня в коде это не указано, статический анализатор это сам откуда-то придумал.
597 2649918
>>649827

>Ситуация, когда в переменной может лежать что-то или None, встречается очень часто


В такой ситуации и нужно указывать что в переменной будет лежать что-то и none, тупорылый ты хуесос. Это ты ебанько хочешь нихуя не указывать и чтобы ошибок никаких не было. В пхп никаких ошибок нет не потому что он охуенно умный, а потому что ему похуй. А во всех нормальных языках, в которые кстати входит питон, тебе пишут что ты, собака сутулая, попутал типы и либо укажи правильные типы, либо меняй присваиваемый тип.

>>649830
В C и С++ всегда нужно указывать тип объявляемой переменной. Там твое ебланское "нихачу" не прокатит. За остальные примеры есть че пернуть?
image.png695 Кб, 827x1181
598 2650533
Читали? Мнение?
599 2650904
>>650533
В целом должна быть норм, упущения имеются, но "базу" получишь.

вкатун
600 2650905
Юзается ли на практике SplFixedArray? Или все просто используют "обычные" массивы php? Судя по тестам SPL побыстрее при бОльшем размере - тратит память меньше, операции вставки быстрее.

Сам я понял так, что до сотен тысяч элементов обычный массив - хеш-таблица - лучше подойдет, всё что выше - лучше использовать spl.
image.png11 Кб, 727x149
601 2650918
602 2650929
>>650905
Вся Spl билиотека это наебка и карго культ. Никто её не использует. Потому что эти структуры написаны не на C, а на самом пхп. Ты, например можешь как хочешь изъебываться, но стандартная функция сортировки пхп будет быстрее твоей, потому что написана на C и выполняется на C, а твоя на пхп и у неё есть оверхед. Почему тогда не сделают структуры на C? А хуй его знает, походу для формошлепства они не очень нужны.

SplFixedArray работает немного лучше не потому что он fixed, а потому что SplFixedArray это на самом деле не массив, а объект. Добро пожаловать в мир пхп - здесь все наебка.
603 2650994
>>650904
Нахуй мне мнение человека, который ещё даже не вкатился? Иди литкод дрочи, вкатун.
604 2651087
>>650929

>Потому что эти структуры написаны не на C, а на самом пхп


https://github.com/php/php-src/blob/master/ext/spl/spl_fixedarray.c#L53
Screenshot 2023-03-24 134604.png24 Кб, 592x232
605 2651116
>>651087
Правильно, все как я и описал.
Нормальный fixed size массив аллоцируется в стеке и ДО выполнения функции и за счет этого работает быстрее.
В пхп ебала пикрелейтед. Которая представляет собой обертку над специальным пхп объектом zend_object, который ясный хуй лежит в куче. А оперируем мы им через виртуальную машину пхп. Все возможные профиты от fixed array в этой ситуации теряются, остается только название.
606 2651216
>>650994
Так это не моё мнение, как видишь, а человека разбирающегося в этом. Ты можешь сам проверить, прочитав этот отрывок, и понять, что эта книга не идеальна. Но дело твоё, раз тебе хочется ворчать, ныть, плакаться, задавать глупые вопросы, ок.
607 2652133
>>651116

>Нормальный fixed size массив аллоцируется в стеке


>Все возможные профиты от fixed array в этой ситуации теряются


Мне просто интересно, где ты эту хуйню вычитал? FixedArray полезен тем что не требует доп.аллокаций, и это не хеш карта с доп.памятью, без ключей, FixedArray используются в С/C++ часто с выделением памяти, потому что стек ограничен в пару МБ, и много ты там не разместишь, а ведь там еще должны находится адреса возврата и локальные переменные интерпретатора. То что там поверх Zend это вообще никак не влияет на производительность.
608 2652190
>>652133

>Мне просто интересно, где ты эту хуйню вычитал?


Это общеизвестный факт. Массив на стеке будет быстрее обычного массива. Ты типа сомневаешься что это так? Или просто больше нечего пернуть?

>FixedArray используются в С/C++ часто с выделением памяти, потому что стек ограничен в пару МБ


Это какого размера должен быть массив чтобы не влезть на стек? 1кк? Нахуя тебе фиксированный массив на 1кк? Ты понимаешь что весь выигрыш в скорости будет схаван тем фактом что тебе сначала нужно эту ебалу в памяти создать, а потом его заполнить. И ты типа знаешь что данных ровно столько и переполнения не будет. Никто такой хуйней не занимается, а просто использует обычный массив. А в пхп так вообще в принципе нет задач для таких объемов данных, что бы ты не делал это будут порции по паре тысяч элементов. Нет никакого смысла держать в памяти даже массив на один миллион, тебе тупо нечего с ним делать.

>То что там поверх Zend это вообще никак не влияет на производительность


А если еще немного стекломоя наебнуть, то он и выигрыш в производительности даст. Даже самому нулевому вкатуну очевидно что работа через посредника будет медленнее.
609 2652225
>>649918

Ты настолько изошелся желчью, что не видишь сути проблемы. Суть в том, что статический анализатор делает неправильные предположения о типах переменных и из-за этого происходят ложные срабатывания. Если я не указал тип переменной, это не значит, что можно его придумывать за меня.

Статический анализатор не пишет, что я должен указать тип переменной. Он пишет, что в коде ошибка, хотя код абсолютно корректный и работает. Это называется "ложное срабатывание", когда анализатор сообщает о якобы ошибке, которой на самом деле нет.

В PHP по-другому. PHP не додумывает типы за тебя, и корректно провеяет их во время выполнения, когда они указаны.

Попробуй успокоиться и спокойно разобраться в сути проблемы.
610 2652228
>>650905

Обычные массивы в PHP ассоциативные, то есть у них индексы могут быть числами, могут быть строками, если числа, то они могут идти в произвольном порядке или с пропусками.

В SplFixedArray индексы всегда идут строго по порядку от 0 до N. Это дает два преимущества:

- можно экономить память при хранении больших объемов данных
- можно таким образом показать, что функции нужен именно набор данных с ключами от 0 до N по возрастанию. Другой набор данных передать не получится.
611 2652231
>>650918

Я вижу, анон, ты умный, раз ты решил эту задачу. Может быть ты тогда можешь посчитать, какова вероятность выпадения двух даблов? То есть, два дабла выпадают в одном из скольки случаев?
612 2652245
>>651116

Ты пишешь ерунду. В современных ОС размер стека сильно ограничен (легко может быть в районе 384 Кб, например), и ты там много не разместишь.

Преимущества SplFixedArray в том, что он хранит данные по-другому, не как хеш-таблицу, и за счет этого экономит память (не нужны ведра, списки ключей и тд).

Ты только демонстрируешь свое незнание. Впрочем, что ждать от человека, который подумал, что SplFixedArray написан на PHP.

> Которая представляет собой обертку над специальным пхп объектом zend_object, который ясный хуй лежит в куче



Ну ты и глупый. zend_object в структуре со ссылки это сам объект SplFixedArray, а не содержащиеся в нем элементы (они хранятся в spl_fixedarray array). Перечитай исходный код, чтобы не позориться больше.
613 2652281
>>652190

>Массив на стеке будет быстрее обычного массива


Бред который ты где то услышал, и скорее всего текст то был правильный, но ты из за того что только на PHP писал, ничего не понял и выдумал свою шизу.

>Это какого размера должен быть массив чтобы не влезть на стек?


У тебя только один массив в приложении?

>Ты понимаешь что весь выигрыш в скорости будет схаван тем фактом что тебе сначала нужно эту ебалу в памяти создать, а потом его заполнить.


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

>А в пхп так вообще в принципе нет задач для таких объемов данных


Конешн.

>Даже самому нулевому вкатуну очевидно что работа через посредника будет медленнее.


Скажи потерю производительности в процентах, с округлением в меньшую сторону. это будет 0% на современном железе где запускается php
614 2652314
>>652225
Ну я тебе привел примеры как это работает в нормальных языках. Везде работает как в питоне. Получается что в C#, Java и Go ложное срабатывание, а в C и С++ вообще нельзя сразу тип не указать, во ебанутые. Такие детские ошибки, не то что в пхп.
615 2652376
>>652245

>Ну ты и глупый. zend_object в структуре со ссылки это сам объект SplFixedArray, а не содержащиеся в нем элементы (они хранятся в spl_fixedarray array).


Бля, что же быстрее: просто array или пхп ебала + array. Никак не могу выяснить, загадка прям.

>>652281

>Бред который ты где то услышал, и скорее всего текст то был правильный


Так будет или не будет? Почему ты не напишешь прямо, а вертишь сракой?

>У тебя только один массив в приложении?


Бля, ебанько, давай перефразирую для твоего маленького пхп мозга: fixed array имеет хоть какой-то смысл если этот массив описан в коде. Если тебе нужно хранить в массиве большие данные полученные снаружи, то используется обычный динамический массив. Банально потому что для фиксированного нужно знать точный размер, а в реальной жизни так просто не бывает.

Бля, я хуй знаю как пхп макаке еще объяснить. Ты понимаешь, что массив на стеке это часть программы, как функция, в которой он используется, он уже скомпилирован. А на получение данных из другого места ты выполнишь дополнительные действия, которые полностью перекрывают любой возможный профит от способа объявления массива?

>Скажи потерю производительности в процентах, с округлением в меньшую сторону


C++ быстрее пхп в 5 раз, а C быстрее C++, так что думаю в шесть раз примерно. Я петухам из вк верю https://vkcom.github.io/kphp/various-topics/walk-through-php-kphp-cpp.html#compare-php-vs-kphp-vs-c--final-results
Можешь начинать кудахтать что ваши тесты не тесты.
616 2652391
>>652376

>Так будет или не будет? Почему ты не напишешь прямо, а вертишь сракой?


Поучу тупого, массив на стеке и в распределенный через malloc это просто кусок памяти, один кусок памяти может быть быстрее другого из за разного способа выделения на уровне ОС.

>что массив на стеке это часть программы


>он уже скомпилирован


Покажи мне скомпилированный лол массив тут https://godbolt.org/z/G5ezcWfr3

>C++ быстрее пхп в 5 раз


Клоун, я тебе задал конкретный вопрос, и он не связан с общей производительностью PHP vs C++. То что ты кидаешь какие то ссылочки, и пишешь про доверие, четко подтверждает мои догадки - ты начитался того что слишком велико для твоего уровня, и выдумал свои манятеории о том что Spl написан на PHP, что стеки дают 100500 буст производительности.
617 2652393
>>652391
Фикс

>один кусок памяти может быть быстрее


НЕ МОЖЕТ
618 2653336
>>652376

> что же быстрее: просто array или пхп ебала + array



Хватит демонстрировать глупость. Изначально ты заявлял, что SplFixedArray написан на PHP и не дает никакого выигрыша, тебе объяснили что он написан на Си и выигрыш есть (в объеме занимаемой памяти в сравнении с обычным массивом), но ты все никак успокоиться не можешь.

Что касается скорости, то во-первых, SplFixedArray дает выгирыш по использованию памяти, а не по скорости, голова дубовая, во-вторых, для подавляющего числа приложений скорость работы PHP достаточна. Можно было бы писать сайты на Си, но почему-то так никто не делает, а используют PHP, как думаешь, почему?
619 2653570
>>571790 (OP)
Какое самое простое и доступное решение для асинхронного выполнения?
620 2654220
621 2654759
>>654220
Мне нужна асинхронность в php процессе.
622 2654810
>>653570
Amphp мне больше всего понравился.
623 2655242
>>653336
Так это написали для ускорения, а не для сохранения памяти.
624 2655244
https://onlinephp.io/c/21551 - Числа прописью

Где забрать 300кк? Сделал за 100 минут. Меня уже берут на работу?
625 2655257
>>655244
Ужас блядь, ни PSR, ни DRY. Больше никому это не показывай.

>Меня уже берут на работу?


Боже упаси.
626 2655421
>>655257
Показывай свой вариант. Бля, как я устал. Каждый раз оно и то же из треда в тред.

Один раз за пол года кто-то реально пишет код. Тут же какой-то выпердышь с серьезным ебалом начинает какие-то пространные рассуждения про то как на самом деле надо, про бест практики, хуйню малафью. А когда этого критика-хуитика просишь чтобы он написал хоть ебаную строчку он виляет сракой сто постов, а потом сливается.

Это фишка пхп треда, нигде в /pr такого больше нет. Пиздежа - море разливное, но написать код просто невозможно. В любом другом треде анон с кайфом напишет что угодно лишь бы разъебать по фактам. А пхп треде только пук.
627 2655430
>>655421

>Показывай свой вариант


Сколько ты мне за это заплатишь?

>Один раз за пол года кто-то реально пишет код


Не пизди.

>про бест практики, хуйню малафью


>Нинужна


Что отличает погремиста от макаки?

>лишь бы разъебать по фактам


Наваливает базы как надо писать по бест практис и переиспользованию участков кода?

Ты пишешь array, не пользуешься типизацией и делаешь интерполяцию строк через {}, зачем мне тебе устраивать код ревью бесплатно, чтобы сделать из макаки которая пишет код из PHP 5.6 человека?
628 2655451
>>655430
а в чём проблема интерполяции строк через {}, как ещё это делать, sprintf?

мимо
629 2655495
>>655430
А сколько заплатили >>655244 челу?

>Нинужна


Ты просто пернул "говно". Ни примера, ни разбора. Вместо конструктива и помощи бесполезное мнение дегенерата, который и строчки не в состоянии высрать.

>Ты пишешь array, не пользуешься типизацией


То есть ты по моему посту не понял что этот код не я писал? Ну ты в натуре пенек осиновый. Все эти "ошибки" про array и прочую неважную хуйню типа разметки фиксятся одной комбинацией клавиш в phpstorm ctrl+alt+l.

Не удивительно что код никто не постит. Мало кому хочется дело иметь с такими бездарными хуесосами как ты, от которых помощи 0, зато вони дохуя.
image.png14 Кб, 1237x369
630 2655560
>>655451
Сейчас уже можно просто переменную вставлять между двойными.

>>655495

>А сколько заплатили >>655244 челу?


Зачем платить долбаёбу который напишет бесплатно?

>Ни примера, ни разбора


Нахуй ты мне нужен сидеть разбирать твой высер? Ты мне за это не заплатишь.

>что этот код не я писал?


>Меня уже берут на работу?


А дефаешь этот высер так как будто писал его ты, лул.

>Ну ты в натуре пенек осиновый


Ну ты внатуре подпивас колхозный который решил в погремирование, дабы не хуярить на заводе.
Если тебе тайпхинты показать ты снова вернёшься на ленту, мне вот интересно!?

>комбинацией клавиш в phpstorm ctrl+alt+l


Ну так нахуя ты несёшь сюда код за который я бы тебя уволил нахуй? Почему ты не нажал эту чудесную комбинацию клавиш?

>Не удивительно что код никто не постит


Во первых никто не хочет палить свои гиты, а во вторых зачем?
Ведь есть же макаки с кода которых можно покекать.

>с такими бездарными хуесосами как ты


Обиделась моя маленькая шавка? Ну погавкай погавкай, а как перейдёшь на человеческую речь тогда и поговорим. Адио.
image.png14 Кб, 1237x369
630 2655560
>>655451
Сейчас уже можно просто переменную вставлять между двойными.

>>655495

>А сколько заплатили >>655244 челу?


Зачем платить долбаёбу который напишет бесплатно?

>Ни примера, ни разбора


Нахуй ты мне нужен сидеть разбирать твой высер? Ты мне за это не заплатишь.

>что этот код не я писал?


>Меня уже берут на работу?


А дефаешь этот высер так как будто писал его ты, лул.

>Ну ты в натуре пенек осиновый


Ну ты внатуре подпивас колхозный который решил в погремирование, дабы не хуярить на заводе.
Если тебе тайпхинты показать ты снова вернёшься на ленту, мне вот интересно!?

>комбинацией клавиш в phpstorm ctrl+alt+l


Ну так нахуя ты несёшь сюда код за который я бы тебя уволил нахуй? Почему ты не нажал эту чудесную комбинацию клавиш?

>Не удивительно что код никто не постит


Во первых никто не хочет палить свои гиты, а во вторых зачем?
Ведь есть же макаки с кода которых можно покекать.

>с такими бездарными хуесосами как ты


Обиделась моя маленькая шавка? Ну погавкай погавкай, а как перейдёшь на человеческую речь тогда и поговорим. Адио.
image.png33 Кб, 469x796
631 2655576
>>655560
да вроде всегда было можно, там же разница немного в другом
$array[key] и {$array['key']}
и методы вызывать можно только в скобках {$foo->bar()}
632 2655630
>>655560

>Клуб изучающих PHP


>Тут мы изучаем язык PHP


>Это тред для начинающих


>Зачем платить долбаёбу который напишет бесплатно?


>Нахуй ты мне нужен сидеть разбирать твой высер? Ты мне за это не заплатишь.


>Ну так нахуя ты несёшь сюда код за который я бы тебя уволил нахуй?


>никто не хочет палить свои гиты


>Ведь есть же макаки с кода которых можно покекать.


Ебать, какой же пидарас всплыл. Давно таких мразей не видел. И эта фиксация на "платить" "заплатишь" эта боль безработного вкатуна.
9d4c52b66d331844e8a1e25bc2cc13b62542dcd0.png250 Кб, 2382x1432
633 2655650
>>655576
Да не слушай этого дебила. Он ни дня в жизни программистом не работал.
Как изначально договорено так и будете писать. Где-то используют sprintf, где-то implode, где-то конкатенацию, где-то интерполяцию. Это по большей части дело вкуса, как и любое форматирование в принципе. Я уже лет пять как просто загружаю очередной стайлгайд в шторм и ставлю автоформатирование при коммите.

Все действительно важные правила проверяются в phpcs и/или sonarqube. Так что твой мердж реквест просто не пройдет пайплайн и будет висеть как фуфел красный, а пока он красный никто его ревьюить и аппрувать не будет, пушо это физически невозможно. И тогда твой тимлид тебе скажет что хватит хуи пинать, пиздуй фиксить. Ты зайдешь в jenkins откроешь пайплайн, прочитаешь какие скобки не там и поставишь как надо. И то как предпочитаешь их расставлять ты или какой-то еблан на двачах никого не ебет, просто потому что чтобы поменять правила надо нехуйно поебаться, сначала согласуя, а потом переписывая их.
634 2655664
>>655630

>эта боль безработного вкатуна


>>655650

>программистом не работал


Эти колхозные маняфантазии... Эти потужные колхозные рассказы про мерж реквесты =)

Судя по твоему коду не работал ни дня именно ты т.к тебя хотя бы научили хорошим практикам кода.
635 2655680
>>655664

>потужные


>колхозные


>=)


Ты хохол что-ли? То-то я смотрю происходит какая-то истерика на грани шизофрении. Вы держитесь там, переживаю за вас как за родных.
636 2655825
>>655430
>>655495
В этом же треде мне писали, что "ВИДНО СРАЗУ - ВКАТУН, БЫЛ БЫ ТЫ РАЗРАБОТЧИК, ТО НЕ ИСПОЛЬЗОВАЛ БЫ ИНТЕРПОЛЯЦИЮ!". Сейчас наоборот.

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

>>655430
array() было в примере кода, я не исправлял ничего, т.к. вроде можно и так. А что в этом плохого? Надо обязательно [] использовать?
637 2656008
>>655825
Дело не в том можно или нельзя. Просто будь готов к тому что тебя попросят сделать по другому, не цепляйся за эту хуйню. Тебе должно быть похуй как писать, хоть задом наперед. Главное что не руками.

Поставь phpstorm. В code style выбери схему psr, это стандарт, это база. Одно нажатие кнопки и весь код в файле будет отформатирован машиной по стандарту. Если в конторе другой стайлгайд, ты просто заменишь в code style схему на ту которую они используют. 99% что ты даже знать их ебанутые правила не будешь.

Потом поставь плагин https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended- и исправляй косяки пока инспектор не покажет зеленую галочку. Почему надо именно так он тебе напишет и даст ссылку на развернутое объяснение. Делов на пару минут, а вопрос с форматированием закрыт полностью и навсегда.
638 2656087
>>656008
>>645120
Спасибо, чисто от души
639 2656123
>>655244

> in_array($number % 100, [11, 12, 13, 14, 15, 16, 17, 18, 19])



думаю, тут лучше было написать условие в стиле "x ≥ 11 и x ≤ 19", чем перечислять 9 чисел.

Когда тебе надо собрать строку из слов, то удобно сделать массив и класть в него отдельные слова, в стиле:

если (в числе есть сотни) {
положить в массив число сотен;
}

А в конце склеить слова с помощью implode(). У тебя же код дублируется, например в функции numberToText несколько раз скопирован код получения числа тысяч.

В общем, сделано неплохо и аккуратно, если не считать дублирования кода.
640 2656125
>>655430

> Ты пишешь array,



array там в одном месте - в списке названий чисел, потому что этот список был написан для заголовки задачи во времена PHP5. В других местах везде квадратные скобки.

> не пользуешься типизацией



Потому что в учебнике в этой задаче еще не упоминается типизация. Невозможно изучить все одновременно.

> и делаешь интерполяцию строк через {}



И в чем тут проблема? Это исключает неоднозначность, если например после переменной идет кавычка: "«$a»" - ты знал, что здесь кавычка станет частью имени переменной? Не знал наверно.

> зачем мне тебе устраивать код ревью бесплатно



Либо пиши что в коде не так, либо не пиши ничего.

> Ни PSR



Судя по тому, что ты не написал номер PSR, ты сам не знаешь о каком PSR идет речь.
641 2656128
>>655560

Есть неоднозначность, если после переменной идут скобки, стрелка или кавычки:

echo "$x[$a]" - не заглядывая в мануал, как это интерепретируется? Ты же судя по комментариям опытный специалист и легко ответишь, правда?
echo "$x->a()" - а это?
echo "«$x»" - не заглядывая в мануал, как это интерпретируется?

Не использовать {} можно, если переменная отделена пробелами или другими безопасными символами от остальной строки.
642 2656130
>>655825

array там в заголовке кода, потому что она написана много лет назад, когда еще не везде работали []. Сегодня array использовать нет смысла.
643 2656602
>>645120

>Структуры данных - это способы размещать информацию в памяти.


Не согласен. Структуры данных предназначены для разработчиков, а не для компьютеров, чтобы им удобно было хранить. Как они под капотом хранят данные, никого особо не интересует. Структуры данных - это не способ хранения, это скорее способ представления данных, абстракция. И способ манипуляции этими данными.
Любые структуры данных можно смоделировать с помощью функций. Способ хранения не важен. Важно как они будут представлены и важен интерфейс для манипуляции этими данными.
644 2656699
>>656602

>Структуры данных предназначены для разработчиков, а не для компьютеров, чтобы им удобно было хранить


Откуда инфа? Из "перезвоним" треда?

Пиздец, знали бы разрабы постгреса, что они btree индексы не для перфоманса придумывают, а для себя, ебать они бы охуели.
645 2656773
>>656699

>btree индексы


Ты путаешь причину и следствие. Почему деревья эффективны? Не потому, что они на железе лучше лежат. А потому, что они эффективны по асимптотической сложности. Эффективность структур данных определяет не способ их хранения на низком уровне, а их алгоритмическая эффективность. Эффективность с точки зрения математического уровня абстракции. Самого верхнего уровня, а не уровня компилятора или железа.

Цитата из википедии:
B-дерево может применяться для структурирования (индексирования) информации на жёстком диске (как правило, метаданных). Время доступа к произвольному блоку на жёстком диске очень велико (порядка миллисекунд), поскольку оно определяется скоростью вращения диска и перемещения головок. Поэтому важно уменьшить количество узлов, просматриваемых при каждой операции. Использование поиска по списку каждый раз для нахождения случайного блока могло бы привести к чрезмерному количеству обращений к диску вследствие необходимости последовательного прохода по всем его элементам, предшествующим заданному, тогда как поиск в B-дереве, благодаря свойствам сбалансированности и высокой ветвистости, позволяет значительно сократить количество таких операций.

В этом примере ничего не сказано про низкоуровневое представление данных. Они могут представляться (храниться) сколько угодно неэффективно, это зависит от реализации. B-дерево выигрывает потому, что требует меньшее количество операций обращения к узлам. Причина в математических свойствах этой структуры, а не в эффективности реализации на низком уровне. Реализовать такое дерево можно очень по разному. И даже очень не эффективно.

Этот пример наглядно показывает, что на первый план выходит абстракция, а не ее реализация. Если бы алгоритмически было выгоднее хранить индексы не в b-tree, а в другой структуре данных, то b-tree бы не использовали.

Для структуры данных важен верхний уровень абстракции, как представлена эта структура для разработчика, в каком виде. Дерево это или список, или что то еще. А также важен интерфейс манипулирования этой структурой. Тогда разработчик сможет эффективно использовать структуру с точки зрения асимптотической сложности. Ведь искать в древовидной структуре проще чем в линейной. Потому что они математически устроены по разному. Не потому, что одна или другая эффективней реализованы.

Асимптотическая сложность вообще не подразумевает оценки скорости выполнения операций для вычислителя. Она определяет как быстро можно проводить операции с точки зрения математики. Вычислителем может выступать просто человек с листком бумаги и ручкой.
645 2656773
>>656699

>btree индексы


Ты путаешь причину и следствие. Почему деревья эффективны? Не потому, что они на железе лучше лежат. А потому, что они эффективны по асимптотической сложности. Эффективность структур данных определяет не способ их хранения на низком уровне, а их алгоритмическая эффективность. Эффективность с точки зрения математического уровня абстракции. Самого верхнего уровня, а не уровня компилятора или железа.

Цитата из википедии:
B-дерево может применяться для структурирования (индексирования) информации на жёстком диске (как правило, метаданных). Время доступа к произвольному блоку на жёстком диске очень велико (порядка миллисекунд), поскольку оно определяется скоростью вращения диска и перемещения головок. Поэтому важно уменьшить количество узлов, просматриваемых при каждой операции. Использование поиска по списку каждый раз для нахождения случайного блока могло бы привести к чрезмерному количеству обращений к диску вследствие необходимости последовательного прохода по всем его элементам, предшествующим заданному, тогда как поиск в B-дереве, благодаря свойствам сбалансированности и высокой ветвистости, позволяет значительно сократить количество таких операций.

В этом примере ничего не сказано про низкоуровневое представление данных. Они могут представляться (храниться) сколько угодно неэффективно, это зависит от реализации. B-дерево выигрывает потому, что требует меньшее количество операций обращения к узлам. Причина в математических свойствах этой структуры, а не в эффективности реализации на низком уровне. Реализовать такое дерево можно очень по разному. И даже очень не эффективно.

Этот пример наглядно показывает, что на первый план выходит абстракция, а не ее реализация. Если бы алгоритмически было выгоднее хранить индексы не в b-tree, а в другой структуре данных, то b-tree бы не использовали.

Для структуры данных важен верхний уровень абстракции, как представлена эта структура для разработчика, в каком виде. Дерево это или список, или что то еще. А также важен интерфейс манипулирования этой структурой. Тогда разработчик сможет эффективно использовать структуру с точки зрения асимптотической сложности. Ведь искать в древовидной структуре проще чем в линейной. Потому что они математически устроены по разному. Не потому, что одна или другая эффективней реализованы.

Асимптотическая сложность вообще не подразумевает оценки скорости выполнения операций для вычислителя. Она определяет как быстро можно проводить операции с точки зрения математики. Вычислителем может выступать просто человек с листком бумаги и ручкой.
646 2656941
>>656773
Но то, как на железе данные лежат, тоже ведь влияет. Обойти таблицу по индексу дороже, чем прочитать саму таблицу последовательно, хотя алгоритмическая сложность одна и та же. Да и, например, одну и ту же структуру данных можно реализовать по-разному: например, стек через вектор и стек через связный список, и будет разница по крайней мере в потребляемой памяти. Можно думать о структурах данных, как об абстракциях при решении каких-то прикладных задач, но вообще внутренняя реализация тоже играет роль.

>Она определяет как быстро можно проводить операции с точки зрения математики.


Нет, всё же, по-моему, асимптотическая сложность больше про то, как время выполнения растёт с увеличением количества входных данных, а это необязательно означает, что один алгоритм всегда быстрее другого. Сортировка пузырьком на небольших массивах может работать быстрее, чем квиксорт, например. Но, если мы увеличим объём входных данных в тысячу раз, то сортировка пузырьком станет работать условно в миллион раз дольше, а квик сорт условно только в десять тысяч раз дольше.

мимо
647 2657003
>>656773
Ты бы хоть из приличия почитал как в постгресе btree реализованы, про пейджинг и прочие оптимизации.

Да и вообще твоя шизотеория ломается прямо на старте, на самых базовых примерах структур типа стека и кучи. Именно структура и расположение стека в памяти делает работу с ним быстрее. Стек работает LIFO не потому что программистам так удобно, а потому что процессор может добавлять в такую структуру данные за одну инструкцию.
648 2657248
>>656941
Само собой реализация имеет значение. Никто в здравом уме не реализует структуры данных намерено не оптимально. Но разработчик не может повлиять на внутреннюю реализацию. Его задача выбрать правильную структуру с точки зрения алгоритмической сложности. В этом его задача. А задача разработчиков языка эффективно реализовывать структуры.

>>657003
Ты бы матчасть подучил сначала. Стек является LIFO не потому, что процессор как то там устроен. Процессор может быть троичным и каким угодно еще, от этого стек не изменится. Стек это АТД, математическая абстракция. Он вообще не зависит от процессора. Его можно реализовать различными способами. Детали его реализации не волнуют тех кто его использует. Им дан только интерфейс. Не путай стек со стеком вызовов. Стек является LIFO потому что первый зашел - последний вышел, последний зашел - первый вышел. Очередь работает наоборот.
649 2657254
>>657003
Стек вызовов реализован с помощью АТД стек только потому, что абстракция стека вызовов идеально ложится на абстракцию АТД стека.
650 2657265
>>656941

>по-моему, асимптотическая сложность больше про то, как время выполнения растёт с увеличением количества входных данных


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

Некоторая аналогия. Один шаг сделанный человеком - это 1 выполненное действие. 2 шага - соответственно 2 действия. Разные исполнители, то есть люди, могут по с разной скоростью выполнять шаги. Но если считать по количеству действий, 1 шаг всегда быстрее чем 2 или более. Не зависимо от того кто делает шаги.

Когда работают на конвейере такие измерения тоже могут быть полезны. Человек будет тем более эффективно выполнять работу, чем меньше действий он будет производить. Чем меньше действий - тем проще получается работа. Меньше времени, меньше усилий, меньше отвлекающих факторов. Любой исполнитель будет +- одинакового выполнять эти действия. Даже если кто то может быстрее других, важно чтобы он выполнял как можно меньше действий. В идеале всего одно. Одно и то же действие на протяжении всей работы. Тогда будет наибольшая эффективность.
16726944928710.mp4344 Кб, mp4,
1280x720, 0:02
651 2657290

>Но разработчик не может повлиять на внутреннюю реализацию


>А задача разработчиков эффективно реализовывать структуры


Похоже с шизотеорией я в точку попал. Шиз эталонный из палаты мер и весов.

>>657248

>Не путай стек со стеком


>Стек является LIFO потому что он LIFO


Ты под солями?
652 2657300
>>657290
Иди уроки учи, шкальник.

>>657248

>задача разработчиков языка эффективно реализовывать структуры


Разработчиков языка, языка программирования.

Стек - это АТД. Стек вызовов - абстракция в процессорах, виртуальных машинах и т.п., реализуемая в виде АТД стек.
16507308835530.webm9 Мб, webm,
320x240, 3:19
653 2657339
>>657300

>Стек - это АТД


>Стек вызовов - абстракция


>реализуемая в виде АТД стек


Бля, я уже заебался проигрывать с того как ты по кругу ходишь противореча себе самому.

Ты походу просто угашенный в хлам. Но я все таки заскриню и кину плюсоебам в загон, чтобы знали каких вершин мы тут в пхп тренде достигли на почве структурирования данных.
654 2657454
>>657339
Что тебе не ясно, неуч? Конкретные противоречия напиши. Или на хуй пошёл. Стек - абстрактный тип данных (АТД), лишь контакт. Стек вызовов - абстракция реализованная в процессорах, стековых виртуальных машинах и т.д. Используется только для хранения данных вызываемых функций. Реализуется на основе абстрактного типа данных - стека.

>заскриню и кину плюсоебам в загон


Можешь еще в спортлото написать.
лошара.mp4280 Кб, mp4,
426x240, 0:06
655 2657508
>>657454

>Стек - лишь контакт


>Стек вызовов - абстракция реализованная в процессорах


>в процессорах


>Реализуется на основе - стека


Бля, биокарлик, пощади не добивай. Я от смеха лопну нахуй ща.
656 2657521
>>657508
Дура тупая, одно и то же понятие может иметь разные значения. Одно и то же понятие может рассматриваться с разных сторон, на разных уровнях абстракции. Просто у тебя вместо мозгов говно.
657 2657697
>>657521

>Одно и то же понятие на разных уровнях абстракции


Оно понятие, разные значения. Одно понятие, разные стороны. Одно понятие, разные уровни абстракции.
Наконец-то сумрачный пхп гений вывел истинную структуру данных.
Фрактальный стек. Просто блядь ебнутый шизоид под солями.
658 2657714
Вкатывайтесь в фуллстек JS, толку от вашего PHP? Нуль. В JS всё реализовано по уму за редким исключением.
659 2657724
>>657697
Соси, говно.
660 2657734
>>657714
Ладно бы ты пердел про TypeScript, но хуже js говна в природе нет.
661 2658293
Аноны-погроммисты, требуется хелпа по сайту на Symphony.

Вводные: Есть Один Сайт на симфони с твигом, мне нужно установить на нем форму обратной связи. Самую простейшую, главное, чтобы текст на почту приходил.

Проблема в том, что я нихуя не понимаю, как это делается. В данный момент у меня есть форма на HTML и небольшой обработчик на чистом ПХП, который в обычном случае отправляет данные, но на этом сайте при нажатии на кнопку выдается ошибка "Method not allowed. Must be one of: GET".

Как я понимаю, мне надо либо писать какой то другой код, либо где то включить разрешение на отправку данных пост методом, но где - не понятно. Структура папок вообще не дефолтная и нет yml конфига, которые есть во всех примерах в интернете.
662 2658482
>>658293
Ну так а хули ты не запостил эту структуру папок? Мы её типа угадать должны? Я хуй знаю че ты ожидал, вот тебе инструкция для чайников https://symfony.com/doc/current/the-fast-track/ru/14-form.html
image17 Кб, 512x736
663 2658494
16802729414170.png18 Кб, 512x736
664 2658567
>>658494
Ты уверен что он на симфони?
665 2658653
>>658567
Бля, да, похоже это слим, я проебался.
666 2658686
>>658293
Отбой, всё сам сделал.
667 2658690
>>658567
Тебе добра, анон, я зеленый пиздец, только на жопакрипте скрипты писал до этого. Без тебя за год бы не допер, что сайт на слиме, а не на симфони ебаном. Спасибо ещё раз!
668 2658694
>>658686
А если точнее Чат ПГТ подсказал.
669 2659029
https://pastecode.io/s/2ejudo33

Аноны, подскажите в чем ошибка. Ideone уходит в рантайм ошибку
ddsacsdf.png108 Кб, 1401x1283
670 2659217
>>659029
Сколько вам уже раз говорено было: поставьте блядь шторм
671 2659218
>>659029

Запустил твой код тут https://replit.com/languages/php_cli

Идет куча сообщений вида

PHP Notice: Undefined variable: montlyPayment in /home/runner/tv90l05qsse/main.php on line 13

Ты неправильно написал название переменной и долг никогда не уменьшается и потому программа работает бесконечно.
672 2659317
>>659217
>>659218
Спасибо! Пойду ставить шторм
673 2660519
>>659217
Шторм с торрента норм? Там ток за 21 год есть

Или триал еще можно юзать? А то они же там че-то закрылись и туда-сюда
674 2660543
>>660519
Качай с офф сайта, потом ставь вот эту хуйню чтобы за лицухой он наружу не лез https://github.com/libin9iOak/ja-netfilter-all
Обновляться будет как официальный, это по сути даже не кряк.
675 2660563
>>660543
Как это юзать? Даже блять инструкцию не написали. Какое то нагромождение файлов.

>.vbs


>legacy windows environment


Теперь понятно почему такое говно. Небось на windows xp сидит.
676 2660572
>>660563
Я понимаю что сложно, инструкция то не для пхп треда писалась

>1. add -javaagent:/path/to/ja-netfilter.jar=jetbrains to your vmoptions


>/path/to/ja-netfilter.jar


>ja-netfilter.jar



Что такое vmoptions за тебя гуглить или нет?
677 2660815
>>660519
Зайди на степик, пройди какой нибудь погроммистский курс, там дадут лицуху на весь софт jetbrains на год.
678 2660937
>>660815
Уже нет. У самого такая лицензия в марте закончилась. Думал еще раз сделаю, а всё. И надо было не курс проходить, а решить 4 задачи в определенных курсах.
679 2660947
>>660937

>Думал еще раз сделаю, а всё.


Типо второй раз не даст активировать, а предложит купить?

>а решить 4 задачи в определенных курсах


Ну или так, я просто забыл уже, но помню, что сам получал такую 2 раза.
680 2660959
>>660947
Jetbrains больше не сотрудничают со Степиком.
image11 Кб, 519x95
681 2660968
>>660959
С чего ты взял? Я 4 месяца назад там ключ получал.
682 2660969
>>660968

>С чего ты взял?


Алё, бля >>660937

>У самого такая лицензия в марте закончилась



>Я 4 месяца назад там ключ получал


Всё, забудь. Вчера висело объявление на Степике, что типа всё. Сегодня уже не открывается даже.

мы прекращаем интеграцию Stepik с подключаемым модулем
https://blog.jetbrains.com/education/2023/03/30/jetbrains-academy-plugin-2023-3-is-available/

Разорвали сотрудничество со Степиком и всеми компаниями из РФ.
683 2661090
>>660969
Не нашел там про то, что ключи не будут выдавать, только про то, что курсы перенесут на свою площадку.
684 2661299
>>661090

>Не нашел там про то, что ключи


Всё, забудь про ключи через Степик.
https://support.stepik.org/hc/ru/articles/360010105180-Как-получить-лицензионный-ключ-от-JetBrains-
image17 Кб, 716x179
685 2661364
>>661299
Твоя ссылка не открылась, но я уже сам нашел. Видимо я в последний момент ключ получил.
686 2661473
>>661364

>Твоя ссылка не открылась



>>660969

>Вчера висело объявление на Степике, что типа всё. Сегодня уже не открывается даже.

687 2661737
>>661473
Так ты другую изначально скинул, я думал ты про неё.
688 2661787
>>661737

>Так ты другую изначально скинул


Потому что

>>660969

>Сегодня уже не открывается

Снимок экрана в 2023-04-04 01-27-07.png202 Кб, 1440x818
689 2662201
Как фиксить?
691 2662444
>>662201

mysql по умолчанию пытается подсоединиться к БД через unix-сокет по адресу /run/mysqld/... Докер не предоставляет такой сокет, потому ты должен коннектиться через TCP-порт 3306:

mysql -h 127.0.0.1
692 2662445
>>662201

Либо же ты должен настроить свой докер, чтобы /run/mysql/ был доступен внутри докера и mysqld мог бы создать в этой папке unix-сокет.
image.png18 Кб, 546x483
693 2672157
Как добавить сюда "открыть в phpstorm"?
694 2673342
>>672157

Попробуй открыть меню, зажимая shift (shift + правая кнопка). Там может появиться пункт "открыть с помощью..." и в нем можно выбрать phpstorm.

Или же поискать в phpstorm настройку: https://www.jetbrains.com/help/phpstorm/creating-and-registering-file-types.html#associate-files-with-ide
695 2685657
>>660969
А есть ли ещё варианты получить ключик, не даунгрейдясь и не через паленые ключи, которые быстро истекают?
Тред утонул или удален.
Это копия, сохраненная 15 мая 2023 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски