Этого треда уже нет.
Это копия, сохраненная 30 июля 2021 года.

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

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

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

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

Предыдущий тред был тут: >>1998470 (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 - это что-то вроде их хабра.

Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания 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? — Да, однозначно. Посмотри любую вакансию.
grammar.png55 Кб, 500x644
2 2062495
Код стоит писать аккуратно и оформлять, как принято. Потому, что другой человек, который будет смотреть твой код, вряд ли обрадуется, когда ему придется разбирать слипшиеся строчки, разбросанные в беспорядке скобки и написанные русскими словами названия переменных. Особенно плохо будет если это, например, код тестового задания, которое ты сделал, чтобы устроиться на работу. Если он будет неряшливым, это будет большой минус.

Для этого достаточно вставить код на http://beta.phpformatter.com/ и нажать «format». Робот оформит все как надо. Если ты используешь IDE, то там есть горячая клавиша для этого. Список клавиш для IDE: https://gist.github.com/codedokode/8759492

Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть рекомендации PSR-1 и PSR-12. Вот как надо оформлять код:

- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
- ставим тайп-хинты на аргументы функций, результат функций и поля классов

Вот ссылка на рекомендации PSR, где все это описано подробнее и даны примеры оформления:

PSR-1 (рус.): https://svyatoslav.biz/misc/psr_translation/#_PSR-1
PSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
3 2062664
>>062494 (OP)
А чего у вас в шапке так тухло с книгами?
Наверняка уже кучу годноты завезли под новые версии пыхи, а у вас только Зандстра 2009 года выпуска
4 2062674
>>2062481 →

>Но дальше ты заметишь, что ты делаешь в начале каждого файла одни и те же действия


+.
Из-за этого и появилась мысль сделать одним файлом.

>микрофреймворк вроде Slim.


Гляну.
5 2062731
6 2062801
Ну шо вы тут, живы?
Нид хелп
На вп натягиваю вёрстку бутстрепа, первое это результат, навбар вывожу через wp_nav_menu, всё отлично но вот проблема в дропдавн меню, я не знаю как задать классы для li и ul внутри дропдавна. Видел что на пхп можно заменять нужные аттрибуты и классы, но они вроде заменяются везде, а мне нужно что бы только в дропе были особенные. Кто может подсказать чем путним, как лучше сделать
7 2062832
Как сделать,чтобы после записи суммы в бд,через 7 дней списали часть от нее?
8 2062843
Я так и не понял,зачем нужен htmlspecialchars?
9 2062852
>>062832
Добавляешь колонку с датой записи.
Потом по крону апдейтишь как-то так
UPDATE hui SET amount = amount * 0.2, added = NULL WHERE added IS NOT NULL AND DATEDIFF(NOW(), added) >= 7;
10 2062853
>>062852

>Потом по крону апдейтишь как-то так


что?
это таймер?
11 2062854
>>062843
Чтобы можно было вывести <b> - жирный шрифт
а не - жирный шрифт
12 2062855
>>062853
Планировщик задач в линупсах.
13 2062865
>>062855
а на пыхе нету такого?
14 2062883
>>062865
Можно придумать какие-то анальные костыли, но нормально делается на кроне.
15 2062890
>>062865
Например в ларе есть свой шедалер, но это калька с крона и крон там используется как точка входа.
16 2062942
>>062890
те под виндой я не сделаю?
17 2063004
>>062942
Скорее всего насосешься хуев с виндой. Юзай докер хотя бы
18 2063024
>>063004
Виндузятникам не привыкать, фигли делов-то
19 2063027
>>063004
у меня домашняя винда,а не Профессиональная или Корпоративная с юбилейным обновлением (версия 1607) или более поздней версии.
20 2063135
>>062664
Книги хуйня, все на ютубе
21 2063140
>>063135
Зумерок, плиз
22 2063145
>>063027
Ну так накати проф или корп винду свежую, или бубунту в дуалбут
23 2063146
>>063135
Что там годного на ютубе?
Перечисляй
24 2063169
>>063146
Кнопки там ниче такие
25 2063181
>>063145
если поставлю в дуал буте-отвалиться инет
26 2063183
>>063181
тся
фикс
27 2063184
>>063140
>>063146
Ну смотрите, ввожу в поиске "php mysq(любой другой язык) простой сайт\проект" и получаю видосы по полчаса-час где сразу на практике могу сделать что-то и заебенить на гитхаб, и он не пустой и рука набита, плюс экспириенс как применить знания на практике. В книжках тебе сто страниц будут просто ебать мозг копипастой.
28 2063190
>>063181
Я бы на твоем месте не вкатывался в айти. А то хуй отвалится
29 2063192
>>063184

>ввожу в поиске "php mysq(любой другой язык) простой сайт\проект"


Первое видео - ускоренное видео как чел пишет код с комментариями уровня: вот тут делаем это, а там вот то. Почему, зачем, что делаем и куда двигаемся - не понять
30 2063215
>>063184
https://www.youtube.com/watch?v=3UtB4QS6EAg
Долбоеб пишет спагетти с инъекциями.
Заебись годнота.
31 2063258
>>063184

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


>>063215

>Делаем дырявую форму час


>Выкладываем на гитхаб


>"Мам, я програмист! Ну скажи им"

32 2063354
Воркер, за которым следит супервайзор, нужно руками запускать или он при загрузке ОС сам запустится?
33 2063587
>>062843

В HTML некоторые символы имеют специальное значение. Например, символы < и > используются для открытия/закрытия тегов, символы " и ' используются в атрибутах, а символ & используется для кодирования символов, которых нет на клавиатуре, вроде & copy; (символ ©).

Соответственно, если ты выведешь echo "<b>", то это будет воспринято браузером как тег b.

Но что, если ты хочешь просто вывести текст, как есть, чтобы спецсимвол вроде < не начинал бы новый тег, а просто выводился бы как угловая скобка? Для этого тебе надо в тексте заменить спецсимволы на HTML-сущности:

< - на & lt;

> - на & gt;


& - на & amp;
" и ' на & quot; и & #039;

Функция htmlspecialchars этим и занимается.

Всегда, когда ты выводишь какой-то текст в HTML-документ, надо применять эту функцию. Если этого не делать, то можно получить уязвимость XSS, как она работает, описано тут: https://github.com/codedokode/pasta/blob/master/security/xss.md

Вообще, это относится не только к HTML. Если ты подставляешь текст в ссылку, ты должен экранировать спецсимволы (но не с помощью htmlspecialchars, а с помощью urlencode), если ты подставляешь переменную в SQL-запрос, ты тоже должен экранировать спецсимволы и так далее.
34 2063599
>>062942

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

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

>>063004

Докер это корявое решение. В винде есть свой планировщик задач.
35 2063606
>>063184

Если в видео объясняется теория, а не просто показывается как писать код, то конечно, имеет смысл его посмотреть.

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

>>063354

Должен запуститься сам.
36 2063610
>>063135
PHP за час
от-прафессианала

>>063184
На ютубе оче много ничего не умеющих балаболов, к тому же через чтение инфа быстрее воспринимается - где там очередной прафессионал будет жопу тянуть 15 минут, ты за это время уже гугл прошерстишь и прочитаешь что надо.
37 2063625
где в РУ инете есть самый активный форум по пхп?
38 2063636
Для каких целей вы использовали кастомные middleware?
39 2063640
>>063610
Двачую, книги и документация наше всё
40 2063641
>>063215
А есть адекватный аналог?
41 2063643
По MVC,паттернам посоветуйте пожалуйста годную книгу.
42 2063961
>>063643
Head first design patterns - книга старая, но очень годная и написанная очень простым языком. Примеры там на джаве, но это не мешает. Классика жанра "Приемы объектно-ориентированного проектирования" от банды четырех. Ну и Зандстра "Объекты, шаблоны и методики программирования"

Еще можешь читануть https://designpatternsphp.readthedocs.io/en/latest/README.html
43 2064011
>>063961

>Ну и Зандстра "Объекты, шаблоны и методики программирования"


Бля пыхыписты, у вас за 10 лет реально что ли другой книги не вышло? Какого хрена вы советуете всегда один и тот же протухший антиквариат?
мимо
photo2020-11-2420-27-09.jpg30 Кб, 503x514
44 2064035
45 2064090
>>062494 (OP)
Насколько вообще реально за год выучить php и вкатиться джуниором? А то я слушаю и все вокруг говорят о том что джуниоров даже за еду работать уже не берут так как программистов такая куча что без опыта работы они нахуй не нужны никому стали.
46 2064106
>>064011
Там же дохуя обновлений вышло, буквально недавно видел под 8 спиздили переиздание.
47 2064110
>>064090
Как повезет, я пришел вообще нихуя не зная, написав разве что кривой калькулятор, который мне итт обосрали. На собесе честно сказал что хочу и готов учиться и внезапно прокатило. А первое же задание мне дали писать на луа, а не пыхе, тут то я и охуел
48 2064128
>>064110
Сейчас до сих пор там же работаешь?
49 2064150
>>064128
Да, пилю простенькие серваки для мобильных казуалок и подумываю наконец свалить куда-нибудь, но я тот еще аутист, так что дико стремаюсь собесов.
50 2064166
>>063599

>Докер это корявое решение. В винде есть свой планировщик задач.


Почему?
Какова вероятность, что php проект будет на продакшене на windows сервере крутиться?
Имеет же смысл осваивать то, что встретишь на работе
51 2064167
>>063625
Все в телегу ушли
52 2064170
>>064090

>Насколько вообще реально за год выучить php и вкатиться джуниором?


Год даже много. Бери пол года
53 2064198
>>064011
И хули? Head first design patterns вообще 2004 года, но для новичков ничего лучше до сих пор нет
54 2064204
>>064090
Если по 6-8 часов хуярить можно и за месяца три спокойно, но обычно ещё фреймворки и бд нужно знать
55 2064222
>>064150
Вакансии на hh искал?
56 2064259
>>064204
Так вся суть пыхи в бд и фреймворках. Голая пыха мало кому нужна.
И что там можно 3 месяца в голой пыхе фултайм херачить?
57 2064299
>>064259
С нуля учебник ОПа, а потом ООП, разбирать шаблоны ООП. Ну, и помимо этого основы хтмл, цсс и жабаскрипта.
58 2064303
>>064222
Вакансии смотрю, да.
59 2064541
>>064204
У меня нет столько времени, работа сама себя не работает к сожалению, так что в будние дни максимум часа 2-3 смогу выделять в лучшем случае, поэтому и спросил про год.
60 2064683
>>064299

>жабаскрипта



Кстати, а на хуя пыхеру фронтенд язык знать?
61 2064684
>>064541
А, ну тогда да, год понадобится, но это все равно маловато да и усталость после работы влияет
62 2064731
>>064683
Раньше все веб давалоперы были фулстеки, потом всё дохуя усложнилось и разделились на бек и фронт, но с пхп некоторая инерция осталась.
63 2064893
Сап, пхпаны, что нужно помимо вордпресса для заработка на лапшу быстрого приготовления?
64 2064954
>>064893
Ну можешь попробовать еще опенкарт посмотреть и битрикс. Правда с этой тройкой ты только на лапшу и сможешь расчитывать.
65 2065070
>>064954
Регулярно вижу вакансии на битрикс с нормальными зарплатами. Если порог брезгливости не очень высокий, то можно и там зарабатывать
66 2065134
>>065070
Битрикс так то довольно популярен так что не так уж мало людей на нем работает.
67 2065315
ДОБРОЕ УТРО! ПОМОГИТЕ, ОТВЕТИТЬ НА МОИ ВОПРОСЫ! Я ВКАТЫВАЮСЬ В ВЁРСТКУ, НО МНЕ СКАЗАЛИ, ЧТО В 2К21 ГОДУ БОЛЬШЕ ВЕРСТАЛЬЩИКОВ НЕ СУЩЕСТВУЕТ, СКАЗАЛИ УЧИТЬ РНР, ПОТОМУ ЧТО ДАЖЕ ВОРДПРЕСС ИМЕЕТ REST API И МОЖЕТ СЛУЖИТЬ КАК HEADLESS CMS. ПОЭТОМУ Я ОЗНАКОМИЛСЯ С САМЫМИ БАЗОВЫМИ ОСНОВАМИ РЕАКТА

1) Если я хочу быть верстальщиком, фронт-жабаскриптером, реакт-макакеном. То что мне нужно знать об аутентификации, сессиях и jwt токенах? Процесс аутентификации полностью лежит на плечах бэкенда или мне как фронт-жабоскриптеру что-то надо ajax,fetch-запросами куда-то посылать для аутентификации?

Я читал на хабре про jwt-токенты, РНР сессии, но нихуя не понял

2) Что мне нужно знать об web-сокетах? Если я как верстак, фронт-жабаскриптер должен буду делать чат. То что мне нужно знать об web-сокетах?
Я тоже про них читал на learnjs, но нихуя не понял.

ОЧЕНЬ СИЛЬНО ПРОШУ ПРОЩЕНИЯ ЗА СВОЁ СУЩЕСТВОВАНИЕ! ПРИНОШУ ГЛУБОЧАЙШИЕ ИЗВИНЕНИЯ!
68 2065327
>>065070
Хз как вкатиться в этот ваш битрикс. Я пробовал его установить и потестить, так там ведь просто тонны лапшекода, в котором по идее надо хорошо разбираться и решать возникающие проблемы.
Книг по нему нет, туториалов нет, документация на сайте полное гавно и т.д.
Короче вариант не для новичков, имхо
69 2065329
>>064090

>джуниоров даже за еду работать уже не берут


Вообще да. Только куча не программистов, а таких вот вкатывальщиков. Требования к джунам выкатывают в зависимости от запрлаты - у одних будешь за 30к Попенкарт пердолить целыми днями, другие попросят фреймворк, докер, юнит-тесты и дадут со старта 80к.
Не слушай местных зазывал - пиздят либо ошибка выжившего.
70 2065335
>>065315
Блядь, анон, ты ёбнутый совсем местных двачеров слушать? Они тебе такого насоветуют - охуеешь. Какие фреймворки, какие, в жопу, вебсокеты?
Любой веб начинается с вёрстки - что бекенд, что фронтенд. Фронтенду вообще особенно хорошо вёрстку знать надо.
Выглядит это так: статичная вёрстка + методы + инструменты, потом чистый жаваскрипт и немного динамики, потом уже фреймворки и тд. Куда ты полез вообще, тебя тупо затроллели, либо борщехлебы хейни понаписали из манямирка?
71 2065345
>>065335
Суть в том, что поковырял вёрстку. Немножко жабаскрипт поковырял.

Но дальше я уже ничего не понимаю. Поэтому родились вопросы:
1) Что я должен знать как верстальщик в процесс аутентификации? Я должен что-то отправлять ajax-запросами? Или я ничего не должен и всё бэкенд сам сделает.

2) Что я должен знать как верстальщик, если придется делать чат. Что я должен делать с веб-сокетами?
72 2065353
>>065345

>поковырял вёрстку


>жабаскрипт поковырял


>дальше я уже ничего не понимаю


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

>Что я должен знать как верстальщик в процесс аутентификации?


>если придется делать чат


Очень странные вопросы. Если тебе это всё нужно только для чата, то проще будет нанять кого-то или купить готовый.
73 2065424
>>065353

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


Это уже в бэке ковыряться надо. Я пытался, на w3schools основы РНР прошёл и SQL. Читал Мэтта Зандстру про РНР ООП, но дальше главы про абстрактные фабрики не осилил. Потом смотрел вводные видео про next.js. Читал на хабре джве статьи про jwt токены. Но нихуя не понял.

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

>Очень странные вопросы.


|Они родились из того, что я читал в learnjs тему про веб-сокеты. Я всё подряд читаю из learnjs. И я не понял, что это за хуйня, и что я должен из этой темы знать как верстальщик.
74 2065437
>>065424

>меня высмеяли, что я хватаюсь за всё подряд


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

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


Ничего. Верстальщик верстает статические страницы, его динамика почти не касается. Фронтенд разработчик это верстальщик + динамика на js. В вебсокеты не лезь пока - тебе ещё рано.
75 2065444
>>065424

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


Тебе вообще туда лезть не нужно, раз хочешь верстку. Вообще всё, что касается бека не трогай
76 2065480
>>065335
двачую адеквата
77 2065818
>>065327
Это вариант для говноедов
78 2065824
Ребята, а реально ли релокейтнуться в Восточную Европу(Литву например) с пхп?
79 2065828
>>064090
За месяц синтаксис изучаешь, пробуешь сделать что-то связанное базой данных и идешь искать работу. Жопаскрипт освоишь уже на самой работе, хотя, перед тем как устроится, желательно уметь им пользоваться в плане написания функций и вывода ajax запросов. Это не сложно, учится буквально за вечер.
Я когда пхпшником устроился, то мне вообще дали говнокод ковырять на asp classic, смачно подохуел тогда.
80 2065830
>>065828
Смотришь PHP за час От профессионала и идёшь раскидывать заявки на вакансии - ты ж теперь у мамы синьор. Сам язык уже на работе подтянешь.
81 2065832
>>065830
Не утрируй. Я через месяц учебы работу на пхп нашел, говорю исключительно о своем опыте. Работа правда гавно, за 25к всего.
82 2065834
>>065832
Так тебя обычным эникеем взяли фактически, но заставили код писать. Причём тут пхп?
83 2065835
>>065834
Ну так сначала говно делал, постепенно стали давать проекты на yii допиливать. Чем не работа?
84 2065837
>>065835

>проекты на yii допиливать


>25к



>Чем не работа?


На стройке больше заработаешь.
85 2065839
>>065837
Вопрос был о том, КАК НАЙТИ РАБОТУ, а не о заработке. Я на него ответил. К чему доеб, не понимаю?
86 2065850
p
87 2065926
>>065315

> НО МНЕ СКАЗАЛИ, ЧТО В 2К21 ГОДУ БОЛЬШЕ ВЕРСТАЛЬЩИКОВ НЕ СУЩЕСТВУЕТ



Это не совсем так. Речь о том, что нет спроса на верстальщиков, умеющих делать только HTML-верстку с CSS без JS. Обычно от верстальщика ожидают, что он реализует и JS-код. При этом JS-код может быть в форме простых скриптов на jQuery (при нажатии на кнопку, показать попап, отправить аякс-запрос), так и в форме приложения на фреймворке вроде React, Vue. То есть предпочтительнее быть не верстальщиком, а полноценным фронтенд-специалистом.

> То что мне нужно знать об аутентификации, сессиях и jwt токенах?



Тебе надо тщательно изучить, как работают куки. Это твоя зона ответственности.

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

Отличие JWT-токена от id сессии в том, что для проверки сессии бекенд должен искать (на диске, в редисе, в БД) идентификатор сессии и проверять его правильность. Если у тебя все хранится на одном сервере - проблем нет. Но если у тебя хайлоад и куча серверов, то тебе надо выделить какое-то центральное хранилище для сессий и на него будет сыпаться куча запросов от бекендов.

JWT-токен же содержит цифровую подпись и для его проверки бекенду не надо отправлять никаких запросов в хранилище, а достаточно проверить валидность подписи в токене. Теоретически, JWT-токен можно передавать в куках так же, как и идентификатор сессии, и тогда для фронтенда вообще ничего не меняется. Но часто используют такой паттерн, когда фронтенд шлет логин/пароль на определенный URL, получает JWT-токен и далее должен слать его вместе с каждым запросом явно (а также, в случае получения ответа, что токен устарел, перенаправлять пользователя на форму логина).

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

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

> Что мне нужно знать об web-сокетах?



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

> должен буду делать чат.



Ты должен быть не написателем чатов, у универсальным специалистом. Веб-сокеты обычно используются не для чатов, а для синхронизации состояния клиента с сервером (один менеджер взял в работу заказ, и у всех других менеджеров этот заказ исчез с экрана).
87 2065926
>>065315

> НО МНЕ СКАЗАЛИ, ЧТО В 2К21 ГОДУ БОЛЬШЕ ВЕРСТАЛЬЩИКОВ НЕ СУЩЕСТВУЕТ



Это не совсем так. Речь о том, что нет спроса на верстальщиков, умеющих делать только HTML-верстку с CSS без JS. Обычно от верстальщика ожидают, что он реализует и JS-код. При этом JS-код может быть в форме простых скриптов на jQuery (при нажатии на кнопку, показать попап, отправить аякс-запрос), так и в форме приложения на фреймворке вроде React, Vue. То есть предпочтительнее быть не верстальщиком, а полноценным фронтенд-специалистом.

> То что мне нужно знать об аутентификации, сессиях и jwt токенах?



Тебе надо тщательно изучить, как работают куки. Это твоя зона ответственности.

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

Отличие JWT-токена от id сессии в том, что для проверки сессии бекенд должен искать (на диске, в редисе, в БД) идентификатор сессии и проверять его правильность. Если у тебя все хранится на одном сервере - проблем нет. Но если у тебя хайлоад и куча серверов, то тебе надо выделить какое-то центральное хранилище для сессий и на него будет сыпаться куча запросов от бекендов.

JWT-токен же содержит цифровую подпись и для его проверки бекенду не надо отправлять никаких запросов в хранилище, а достаточно проверить валидность подписи в токене. Теоретически, JWT-токен можно передавать в куках так же, как и идентификатор сессии, и тогда для фронтенда вообще ничего не меняется. Но часто используют такой паттерн, когда фронтенд шлет логин/пароль на определенный URL, получает JWT-токен и далее должен слать его вместе с каждым запросом явно (а также, в случае получения ответа, что токен устарел, перенаправлять пользователя на форму логина).

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

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

> Что мне нужно знать об web-сокетах?



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

> должен буду делать чат.



Ты должен быть не написателем чатов, у универсальным специалистом. Веб-сокеты обычно используются не для чатов, а для синхронизации состояния клиента с сервером (один менеджер взял в работу заказ, и у всех других менеджеров этот заказ исчез с экрана).
88 2065933
>>065837

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

С другой стороны, в строительстве крутятся огромные деньги. Посмотрите цены на квадратный метр. Обычному программисту такие деньги, конечно, никто не даст, а строительным компаниям люди из последних средств платят. Очень выгодный бизнес.
89 2065934
>>065424

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



Ты должен знать принцип работы, как отправлять и получать сообщения по веб-сокетам, как сериализовать данные (например: тебе надо отправить объект с кучей полей), знать, какие бывают прикладные протоколы поверх WS вроде Autobahn (хотя, может он уже устарел?).
90 2065935
>>065327

Исходный код лучшая документация.
91 2065941
>>063636

Я не использовал, но обычно middleware используют там, где надо что-то сделать с HTTP-запросом или ответом. Например: зашифровать куки, залоггировать запрос, сжать HTTP-ответ, добавить какие-то HTTP-заголовки.

Что-то более высокоуровневое там делать неудобно. Например, проверку прав доступа сделать там тяжело, хотя некоторые и пишут, что для этого можно использовать middleware.
92 2065946
>>063961

> https://designpatternsphp.readthedocs.io



Это не очень удачная книга. Она объясняет, как реализовать паттерн, но не объясняет, зачем он нужен. Также, там дурацкие примеры, например тут: https://designpatternsphp.readthedocs.io/en/latest/Creational/Builder/README.html

Тут в примере используются классы TruckBuilder и CarBuilder. В каком приложении тебе понадобится создавать машины с помощью билдера?

Более того, там приведен сложный код, используются интерфейсы, наследование, но нет никаких поясенений, зачем это нужно.
93 2065959
>>065824
Работаю на фирму, которая релокейтнула пачку пыхеров в Чехию в Прагу. Т.е. большая часть команды разрабов работает из Праги. Кто-то собирается переезжать, как с ковидлом поуляжется
94 2065961
>>065835
Тоже начинал с yii до сих пор на нем, блядь, ебаное легаси, мать его. Так что относительно неплохой старт. Главное - срыгнуть на симфу
95 2065969
>>064166

Автор вопроса спрашивал, как ему настроить выполнение заданий под Windows, значит его интересует именно эта ОС.
97 2066069
>>065824
Реально. Я из Беларуси и мне сейчас компания предлагает помощь с релокацией в Польшу, Литву или Украину.
98 2066070
>>065959
>>066069

Спасибо за ответ ребята, а то я что-то приуныл, и уже подумывал стэк сменить.
99 2066086
>>066044
Тому що нужно проверять существование ключа subject в массиве прежде чем обращаться к нему. Регулярка у тебя тоже кривая Спасибо, вернул мне мой 2005-й
100 2066104
>>065926

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


Очередной посылатель учить левую хрень.
101 2066105
>>066086

>вернул мне мой 2005-й



А что не так, так уже не пишут?
102 2066106
>>066105
В процессе учебы писать так абсолютно нормально, но не более того. Хотя возможно, что в каких-нибудь конторах, клепающих лендинги, обработка форм сделана именно так.
103 2066111
>>066106
А как по стильному современному будет?
104 2066126
>>066106
А как правильно? С аяксом? Или какой-то структурой?
105 2066129
>>066069
Компания не EPAM случайно?
106 2066219
>>066104

Сам ты левая хрень. Сокеты Беркли надо понимать, так как веб-сокеты на них основаны.

>>066106

Он написал код просто, чтобы протестировать регулярное выражение. Ты предлагаешь (угробив кучу времени) сделать полноценное приложение на Симфони ради проверки регулярки?
107 2066224
>>066219
Тогда пиздуй учить диодно-транзисторную логику, а еще лучше начинай с квантовой механики и физики полупроводников, ведь веб-сокеты на этом основаны. Пока не выучишь не возвращайся в IT.
108 2066274
>>066219

>Сокеты Беркли надо понимать


Тыскозал? Как это поможет накатить библиотеку и сделать по документации? Нахуй надо ковырять левые доки по другому языку, ты ебан какой-то.
109 2066281
>>066219

>Сокеты Беркли надо понимать


Их вендору надо понимать, а не имплементатору. Сразу нуба в разработке видно. Небось ещё и на ВУЗы дрочишь - типа без вышки и знания тысяч алгоритмов только не пизди, что ты их все учил не бывает программистов.
110 2066299
Есть тут аноны, которые работают с Битрикс?
Расскажите плиз как вкатывались, что читали/смотрели?
111 2066315
>>066111
>>066126

По стильному-современному это будет экшен контроллера в который будет инжектиться либо реквест, из которого ты руками (не надо так) или с помощью десериализации достанешь нужные тебе данные, скормишь их валидатору и потом будешь с ними работать, либо готовая провалидированная дтошка (в ларке это из коробки, в симфони нужно запилить аргумент ресолвер) опять таки с нужными тебе данными
index.jpg307 Кб, 1224x826
112 2066387
Напомните почему так сложно установить пыху на винду и заставить работать с фреймворками? Это говно даже собственный конф файл не может поcтавить: php.ini
113 2066389
>>066387
Ну если тебе распаковать зип и добавить в path сложна, то хуй знает.
15989214252560s.jpg6 Кб, 270x217
114 2066404
>>066389

>Ну если тебе распаковать зип и добавить в path сложна, то хуй знает.

115 2066459
>>066387
А зачем страдать, если можно поставить линукс в дуалбут? Все равно на работе придется иметь с ним дело. Сами себе придумывают сложности на ровном месте, а потом героически с ними сражаются
116 2066469
>>066299
Читал доки symfony/laravel, смотрел AFUP PHP. Пошел на собес с требованиями "symfony, laravel, wordpress". На тех. собесе мне сказали: "Ты молодец, конечно, у нас проекты для тебя есть, но пока что завал с битриксом, так что подсоби". Ну я согласился: первый собес, хули. Прочитал доки и прошел тесты за неделю, поработал месяц и убежал.
117 2066471
symfony-в чем ее фишка?
118 2066504
>>066471
Symfony - это ОН
Laravel - ОНА

Не путай!
119 2066521
>>066504
laravelka
120 2066548
>>066469
Сколько заплатили хоть за такую вилкочистию?
121 2066594
>>066471
В компонентности, например
122 2066596
>>066594
и в чем отличие от монолитной лары?
123 2066597
>>066469

>symfony, laravel, wordpress


Ничего не насторожило?
124 2066598
>>066596
В том, что можно взять только то, что тебе необходимо. К примеру только контейнер зависимостей и роутер. А в ларке даже педрильный блейд гвоздями прибит по крайней мере раньше было так
125 2066599
>>066598
те я могу взять только роутинг,а дальше сам велосипедить?
126 2066610
>>066599
Еще доктрина, если ты адепт предметного подхода в архитектуре, может ебенейшую по вложенности структуру из сущностей и вэлью обжектов подхватить без изменений. Причем тебе твою бизнес логику никак не придется переделывать под фреймворк, а элоквент так не может и заставит тебя писать кучу борлеплейта по преобразованию структур бизнес логики в модели и наоборот, либо заставит прибивать БЛ к ларавелу гвоздями.
127 2066611
>>066469

>symfony, laravel, wordpress


Ну ты нашёл куда сунуться. Мог бы сразу на фрилансе к очередному дебилу с "нужон розробочтик на Тилда, Вопркперс, Ларавел, Опенкарт за 20к\мес" пойти в услужение.

>На тех. собесе мне сказали: "Ты молодец, конечно, у нас проекты для тебя есть, но пока что завал с битриксом, так что подсоби"


Ожидаемо.
128 2066614
>>066599
Для этого проще микрофреймворк взять и самому накидать туда что нужно.
129 2066992
>>066614
А чем симфони не микрофреймворк?
16164188827072.jpg22 Кб, 720x720
130 2067067
>>062494 (OP)
Дошёл до задачи с палиндромом в учебнике, вроде решил её, но у меня стойкое желание что я наговнокодил, вот сам код https://ideone.com/DGq6ON

Я для отсчета символов с конца строки создал лишнюю переменную и у меня стойкое ощущение что это можно было сделать как-то по другому, но я не понимаю как. Я находил в интернете решения этой задачи через функции, но я до них ещё не добрался поэтому меня интересует более оптимальное решение из тех знаний что предоставил учебник до этого момента.
131 2067069
>>067067
Желания => ощущениебыстрофикс*
132 2067078
>>067067
-($i+1) вместо x.
133 2067105
>>067078
Спасибо за подсказку, так и знал что нагавнокодил.
134 2067636
>>066610
использование доктрины не делает твой код "предметным"
135 2067774
>>066299

>Есть тут аноны, которые работают с Битрикс?


Есть. Потрогал говно, блеванул, больше с ним не работаю
136 2067777
>>067067
Тяжело наговнокодить в функции на 5 строк. Работает и ладно
137 2067841
>>067636
Не шизи, там такого не написано.
138 2068110
>>066129
З якой мэтай цікавішся?
139 2068123
>>068119 (Del)
Шизик, тебе уже отвечали, что ты обращаешься к несуществующему ключу массива.
140 2068607
Сап, двач. Вопрос следующий. Я программирую уже год и 5 месяцев на языке программирования "пи эйч пи".

Короче, первая моя работа была около года в компании работающей на CMS и делающей магазинчики ебучие. Это было больно, но я работал и учился. Потом перешел в другое место и начал делать проект на Yii. Там продуктовая компания, продукт всего один. Стартапщики ебучие.

Короче, вопрос следующий: что помимо работы мне стоит делать чтобы вкачиваться в плане скилла.

Что я научился за эти полтора года:
- Ну собсна ПХП. 7ой ясен хуй. С пацанским ООП.
- Базы данных. Запросы, джойны, репликация, нормальная форма. Вообще на машке работаем, но я и на монге успел.
- Редиска и мемкэшд. Для, что характерно, кэша.
- Слегка JS. У нас в админке интерфейс простой, хуйня на бутстрапе с жиквири. Модалочки хуялочки научился делать, всякие говногулпы.
- Докер с компоузом, куда же без него.

Так вот. Что мне делать КАЖДЫЙ ДЕНЬ помимо работы чтобы дальше расти в скилле? Сейчас начал читать книжку по Yii для более глубокого понимания. Так же начал писать мелкий фронтенд на реакте чтоб научиться и этому тоже. Че ещё посоветуете?
141 2068619
>>068607

>Что мне делать КАЖДЫЙ ДЕНЬ помимо работы чтобы дальше расти в скилле?


Бля, да много чего ещё можно делать!

1) Учить какие бывают архитектуры. Событийно-ориентированные, микроядро, микросервисы, многослойная, space-based и т.д.

2) Учить облачные сервисы - AWS, Azure, Google Cloud. Проходить воркшопы https://awsworkshop.io/ Смотреть Well Architected Framework https://aws.amazon.com/ru/architecture/well-architected/

3) Учить инструменты деплоя/автоматизации архитектуры - Hashicorp, Pulumi, Chef, Puppet, Ansible, Salt и т.д.

4) Учить стандарты PHP - https://www.php-fig.org/ PHP CodeSniffer, и т.д.

5) Учить CI/CD - тот же Сicle CI.

6) Учить Github/Github экшены.

7) Учить как отслеживать приложения - Lumigo, Dynatrace, Datadog, и проч.

8) Проджект менеджмент - ту же Asana, какие стили бывают agile, lean, scrum, kanban и т.д.

Короче учить можно до бесконечности.
142 2068868
>>068619
Какой смысл это все учить без применения на практике?
143 2068937
>>068619
1. Согласен, общее понимание неплохо бы иметь.
2. Особо не задрачивать, просто понимать что в принципе на рынке есть. В каждой галере всё по своему.
3. Нахуя? Во-первых это дело ДевОпсов, во-вторых, максимум нужно примерно понимать пару-тройку команд для деплоя.
4. Согласен, было бы неплохо знать.
5. Нахуя? Опять же, это работа ДевОпса, разве что общий принцип как работает в твоей компании CI/CD.
6. Ага, блядь, и пайплайны битбакета. Что там учить то? Просто конфигурируешь настройки под каждый проект (по ридми и мануалам), что конкретно ты учить там собрался-то?
7. Нахуя ты опять советуешь учить не технологии/подходы, а какие-то частные реализации? Опять же, это работа ДевОпса. Твоя работа как программиста максимум помочь в интеграции, всё. Тебе не нужно учить все сервисы которые тот или иной продукт предлагает.
8. Угу, ещё "выучи Жиру" забыл добавить.

Короче, советы не для программиста, а для девопс/кодера/продакт менеджера/архитектора/продакт оунэра комбайна. Тот, кто всё это знает, по сути не знает ничего, нахватался по верхам.
Я бы челу предложил копать глубже, а не в ширь. Посмотреть паттерны, поразбираться как устроены популярные фреймворки, попробовать написать экстеншены к ним, попробовать покоммитить в опен сорс проекты.
144 2068961
>>068937

>3, 5, 7


В мелких фирмах/командах сеньор бекендер может быть девопсом на пол ставочки. Там как раз хватает знаний по верхам, т.к. нужно поднять дефолтный си/сд
145 2069238
>>068607

>Что мне делать КАЖДЫЙ ДЕНЬ помимо работы чтобы дальше расти в скилле?


Как минимум начать использовать единственный нормальный фреймворк на похапе
146 2069294
>>069238
Двачую, сам хочу на Битрикс пересесть
147 2069301
>>069294
Он имел в виду Вордпресс
15293260325950.jpg117 Кб, 645x410
148 2069327
>>069294
>>069301
Макаров, ты что ли?
149 2069352
>>068110
Интересно, для себя
150 2069494
всем привет.
до уровня джуна (хорошие знания php + база laravel/yii2 + mysql) за сколько подтягивается?
151 2069496
>>069327
Я Макаров, но, скорее всего, не тот, о котором ты написал
152 2069501
>>069494
Оптимально за пол года фултайм (40ч в неделю) можно выйти с нуля на джуна и пойти штурмовать собесы.
Только побольше кода пиши на голой пыхе и с фреймворками.
Результатом учебы должен быть какой-нибудь пет проект на фреймворке с основными фичами (пара крудов, авторизация, хождение в сторонние апи)
153 2069506
Как через PDO получить количество затронутых строк? Надо проверить есть ли уже в дб вводимое значение. То что пробовал нихуя не работает(((
154 2069512
>>069506
rowCount, это rows affected для запроса.
А если просто количество, то через select count, очевидно же.
155 2069515
>>069501
ну знания пыхи на базе есть в связке с бд. могу круд приложение написать. я переживаю по большей части за то, что я ебланил всё своё время. как вытекающие: 5 записей в тк (начал с веб-разработчика, потом пошёл на завод, на склад, в вуз программистом, потом блять логистом поработал, причём только в двух местах работал 5 и 12 месяцев. в остальных по две недели). это уже пиздец тотальный? даже если ахуенные знания будут, мне кажется не возбмут чела со склада блять.

мне 25 только стукнет
156 2069551
>>069496
Да ладно, Санек, не шифруйся.
157 2069559
>>068607
Symfony
158 2069695
>>069551
>>069496
>>069327
А чё за приколы? Так-то если без шуток СамДарк крутой программист и дизайн архитектор. дрочу на него
159 2069748
ПОЧЕМУ ЭТО ВЫДАЕТ 23?
<?php
$s = 2;
switch ($s){
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
break;
default:
echo "default";

}
160 2069752
>>069748
Вопрос отпал.
Но нахуя?
161 2069757
>>069748
Это пиздануто из си, а там вроде было сделано, чтобы несколько кейсов хуярить, т.е.
case 1:
case 2:
hui
break;

case3:
162 2069805
>>069515
Что мешает завести новую трудовую если тебя это так беспокоит? Да и вообще если ты по скиллам и знаниям устроишь работадателя то не похуй ли ему где ты там раньше работал?
163 2069818
>>069494
Смотря с какого уровня. Если не умеешь кодить вообще - год с нуля. Если умеешь кодить на питоне задачи, быстрее.

>>069748
Это тебя зумера троллят чувак поопытнее? Жоска

> попробовать покоммитить в опен сорс проекты.



Кста, я хочу покоммитить куда-то. Но даже в душе не ебу как начать. Мануал есть?

>>069515

Хуйня все это. У нас люди уходили на контракт на 3 года а потом возвращались и снова в код. И нихуя. Некоторые выкатывались из айти и вкатывались обратно. Одному мне збс
164 2069867
>>069695
Вот тройку зарелизит лет через 15, тогда и посмотрим.
165 2069882
>>069818

> Кста, я хочу покоммитить куда-то.



Не надо "коммитить" куда-то. Обычно люди контрибьютят в те проекты, которыми они пользуются или в которых они сами заинтересованы.

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

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

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

Или: есть какая-то полезная библиотека, но она платная и с жесткими условиями лицензирования. А нужна. Ты пишешь открытый аналог.

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

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

А как именно контрибьютить: клонируешь проект, делаешь правки, проверяешь, если в проекте используются тесты, то покрываешь свои правки тестами, оформляешь свой код в соответствие с требованиями, делаешь пулл-реквест.
166 2070045
Симфоводы, почему у класса Request нет интерфейса и соответственно половина фреймворка завязана на эту конкретную реализацию? Что делать, если я хочу написать обертку над реквестом с парой нужных мне методов? Уже не нужно на самом деле, но просто любопытно
167 2070119
>>070045
Имхо, скорее всего он был написан еще при царе горохе.
Там один класс на 2к строк, хз, какой ты интерфейс туда хочешь
168 2070319
>>069515
Лол блять, я с пустой трудовой в 34 ватываюсь
169 2070377
>>070319
и что, долго вкатываешься?
170 2070404
>>070319
Лол, я в свои 29 лет уже понимаю, что поезд ушел, и развиваться реально только в своей, уже надоевшей, специальности, а ты в 34 такой глупый.
171 2070419
>>070119

> хз, какой ты интерфейс туда хочешь


Да хоть marker interface как в жабе
image.png338 Кб, 1920x1080
172 2070427
173 2070429
>>070427
Лет через 20 будет полно дидов.
174 2070430
>>070404

>уже понимаю, что поезд ушел


Ну так все правильно, ты уже выгорел, потерял интерес. Нефиг было с 14 лет кодить.
Уходи на пенсию и дай место молодым, 30+ летним, которые про кодинг узнали год назад.
175 2070436
>>070429
Или не будет. В любом случае, сейчас 34 - слишком великовозраст для реального шанса на вкат.
176 2070440
>>070436
Чел.. на мнение двачеродаунов по поводу возраста уже давно всем похуй, просто смирись с этим.
>>069515
Да, ты уже слишком старый. Устраивайся продавцом в пятерочку и не мешай адекватам вкатываться.
177 2070442
178 2070445
>>070442
Ну ты там другие графики посмотрел бы тоже.

>White or of European descent 70.8%


>Black or of African descent 3.6%


Ох, фсееее, бида-печаль
Если ты темнокожий, то у тебя нет шансов на вкат.
179 2070454
>>070445
И что не так?
И при чем другие графики, если речь шла о возрасте
180 2070458
>>070045

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



Для этого не нужен интерфейс (зачем?), ты просто можешь унаследовать свой класс от Request. Хотя мне не нравится такая идея, так как это неожиданно, что вместо стандартного реквеста используется что-то нестандартное. Это плохая идея расширять какие-то стандартные классы, как мне кажется.

Или, как вариант, просто делаешь класс RequestUtils и в нем статические методы для работы с реквестом. Здесь нет никаких проблем с неочевидностью кода.

А так, интерфейс для реквестов есть - PSR-7. Просто он придуман позже, чем реквест из симфони.
181 2070462
>>070454

>И при чем другие графики


Ну если ты не в состоянии это понять, то на твое место точно очень скоро вкатится успешный дедок 30+, хех.
182 2070463
>>070436
Ну а хули ещё делать? Я все ещё девственник, все свободное время провожу за компом, тут либо самовыпил либо вкат с перспективой покупки японской секс-куклы
183 2070464
>>070462
Ну так объясни, что тебе дают другие графики? Пока что выглядит как перевод стрелок с не приятной темы возраста.

>>070463
Есть много других работ
184 2070468
>>070463

>все свободное время провожу за компом


Вот здесь кстати кроется серьезная ошибка.
"Проводить время" - фактически досуг, это совсем не значит, что тебе понравится/получится за компом работать. Как бы даже не наоборот.
185 2070474
>>070463
Пет проект написал?
186 2070478
>>070464

>Ну так объясни, что тебе дают другие графики?


Статистику они дают, такую же точно статистику.
По статистике темнокожих кодеров на стековерфлоу - 3 процента
По той же статистике кодеров в возрасте 45+ - 3 процента
Означает ли это, что у кодера 45+ такие же шансы на вкат, как у темнокожего?
Каковы шансы на вкат у темнокожего кодера в возраста 45+?
Уверен ли ты, что на графиках достаточно информации, чтобы ответить на эти вопросы?
187 2070479
>>070440
я просто указал, что стукнет 25. без мысли, что уже поздно. Переживаю за то, что везде блять поработал
188 2070493
>>070478
Я уверен, что эта выборка - репрезентативна.

>Означает ли это, что у кодера 45+ такие же шансы на вкат, как у темнокожего?


Ну вот пошли откровенные виляния и маняврирования. При чем здесь темнокожий, если изначально речь шла о возрасте.
189 2070494
>>070479
Ни сы. В пхп не идут упругие зумеры. Так что еще успеешь вкатится
190 2070495
>>070493
Что интересно, пхп появился, когда 45-летнему было 20 с не большим. А первые годы (если не десятилетие) рождения языка - это практически полное отсутствие работы на нем.
Таким образом наш 45летний пациент сам мог вкатиться в пыху ближе к 30-35 годам, а сейчас это обычный синер
191 2070497
>>070493

>При чем здесь темнокожий, если изначально речь шла о возрасте.


Ты реально довольно тупенький.
Но это хорошо:) Больше тупых зумерков = меньше конкуренции.
Даже не буду тебе советовать прочитать одну книжку, вдруг и вправду прочтешь, лол.
192 2070503
>>070497
Ну то есть по существу тебе сказать нечего и ты отчаянно переводишь стрелки с неприятной темы возраста
193 2070506
>>070495

>Таким образом наш 45летний пациент сам мог вкатиться в пыху ближе к 30-35 годам,


Это с хуя ли вдруг? "Вкатываются" в любые языки в основном молодые упругие зумеры.
image.png442 Кб, 535x495
194 2070510
Не понимаю, о чем вообще разговор, ладно чел 25lvl, он и вебмакакой побывал, релевантный опыт вот это всё. Но 30+лвл вкатыш это пиздос, такое резюме летит в корзину автоматически, по первой цифре возраста.
Даже hh вам ебалаям уже открыто говорит видимо совсем доебали, что для смены сферы деятельности в 30+ ты уже староват, нееш подумой, а если всё же долбоеб решился - ищи блядь по связям:

https://hh.ru/article/28696
Это возрастное! Как сменить профессию после 30 лет


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

195 2070524
>>070510
Твое мнение очень важно для нас, оставайся на связи.

>Анна Чуксеева


>карьерный психолог


>hh


Лол
Какие же зумеры дегенераты, пиздец просто.
196 2070531
>>070503
Мне нет выгоды объяснять тебе простейшие положения статистики и теории вероятности.
197 2070533
>>070524

>>hh


Да, что не так? Первой будет оценивать твоё резюме такая же анна - и для неё в свои 30+ ты уже возрастной и вообще лучше поискал бы по знакомым.

>>070531
Простейшие положения статистики и теории вероятности: из общего количества профессиональных разработчиков 71,7% младше 35 лет, а 85% — младше 40 лет. Это необычно по сравнению почти с любой профессией в мире.
198 2070545
>>070510
Приходит такой зумер устраиваться пыхарям, а у них легаси возрастом старше этого зумера
199 2070547
>>070533
Профессия молодая
z16132018099450.png83 Кб, 400x344
200 2070556
>>070533

>Да, что не так? Первой будет оценивать твоё резюме такая же анна - и для неё в свои 30+ ты уже возрастной и вообще лучше поискал бы по знакомым.

201 2070564
>>070547
Кризису доткомов 20 лет исполнилось, дедуль
202 2070567
>>070556
Ирония в том, что такой зумер может оказаться твоим начальником:
https://youtu.be/I92pAqNe-4Q?t=524
203 2070568
>>070564
А первому компьютеру так вообще 80 лет.
Ты иди лучше пориджа наверни, манька.
zimages.jpg5 Кб, 237x213
204 2070569
>>070567

>Ирония в том, что такой зумер может оказаться твоим начальником

205 2070575
Что за кипеш в треде? Пориджеблядки из /б/ протекли что ли? Сам вкатился в 16-м году будучи дедом за 30. Менял работу четыре раза и никто на этапе собеседований ни разу не интересовался моим возрастом. Возможно, что на галерах все иначе (скорее всего там действительно отдадут предпочтение малолетней петушне без самоуважения, которая позволит собой помыкать), но я там работать и не собираюсь
image.png1,2 Мб, 1280x720
206 2070576
>>070569
Дружище...
207 2070583
>>070458
Я не могу ничего унаследовать, поскольку некоторые симфонивские штуки требуют именно этот самый реквест, вместо интерфейса.

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


Если при наследовании код может работать с потомком наследуемого класса так же как с предком какая буква из солид? лол, то никакой проблемы в этом нет
208 2070701
>>070045

>почему у класса Request нет интерфейса


наследие

>хочу написать обертку над реквестом


класс открыт для наследования

напиши что конкретно ты хотел сделать и зачем?
209 2070707
>>069882

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

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

мимо30лвл-начал-изучать-только-только

Короче, если эти карьерные психологи будут выебываться на собесах, сразу на фриланс уйду, на англоязычные биржи.
зunnamed.png101 Кб, 512x460
211 2070714
>>070710

>Нахуй вы меня демотивируете своими сообщениями, что диды не нужны???


Это порриджи развлекаются, не обращай внимания.
212 2070723
>>070710
На фрилансе нужны уже опытные, с нуля нахватаешь за щеку таких минусов, что проще будет самому удалить аккаунт
5kXFRdBNsz0.jpg181 Кб, 2318x506
213 2070725
Всем приветики. Задача про кубики (рандомные значения). Я её решил, слегка переделал. Подскажите, код нормальный или говноедство?
214 2070727
>>070725
Ну так-то любой год на пхп это говноедство.
Такой уж у вас язык.
215 2070730
>>070727
А ты чего тогда тут забыл?
216 2070738
>>070725
не до 6, а до 10 поставил просто потому что так захотел. я не кубики бросаю!!!
реактор-свинарник-свиньи-грязь-137086.jpeg394 Кб, 580x931
217 2070744
218 2070752
>>070725
Какой там код, лол.
По оформлению лучше ифы со скобками и юзай интерполяцию вместо конкатенации.
f2d3fc216e2a83cdfc2137ba45c6dcb7.jpg20 Кб, 576x84
219 2070862
>>070510

>для смены сферы деятельности в 30+ ты уже староват



Так тут не о смене сфере деятельности базар, а о первой работе после 30+ вообще.
220 2070863
>>070576

>саморазвитие



>Яндекс



Чел...
221 2070867
>>070862

>а о первой работе после 30+ вообще.


Земля свободной кассой и желтой торбой
апр.jpg32 Кб, 510x360
222 2070872
>>070867

>Земля свободной кассой и желтой торбой

image.png194 Кб, 510x360
223 2070882
>>070872

>я вкачусь вот увидити

224 2070885
>>070882
Не проецируй на взрослых дядек то что мамка тебя из дома выгоняет на работку и у тебя встал выбор между маком и выгоранием в 25. Я могу хоть до пенсии дома просидеть.
225 2070960
>>070727
«Ну так-то любой год на пхп это говноедство.
Такой уж у вас язык» — раздался пронзительный голос со стороны параши.
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
Перекладыватель жсончиков на других языках — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём макбук.
226 2070972
>>070960
Пиздец у тебя подгорело. Видимо в самую точку.
227 2070992
>>070583

Я не очень тебя понял. Допустим, в Симфони есть функция

doSomething(Request $req) { ... }

В соответствие с принципом Лисков, в эту функцию можно передать объект-наследник Request и это не нарушит тайп-хинты:

class MyRequest extends Request { ...}
doSomething(new MyRequest(...));
228 2070997
>>070583

По моему, проблема есть. Допустим, у нас есть функция Symfony, которая возвращает реквест:

function getReq(): Request { ... }

И код, который ее использует, вызывает какой-то метод из твоего кастомного реквеста:

getReq()->doSomething();

при чтении кода здесь возникнет непонимание: откуда в реквесте из Симфони взялся метод doSomething()?

IDE и статический анализатор тоже здесь укажет на ошибку.

Или я что-то не понял?
229 2071005
>>070972
А вот и тот самый рисователь кнопочек/перекладыватель жсончиков/крудоеб на петухоне/жопаскрипе нарисовался. Видимо, в самую точку, раз с копипастой заговорил.
230 2071012
Приветики-привет.
Назрел такой вопрос: масса книг и не знаю какую выбрать первой для изучения пыхи. Посмотрел учебник ОПа, который в шапке, мне не понравился. Мало конкретизации даже по типизации, а как по мне, это немаловажно.
Какую книжку выбрать? Котерова? Или видео-курсы какие-нибудь скачать или на ютубе вкуривать и параллельно гуглить?

А что если смотреть курсы или книги по пхп7, а щас уже 8, это не хуёво?

Сори за тупые вопросы, без них никак.
231 2071033
>>071005

>рисователь кнопочек/перекладыватель жсончиков


Чем это отличается от говноёба пыхаря?
232 2071047
>>071033
Зарплатой в 1.5-2 раза больше пыхарской
image.png48 Кб, 931x254
233 2071048
>>070992
>>070997
Что-то ты не туда разговор уводишь. Повторяю, что моя проблема состоит в том, что я не могу использовать наследник реквеста, так как симфони в разных местах требует тот самый конкретный реквест. И попытка подменить его наследником во фронт контроллере не прокатила.

PHP Fatal error: Declaration of App\ArgumentResolver\BlaBlaBlaResolver::supports(App\Request\Request $request, Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata $argument): bool must be compatible with Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface::supports(Symfony\Component\HttpFoundation\Request $request, Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata $argument)
234 2071051
>>071033
Например, раздутым на пустом месте самомнением. Но юным петушкам-максималистам это объяснять бесполезно.
235 2071057
>>071051
Можем себе позволить >>071047
236 2071061
>>070727

То же самое можно сказать про любой другой язык.

>>070725

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

if (...) {
код 1;
} elseif (....) {
код 2;
} else {
код 3;
}

Также, подстановка переменных в строку ("число $number") читается лучше, чем склеивание строки из кусочков.
237 2071067
>>071048

Приведенная тобой ошибка возникает не из-за того, что в Симфони нет интерфейса для реквеста. Если бы для реквеста был интерфейс, она бы точно так же возникла.

Если у тебя есть класс A, в нем метод принимает объект класса B, то при наследовании ты не можешь поменять тип аргумента на C (наследника B). Так как это нарушило бы принцип подстановки Лисков: старый код, передающий в метод объект B, сломался бы.

То же самое было бы, если бы аргумент имел тайп-хинт RequestInterface. Как только ты бы попытался заменить его на MyRequest, ты бы получил ту же самую ошибку.
238 2071097
>>071012

>Посмотрел учебник ОПа, который в шапке, мне не понравился. Мало конкретизации даже по типизации, а как по мне, это немаловажно


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

>А что если смотреть курсы или книги по пхп7, а щас уже 8, это не хуёво?


1. 8ка еще не в продакшене и будет там не раньше чем через пару лет
2. В 8ке ввели 1.5 фичи, которые можно за вечер пощупать

Можешь взять котерова, но это по сути вольный пересказ документации
с php.net
Либо попробовать ларакасты - серии коротких видео по темам, там есть и основы пыхи и ооп
В любом случае твоя задача писать код, а не книжки читать и видео смотреть
239 2071116
>>071097
Спасибо большое. Да, я знаю, что надо шкодить, просто я всегда привык прочитать что-то, например, когда тернарный оператор пробовал, а потом уже хуевертил с ним всё подряд. Мне проще запоминается, когда я что-то прочту, не пойму, попробую сделать, пойму наполовину, прочту ещё раз 10 и пойму окончательно, после чего ещё закеплю на практике. Ебанутый способ наверно, но для меня он рабочий.
240 2071123
>>071061

> не надо забывать фигурные скобки


Я когда-то наткнулся на статью, что скобки можно опустить, если одна операция в них идёт.

>чем склеивание строки из кусочков


Просто привык к конкатенации ещё с вуза (пиздец блять, 4 года почти прошло, как в вузе прогал и забросил это дело, и щас по новой учусь. какой же я бездарь, блять.)
241 2071130
>>071123

>Я когда-то наткнулся на статью, что скобки можно опустить, если одна операция в них идёт.


Почитай этот момент в PSR. Насколько помню, скобки нужны, чтобы можно было зрительно распознать конструкцию. Без скобок это выглядит как обычная строчка вызова метода или присвоения
242 2071146
>>070707

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

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

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

Ты можешь зайти в список багов и сделать поиск по меткам. Во многих проектах есть метки вроде "help-wanted" или "up-for-grabs", которыми помечают баги для начинающих. Ты можешь использовать поиск на гитхабе для поиска таких багов. Тут есть список ссылок и меток для начинающих: https://gist.github.com/stefanmaric/d5a03eeb89af81e5537e2efe7dd479cf
243 2071152
>>071123

Язык позволяет пропускать скобки, но рекомендация PSR не рекомендует так делать, так как это ведет к ошибкам вроде такой:

if (...)
....action1;
....action2; // это действие выполняется независимо от условия!

Здесь кажется, что оба действия внутри if, а по факту только одно. Чтобы такого не было, надо ставить скобки.
244 2071155
>>070430
Да я ж не про кодинг писал, а про свою профу, я вообще юрист.
245 2071192
>>071067
Это печально. А есть ли способы обойти такое поведение? В принципе у меня сейчас нет необходимости делать эту штуку, но просто интересно.
246 2071194
>>071152
Спасибо за разъяснения!
Но я бы и не подумал использовать два действия без скобок.
247 2071197
>>071057
Посмотри зарплаты симфонистов на том же джинне (все свои четыре места работы на данный момент я находил именно там) и твой мирок пошатнется.
248 2071206
>>071097

> 8ка еще не в продакшене и будет там не раньше чем через пару лет


С марта на восьмерке живем. Брат жив
249 2071216
>>071197
Так у хохлов зп больше, т.к. аутсорс за доляры + требуют разговорный инглиш
250 2071224
>>071197
Посмотри зарплаты жопаскриптеров на том же джинне и заплачь
251 2071254
>>071224
С чего бы мне плакать, если я фуллстек?
>>071216

>требуют разговорный инглиш


И что? Хороший способ отсеять необразованную падаль.
252 2071263
>>071254

>И что? Хороший способ отсеять необразованную падаль.


В рф много продуктовых с русскоязычными командами
253 2071276
>>071254
С того, что работаешь за двоих, а зарплату получаешь за одного
254 2071278
>>071263
Такая у вас специфика рынка и не факт, что это хорошо. Я сам из Беларуси и иногда вижу российские вакансии на сеньерские позиции с такими вилками, что хочется плакать. Удивительно, как они вообще умудряются кого-то нанимать
255 2071286
>>071276
Не за одного, а как минимум за полтора.
256 2071297
>>071278
Не все хотят заморачиваться изучением разговорного инглиша
257 2071349
>>071276

Ты пишешь какую-то ерунду. Он бы работал за двоих, если бы работал по 16 часов в сутки. Если он работает 8 часов в сутки, то он работает за одного.
258 2071371
>>071349
Он фулкек - выполняет работу фронтендера и бекендера
259 2071385
>>071349
Так ему нужно сначала выдрочить скилы с двух проф, потом поддерживать их актуальными. Так что хотя бы х1.5 должна быть зп
260 2071628
>>071385
Можно подумать, что колупание форм, кнопочек и запросиков требует каких-то неимоверных умственных усилий. Да там любая макака справится. А со времен появления vue.js это даже перестало вызывать особое отвращение
261 2071630
>>071297
А получать жалких полтора косаря, будучи сеньером-помидором, хотят.
262 2071632
>>071630
Получаю жалкие полтара косаря, не являясь синьором помидором
263 2071633
>>071628
Что ж тогда фулстеки не стоят по 20к руб в месяц, раз любая макака справится?
264 2071639
>>071633
Потоиу что за работу с жопаскрипом принято доплачивать за вредность, типа как в совке сварщикам молоко выдавали.
265 2071705
>>071067
Придумал, как обойти это ограничение с помощью наследования интерфейсов.

http://sandbox.onlinephpfunctions.com/code/8e3b5e08edf0b131fbfe63e83ac30d595b031a61
266 2071706
>>071033
Как минимум тем, что на современном похапе жсончики перекладывать в разы приятнее, чем на пятоне или, прости Господи, жопаскрипте
267 2071759
>>071705

Ты что-то переусложнил. По моему, тут можно было бы обойтись и наследованием:

class Request {}
class BetterRequest extends Request {}

function test(Request $r) {}
test(new BetterRequest()); // работает

Интерфейс нужен там, где есть 2 разных реализации. Ты же хочешь не делать реквест с нуля, а доработать стандартный, значит тебе нужно наследование.
268 2071855
Я чего-то туплю.
Поднял бабла ЛАМПУ, на неё накатил вордпресс. Хотел бы обращаться на неё по имени http://235, но не судьба.
По ip фурычит.
Что я делаю не так?
image.png16 Кб, 482x282
269 2071946
>>071855
Это скорее вопрос в софтач или в веб. Резолвер у тебя на компьютере, с которого обращаешься, какой? Винда там? В настройки роутера зайди, там должна быть возможность настроить разрешение кастомных адресов в конкретные ip.
270 2071962
>>071067
>>071705
>>071192
Бля, ну вы и кукаретики канеш. Давно уже все за вас придумали https://refactoring.guru/ru/design-patterns/adapter . И для симфони тоже https://symfony.com/doc/current/components/psr7.html
271 2071965
>>071855
а что ты для этого сделал?
272 2072013
>>071946

> Это скорее вопрос в софтач или в веб.


Пока посижу тут, а потом подсяду к ним.

> Резолвер у тебя на компьютере, с которого обращаешься, какой? Винда там?


Отдельная машина в локалочке, а на ней стоит Ubuntu.

> В настройки роутера зайди, там должна быть возможность настроить разрешение кастомных адресов в конкретные ip.


Гляну.

>>071965
1. Изменил настройки пермалинка на "дружелюбные"
2. включил в апаче rewrite
3. отредактировал файл по пути /etc/apache2/sites-available/000-default.conf
4. Перезапустил апач
273 2072030
>>072013

>Отдельная машина в локалочке, а на ней стоит Ubuntu.


>с которого обращаешься

yodabeingnaughty.png568 Кб, 707x695
274 2072083
Я не совсем понимаю, как должен выглядеть шаблон формы в HTML, чтобы при ошибке заполнения форма выводилась с уже подставленными значениями (и сообщением об ошибке). У текстовых полей можно через переменные заполнять value, но ведь формы ещё могут содержать select-элементы, в которых value не проставишь. В свою очередь, select'ы могут содержать сотни опций выбора. Я знаю об аттрибуте selected, но как мне его проставить автоматически именно в той опции, которую выбрал пользователь, а затем ввёл что-то невалидное. Нужно сделать так, чтобы его опции в select'ах сохранились при выводе ошибки на страннице формы.

Единственное, что приходит на ум - это составление функции, которая будет принимать аргументом уже проставленные пользователем значения, собирать форму по элементам и возвращать её код. Но это будет именно функция, а не шаблон. Наверняка тут есть какой-то конвенциональный подход. Как это лучше запилить?
275 2072091
>>071962
Ты по ходу не прочитал в чем суть проблемы.
11.jpg53 Кб, 500x480
276 2072171
>>072013

> 1. Изменил настройки пермалинка на "дружелюбные"


> 2. включил в апаче rewrite


> 3. отредактировал файл по пути /etc/apache2/sites-available/000-default.conf


> 4. Перезапустил апач



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

Если я сейчас у себя отредактирую /etc/apache2/sites-available/000-default.conf и напишу туда хост BBC.COM -- у тебя он начнёт открываться с моего компа? очевидно нет

Читай про DNS, редактируй файл hosts на машине, с которой обращаешься.
277 2072271
>>072091
Все я прочитал. В симфони по старинке используется https://symfony.com/doc/current/components/http_foundation.html
В то время как стандартом является PSR-7 https://www.php-fig.org/psr/psr-7/
И давным давно написали конвертер под этот стандарт https://github.com/symfony/psr-http-message-bridge

А написал я что вы велосипедите хуйню, в то время как все уже сто лет как по полочкам разложено. Что использовать в качестве реквеста, как делаются кастомные обертки над объектами, как какать и как писоть.
278 2072274
В шаблон так же можно прокинуть переменные из контроллера (введенные юзером значения формы, например). В популярных фреймворках это реализовано
279 2072341
>>072271
И как то, что ты написал, поможет подменить симфонивский реквест другой реализацией и использовать эту реализацию там, где различные штуки явно требуют симфони реквест?
280 2072431
Допустим есть красная точка на пикче, мне нужно удалить её(выкрутить альфа канал до полной прозрачности)
Через imagesetpixel у меня это чёт не получается, как я понял если указать в imagecolorallocatealpha прозрачность, он тупо этот(прозрачный) цвет и прибавит, нихуя в итоге не изменив.
Как зделоть-то?
281 2072440
>>072341
В симфони реквест явно вставляется или через di контейнер?
282 2072456
>>072341
Ты там угашенный что-ли? Попустись, пивка глотни.
Симфонивский реквест используется в симфони. А вне симфони используется PSR-7 реквест. ВНЕ, блядь. В НЕ симфоневском роутере, например. В собственных классах или бандлах. Каким хуем ты собрался менять код в штуках, которые "явно требуют симфони реквест"? Ты там vendor что-ли правишь?
283 2072457
>>072440
Создается во фронт контроллере, а потом инжектится при необходимости
...
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
...
284 2072471
>>072456
Сам ты, блядь, угашенный. Посмотри на https://github.com/symfony/symfony/blob/5.4/src/Symfony/Component/HttpKernel/Controller/ArgumentValueResolverInterface.php и увидишь, что там явно требуется симфонивский реквест. И при написании своего резолвера хуй ты свой реквест туда засунешь. По крайней мере у меня не получилось, поэтому и задал вопрос.
285 2072487
>>072471
Пробовал туда передавать наследника от симфони реквеста?
286 2072502
>>072471
Какой же ты тугой. Прямо носом нужно тыкать, пиздец просто
https://github.com/symfony/psr-http-message-bridge/blob/main/ArgumentValueResolver/PsrServerRequestResolver.php
287 2072511
>>072487
Конечно. И получал ошибку - >>071048

>>072502
Пока не приведешь пример, как с помощью того, что ты принес в тред, написать резолвер для DTO или VO, который внутри будет использовать наследник реквеста, тугой здесь ты.
288 2072517
>>072511
Так ты не декларацию этих методов правь, а передавай, где надо, свой класс вместо симфонивского
TameRequiredJaeger.mp4292 Кб, mp4,
576x304, 0:08
289 2072540
>>072511
В резолвер инжектится ФАБРИКА. Фабрика принимает симфоневский реквест, а возвращает PSR реквест. Ты можешь прокинуть эту ФАБРИКУ в ЛЮБОЙ резолвер, пусть он хоть DTO возвращает, хоть АЛЛАХА.
15986403473341.mp47,3 Мб, mp4,
640x360, 3:23
290 2072558
>>072431
Очевидно что альфа-канал не влияет на сам цвет.

Что (какой цвет) должно остаться под альфа? оно само за тебя должно придумывать, что ли?
291 2072559
>>072540
напомните, откуда кадры?
292 2072565
>>072083

Простановка атрибута selected делается так. Пусть $value - это выбранное пользователем значение, которое надо пометить:

<select>
<option value="x" <?= $value === 'x' ? 'selected' : '' ?></option>
<option value="y" <?= $value === 'y' ? 'selected' : '' ?></option>
...

(тут использован тернарный оператор)

Если ты не пишешь <option> руками, а генерируешь из массива опций, то код будет еще проще.
293 2072568
>>072565
selected="selected" же, не? хОтя могу ошибаться, а проверять лениво.
294 2072585
>>072540
Так анону требовался наследник симфореквеста с дополнительной функциональностью, а не PSR.
295 2072589
>>072585
Так я ему и объясняю что он пытается дрочить вприсядку. Если тебе нужен именно реквест, то PSR-7 это отраслевой стандарт, он покрывает все что ты только можешь с реквестом сделать. А если тебе нужна производная от реквеста, то это уже нихуя не реквест и нахуй не надо что-то там наследовать или имплементировать.
296 2072605
>>072540
Корявое говно. С таким же успехом я могу просто инжектить в резолвер сервис с нужной функциональностью. Именно этого я и пытался избежать в попытке подменить реквест на уровне приложения. Ну и нихуя не удивительно, что от человека, который хотел кого-то удивить адаптером, ускользнул основной смысл моего вопроса.
297 2072641
>>072605

>С таким же успехом я могу просто инжектить в резолвер сервис с нужной функциональностью. Именно этого я и пытался избежать


А нахуя?

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


Зачем?
298 2072646
>>072605
Да все, все. Пену вытри. Ты охуенный программист. Верю. Только про PSR не в курсе. Да и di с композицией у тебя говно корявое, а вот подменять вендорские объекты для всего приложения это заебись идея. Ну заебень рефлексией или трейтом, как там у вас гениев принято.
299 2072692
>>072646
Чел, речи про ПСР реквест изначально не шло вообще, это ты его приплел. Касательно подмены объекта, я же не изменяю старое поведение, а добавляю новое. Все в соответствии с заповедями Варвары. Рефлексию я, конечно же, использовать не буду да и вообще уже отказался от этой идеи. Извини, если погорячился.
300 2072705
>>072692
Да я просто подъебываю. Ты понимаешь что только ты решил следовать заповедям варвары? Ты не контролируешь процесс, что там с этим реквестом будет происходить, и кто че подменял и ещё подменит не знает никто.

Поэтому трогать вендорную хуйню нельзя ни в коем случае. В реальном проекте я бы определил твой реквест в di контейнере и прокидывал бы в контроллер просто через конструктор. И сразу начнет вырисовываться что это нихуя не реквест. Потому что реквест, даже симфонивский может делать все что нужно http запросу - возвращать пришедшие на сервер данные. А все остальное это уже обработка запроса.
038b124bcf7e5ff167c9844df1c202e1.mp45 Мб, mp4,
360x640, 0:48
301 2073107
Это реально так?
302 2073128
>>073107
Просто смотри на зарплату. Иногда с джуна просят докеры, ПСР, ООП, юнит-тесты, и плотят 80к со старта, а иногда уметь вордпресс\опенкарт настроить и плотют 30к.
Главное не перепутать: прогинг за 80к, имплементация за 30к. Работодатели же обожают просить ВСЁ за 30к.
303 2073304
>>072568

Можно писать просто selected, так как это boolean attribute.
Screenshot from 2021-05-28 11-52-28.png398 Кб, 894x707
304 2073400
>>072565
Спасибо за подсказку, я никак не мог до этого додуматься.
305 2073477
>>072568
а тред засирать тебе не лениво, пидор?
306 2073937
>>073477
пидор твоя мать, пидор
15989850078290.jpg188 Кб, 912x1282
307 2074148
>>073937

> пидор твоя мать, пидор


суть PHP
308 2074217
Сап двач. Подскажите пожалуйста, что кидать в портфолио, помимо интернет-магазинов, CMS, и блогов. Чтобы выделятся, от остальных?
309 2074282
>>072030
Шинда дриснятая.
Сборка: много говна, мало палок

>>072171
Вот как раз я не хочу редактировать файл hosts. Планируется заход с дрюса.
Ищу альтернативный путь.

Почитаю про DNS.
310 2074425
>>074217

> портфолио



Ты уже выделился
311 2074430
>>074217

согласен с этим
>>074425

чекни резюме вкатунов - быть лучше них довольно легко.
312 2074477
>>074425
в плохом смысле?
313 2074484
>>074430
спасибо за совет
314 2074992
Gjj
315 2075357
>>074282

>Вот как раз я не хочу редактировать файл hosts.


Как бы ты или покупаешь домен и направляешь на ip, или поднимаешь в локалке DNS свой, в нём делаешь редирект(будет работать только внутри локалки, и то только если ты этот днс укажешь в том роутере который за интернеты отвечает), или редактируешь hosts. Как ещё это по твоему может работать?
316 2075778
Кто-нибудь использует api platform в рабочих проектах? Поясните за плюсы и минусы
317 2076649
>>074282

> не хочу


тогда пердолься ради своих фантазий
318 2077283
Пишу синхронизацию данных.
На обработку одного item-а приходится где-то 1-6 запросов в бд. Item-ов может прийти до 10к.
Офк это всё происходит в фоне, запускается с ребита, но даже так джоба задыхается и повисает.

Есть какие-то паттерны оптимизации синхронизации данных?

Раньше делал вместо обработки по 1 айтему сразу пачкой (по 100 или 1000), соотв объединял операции вставки, получалось на порядок быстрее.

Можно ли что-то еще тут придумать или идти проверенным путем?
16218023289390.png2,7 Мб, 1200x800
319 2077361
>>077283
1 -- непонятно, что ты делаешь, распиши подробнее

2 -- непонятно, почему синхронизация БД на уровне РНР, а не СУБД
320 2077374
>>077361
Получаю данные апи, потом актив рекордом пишу в базу в несколько таблиц-сущностей, соответственно проверяю, чтоб не было дубликатов перед записью.
Тут скорее не синхра, а фетч данных.

Потому что данные получаю по апи в непригодном для записи формате, их нужно обработать, раскидать по разным сущностям
321 2077377
>>077374
что смущает?
322 2077380
>>077377
То, что на 1к сущностей уходит минут 5. А там их может быть >10к штук
323 2077382
>>077380
В транзакции апдейтишь?
324 2077384
>>077374
>>077377

>джоба задыхается и повисает.


оптимизировать вывод на уровне RabbitMQ;
понизить приоритет вставки;

> раньше делал сразу пачкой


так и делай, в чём проблема

>какие-то паттерны оптимизации синхронизации данных


>какие-то


это вообще не про программирование
конкретизируй

> раньше получалось на порядок быстрее


вообще непонятно, в чём проблема
325 2077406
>>077382
нет
326 2077408
>>077384
Проблема в том, что нужно оч быстро переделать, т.к. сроки давно проебаны. А переписывать нормально + тестировать займет несколько дней
327 2077417
>>077406
Так добавь, зачастую из-за этого тормозят массовые вставки и апдейты. Если ещё инсерты переделать на много записей на один запрос, то вообще будет летать.
328 2077420
>>077417
Спасиб, попробую. Не думал в таком ключе транзакцию использовать. Да и добавить недолго
329 2077441
Хочу сказать этому ебаному wsl2. Ебаный ты козел, блядь, черножопый.
Столько времени не могут пофиксить баг, который делает работу на нем невозможной - работа замедляется раз в 10 из-за ебли с виртуальными виртуалками и абстракциями абстракций
330 2077486
>>077441
Ты про баг с докером, которыц память не отдает?
331 2077503
>>062494 (OP)

>Владимир Дронов: Laravel 8. Быстрая разработка веб-сайтов на PHPНа


Анончики, можно ли с этой книжкой вкатиться в написание простых бложеков с админкой? (не фриланс, конечно, а просто личные пет прожекты) Пхп почти не знаю, ООП не понимаю.
Есть ещё подробная литература по свежему пхп и какому-нибудь фреймворку?
332 2077506
>>077503

>подробная


подобная. т9фикс
333 2077508
>>077503
https://www.books.ru/author/dronov-39884/
Какой-то дид унылый, ничего толкового не высрал.
334 2077577
>>077503
Книжки по пхп - тупое говно тупого говна, особенно от наших авторов, лучше посмотри любой курс для новичков (Кудлая, например), а потом шлифани Елисеевым, если терпения хватит.
335 2077603
Лол
336 2077612
>>077441
скажи спасибо, что он вообще есть
337 2077634
>>077503
берешь доку или ютуб
куча бесплатных курсов. Зачем книги по фреймворку?
338 2077636
>>077503
Если тебе нужен правда простой бложек с админкой, то тебе хватит вот этого видоса:
https://www.youtube.com/watch?v=0Be0fX9wbXc
Автор тут явно мудак ибо даже я, не прогавший на ларавеле и только пару дней назад решивший его изучить для прохождения ТЗ на РАБоту очередную вижу кучу косяков. Но такие базовые вещи как шаблонизатор, роутинг, работа с БД тут рассмотрены. А больше особо и не надо, всё равно практика решает.
339 2077657
>>077486
Я про баг (или это фича) оч медленной работы, если проект запускается из под wsl2, но лежит в примонтированной директории (/mnt/d/dev/...).
Вчера пытался перенести проект в home раздел, но чуда не произошло. Так же идут простейшие запросы по 30-40 секунд.
У коллеги на макоси всё хорошо работает 1-2 секунда на запрос.
По ходу только убунту накатывать и ебаться с видео дровами
340 2077660
>>077612
Да лучше б не было. Мб как человек сидел на линуксе
341 2077663
>>077657
Насколько я понмю, всл1 это была виртуалка, а всл2 какой-то слой эмуляции апи и он обсирается как раз, в первом работало лучше. Так что можешь поставить виртуалку и пробросить свои файлы два раза из хоста в гест и из геста в докер, будет всё равно лучше, лол.
342 2077664
>>077657

>Вчера пытался перенести проект в home раздел, но чуда не произошло.



Вообще по идее должно нормально работать. Конвертни обратно в всл1 и посмотри результат.
343 2077665
>>077657
Первый раз о таком слышу. Чо на всл 1 что на всл2 всё рабоатет вполне норм из mnt

>>077663
Ты всё напутал. Всл2 на виртуалке, а всл1 был слой трансляции сисколлов аля wine наоборот.
344 2077711
>>077657
тоже первый раз слышу, всё быстро работает

мониторь ресурсы компа
345 2077728
>>077657
У тебя случайно не хдд?
346 2077743
>>077728
На ssd всё крутится.
С hdd несколько лет назад охуевать начал, когда вин10 накатил, подкопил на сосунг ево и забыл про тормоза
347 2078108
>>077374

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


INSERT IGNORE какой-нибудь не проще?
Capture d’écran du 2021-06-23 18-12-29.png13 Кб, 462x124
348 2078200
Посоны, кто-то делал авторизацию для подресурса на api platform?
Док предельно прост и нагляден: https://api-platform.com/docs/core/subresources/#access-control-of-subresources
Я нашел операцию через дебаг, проверил через attributes реквеста, прописал пикрил, а оно не работает.
349 2078234
>>077634
Зачем мне куча? Советуй конкретный.

>>077636
Спасибо, попробую с этой хуйни начать

>>077577
https://webformyself.com/laravel/
Этот? И что, он годный? Учитывает НОВШЕСТВА пхп 8?
На рутрекере не нашел
350 2078244
>>077283
>>077374
Там еще и Yii-шные бихейверы роль сыграли. Ебаный актив рекорд
351 2078245
>>078234

>https://webformyself.com/laravel/


Хлебнешь воды. И это не Елисеев
352 2078246
>>078245
Я и не утверждал, что это Елисеев. Это Кудлай
354 2078256
уебищность пхп по сравнению с другими нормальными языками очевидна с первых шагов - у пхп даже нет инсталлера под винду
355 2078257
>>078234

> Учитывает НОВШЕСТВА пхп 8?


Да что вы так цепляетесь за версии? Там 1.5 изменения
356 2078258
>>078246
так что лучше не начинай, анон. лучше js или джанго
357 2078259
>>078256
Что ты собрался на винде делать, когда рабочее окружение линупс в основном?
358 2078287
>>078256
Не пизди есть докер называется
359 2078368
>>078234
Есть на NoNameClub, но учти, он ознакомительный, для обезьянок-астронавтов, уровня "так падажжи ебана".
Можешь этого чела глянуть, но он вроде Yii разбирает.
https://www.youtube.com/c/ВикторЗинченкоА/featured
360 2078578
>>078256
не пизди, пидор, полно пакетов типа XAMPP
361 2078708
>>078256
Docker есть, и ещё тысяча способов решить это.
362 2078743
>>078256
Зачем тебе инсталлер, еси ты можешь просто распаковать архив и запускать php.exe?
363 2078944
Аноны, решаю задачку со студентами, как решить проблему с установкой куки с локалхоста?
364 2078972
>>078944
В чем проблема? Какая ошибка?
366 2078994
>>078972
>>078973
Мне надо отправить с локалхоста в браузер кукисы, но просто так это не выводит. Тупо в списке всех куки не появляется локалхост.

>Про это что ли?


Типа да, но то что там описано пробовал и не работает.
367 2079020
>>078994
А пробовал в хостс поменять локалхост на какой-нибудь валидный с двумя точками?
368 2079021
>>078287 >>078708

Докер это не инсталлятор пэхэпэ, довен. У всех норм языков есть свой инсталлер.
>>078578
XAMPP это не инсталлятор пэхэпэ, довен. XAMPP это комбайн из кучи говна, в числе которого есть и пэхапэ. У всех норм языков есть свой инсталлер.
>>078743
Потому что я не в 1987 году, чтобы что-то руками распаковывать. Еще и в PATH руками добавлять? Лол, ты точно из 2021?
369 2079035
>>079020
Фуххх.. Разобрался. Как обычно тупняк на ровном месте был, время устанавливал не как time() + 10 лет, а просто как 10 лет, получалось кукисы истекали в 1980 году. А так вместо локалхоста домен прописал как ".app.localhost" и схавало.
370 2079039
>>079035
Грац
371 2079041
>>079021
Есть такой менеджер пакетов для винды chocolatey, им можно одной строчкой пхп установить как в лине
372 2079144
>>079021
А зачем тебе standalone установщик php то? Что ты с ним делать будешь без вебсервера?
А если с вебсервером-есть куча готовых инсталлеров.

Алсо нахуя тебе на винде пыха?
373 2079170
>>079144

>Алсо нахуя тебе на винде пыха?


Может он там десктоп пишет
374 2079177
>>079170
Не ну если так... То огромной ему удачи, чо.
375 2079182
>>079021
без инсталлятора, не можешь что ли?
376 2079258
>>079041
Да, я знаю про него. И по-прежнему, у пэхапэ нет своего инсталера.

>>079144

> Что ты с ним делать будешь без вебсервера?


То же, что и с джангой без вебсервера.

>А если с вебсервером-есть куча готовых инсталлеров.


Васянских говносборок типа XAMPP?

>>079182
Могу. Но не хочу. Это знаешь, как ездить на ручной коробке, когда все нормальные люди уже давно пользуются акпп.
377 2079262
>>079258

>Васянских говносборок типа XAMPP?


А вот сами создатели пхп XAMPP не считают васянским...
https://www.php.net/manual/ru/install.windows.tools.php
378 2079264
>>079258

>То же, что и с джангой без вебсервера.


НУ И ЧТО ЖЕ ТЫ БУДЕШЬ С НЕЙ ДЕЛАТЬ БЕЗ ВЕБСЕРВЕРА?
379 2079270
>>079262
Денвер они не так давно убрали из доки, да?)

>>079264
После установки языка без веб сервера я сам выберу подходящий мне веб сервер с нужными мне модулями и параметрами и установлю его отдельно. Если надо будет, конечно!
380 2079283
>>079258
А еще nginx нельзя на винде запустить
381 2079285
>>079270

>Денвер они не так давно убрали из доки, да?)


Может и так. Но это прям оф. позиция разрабов языка. А значит ты идёшь на хуй.

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


Ну значит распакуешь из архивчика, не обломаешься.

Алсо выход есть. WSL накатываешь, apt-get install php.
Винда? Винда. Пхп? Пхп.
382 2079377
>>079285

>Может и так. Но это прям оф. позиция разрабов языка. А значит ты идёшь на хуй.


Но в итоге-то пошли нахуй они, а не я.
383 2079448
>>079377
Что ты всё еще тут делаешь? Давай иди в тред с языками, у которых есть инсталлер
384 2079649
>>079448
Одно другому не мешает!
385 2079750
>>065935
Прям цитата из документации
Открывал я этот исходный говнокод, методы на 500 строк с кучей вложенных if и циклов, передача массивов по ссылке, хуй чего найдешь. А подключение шаблонов это прям искусство говнокода. Да и в целом 3 разных подхода, функциональный с глобальными переменными, ООП старый и ООП новый с неймспейсами и хуй пойми что из них работает, что нет, на что положили хуй, а чего ещё не дописали.
386 2079756
>>079750
Ты у нас из секты свидетелей качественного кода?
А зачем писать не говнокод?
387 2079787
>>079756
Ну если тебе нужно все сделать за минимум времени, получить деньги от заказчика и съебаться, ебись оно все конём, гори синим пламенем, как делают большинство битриксоидов и алкашей фрилансеров, то говнокод это твой выбор.
Если ты выпускает продукт с длительной поддержкой, над которым работают много разработчиков и который будут использовать тысячи разработчиков по всей стране, то писать чистый код это должно быть чем-то само собой разумеющимся.
388 2079795
>>079787

>то писать чистый код это должно быть чем-то само собой разумеющимся.


Почему?
389 2079801
>>079795

>Почему?


Большую часть времени приходиться не писать код, а именно читать. Когда у тебя есть какой-то метод в виде лапши на 300 строк кода, то после 100 строки ты уже забываешь что было выше и понимание как работает этот код усложняется, приходиться несколько раз перечитывать, тот же код вынесенный в отдельный класс и разбитый на методы в пару строк каждый читать в разы проще и проще вносить изменения. Плюс можно использовать различные паттерны, разбивать на сервисы и тп, в таких проектах сразу знаешь что где искать, а не блуждаешь в куче файлов и куче станок кода.
390 2079810
>>079801

>Когда у тебя есть какой-то метод в виде лапши на 300 строк кода


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



Частным случаем лапшичного кода является как раз слишком сильное разбитие.
Нормальная длинна метода варьируется в зависимости от назначения оного от 1 строки(геттер, сеттер, ЕТС) до где то 40.
Но уж точно не по 2 строки на каждый. Я бы даже сказал что 20-40 строк более нормальный размер в большинстве случаев.
Но да, больше 40-перебор(хотя тоже есть исключения. Но крайне редкие).
391 2079831
>>079787
Если работаешь с битриксом, то планка качества кода автоматом опускается к ядру земли
392 2079832
>>079810
Лазанья кода, кстати, не видел. В основном перекос в сторону спагетти кода
393 2079890
>>079801

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


Ну так за это деньги платят
394 2080096
Правда ли, что php лучший язык для фриланса на ангоязычных биржах вроде upwork? Какой фреймворк полезнее всего для такой деятельности? Ларавель?
395 2080098
>>080096

>Правда ли, что php лучший язык для фриланса на ангоязычных биржах вроде upwork?


Конечно нет. Порог входа самый низкий, а значит самая высокая конкуренция. Не обладая синьорскими знаниями, делать на апворке с пхп нечего.
396 2080099
https://www.piter.com/collection/top-prodazh/product/sozdaem-dinamicheskie-veb-sayty-na-php-4-e-mezhd-izd
Аноны, это про чистый пхпх?
Не нашел в оглавлении ничего про фреймворки.
Кто-то еще пишет веб-приложухи на чистом пхп? И полезно ли это для начинающего?
397 2080115
>>080099
Глянул английскую версию, это чисто про core, про веб вообще там минимально для демонстрации некоторых фич.
Классная книга, надо будет читнуть как спиздят тру пдфку английскую.
На чистом вряд ли пишут, оно слишком быстро превратится в неподдерживаемый пиздец.
398 2080122
>>080115

> про веб вообще там минимально для демонстрации некоторых фич.


Пиздец, учитывая название книги
399 2080123
>>080099
Какой-то вольный пересказ php.net
400 2080125
>>079831
Я уже с ним не работаю) и с php вообще
401 2080127
>>080125
Грац. Только что ты тут делаешь?
402 2080129
Изучаю этот ваш ларавел.
подрубал бутстрап так:
composer require laravel/ui

php artisan ui bootstrap

npm install && npm run dev

Всё работало. Но в какой то момент он пропал из app.css и app.js И повторно не врубается. Как так?
403 2080152
>>080129
Всё, починил. СОрре.
404 2080160
Ананасы, покажите как вы делаете свои гидраторы в доктрине, чтобы результатом запроса была не сущность (коллекция сущностей), а DTO.
405 2080217
>>080160
Господе, как много странных и непонятных слов
image.png39 Кб, 1371x183
406 2080242
>>080217
Хули непонятного-то?
407 2080301
>>080160
Ты хочешь получить DTO, в свойстве у которого коллекция сущностей? Есть прекрасный оператор new
408 2080308
>>080098
Я знаком с челом, который на апворке делает 200-300к деревянных в месяц, работая по 4 часа в день. Ни разу в жизни не работал в офисе.
409 2080319
410 2080369
Простите за мою тупость, но я не понимаю, что я делаю не так.
https://ideone.com/GRUQrs
411 2080375
Какое же симфони охуенное, не надо писать гору велосипедов, просто подключил компоненты нужные и получается красивенький и понятный ооп-код.
412 2080377
>>080369
Бля, чел, пиши в пхпшторме. Ну серьезно.
Сколько раз вы будете обсираться на том, что за вас может машина сделать?
пик 1 функция mc_rand - погугли что ли)
пик 2 натыкал exit-ов я надеюсь с целью дебага?
413 2080396
>>080377
Спасибо. Проиграл чет с mc_rand.
414 2080487
Выполнил задачку про студентов. Где еще можно такие задания получить на построение КРУДов???
415 2080536
>>080487
Запили библиотеку с авторами, книгами (чтоб учитывалось количество экземпляров) и читателями, которые могут брать книги домой. Можешь придумать систему уведомлений и штрафов за просроченные книги. Итд итп
416 2080573
>>080487
На любой работе)
417 2080574
Блин, и где про ООП для пхп читать? В гугле либо какая-то шняга, либо платная херь, на ютубчике вообще все видосы это объяснение как создавать всякие классы, приватные, защищенные методы и тд, объяснение синтаксиса и возможностей языка короче, а не то как все это на практике использовать...
418 2080578
>>080574
В пхп та же хуйня что и в джаве с мелкими отличиями, так что читать классиков типа Фаулера и Мартина, попробуй допустим Patterns of Enterprise Application Architecture
419 2080581
>>080160

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

Я не очень понимаю, зачем тебе здесь понадобился DTO, и зачем тебе иметь 2 разных класса, которые представляют одну и ту же сущность. Разве это не дублирование кода? Доктрина и так возвращает объекты.

Если тебе нужно именно DTO, то придется копировать данные из объекта в объект руками или как-то еще. Или загружать Доктриной массив и заносить его в объект.
420 2080613
>>080581
Нужно было просто сказать что для преобразования из/в DTO достаточно пары статических методов у Entity - fromDto, toDto. Разделение на dto и entity делается кода у нас rich model в entity инкапсулирующая бизнес правила, а dto заполняется symfony из реквеста.
421 2080614
>>080613

>symfony формами из реквеста

422 2080620
>>080487

В шапке есть задача про тестхаб. Но там гораздо больший объем работы.

>>080319

Еще мне не нравится, что он создал кучу классов: репозиторий (с интерфейсом), класс для представления id, Query (с интерфейсом). Страшно представить, сколько классов будет в реальном приложении с таким подходом. Лишнее усложнение, по моему.

И, что самое главное, не объясняет, зачем это сделано. Зачем нужно абстрагироваться от базы данных или зачем нужен репозиторий и объект Query на каждый запрос. Или зачем он делает интерфейсы на каждый класс. Или какая польза от его DTO и зачем нужно создавать его из массива.

Более того, идея абстрагироваться от БД за счет Query Object гиблая. Тебе понадобится сделать какую-то хитрую выборку, где Доктрина неэффективна - и тебе понадобится писать SQL-запрос. Без всяких абстракций. А это в его схему просто не встраивается.

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

По моему, удобнее сделать сервис, а в нем find-методы. Просто и читабельно.

Еще мне не нравится метод byAuthorId() в FindLatestArticlesQuery. Он меняет состояние Query. Вызывая execute(), ты не знаешь: есть ли там фильтр по автору или нет. Может, кто-то его ранее поставил и тогда твой код начнет выдавать неправильный результат.

Также, мне не нравится метод hydrateSingleResultAs(). А как же типизация? Почему не указан возвращаемый тип? Получилась просто обертка над массивами в итоге.

И еще. У него получилось три объекта, представляющих статью: Article, ArticleDTO и LatestArticleDto. Допустим, мы хотим написать функцию, считающую число слов в статье. Как мы это сделаем, если статья имеет три разных представления? Еще один интерфейс сделаем?

И еще мне не нравится что он (или, скорее всего, какая-то кривая IDE) ставит бессмысленные аннотации вроде такого:

@return string
function x(): string {}

Такая аннотация не несет никакого смысла.
422 2080620
>>080487

В шапке есть задача про тестхаб. Но там гораздо больший объем работы.

>>080319

Еще мне не нравится, что он создал кучу классов: репозиторий (с интерфейсом), класс для представления id, Query (с интерфейсом). Страшно представить, сколько классов будет в реальном приложении с таким подходом. Лишнее усложнение, по моему.

И, что самое главное, не объясняет, зачем это сделано. Зачем нужно абстрагироваться от базы данных или зачем нужен репозиторий и объект Query на каждый запрос. Или зачем он делает интерфейсы на каждый класс. Или какая польза от его DTO и зачем нужно создавать его из массива.

Более того, идея абстрагироваться от БД за счет Query Object гиблая. Тебе понадобится сделать какую-то хитрую выборку, где Доктрина неэффективна - и тебе понадобится писать SQL-запрос. Без всяких абстракций. А это в его схему просто не встраивается.

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

По моему, удобнее сделать сервис, а в нем find-методы. Просто и читабельно.

Еще мне не нравится метод byAuthorId() в FindLatestArticlesQuery. Он меняет состояние Query. Вызывая execute(), ты не знаешь: есть ли там фильтр по автору или нет. Может, кто-то его ранее поставил и тогда твой код начнет выдавать неправильный результат.

Также, мне не нравится метод hydrateSingleResultAs(). А как же типизация? Почему не указан возвращаемый тип? Получилась просто обертка над массивами в итоге.

И еще. У него получилось три объекта, представляющих статью: Article, ArticleDTO и LatestArticleDto. Допустим, мы хотим написать функцию, считающую число слов в статье. Как мы это сделаем, если статья имеет три разных представления? Еще один интерфейс сделаем?

И еще мне не нравится что он (или, скорее всего, какая-то кривая IDE) ставит бессмысленные аннотации вроде такого:

@return string
function x(): string {}

Такая аннотация не несет никакого смысла.
423 2080623
>>079810

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

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

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

>>079750

Проблема таких CMS как битрикс в том, что они (по лицензионным соображениям) пишут свой код с нуля, но они не вкладывают в проектирование столько усилий, сколько, например, вложили разработчики Симфони или Доктрины, и получается какая-то написанная в спешке самоделка.
424 2080796
>>080160
Вопрос на самом деле интересный. Бывает, что для какой-то задачи нет необходимости в доступе ко всем свойствам модели (а она может быть очень жирной да еще и с поведением), в таком случае читать только нужное из базы и создавать дтошку, пропуская этап создания сущностей - это то, что доктор прописал.
425 2080912
>>080623

>Идея разбиения кода на части не в том, чтобы сидеть и отмерять ровно N строк на метод. Идея в том, что ты можешь описать алгоритм в общих чертах, не вдаваясь в частности.


Ля ты умныыыый. Проблема в том, что определить допустимый уровень разбиения не так то просто даже опираясь на это утверждение. У некоторых гениев на выходе получается вместо стены текста в 500 строк разбитая на 550 функций по одной строке в 50 классах с 50 интерфейсами каждый из которых применён 1(один) раз стена текста в которой ориентироваться ещё труднее, а некоторые места дублируются просто потому что он ЗАБЫЛ что это уже делал. Всё хорошо в меру. Тысяча слоёв-абстракций не сделает твой код читабельнее сама по себе. Как и тупое сваливание кода в одну кучу. И да, "отмерять N строк на метод"-один из эффективных способов привести код в подобие "разумной слоистости". Особенно если этот код будет писать джун, который не понимает ещё всех прелестей будущей поддержки кодовой базы, и не чует нутром что вот тут вот лучше добавить слой, а вот там-не стоит.
426 2081139
Подскажите нубу как реализовать отправку числа баллов:
<!Doctype html>
<html lang = "ru">
<head>
<meta charset = "utf-8">
<title>test zaprosa</title>
</head>
<body>
<form action="/" method="get">
<input type='text' name='ball'><br>
</form>
<input type='submit' value='send'>
</body>
</html>
<?php
($grade >= 50 ? 'Сдал' : 'Не сдал')
5bytylok.jpg16 Кб, 480x360
427 2081434
Продублирую из айти-треда.
Аноны, может кто-то за работу веб-сервера на пальцах пояснить или дать книжку/видос. Я вкатывальщик в пхп, уже почти 2 недели гуглю инфу и нихуя не понимаю - книжки по пхп тупое говно и видосы от инфоциган, где ничего не объясняется.
В каком формате приходит ответ и запрос от клиента? Апач слушает порт? Пришел запрос а дальше кто «разбирает» - апач или пхп? Сервер висит в оперативе, а пхп периодически поднимается? Как между собой взаимодействуют веб-сервер и пхп – какая-то служба в операционной системе, а в линуксе это демон называется? Пхп возвращает хтмл на сервер, а тот отправляет клиету? И зачем нужен сервер на локалке? Почему другие ЯП спокойно без него работают?
Самое главное - где все это гуглить?
428 2081450
>>081434
В шапке в уроках от опа есть, глаза разуй.
429 2081455
>>081434
Раньше был мод_пхп, т.е. пхп в виде модуля сервера, работал в его контексте.
Современный вариант это fastcgi. В фоне сидит процесс-менеджер и держит пул запущенных процессов пхп и открытый сокет. Основной сервер сидит мордой в интернет и ту же статику отдает сам, а пхп запросы кидает по сокету и получает ответы. В принципе, примерно так же работет современный веб и в других языках.
Лично тебе вряд ли это вообще надо знать в деталях. Ты себе высираешь ответы, а как они там ходят это вообще не принципиально.
430 2081740
>>081434

>книжки по пхп тупое говно


Или не книжки
431 2081746
>>081139
Блин, неужели никто не поможет?
432 2081781
>>081746
Отправку куда? Что ты вообще делать пытаешься? Работа с формами нормально описана у опа в шапке.
433 2081911
Не понимаю как сделать простейшую аутентификацию на Ларавел. Есть юзер, есть форма входа, есть ЛК, где ажаксом приходят-уходят некоторые данные. Всё, что предлагает гугл - длиннющие документации по Passport и тд. Зачем тогда в роутах api.php уже присутствует один маршрут, можно ли как-то это на коленке сделать? Насколько мне известно, современный фреймворк искаропки такое позволять должен.
434 2081918
>>081781
Веб страничка с формой куда пишу баллы, а дальше результат сдал или не сдал
435 2081927
>>081918
<form method="post">
<input type='text' name='ball'>
Потом смотришь в $_POST['ball']
436 2081931
>>081927
Спасибо
437 2081992
Сап, двач. Что думаете про фреймворк phalcon? Он вообще как жив? Кто-то работал?
439 2082063
>>081927
А как прописывать? Сделал так, не работает

<?php
$_POST['ball'];
($grade >= 50 ? 'Сдал' : 'Не сдал')
440 2082081
Делал вот так, с отдельным файлом action.php но при нажатии кнопки ничего не происходит

<form action="action.php" method="post">
<input type="text" name="ball"><br>
</form>
<input type='submit'>

ACTION.PHP:
($_POST['ball'] >= 50 ? 'Сдал' : 'Не сдал');
echo $_POST['ball'];
441 2082178
Вот так тоже не работает
if (isset($_POST) > 50) {
print(Сдал) else {
print(Не сдал);
}
}
442 2082232
>>082178
>>082081
>>082063
скотина, ты все кнопки подряд чтоли тыкаешь?
ты вообще не понимаешь, что происходит на каждой строке?
что это за умственно-отсталые конструкции?
тебе 7-8 лет? если так то извиняюсь
443 2082300
>>082232
Ну вот эта конструкция постоянно возвращает введенное число, в чем ошибка?

if (($_POST) > 50) {
print($_POST['ball']);
} else {
print 'Не сдал';
}
444 2082448
На фрилансе вообще нужны ООП и шаблоны проектирования или заказчикам похуй что у тебя за код, лишь бы работало как надо? Хочу попробовать апворк, но предпочитаю полотняный лапшекод, не отхуесосят ли меня там за это.
445 2082454
>>082300
в ДНК
446 2082455
>>082300
>>082454
Читай свою программу сверху вниз, каждую строку, и для себя переводи на русский, что она делает, и что хранится в каждой переменной.
447 2082456
>>082448
Зависит от заказчика и почасовой ставки.
Очевидно, что к дешёвым одноразовым скриптам требования ниже.

> предпочитаю


ЛОЛ
448 2082475
Правда ли, что в пхп можно вкатиться заметно быстрее, чем во фронто-макакена?
449 2082506
>>082475
Только в фулстакомакаку, то есть еще хуже чем фронто макака, которая хотя бы понимает что делает.
450 2082511
>>082475
Лучше не быстрее вкатывайся, а нормально.
1. Изучай по минимуму алгоритны и структуры данных. Нужно для собесов в нормальные компании и для более глубокого понимания матчасти.
2. Изучай немного архитектуру компьтера и сетей, чтобы не быть совсем крестьянинов в IT. Изучи линукс и unix команды. Научись пользоваться докером.
3. Изучай хорошо пхп по докам. Как ты будешь писать на языке не зная его?
4. Изучай глубоко БД.
5. Все время пиши код.
451 2082516
Касательно Slim, есть ирландский хохол, который все понятно объясняет https://www.youtube.com/channel/UCB8LoPmC2MCVgohn_-gzU3A
452 2082517
>>082475
Легкого пути не существует, нравится фронт - учишь фронт
453 2082526
>>082517
Как понять, что нравится? Заебало это метание

мимокрокодил
454 2082531
>>082526
Если не можешь понять, значит нихуя не нравится.
455 2082533
>>082531
Нет, в том и дело, что нравится и фронт и бэк. Один день фронт дрочу, второй пыху и чувствую, что от этого пиздец моя продуктивность страдает
456 2082847
>>081434

> В каком формате приходит ответ и запрос от клиента?



Клиент (это может быть браузер или другая программа) соединяется с веб-сервером и отправляет запрос по протоколу HTTP. Он немного описан тут: https://github.com/codedokode/pasta/blob/master/network/http.md

Если упростить, то браузер посылает на сервер запрос вида "дай мне файл, расположенный по адресу http://example.com/some/page". Далее веб-сервер анализирует запрос (в зависимости от того, как он настроен) и определяет, что надо сделать:

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

Веб-сервер и PHP могут взаимодействовать по-разному.

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

Минус этого подхода в том, что если, например, Апач грузит процессор, то непонятно: это сам Апач или PHP-код который он выполняет. Также, нельзя запускать PHP и Апач под разными пользователями. Нельзя вынести выполнение PHP кода на другой сервер.

Также, можно запустить PHP с помощью PHP-FPM. В этом случае запускается отдельный демон PHP-FPM, который в свою очередь запускает несколько процессов-рабочих. Демон слушает порт и принимает соединения от веб-сервера по протоколу FastCGI. Веб-сервер при этом может быть любым: Апач, Nginx или любой другой. Используя FastCGI, веб-сервер может попросить PHP-FPM выполнить PHP-скрипт и прислать результат его выполнения.

Когда браузер посылает HTTP-запрос, веб-сервер посылает FastCGI запрос к PHP-FPM. PHP-FPM дает задачу одному из рабочих выполнить PHP-скрипт, тот его выполняет, ответ посылается в веб-сервер, который перенаправляет его в браузер.

Плюсы этой схемы такие:

- можно использовать любой веб-сервер, например nginx
- выполнение PHP-кода никак не нагружает веб-сервер
- можно запускать PHP-FPM из под другого пользователя, а также можно вообще вынести его на другой сервер или группу серверов. Если есть несколько сайтов, то можно для каждого запустить свой демон PHP-FPM под своим пользователем и выставить ему индивидуальные лимиты.
- можно легко увидеть, сколько процессора и памяти потребляет веб-сервер, а сколько PHP

Обычно в такой схеме Апач становится не очень-то и нужен, и используют комбинацию Nginx + PHP-FPM.
456 2082847
>>081434

> В каком формате приходит ответ и запрос от клиента?



Клиент (это может быть браузер или другая программа) соединяется с веб-сервером и отправляет запрос по протоколу HTTP. Он немного описан тут: https://github.com/codedokode/pasta/blob/master/network/http.md

Если упростить, то браузер посылает на сервер запрос вида "дай мне файл, расположенный по адресу http://example.com/some/page". Далее веб-сервер анализирует запрос (в зависимости от того, как он настроен) и определяет, что надо сделать:

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

Веб-сервер и PHP могут взаимодействовать по-разному.

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

Минус этого подхода в том, что если, например, Апач грузит процессор, то непонятно: это сам Апач или PHP-код который он выполняет. Также, нельзя запускать PHP и Апач под разными пользователями. Нельзя вынести выполнение PHP кода на другой сервер.

Также, можно запустить PHP с помощью PHP-FPM. В этом случае запускается отдельный демон PHP-FPM, который в свою очередь запускает несколько процессов-рабочих. Демон слушает порт и принимает соединения от веб-сервера по протоколу FastCGI. Веб-сервер при этом может быть любым: Апач, Nginx или любой другой. Используя FastCGI, веб-сервер может попросить PHP-FPM выполнить PHP-скрипт и прислать результат его выполнения.

Когда браузер посылает HTTP-запрос, веб-сервер посылает FastCGI запрос к PHP-FPM. PHP-FPM дает задачу одному из рабочих выполнить PHP-скрипт, тот его выполняет, ответ посылается в веб-сервер, который перенаправляет его в браузер.

Плюсы этой схемы такие:

- можно использовать любой веб-сервер, например nginx
- выполнение PHP-кода никак не нагружает веб-сервер
- можно запускать PHP-FPM из под другого пользователя, а также можно вообще вынести его на другой сервер или группу серверов. Если есть несколько сайтов, то можно для каждого запустить свой демон PHP-FPM под своим пользователем и выставить ему индивидуальные лимиты.
- можно легко увидеть, сколько процессора и памяти потребляет веб-сервер, а сколько PHP

Обычно в такой схеме Апач становится не очень-то и нужен, и используют комбинацию Nginx + PHP-FPM.
457 2082854
>>081434

> Апач слушает порт?



Да, веб-сервер (например, Апач или nginx) слушает порт 80 или 443, на который приходят запросы от клиенат (браузера).

> Пришел запрос а дальше кто «разбирает» - апач или пхп?



Веб-сервер (Апач или nginx). Запрос приходит по протоколу HTTP.

> Сервер висит в оперативе, а пхп периодически поднимается?



Сервер постоянно запущен, да. Если PHP встроен в Апач как mod_php, то он тоже постоянно запущен вместе с ним. Если PHP запущен как демон PHP-FPM, то он тоже постоянно находится в оперативной памяти.

То есть, и сервер и PHP уже запущены и ждут запроса.

> Пхп возвращает хтмл на сервер, а тот отправляет клиету?



Да.

> И зачем нужен сервер на локалке?



Тебе не нужен Апач для локальной разработки. В PHP встроен встроенный HTTP-сервер для этих целей: https://github.com/codedokode/pasta/blob/master/soft/web-server.md#встроенный-в-php-сервер

> Почему другие ЯП спокойно без него работают?



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

> Апач слушает порт?



Да, веб-сервер (например, Апач или nginx) слушает порт 80 или 443, на который приходят запросы от клиенат (браузера).

> Пришел запрос а дальше кто «разбирает» - апач или пхп?



Веб-сервер (Апач или nginx). Запрос приходит по протоколу HTTP.

> Сервер висит в оперативе, а пхп периодически поднимается?



Сервер постоянно запущен, да. Если PHP встроен в Апач как mod_php, то он тоже постоянно запущен вместе с ним. Если PHP запущен как демон PHP-FPM, то он тоже постоянно находится в оперативной памяти.

То есть, и сервер и PHP уже запущены и ждут запроса.

> Пхп возвращает хтмл на сервер, а тот отправляет клиету?



Да.

> И зачем нужен сервер на локалке?



Тебе не нужен Апач для локальной разработки. В PHP встроен встроенный HTTP-сервер для этих целей: https://github.com/codedokode/pasta/blob/master/soft/web-server.md#встроенный-в-php-сервер

> Почему другие ЯП спокойно без него работают?



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

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

Например, вот это:

$_POST['ball'];

обозначает: "взять из массива $_POST элемент с ключом ball, и ничего с ним не делать".

Или вот это:

$_POST['ball'] >= 50 ? 'Сдал' : 'Не сдал'

значит "в зависимости от значения в массиве $_POST, взять одну из двух строк. И ничего с ними не делать".

Мне кажется, тебе рановато браться за работу с формами. Тебе сначала надо выучить основы языка: переменные, массивы.
459 2082862
>>082063

Попробуй написать так:

var_dump($_POST['ball']);

>>082448

Без знания ООП ты не сможешь нормально разбираться в ООП-коде и будешь тратить много времени на это, и делать ошибки.
460 2083159
Сап, двач. А скажи, насколько вообще хорошо-плохо делать php код без вьюх? То есть пхп возвращает json и все. А рендерит реакт в отдельном приложении?
461 2083184
>>083159

>А скажи, насколько вообще хорошо-плохо делать php код без вьюх? То есть пхп возвращает json и все. А рендерит реакт в отдельном приложении?


В современных spa так делают. Бекенд отдельно, фронтенд отдельно.
Такой подход больше плюсов несет беку - не нужно лезть во фронт, слой представления упрощается с иерархии шаблонов до json/xml/другой формат.

Хорошо-плохо зависит от области применения. Если на фронте нет сложного интерфейса, то такой подход может быть избыточен. Применять реакт к лендингу с одной формой - оверинжиниринг. Быстрее на php шаблон сделать и пару строчек на жс написать.
462 2083632
>>083159

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

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

При подходе с использованием реакта браузер сначала грузит страницу-прелоадер, CSS и JS для нее. Затем он грузит огромное тяжелое реакт-приложение. Затем оно запускается и отправляет аякс-запросы для загрузки данных. И только затем рендерится.

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

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

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

Сколько я не видел SPA-приложений от крупнейших компаний - все тяжелые и тормозные, и с прелоадерами.
463 2083654
>>062494 (OP)
Сап, ПХПач

Таинственная проблема с Laravel:
есть веб-сервис на ларавел, последние изменения в его код вносились в начале 2020 года, всё работало, его не трогали

Внезапно оно перестало работать, в логах Nginx указана 500 ошибка

Любой route с любыми параметрами возвращает пустую страницу

Пробовал в контроллерах прописывать строки вроде "echo 'asd'; exit(); ", никакого результата
То же самое делал в Index.php - тоже никакого эффекта

Пытался включить debug mode в env и config/app файлах, нет результата

В общем, веб-сервис выдаёт пустую страницу на любой запрос. Изменений в код не вносили.

Куда копать? У меня нет идей
464 2083660
>>083654

> в логах Nginx указана 500 ошибка


Как правило там же и написанно чем она вызвана.
Раз изменение в public/index.php(ты же его пробовал) не помогло-ты или не тот сайт редактируешь, либо конфиги вебсервера по пизде пошли. Это первый файл запускающийся же.
465 2083890
>>083654
ошибка до автолоадера или после? До бута Kernel или после? Ты дебаг делал вообще или мы тут псайкеры дохуя?
466 2083903
>>072559
Идиократия
467 2083987
Аноны, что за синтаксис в конце. Двоеточие и название чего-то.

public static function foo($arg) : Something
468 2083996
>>083987
тайп хинтинг
469 2084563
>>083890

>ошибка до автолоадера или после? До бута Kernel или после?


А как это сделать? я новичок(
470 2084565
Всякие итераторы и функции из SPL вообще используются или это реликт уже?
471 2084578
>>084563
в public/index.php в первой же строке после <?php ставь пробел, и пиши die('qq'); Если после этого твой сайт начал отдавать qq вместо ошибки-проблема в сайте, если нет-в веб сервере. Но вообще с таким уровнем знаний ты её не решишь.
472 2084580
>>084578
Спасибо. Пихал dd() куда только мог, нет результата

Посмотрел версию ПХП - 5.4

Долбоёбский хостинг произвольно сменил версию ПХП. Уже год так не делали, я и расслабился...
473 2084581
Не понял
474 2084583
>>083987
Возвращаемый тип
475 2084584
>>084580

>хостинг


>2021 год


Чел. VPS же.
476 2084586
>>084584
Дык не моё. Я просто помогал. Я вообще не разраб, если честно.
477 2084606
>>084586

>не моё


>просто помогал


>Я вообще не разраб



Зачем тогда полез, где не шаришь?
478 2084796
>>084565

Конечно, используются. Например, RecursiveDirectoryIterator позволяет искать файлы в папке и вложенных в нее папках.

>>083987

Это значит, что функция возвращает объект класса Something или его наследника.
479 2084938
Можете, пожалуйста, объяснить нахуя вообще нужны интерфейсы и абстрактные классы? Чтобы какой-нибудь другой чел, который будет дорабатывать твой код не сделал того что делать не нужно?
480 2084950
>>084606
Не стоит вскрывать эту тему
481 2084962
>>084938

>интерфейсы


Чтобы код был завязан на контрактах, а не конкретных реализациях.

>абстрактые классы


Чтобы определять какую-то абстрактную логику.

Задумайся для начала зачем вообще нужные классы, если можно процедурки хуярить и всё будет отлично работать
482 2084995
>>084938
Чтобы организовать большие объемы кода
483 2085040
>>084938

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

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

Еще немного про интерфейсы тут: https://github.com/codedokode/pasta/blob/master/php/interfaces.md

Абстрактный класс нужен когда есть несколько схожих классов, у которых есть общий функционал, а есть различающийся. Например, ты делаешь систему скидок. Один вид скидок зависит от дня недели, другой от суммы покупки, третий от истории покупок. Ты можешь каждый вид скидки представить классом. При этом у них будет как общий функционал, так и различающийся (общее у них то, что их можно применить к корзине и получить скидку, разное у них то, как они определяют скидку). Ты можешь сделать базовый класс, общий для всех скидок, и от него унаследовать конкретные классы для каждого вида скидки.
484 2085148
>>084962

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


Так и делаю, мне норм.
мимо луакодер
485 2085187
>>062494 (OP)

> 9 июля 2020 года Дэйл Хирт (англ. Dale Hirt), менеджер проекта PHP в Microsoft, в рассылке php.internals выпустил сообщение[36] о том, что после выпуска версии PHP 8.0 Microsoft прекратит поддержку разработки этого языка программирования для Windows[37]. Специалисты Microsoft занимались компиляцией бинарных версий интерпретатора для ОС Windows и тестированием их безопасности. В сообществе разработчиков PHP сообщили, что примут все необходимые меры, чтобы найти в ближайшее время альтернативный вариант для организации поддержки PHP 8.0 и выше для Windows, например, своими силами[38].



Ну шо, аноны, пыха всё?
486 2085225
>>084584
администрировать кто будет? твоя мамаша-шлюха?

не слушай долбоёба
487 2085243
Сап програмач, если бы вы сейчас вкатывались чтобы выбрали? Похапэ или шарпач?
488 2085250
489 2085257
15220844234430.jpg31 Кб, 720x720
490 2085278
Сколько процентов самописных фреймворков в пыхолегаси?
491 2085326
>>085187
Шо всё? Есть докер, есть всл. Живем дальше
492 2085327
>>085278
За 4 конторы не встречал таких
493 2085330
>>085187
>>085326
Как будто кто-то запускал пхп не на линупсе кроме шиндовс-вкатунов.
494 2085339
>>085330
Изредка запускаю пхп из под винды. Хотя в шторме настроен запуск через докер
495 2085366
>>085330
Два чаю. Я хоть и шиндузятник, но как только понял как работать с виртуалОЧКОй сразу туда перекатился, а уж теперь то при живом всл и дешевых впсках вообще грех на шинде запускать. Тестовая среда всёж таки должна быть максимально похожа на ту в которой прод будет, а прод на шинде держать-кретинизм.
496 2085379
>>085366
на каком дистрибутиве работаешь?
497 2085380
>>085366
Пхп прод держать на винде в некоторых случаях невозможно.
Некоторые экстеншены к пхп на неё тупо не ставятся.
Сколько же я намучился с имейджмеджиком...
498 2085384
>>085379
Да на убунте. Мне как человеку не хотящему вкатываться в линукс выбирать не охота, а убунта-дефолт.

>>085380
Ну вот да, например.
499 2085715
Аноны, что можно сделать в качестве пет-проекта? Интернет-магазин, бложик из банального что в голову приходит. Еще какие-то идеи может есть?
500 2085887
>>085715
-------------------->>>2069501
501 2086476
>>085887
Крад, рега, сторонние айпиай... Спасибо. А можно тыкнуть конкретных пару примеров, а то все равно в голову ничего не приходит, особенно со сторонними айпиай :/ Фантазии нет совсем, не быть дизайнером фронтенда мне.
Сотня нефти.png137 Кб, 400x173
502 2086970
>>082847
>>082854
Спасибо, оп!
503 2087260
Что надо учить в Symfony (какие курсы) чтобы сделать следующее:
Сделать сайт, который бы предлагал юзеру пройти тесты по разным областям знаний

На первом экране сайта юзер авторизуется (регистрируется) и выбирает тест из нескольких

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

На третьем экране тоже отвечает на вопросы, заполняет форму (но уже форма другого вида ставит галочки)

Надо связать ответы юзера из разных форм и занести в БД

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

Стоит ли браться за такое тестовое задание если ни о Симфони ни о Доктрине раньше не слышал, но готов их усердно изучать?

На ютубе есть начальный курс как запилить приложение на Симфони - простейший блог, но с БД.

Я его освоил (скопировал код и запустил) Сложность для меня как для новичка это реализовать саязывание ответов из второго и третьего шага.

Заранее спасибо за любую подсказку)
504 2087263
>>087260

для мультишаговой формы есть готовое решение, которое до сих пор работает (я ставил себе тестовую демку)
https://github.com/craue/CraueFormFlowBundle

Но там во первых CRUD, во-вторых я думаю это не совсем правильно собирать по кусрчкам себе приложение

тот же
505 2087461
{
$this->subsystem1 = $subsystem1 ?: new Subsystem1();
$this->subsystem2 = $subsystem2 ?: new Subsystem2();
}
Что здесь за схлопнувшийся тернарный оператор "?:" Что это значит?
506 2087475
>>087461
А понятно, посмотрел тот же код на нормальном языке, это оператор ||
507 2087486
Пацаны, не могу решиться. Что выбрать, чтобы не обосраться в будущем с работой?

Учить шарп и развиваться в этом направлении? (десктоп разработка)
Учить пыху и ларавельку и развиваться уже там?
508 2087557
>>087486
1С Битрикс
509 2087559
>>087557
да отстань от меня говноед
510 2087595
>>087486
Шарп/ява на сегодняшний день не оставят без заработка, в будущем вероятнее тоже. РНР только поддержка легаси. Новых, востребованных рынком, продуктов нет и не предвидятся. Я бы рассматривал РНР в ознакомительных целях исключительно. Связывать свою жизнь с веб-пердолингом для тех, кто не может в нормальные языки и умение программировать.
511 2087680
>>087486

>Учить шарп и развиваться в этом направлении? (десктоп разработка)


Десктоп мертв
512 2087719
Блин, есть какая-нибудь статья-гайд или видос-гайд на русском языке с построением нормального crud web app, без использования фреймворков и с нормальной организацией по опп и mvc? Заранее благодарю.
513 2087758
>>070404

>поезд ушел


Надо сказать знакомым 35 и 38 лет, чтобы увольнялись со своих мест и шли обратно на старые работы - поезд-то всё, ту-ту, ушёл, а они и не знают.
514 2087765
>>070436

>34 - слишком великовозраст для реального шанса на вкат



Я эту хуйню про ПОЗДНО ВКАТЫВАТЬСЯ кроме двача нигде не видел почему-то. Есть, конечно, ебучие конторы, которым надо вчерашнего студента, который еще не понимает, что такое деньги и зачем они ему, кроме как купить приставку, пивас и пиццу, чтобы недоплачивать ему. Но такого говна и вне айти дохуя. Вопрос, нахуя туда вообще идти работать. Ответ, возможно, кроется в народной мудрости - свинья грязь везде найдет.
515 2087780
>>087680
Я сейчас работаю саппортом в конторе, где есть грейд до c# разраба. Они мне говорят, что на этой позиции засиживаться не надо. Хотят, чтобы я дальше развивался. Веба в этой конторе нет.
Разрабам-шарпистам платят до 150, но не меньше 100. Мне на саппорте сходу платят 60, через год 80 планируют, если я не перейду в разработку.
Начитался в соседних тредах, что если ты в саппорте, то ты и останешься в саппорте. Почему все так думают?
Я работал уже в веб-студии когда-то, работал в тестировании. Сейчас пошёл в саппорт потому что график 2-2 (одна ночная смена есть и там тикетов дай бог 2-3 за ночь будет). Ну и при таком графике мне будет удобнее что-либо учить. Вот сейчас пиздец не знаю. Либо шарп и в этой конторе дальше за ~150 работать шарпистом, либо пыха и дальше ларавельку ебашить и найти что-нибудь за 80 jun+ уровня.
К слову, на пыхе могу простенькое круд-приложение запилить с MySQL. И Ajax ебануть, но это уже с гуглом.
Может что дельное подскажешь/подскажете?
516 2087784
>>087780

>Начитался в соседних тредах


Не читай советских газет двач. Тут какой-то иной мир, параллельная вселенная. Кто-то где-то что-то услышал, или кого-то пидорнули, и теперь ОСТАНЕШЬСЯ В САППОРТЕ.

>Они мне говорят, что на этой позиции засиживаться не надо


Тебя практически приглашают разрабом стать, ты понимаешь это?
517 2087787
>>087784
Да я первую неделю работаю только. Они сразу сказали, что есть куда расти и через год можно смотреть в сторону c# или программист АСУ ТП. Про второе не знаю даже что это такое. Если реально есть такая возможность, то при своём графике 2 дня после 2 смен готов въёбывать.
Просто не очень хочется наебаться с выбором ЯПа.
518 2087855
>>087787

>наебаться с выбором ЯПа



Ты сейчас в шаге от этого, беги из треда
519 2087869
>>085715

>Аноны, что можно сделать в качестве пет-проекта?



Верстай копию вот этого:

http://www.12542.ru/pg_0003.htm
Archer 520 2087891
Ребят, почему на ideone иногда, когда нажимаешь "run", то страница просто обновляется (или как будто обновляется) и весь код исчезает? "назад" не помогает, кода уже нет, приходится все заново писать, это весьма напрягает, особенно учитывая, что здесь нет автокомплита и надо каждую переменную вручную полностью печатать. У кого так же?
521 2087960
>>087486
Очевидный golang очевиден.
castcombitrix1c[1].jpg44 Кб, 900x600
522 2087978
В чем подводные битрикса кроме того, что рынок ограничен нищими пидорахами?
523 2088133
>>087780

>Разрабам-шарпистам платят до 150, но не меньше 100


Если там свеженький нет кор, то збс, потом можно будет срулить на х2.

>Начитался в соседних тредах, что если ты в саппорте, то ты и останешься в саппорте. Почему все так думают?


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

>Я работал уже в веб-студии когда-то, работал в тестировании


Та же история. Чтобы стать разрабом надо писать код

>Вот сейчас пиздец не знаю. Либо шарп и в этой конторе дальше за ~150 работать шарпистом


Неплохой вариант, но запрыгивать надо поскорее

>ибо пыха и дальше ларавельку ебашить и найти что-нибудь за 80 jun+ уровня.


Если б у меня в своё время был варик идти в шарп бекенд вместо пыхи, я бы пошел не задумываясь.
В пыхе сплошное легаси и даже на относительно свежих проектах (которых практически нет) не веет новизной технологий, а с кода хочется плеваться. Из плюсов пыхи пожалуй слабенький возрастной ценз - можно спокойно заходить в индустрию хоть в 30, хоть в 35 лет. И относительная простота по сравнению с дот нетом
524 2088137
>>087787

>Они сразу сказали, что есть куда расти и через год можно смотреть в сторону c# или программист АСУ ТП


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

>Просто не очень хочется наебаться с выбором ЯПа.


Пхп не от хорошей жизни выбирают
525 2088141
>>087978
- Крайне низкий ценник относительно других стеков
- Система написана армией школьников/студентов, качество кода соответствующее, архитектура отсутствует
- Система очень глючная, тормозная и тяжело поддается дебагу
- Среди других разрабов считается зашкваром ковыряться в битриксе

Подробнее можешь сам почитать:
https://habr.com/ru/post/282333/
526 2088258
>>084962
А, может, кто-то уже подумал и где-то просто и доступно написано, зачем нужны классы?
16022671038820.png156 Кб, 640x480
527 2088259
>>088137

>Пхп не от хорошей жизни выбирают


А от чего? Что с ним не так-то?
Archer 528 2088316
Не решается задача на кодварсе.
529 2088374
>>087595

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

PHP на сегодняшний день активно используется в вебе. Он лучше JS тем, что у него не течет память, как у приложений на Ноде, в нем есть тайп-хинты и ООП, и можно писать удобный, легко читаемый синхронный код вместо нечитаемой лапши из промисов, await и что они там еще придумали, лишь бы не писать нормально. Он лучше Го тем, что в нем нормальный ООП, и PHP не пытается быть "не таким как все". В PHP удобнее и проще работать с массивами, чем в Го. В PHP не надо явно возвращать ошибки, как в Го.

А уж запускать и разворачивать приложения на PHP куда как проще, чем на JS и Go, и поганый Докер не требуется (Докер это штука, которая запускается из-под рута, создает тонны неужных образов на каждую строчку докерфайла и может менять настройки вашего фаерволла, открывая хост для доступа снаружи. Например, у одной компании Докер после выгрузки на прод открыл доступ к монге, и вандалы дропнули ее содержимое).
530 2088379
>>087719

Тут есть немножечко по MVC с примером кода, но не знаю, подойдет ли: https://github.com/codedokode/pasta/blob/master/arch/mvc.md

>>087891

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

>>087960

Там без знания Си делать нечего.
531 2088383
>>088316

Наверно, строку надо не вывести, а вернуть с помощью return.
532 2088395
>>088316
>>088379
>>088383
да, оказалось надо готовую строку вернуть, а не выводить
533 2088396
А хули \n не работает? Двойные кавычки использую, даже примеры копипащу и они тоже не работают. ПХП 7.4
534 2088401
>>088258
Забудь про "просто и доступно написано", если это касается чего-то сложнее чем "Hllwrld". Ты программист или может быть однажды им станешь - привыкай думать головой, не опираясь на слова Васи с форума.

Если не понимаешь, зачем нужны классы - значит они тебе не нужны. Пиши без них. как же заебись, что можно говнокидить дома и техлид не убьет
Как только поймешь, что что-то не так и вспомнишь про классы - пойди и прочитай доку еще раз. Если в голову ебнет мысль "ля, так оно мне и нужно" - круто. Если нет - жди дальше.
Archer 535 2088406
Впервые столкнулся с таким странным тернарным оператором. Это важно знать. Важно знать, что он здесь не такой, как в других популярных языках (Java, JS, C#). Вот статья на хабре https://habr.com/ru/post/114899/

Если коротко: ставьте скобки, чтоб все работало "как надо".
536 2088558
>>088396
В консоли(терминале) хоть запускаешь?
537 2088562
>>087765
Ты не понимаешь что феминизм победил и сейчас везде тянки - хрюши, тимлиды, начальницы всех мастей и т.д. Как думаешь к кому они будут более благосклонны - гречневику за 30 или молодому шутливому зумерку?
538 2088572
>>088396
Используй PHP_EOL
540 2088600
Это правда, что пхп больше не говно?
541 2088619
>>088600
Да. Умирающее неговно.
542 2088639
>>088137

>Пхп не от хорошей жизни выбирают


Мне кажется, потратить полгода на изучение голой пыхи и ларавельки с sql и ты уже спокойно джун в дс за 60к и больше. В шарпе я буду год только учиться, как минимум.
543 2089086
>>088396

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

Чтобы переносы строки работали, поставь в начало скрипта

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

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

Или ты можешь изучить HTML и использовать теги HTML для форматирования.
544 2089091
>>088639

Более того, ты выучишь основы C#, придешь на собеседование, а там будет умник с вопросами по Си вроде "расскажите, где хранятся локальные переменные? Почему именно там, а не где-то еще", "расскажите, что такое куча и как она устроена", "расскажите, почему используется JIT и почему не используется AOT компиляция", "расскажите, почему программа компилируется в байткод".

А в PHP таких вопросов не будет.

И, кстати, если у кого-то есть вопросы про кучу, байткод или локальные переменные, в нашем треде на них ответят.
545 2089146
>>087978
Зашел в фл.ру. Там много заказов за 1000 р. на Битриксе. На апворк не пускают.
Archer 546 2089195
https://ideone.com/wioBRm - опечаточники. Зацените? Нормально? Или есть то, что никогда никто не пишет в 2021? Спс.
547 2089198
>>089195
изначально думал еще проверять слово английское или нет путем подсчитывания количества английских/русских букв, но это не очень эффективно, потому что в таких, например, словах: всем, оно, мы, меня, тогда и т.д. Здесь программа может решить, что это английское слово, ведь тут могут быть все буквы английскими. Хотя мой вариант: проверка по уникальным буквам типа "d, v, b, h, t" - тоже не 100% вариант, но выглядит, кажется, лучше, потому что слово "всем", написанное чисто английскими буквами определится как русское и, соответственно, все ангельские буквы заменятся на русские, а в первом варианте не заменятся. Можно конечно сделать и ту проверку и эту проверку, то есть всё объединить и получится, наверное, более достоверно. В общем, устал уже думать, как достичь 100% варианта. Надо переходить к некст задачам и темам. Что скажете? Сами как решили? Буду благодарен за фидбек.
548 2089200
>>089198

>ведь тут могут быть все буквы английскими


с и c-разные символы так то, хоть и выглядят идентично, и даже одной кнопкой печатаются...
549 2089310
>>089200
так в задаче как раз такой вид ошибок и есть, что в тексте встречаются русские слова с английскими буквами, которые выглядят идентично, и английские слова с русскими буквами, а суть задачи в том, чтобы исправить это, сделать так, чтобы русские слова были написаны только русскими буквами, а английские только английскими
Archer 550 2089335
вот первые опечаточники, где просто указывается ошибка - https://ideone.com/PwJuEG

Я молодец.
551 2089377
Язык умер, все выходим из треда
552 2089383
>>089377
ещё один хоронильщик
553 2089391
Распишите, плиз, нубасы в чем отличия и какие сферы применения у Ларавеля и Симфони? На какой лучше потратить время для изучения?
554 2089555
>>089391

>в чем отличия


В подходе архитектурном.

>и какие сферы применения


Весь спектр веб приложений у обоих.

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


На тот который на рынке лучше себя будет чувствовать через 5 лет.
555 2089568
>>089555

>На тот который на рынке лучше себя будет чувствовать через 5 лет.


Это который?
556 2089583
>>089568
Скорее всего оба, если судить по тому, что на yii до сих пор полно работы, хотя он уже лет 6 как не развивается. А на лару и симфу регулярно выкатывают обновления
557 2089614
>>089568

>Это который?


А этого тебе точно никто не скажет. Если всё пойдёт хорошо-оба как выше отписали. Но может внезапно появиться конкурент который обоих выпиздит, или заставит меняться так сильно что старые знания станут малополезными. ИМХО оба примерно одинаково перспективны. Но вроде как у ларки побольше работодателей прямо здесь и сейчас (по крайней мере я за последний год на неё больше получил предложений, чем на симфони).
558 2089765
Подскажите кратко, возникла потребность сделать элементарную фидбэк форму, язык вообще не знаю, нагуглил код ниже, он работает, но в текст сообщения нужно вставить $name, $mail, $text которые из html формы передаются
Вот это хоть убейте - нагуглить не могу, пытался вставлять как получается, либо отправляется как есть "$name", либо вообще пустое тело письма

<?php
$to = 'exu3&ampleANUSmamQuilPUNCTUMcoY_om';
$subject = Subject';
$message = 'Hello, it's a message.';
$headers = 'From: noe3qreplyANUSmatbDilPUNCTUMc/iVom' . "\r\n" .
'Reply-To: nvOLoreplyANUSmX$QailPUNCTUMc;p9om' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);

?>


Заранее спасибо
559 2089767
>>089765
С таким на фриланс
560 2089776
>>089614

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



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

Заниматься матешей в соло я пробовал, начал с нуля, хотя знания в принципе были вплоть до 11 класса, но хотелось, чтоб было без пробелов, поэтому начал с книги для 5-6 классов. Прочитал ее, дальше не смог заставить себя читать. Это нереально скучно.
562 2089935
>>089767
Спасибо, уже сам разобрался
563 2089956
>>089933
Максимум пригодится, если на собесе попадется алгошизик. А так графы на проде не встречал
564 2089973
>>089583

>на yii до сих пор полно работы


Уже легаси считай.
Untitled.png34 Кб, 1434x737
565 2089974
Напарсил и посчитал теги с пхп-вакансий на хх.
566 2089982
>>088137

>Пхп не от хорошей жизни выбирают


А какой от хорошей жизни выбирают? Лисп ебучий борщехлебный?
567 2089985
>>089974
По моим наблюдениям фреймворки просят вообще чтобы, типа, тыжпогроммист был хороший. Периодически встречаю вордпресс-вакансии с требованиями знания фреймворка, причём почти всегда перечисляют их через строку. Скорее всего у тебя нерелевантно - нужно считать количество проектов, а не хотелки кабанчиков.
Untitled.png38 Кб, 1413x735
568 2090017
Да, про вордпресс забыл.
Archer 569 2090127
оп забыл сказать в задаче "Клавиша shift", что встроенной реализации mb_ucfirst в php нет, так что пришлось делать самому - https://ideone.com/J2a4ac

кто будет пользоваться - платите по 100$ лично мне, спс
570 2090161
Можно ли в php отдать ответ пользователю, но продолжить работать еще некоторое время?

Стандартный сценарий такой:
1) Пользователь делает заказ.
2) Скрипт работает, сохраняет заказ в базе данных, пишет емейлы пользователю а так же десятку сотрудников. Всё это время пользователь ждет.
3) Когда вся работа завершена, пользователь получает подтверждение заказа.

Цель:
1) Пользователь делает заказ.
2) Мгновенно получает подтверждение заказа.
3) Скрипт продолжает работать, сохраняет заказ в базе данных, пишет емейлы пользователю а так же десятку сотрудников.

Можно конечно же сделать что-то подобное при помощи кронджобов, но мне не нравятся кронджобы.
Есть еще другой вариант с отправкой джаваскрипта всместе с подтверждением. И этот джаваскипт сделает аякс запрос другому скрипту, который доделает работу с отправкой емейлов. Впрочем такой вариант тоже имеет массу недостатков.
Как же быть?
571 2090209
>>089776

>технологии веба достигли своего предела


А ты смешной.)
572 2090212
>>089933

>Господа, в какой момент понадобится математика выше школьного уровня? Всякие графы, дискретки и т.д.


В тот моменнт, когда ты решишь начать заниматься чем то что требует графов, дискреток, итд.
Это не про типичный веб. У меня за 9 лет практики было ноль ситуаций когда его бы не хватало (вкатился со школы).
Я вижу 2 варианта:
1)Ты попадёшь на проект в котором предметная область требует знаний (и то я хуй знает в какой предметной области всё это может понадобиться в рамках веб-приложения).
2)Ты попадёшь в другую ветку программирования(разработка движка для игры там, или что нибудь алгоритмически дохуя сложное).

Если же ты планируешь сайтики клепать-нахуй не нужно.
573 2090214
>>090161
Можно клонировать процесс. В ларавеле есть стандартные средства для очереди задач. Можно самому на каком нибудь реддисе, или мемкешде организовать очередь, из которой задачи забирать демон-процессом отдельным.
574 2090235
>>090209
По факту возразить сможешь? Программирование это не естественная, а абстрактная наука. Все важное что могло быть изобретено для веба, уже было изобретено. Дабы времени было предостаточно. Разве что маленькие косметические улучшения будут.

Не надейся на какое чудо, которое вот-вот придумает, и которое все поменяет.
575 2090245
>>090235

>Все важное что могло быть изобретено для веба, уже было изобретено


Чел, от того что ты и я не видим развитие наперёд оно не останавливается. Технологии развиваются, и развиваются постоянно. Вебу всего 30 лет, какое нахуй "предостаточно времени"?
Ебучие ДВС которым 100 лет в обед всё ещё развиваются, хотя "всё что было можно изобрести было изобретено" ещё в 70/80/90/00х годах в зависимости от твоей любимой эпохи машиностроения.
576 2090345
>>090245
Хуевое сравнение. ДВСы это объекты реального мира, чтобы их как-то исследовать и улучшать нужны большие и ресурсы и время на эксперименты.

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

Не жди каких-нибудь значимых улучшений.
577 2090348
>>090345

>И 30 лет этим ребяткам было достаточно для того чтобы выжать около-максимум.


С одной стороны 95+процентов современных концепций программирования были изобретены ещё в 80х и ранее. С другой-мы периодически переживаем то очередную контейнерную революцию, то массовое внедрение нейронок благодаря прогрессу в железе, то серьёзное смещение в балансе парадигм программирования (элементы функциональщины всё больше и больше проникают в прикладное ПО).
Плюс может поменяться модель потребления смартфоны изменили этот наш веб крайне сильно, например.
Да банально:нейронки могут улучшить автокомплишен до состояния "ввёл название функции, тело сгенерилось само", что позволит ещё выше в абстракциях подняться, быстрее и эффективнее генерить объёмы кода, и благодаря этому могут новые подходы возникнуть. Совершенно не принципиально материальный у нас продукт или нет, эволюция инжинернойили говнокодерской мысли происходит постоянно.
Я не говорю что будет обязательно что то революционное, но я говорю что появление новых инструментов, или эволюция текущих может координально поменять твою работу, и отрицать это-глупо и недальновидно.
578 2090350
>>090161

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


>Всё это время


это должно занимать примерно 0 секунд
579 2090364
>>090161

>Можно ли в php отдать ответ пользователю, но продолжить работать еще некоторое время?


Можно, session_write_close() и fastcgi_finish_request(). Но в твоем случае лучше очередь.
580 2090398
>>090348

>нейронки могут улучшить автокомплишен до состояния "ввёл название функции, тело сгенерилось само"


Скорей бы
581 2090415
>>090364

>fastcgi_finish_request


Судя по описанию это именно то что я ищу.
Правда у меня появляется фатальная ошибка
Call to undefined function fastcgi_finish_request()

Видимо причина этого кроется в том, что FastCGI у меня не используется.

Неужели разработчикам PHP было так сложно написать функцию
finish_request, которая работала бы всегда, не зависимо от того, используется ли FastCGI или не используется?!
582 2090416
>>089973
Легаси тоже нужно кому-то поддерживать
583 2090417
>>089982
Я бы шарпы взял, а там в нет кор
584 2090440
>>090415
В общем удалось решить проблему следующим образом:
Первый скрипт, тот который подтверждает заказ, отправляет
запрос второму скрипту при помощи curl с таймаутом в одну секунду.
Второй скрипт имеет директиву ignore_user_abort(true); и выполняет всю долгую и сложную работу.
В итоге пользователь, который запустил первый скрипт, ждет всего-лишь секунду таймаута и несколько мгновений подключения через curl.
Я конечно понимаю, что это решение - костыль. Но оно работает и это главное.
585 2090691
В ларке часто используется блэйд? Или ларку обычно используют как апи для фронтенда.
586 2090730
>>090691
Как повезет.
Обычно либо блейд, если там какой-то древний проект или денег на фронтов не хватило. Либо вуе, что тоже такое себе, при чем фронт тоже беки пишут
587 2090904
>>090730

>фронт тоже беки пишут


Представляю какая там хуйня понаписана.
Проще взять бутстрап для UI и не ебать мозг.
588 2090968
>>088374
Ебать, ты к нам из 2010 года?

>PHP на сегодняшний день активно используется в вебе


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

>Он лучше JS тем, что у него не течет память, как у приложений на Ноде


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

>в нем есть тайп-хинты и ООП


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

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


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

>Он лучше Го тем, что в нем нормальный ООП


Щас в го подвозят дженерики, а ты и дальше пиши по стопицот классов на каждый пердеж.

>В PHP удобнее и проще работать с массивами, чем в Го


В пхп нет массивов, только хеш мапы

>В PHP не надо явно возвращать ошибки, как в Го


Праильно, а нахуя явно возвращать? Мы же НОВЫЙ проект пишем, пущай с этими ошибками ебуться когда он станет легаси (через месяц)

>А уж запускать и разворачивать приложения на PHP куда как проще, чем на JS и Go, и поганый Докер не требуется (Докер это штука


Нам он и нахуй не нужон, докер ВАШ! У Пятровны вишь эта хуйня магическая САМА доступы открыла. В фаерволе шебуршит безбожник. Сладу с ним нет. Не по нашенски енто. Тут закал столетний, виртуалбоксовский. Тут вагрантом фонит по низам. Тут мужик свою виртуалку, свою bsd стережет накрепко.
589 2090980
>>090968
Разъебите его кто-нибудь по фактам. Мне не нравится что он пишет.

мимо ньюфаг-вкатун
590 2090991
>>090980

> мимо ньюфаг-вкатун


> в пхп


Посмеялся с тебя
591 2091016
>>090440

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


Ты сука гонишь что ли, всего лишь секунду...
У меня самые тяжелые скрипты секунды полторы отрабатывают, и каждый раз я проверяю точно ли не нужно воркер заюзать в этом месте.
592 2091056
Магазины на ларке с нуля пишут? Или используют пакеты типа aimeos?
593 2091058
>>090980
PHP решает свои задачи и решает их отлично - рыночек порешал, а что там пердит очередной борщехлеб всем насрать. Нечего там разъёбывать. Да и не написал он ничего конкретного - манька себя "погроммистом считает", а остальных - говном.
594 2091096
>>091056

>aimeos


Я бы заюзал
595 2091496
>>091096
Запилил по учебнику простейшую форму заказа с магазина и их обработку, но при этом не выводится цена и сумма, может кто проверить и посдказать?

http://sandbox.onlinephpfunctions.com/code/49ad22cddd2fa4d61bc080570e933814a2471605
596 2091501
>>091496
А все, забыл прописать ПОСТ к переменным
597 2091662
Ребята подскажите ситуацию, вот работал я макакой пхпшной, все программы писал в процедурно-функциональном стиле. Стоит ли сейчас искать что-то другое и возьмут ли меня на нормальную галеру, за нормальную40-50к хотяб зп? Или требования у таких галер обязательные знания и умения применять ООП? сейчас я на гос. предприятии работаю с легаси, чувствую что что-то не так
598 2091744
>>091662
ООП обязательное требования для современной промышленной разработки.
599 2091847
Такой вопрос, ребзя. На каком уровне желательно знать js для пыходжуна?
600 2091874
>>067067
Не очень понял что такое палиндром, но вот что получилось: https://ideone.com/so392Z
601 2091944
>>067067
>>091874
Ребят, вы переусложняете.
If(strrev(mb_strtolower($string)) === mb_strtolower($string)) {
echo('это палиндром);
} else {
echo('это не палиндром);
}
602 2092478
Всем здарова, я хочу стать верстальщиком. Учил html, scss, прочитал 1 часть Кантора по js, сверстал пару лендингов, читал на metanit про typescript, потом посмотрел видео по основам react и next.js, чтобы понимать как верстать реакт-компоненты и как принято делать страницы и компоненты в next.js Насколько я понимаю теперь мне надо учиться верстать под vue и angular.

МОЙ ВОПРОС ПО РНР. Насколько в 2к21 году популярна верстка на РНР-шаблонизаторах типа twig? Мне как вонаби верстальщику надо учить twig и учиться верстать на РНР-шаблонизаторах?
603 2092560
>>092478
Сколько времени у тебя заняло обучение?
604 2092582
Привет аноны, я не местный, не ваш, не пхпшник в клетчатой рубашке. Почему-то подумалось, что в этой ветке должны сидеть адекватные дяди, понимающие веб !

Короче, проблема проста, на на простейший get реквест получаю 401 unauthorized.

На сайте логин не требуется, прозреваю что ему нужны Куки.
На моём языке в сетевых либах есть возможность заСэттить кукисы, крайне много дрочился с этим, но после сеттинга валится ошибка что-то в стиле "already connected" соотв header засеттить не могу. Да и продебажить толком не получается.

Дальше пока сумбурные мысли о том, что нужно послать какой-то хитровыебанный header в реквесте. Хуй его знает. Что думаете? Где я жидко обосрался?
605 2092639
>>092582
Смотри в браузере, в инструментах разработчика что там отдаётся и принимается. Нам отсюда не видно куда ты пытаешься попасть и как, да и влом, если честно.
606 2092690
>>092560
Времени у меня заняло неможечко ДОХУИЩА!

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

Я вообще не думал о будущем. Я думал о том как сдать предметы в шараге и не угодить защищать сапоги. Преподы всех вечно пугали отчислением, только я омежка сыч на это вёлся. Когда остальные Ерохи хуй ложили и были правы! Потому что моя шарага МухГУ в итоге выпустила с дипломами всех, кто тупо ходил на пары и не терялся подолгу!

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

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

Так что постепенно вкатываться в вёрстку я начал аж 5 лет назад, когда поступил в шарагу! Я тогда начал дрочить штмл, цсс и пытаться верстать лендосы. Но я всё время бросал, потому что учеба в шараге требовала делать вообще другое. В шараге решали математику, физику, было море гуманитарных предметов не относящихся к специальности, учились паять, изучали устройство ПК правда устаревшее, мы, например, дискеты изучали.

Я закончил шарагу год назад. Меня пытались уволочь в армию. И пришлось в дурку ложиться. 10 дней в дурке провисел.

Извините, за изливание душе. Я искренне извиняюсь за своё существование. Я просто очень долго уже 5 лет не могу вкатиться в вёрстку. Извините.
607 2092732
>>092690

анон, что за настрой... ты хоть попробывал вкатиться?
608 2092740
>>092690
Поддерживаю молодого человека выше. Анон, что за настрой?

Соберись, возьми себя в руки и иди покорять что угодно.
Все у тебя получится.
609 2092748
>>092690
Анон возьми себя в руки, че ты в самом деле. У многих в жизни ситуации бывает хуже. Я например, чуть ли не бомж. И это никак не оправдывает, моё бездействие. Нужно дальше действовать. И в армейке отслужил итд. Решай проблему постепенно, разделив на более мелкие задачи. Так проще будет, и удачи.
unnamed.png21 Кб, 1196x752
610 2092820
>>092748
>>092732
>>092740
Почему весь pr утопает в токсичном говне, все выебываются друг на друга, дизморалят, и только в одном пхп-треде такая атмосфера поддержки? Это какая-то магия?
611 2092973
Подскажите, почему может не работать height: 100%?
У html задан затемненный фон, body - основное рабочее поле, и оно сейчас половину снизу подрезано затемненным фоном. Как body до конца продлить вниз без абсолютных величин?
612 2093045
>>092973
Ладно, похуй.
613 2093103
>>092639
Ладно спс.
Но ход мыслей правильный, что 401 может быть связан с куками?
614 2093155
>>091944

Это неправильное решение. strrev работает только с устаревшими 1-байтными кодировками и не переворачивает строки, закодированные в utf-8. Попробуй сам проверить свою программу на строке с русскими буквами в utf-8.
615 2093156
>>092973

height: 100% сработает только если у родителя height жестко задан - в %, пикселях или другой величине. Причем, если у родителя height в %, то соответственно у его родителя тоже должен быть задан height.

У тебя скорее всего не задан height у html. И еще, скорее всего, на body тебе нужен не height, а min-height.
616 2093190
>>093103
Это может быть связано с чем угодно, если у тебя например в инкогнито заходит на страницу, то возможно что сервер смотрит на юзер агент, а твой хттп клиент отправляет или своё имя, или вообще ничего. Но вообще скорее всего или какие-то куки ставятся, или еще какой-то хитровыебанный хедер. Тебе правильно посоветовали, открой девтулз и посмотри какие там ответы приходят
617 2093234
>>092820

> пхп-тред


Спасительный оазис в раскаленном песчаном аду.
618 2093243
>>092732

>анон, что за настрой... ты хоть попробывал вкатиться?


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

>>092740
Благодарю, буду стараться

>>092748
Блин, ты крут, что в армейке отслужил, красавчик. А я зассал, что меня там Ерохи напихвают и через дурку закосил, 10 дней там зависал, потом тесты проходил. Врач спрашивает вопросы, я отвечаю, она в компьютере заполняет. И когда вопросы закончились, я хотел заглянуть в монитор, какой там результат. И врач отвернула монитор, чтоб я не видел, что там. Так и не узнал что мне написали, чем я болен. Хотя мне пофиг, главное, что перестали меня после этого вызывать защищать сапоги. Ещё был мужик прикольный пациент, он когда узнал, что я от военкомата, то он стал пританцовывать и говорить стишки типа "мама - поликлиника, отец - военкомат".

Прошу прощения, что-то меня понесло. Большое спасибо за совет, я буду стараться.
619 2093370
Посоны, насколько джуну на первый вкат надо заморачиваться с архитектурой и клин кодом для пет-проектов-крудилок?
Получается, что у меня есть немного знаний, к ним добавляется шизоидное желание писать клин код, а в результате получается обфускейтед поебота типа FizzBuzzEnterpriseEdition, только все-таки не особо расширяемая.
Например флоу такое: в контроллер инжектится http-реквест. Контроллер преобразует http-реквест в дто (в laravel есть FormRequest, а в symfony я его сымитировал через ParameterResolver). Сервисы получают дто-запрос, отдают дто-ответ. Контроллер перобразует дто-ответ в http-респонс. Сервисы - это домен-сервисы, которые инжектятся через интерфейсы.
Воот, в моей реализации получаются следующие проблемы:
1. Жирные интерфейсы (как бы с нарушением interface segregation). В них просто круды прописаны, но вот захочу я завтра создавать-сохранять модели по-другому: мне весь круд переписывать надо будет (ну можно старый декорировать конечно, но все-равно мне кажется, что это не правильно). При этом не хочется впадать в другую крайность: дохуя интерфейсов (один - для сохранения, другой - для удаления и т.п.) - кажется, что это плохая идея. Че делать?
2. Также не понимаю как сделать легкозаменямые дто. У меня получается привязка к очень конкретным типам (вплоть до new в контроллерах). Кажется тут может помочь фабрика, но в них я еще, не шарю. Не понимаю как через них дто делать (и надо ли?), потому что в случае фабричного метода нужна логика на уровне фабрики, а в случае абстрактной фабрики дто будет на уровне интерфейса, что по-моему, не имеет смысла, так как дто нужно будет что-то делегировать, а нахуя ему что-то делегировать?
3. Когда я вернулся через две недели к своему коду, я тупил как я там собираю ошибки и откуда берется этот дто. Это говорит либо о моей тупости, либо о том что код реально запутанный, либо, что последнее - это следствие первого.
Примерно так я и мучаюсь. Может на реальных проектах научат как делать надо? Или наоборот - надо сперва уметь, чтобы туда попасть?
619 2093370
Посоны, насколько джуну на первый вкат надо заморачиваться с архитектурой и клин кодом для пет-проектов-крудилок?
Получается, что у меня есть немного знаний, к ним добавляется шизоидное желание писать клин код, а в результате получается обфускейтед поебота типа FizzBuzzEnterpriseEdition, только все-таки не особо расширяемая.
Например флоу такое: в контроллер инжектится http-реквест. Контроллер преобразует http-реквест в дто (в laravel есть FormRequest, а в symfony я его сымитировал через ParameterResolver). Сервисы получают дто-запрос, отдают дто-ответ. Контроллер перобразует дто-ответ в http-респонс. Сервисы - это домен-сервисы, которые инжектятся через интерфейсы.
Воот, в моей реализации получаются следующие проблемы:
1. Жирные интерфейсы (как бы с нарушением interface segregation). В них просто круды прописаны, но вот захочу я завтра создавать-сохранять модели по-другому: мне весь круд переписывать надо будет (ну можно старый декорировать конечно, но все-равно мне кажется, что это не правильно). При этом не хочется впадать в другую крайность: дохуя интерфейсов (один - для сохранения, другой - для удаления и т.п.) - кажется, что это плохая идея. Че делать?
2. Также не понимаю как сделать легкозаменямые дто. У меня получается привязка к очень конкретным типам (вплоть до new в контроллерах). Кажется тут может помочь фабрика, но в них я еще, не шарю. Не понимаю как через них дто делать (и надо ли?), потому что в случае фабричного метода нужна логика на уровне фабрики, а в случае абстрактной фабрики дто будет на уровне интерфейса, что по-моему, не имеет смысла, так как дто нужно будет что-то делегировать, а нахуя ему что-то делегировать?
3. Когда я вернулся через две недели к своему коду, я тупил как я там собираю ошибки и откуда берется этот дто. Это говорит либо о моей тупости, либо о том что код реально запутанный, либо, что последнее - это следствие первого.
Примерно так я и мучаюсь. Может на реальных проектах научат как делать надо? Или наоборот - надо сперва уметь, чтобы туда попасть?
620 2093463
>>093370
Ты хотя бы один реальный рабочий пет-проект сделал? Все эти траханья с архитектурой имеют смысл, когда ты шишек набил, а без опыта это всё называется интеллектуальная мастурбация. Завязывай - с этим долго и бесполезно играться можно. Поверь моему опыту.
15653376807570.jpg196 Кб, 1080x1080
621 2093471
>>093370
Ну и да - не гонись за идеальным кодом. Хороший программист знает где почище надо сделать, а где говна поднакинуть, но побыстрее чтоб. Это у тебя ещё детские какашки после стерильных туториалов не вышли - как увидишь реальный проект, так сразу отпустит.
622 2093491
Сап, такой вопрос, а зачем браузер пытается рендерить неправильную html верстку? Например, три дива <div><div><div> незакрытые будут интерпретироваться как вложенные друг в друга, и еще много всяких других странностей есть. Не логичнее ли, если тег не закрыт и он парный, интерпретировать его как текст?
623 2093501
>>091847
пофигу, зависит от вакансии
624 2093504
>>093491
Мы тут обсуждаем как бэк делать. С таким вопросами в тред по фронту.
625 2093516
Ребят, кто сколько чистого времени в день тратит на программирование (работа или учеба)???
626 2093519
>>093516
Когда как. От 6 до 12 часов. Стараюсь чтобы последнее было как можно реже. В среднем 7-8 стараюсь.
627 2093520
>>093519
Это если про работу.
Иногда сижу-пержу делаю своим мутки для души. Плюс на них в зависимости от усталости/времени/желания от 1 до 4. Но это не каждый день
628 2093525
>>093519
Это без учета прокрастинации и пинания хуев? 7-8 чистого эт очень серьезная производительность.
629 2093557
>>093525
Самый большой секрет - не слушать музыку и не смотреть никакого говна на фоне.
Ну и плюс высыпаться.
Правда сегодня у меня на работе новой пинания хуев официальные, ибо мне для проекта api ещё не завезли для бизнес логики (ТМ).
630 2093590
>>093516
5-6 часов в день, почти без выходных.
631 2093601
>>093557

>не слушать музыку


Хз мне под пситранс или эмбиент норм делается. Что-то в этом стиле:

>не смотреть никакого говна на фоне


А как его можно смотреть? У меня, например, концетрация с потоком в процессе и я просто не вспомню о чём там было.

Алсо, советую после каждой выполненной задачи делать небольшие перерывы.
632 2093608
>>093557
>>093590
Я сам в процессе обучения, если я только читаю или смотрю видосы, то если за день 4 часа наберется, то это очень хороший результат для меня. Больше читать/смотреть меня мой мозг нахуй посылает. Если пишу что-то для практики, то 5 часов чистого написания уже супер, в среднем часа 4 за сутки. Больше не получается из себя выжать. Без выходных каждый день занимаюсь.

Хз почему так, может я ленивая жопа, может со временем когда это до автомата все дойдет будет легче выходить и получится больше по времени работать, но меня моя продуктивность не устраивает. Хотел бы тоже часов по 6 хотя бы хуярить в день.
633 2093641
>>093557

>Самый большой секрет - не слушать музыку и не смотреть никакого говна на фоне.


Сегодня попробовал и охуел. Это реально работает, лол. Спасибо.
634 2093644
>>093608

>если за день 4 часа наберется


Да нормально будет, больше и не надо, можно меньше даже.
Тут нужно учесть один немаловажный фактор, который многие постоянно упускают - учёба всегда тяжелее даётся, чем применение уже развитых умений. Т.е. 5 часов пилить код это в целом легче чем 2 часа учёбы - ты там над задачей думаешь и доки читаешь, а не думаешь над элементарными вещами. Учишься, понятно, постоянно, но в соотношении 75% уже умеешь и 25% новое.
Короче, 2 часа в день для учёбы достаточно - главное регулярность. За 3 месяца и один инфоциганский курс разработчиками не становятся.
635 2093686
>>093601

> >не слушать музыку


> Хз мне под пситранс или эмбиент норм делается. Что-то в этом стиле:


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

> >не смотреть никакого говна на фоне


> А как его можно смотреть? У меня, например, концетрация с потоком в процессе и я просто не вспомню о чём там было.


Многие, когда я в офисе был, так делали. Да и я сам. Ставишь какой нибудь подкаст на Ютубе / видос и слушаешь. Либо в окошко мелкое сворачиваешь.

Здесь как бы многие моменты индивидуальны. Не претендую на истину.
636 2093734
Пишу пет на Ларе и у меня вопрос к знатокам:
Как можно реализовать универсальные категории, к которым потом можно отнести как записи в блоге, так и, например, товары. Или сделать проще - на каждый модуль(блог, магазин и тд) заводить свою категорию?
Чёт туплю на этом месте. Как обычно делают?
637 2093831
>>093734
Полиморфные связи есть
638 2093843
>>093831
Так-то я не про связи спрашивал, а как делают.
639 2093918
Я не понимаю, когда я подключаюсь к бд, какой хост и порт я там должен указывать? Подключение происходит через апач или свой собственный сервер от pgsql? Указываю localhost - PDOexception выдаёт "could not find driver", хотя в php.ini расширение включил.
640 2093930
>>093918
Порт смотри и доступы. Все серваки имеют один общий адрес, но у каждого свой портпри условии что они выполняют разные функции.
641 2093957
>>093930
Всё, решил
A826E3F5-C13B-4FF6-A95D-CA9F66A9F66D.jpeg286 Кб, 2048x1581
642 2094060
Два Ч, спешу поделиться радостью! 7 лет ждал вката в программрование. Всё это время учил PHP (psr-*), дрочил алгоритмы, разные фрэймворки... ну короче, я джуниор битрикс разраб!

Спасибо тому анону, что 7 лет назад уговорил меня уйти с работы и заняться самообразованием. Это время прошоо незаметно. Джун в 35 это нормально.
16249659612420.png266 Кб, 432x477
643 2094072
>>094060
Если ты зелень то кек
Если серьезно, то сочувствую
644 2094090
>>094060
Молодец, поздравляю с удачным вкатом. Я вот только 3 года учу и на работу не берут ещё.
645 2094143
>>094060

>я джуниор битрикс разраб!


Братишка, ебать ты долбоеб, земля тебе пухом
646 2094201
>>094060
Пошёл велосипедить джуном на laravel свежей версии после двух месяцев дрочки пхп, в чем я не прав?
647 2094251
>>094201
А ты красава. Не то что этот говноед битриксоид
648 2094370
>>093370

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

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

Ну например: ты пишешь, что используешь DTO и инъекцию через интерфейсы. А для чего это нужно? Какие плюсы дает? Может быть, в твоем простом проекте без этого будет проще?

> Сервисы получают дто-запрос, отдают дто-ответ.



Здесь может получиться, что сервис залезает в зону ответственности контроллера. Ну, например, пусть у тебя есть функция поиска книги по id. И ты возвращаешь DTO с полями вида success = true, name=Название, author=Автор .... Твой сервис по сути занимается формированием view, его просили просто найти книгу, а он занимается переводом ее в JSON. В MVC это задача не сервиса, а View, представления, преобразовывать объекты в нужный пользователю формат.

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



Тогда тебе надо не спешить писать интерфейсы, а посмотреть: может быть, проще без них? Может, без них придется переписывать меньше кода при изменениях?

> Также не понимаю как сделать легкозаменямые дто.



Зачем может понадобиться заменять DTO? Его делают для задачи передать данные из A в B. Зачем тебе понадобится его на что-то заменять?

> Кажется тут может помочь фабрика,



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

> Может на реальных проектах научат как делать надо?



Нет, на реальных проектах будешь писать так, как нравится ведущему программисту.
648 2094370
>>093370

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

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

Ну например: ты пишешь, что используешь DTO и инъекцию через интерфейсы. А для чего это нужно? Какие плюсы дает? Может быть, в твоем простом проекте без этого будет проще?

> Сервисы получают дто-запрос, отдают дто-ответ.



Здесь может получиться, что сервис залезает в зону ответственности контроллера. Ну, например, пусть у тебя есть функция поиска книги по id. И ты возвращаешь DTO с полями вида success = true, name=Название, author=Автор .... Твой сервис по сути занимается формированием view, его просили просто найти книгу, а он занимается переводом ее в JSON. В MVC это задача не сервиса, а View, представления, преобразовывать объекты в нужный пользователю формат.

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



Тогда тебе надо не спешить писать интерфейсы, а посмотреть: может быть, проще без них? Может, без них придется переписывать меньше кода при изменениях?

> Также не понимаю как сделать легкозаменямые дто.



Зачем может понадобиться заменять DTO? Его делают для задачи передать данные из A в B. Зачем тебе понадобится его на что-то заменять?

> Кажется тут может помочь фабрика,



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

> Может на реальных проектах научат как делать надо?



Нет, на реальных проектах будешь писать так, как нравится ведущему программисту.
649 2094392
>>093491

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

- https://html.spec.whatwg.org/#parse-errors
- https://html.spec.whatwg.org/#an-introduction-to-error-handling-and-strange-cases-in-the-parser

Был такой стандарт XHTML, основанный на XML, который при ошибке в коде выдавал страницу с ошибкой.

> Не логичнее ли, если тег не закрыт и он парный, интерпретировать его как текст?



Вообще, правила HTML чуть сложнее. Такой HTML вполне валиден:

<p>Текст<p>текст<p>текст

Так как теги <p> нельзя вкладывать друг в друга, то открывающий тег<p> автоматически закрывает предыдущий. Аналогично работает тег <li>.
650 2094397
>>093918

Ты должен указывать адрес хоста, где расположена БД, и порт, который она слушает. Апач тут вообще не при чем. Pgsql является сервером и сам принимает запросы.
651 2094444
Что нужно изучить чтобы решать задачи с ОП поста? Например про считалку на выбывание
652 2094464
Попробовал тут Нетбинс и нихуя не понял - почему он у меня пхпдок не подтягивает? Попробовал 12.4 и ЛТС 12.0 - в обеих только радостно вываливает дефолтные варианты. Без этой базовой для ИДЕ фичи это, фактически, обыкновенный редактор, только тяжелее в несколько раз чем тот же VSC.
Как вы им пользуетесь вообще?

Пробовал Eclipse с год назад - там похожее было, но там решается всё сборкой проекта и тогда ИДЕ видит всё что надо. А тут как? Не поверю, что есть такие говноеды, которые юзают ИДЕ как редактор.
653 2094500
Не совсем по теме, как настроить апач, чтобы он всегда запускал index.php в корневой папке независимо от того какой урл запущен?
654 2094663
>>094464
Сидим на шторме
655 2094696
>>094663
Почему когда речь идёт о ИДЕ обязательно вылезет кто-то и пукнет про шторм? Ты считаешь, что про него кто-то не знает что ли или как? С какой целью ты это написал?
Я спрашивал тех, кто умеет в Нетбинс вообще-то.
656 2094702
>>094696

>Почему когда речь идёт о ИДЕ обязательно вылезет кто-то и пукнет про шторм


Потому что к сожалению в нашем веб болоте у тебя из альтернатив только "ломанный" шторм, и лицензия шторма. Не? Всё остальное либо для фанатиков свободного по, либо для нитакихкавсе. Шторм-к сожалению единственная адекватная ИДЕ для этих наших похапе.
657 2094703
>>094464

>Нетбинс


В этом вообще невозможно писать, только начинаешь, появляются какие-то окна на пол экрана сверху и снизу, вообще не видно где пишешь. Ещё и пространство имён не воспринимает, говно в общем какое-то.
658 2094706
>>094696
Тому шо шторм - стандарт иде для пхп.
На каждой работе первым делом выдавали лицуху шторма
Untitled.png98 Кб, 1622x860
659 2094714
>>094060

>битрих

660 2094715
>>094703
Так я и спрашиваю - как в этом работают, потому, что на первый взгляд это убогое говно даже для бесплатного редактора. Как-то видел даже тех, кто за него срачи устраивал. Может это я чего-то не понимаю с ним?

>>094702
>>094706
Я это десятки раз уже слышал. Завязывайте в попугаев играть - я не про шторм спрашивал.
661 2094728
>>094715

>Так я и спрашиваю - как в этом работают


Так не работают в нем
662 2094729
>>094715
Ты просто время теряешь, пытаясь полюбить эти недоделки.
663 2094742
>>094728
А зачем тогда они который год новые версии этой недоделки выпускают?

>>094729

>пытаясь полюбить


Просто пробую всякое.
664 2094744
>>094742

>А зачем тогда они который год новые версии этой недоделки выпускают?


Вероятно оно в другие языки может лучше чем в пыху.
665 2094751
>>094742

>А зачем тогда они который год новые версии этой недоделки выпускают?


Мб бюджет инвесторов распиливают, хз. Будто мало софта делается в стол
666 2095230
>>094201
По каким материалам и что учил?
667 2095253
>>095230
Гайд с шапки по основам языка, потом доки пхп, потом задача про студентов, потом ларавель по документации. до пхп писал на си, с++, шарпе, питоне в качестве развлечения, так что как работает код и принципы ооп знал, гитом давно пользовался, как и линуксом в дуалбуте
668 2095281
>>094444

Вообще, должно бы хватать информации из учебника.

Для этой задачи нужно уметь работать с массивами. Общая идея примерно такая: создаем массив с значениями-номерами 1, 2, 3, ... и затем в цикле удаляем из него элементы по одному, пока в нем не останется нужное количество элементов.

Единственная сложность тут - как определить, какой именно элемент удалить. Допустим, в считалке 5 слогов. Если ключи в массиве начинаются с нуля (0, 1, 2, 3...), то первым надо удалить элемент с ключом 4 (он пятый по счету с начала), потом с номером 9, и тд. Когда мы дойдем до конца массива, у нас получится "дырявый" массив, в котором нет элементов с ключами 4, 9, итд. Мы можем его переупорядочить с помощью array_values, так что ключи снова будут идти по порядку без "дырок", и дальше продолжать удалять из него элементы.

Если есть какие-то конкретные вопросы, спрашивай.
669 2095283
>>094444

И если вдруг тебя заинтересовали задачи на алгоритмы, то ты можешь найти множество их на сайтах вроде codeforces или leet code.

>>094464

Эклипс относительно юзабельный, если с ним повозиться и настроить. Хотя, как я помню, там есть какие-то баги.

>>094500

Обычно используют mod_rewrite. Этот модуль позволяет "переписывать" URL, если он соответствует/не соответствует правилам. Документация есть, но на английском, и я бы советовал для начала почитать про этот модуль. Иначе ты не поймешь то, что написано ниже.

Используя mod_rewrite, мы пишем правило вроде: если URL не соответствует js/css/png/статическому файлу, то переписать его на index.php. Это позволяет нам делать "красивые" URL, а также защитит нас от ситуации, если злоумышленник смог загрузить на сервер свой php-файл и хочет его запустить.

Правила можно прописать в конфиг Апача (более надежно, так как он защищен правами доступа) или в файл .htaccess (чуть менее надежно, так как при наличии уязвимости его можно переписать) . Типичные правила выглядят так:

RewriteBase /
# Если в URL index.php - не переписывать его
RewriteRule ^index\.php$ - [L]
# Если URL ссылается на существующий файл или каталог - не перепиысыыать
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Иначе, заменить URL на указанный
RewriteRule . /index.php [L]

Кстати, тонкость в том, что Апач исполняет эти правила не один раз, а много раз подряд до тех пор, пока URL не перестанет меняться.

Конфиг выше не защищает от запуска других PHP файлов, если в URL прописать путь к ним. Чтобы защититься от этого, нужно поменять правила с -f и -d, чтобы они проверяли еще расширение файла. Сейчас правило выглядит как:

- если URL указывает на файл или каталог, не переписывать URL

Соответственно, если указать URL вида /upload/photo.php и такой файл есть, то он запустится.

А должно быть:

- если URL указывает на файл И этот файл имеет расширение css/js/jpg/png/... то не переписывать URL.

Думаю, что эти правила надо заменить на примерно такое:

# Если URL заканчивается на css/js/png - не переписывать
RewriteRule \.(css|js|jpg)$ - [L]

В общем, почитай про mod_rewrite, напиши конфиг, протестируй:

- что вызывается index.php,
- что статика отдается корректно,
- что посторонние php-файлы не запустить по прямой ссылке или используя трюки вроде /upload/photo.php/styles.css

Если есть какие-то вопросы - спрашивай.
669 2095283
>>094444

И если вдруг тебя заинтересовали задачи на алгоритмы, то ты можешь найти множество их на сайтах вроде codeforces или leet code.

>>094464

Эклипс относительно юзабельный, если с ним повозиться и настроить. Хотя, как я помню, там есть какие-то баги.

>>094500

Обычно используют mod_rewrite. Этот модуль позволяет "переписывать" URL, если он соответствует/не соответствует правилам. Документация есть, но на английском, и я бы советовал для начала почитать про этот модуль. Иначе ты не поймешь то, что написано ниже.

Используя mod_rewrite, мы пишем правило вроде: если URL не соответствует js/css/png/статическому файлу, то переписать его на index.php. Это позволяет нам делать "красивые" URL, а также защитит нас от ситуации, если злоумышленник смог загрузить на сервер свой php-файл и хочет его запустить.

Правила можно прописать в конфиг Апача (более надежно, так как он защищен правами доступа) или в файл .htaccess (чуть менее надежно, так как при наличии уязвимости его можно переписать) . Типичные правила выглядят так:

RewriteBase /
# Если в URL index.php - не переписывать его
RewriteRule ^index\.php$ - [L]
# Если URL ссылается на существующий файл или каталог - не перепиысыыать
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Иначе, заменить URL на указанный
RewriteRule . /index.php [L]

Кстати, тонкость в том, что Апач исполняет эти правила не один раз, а много раз подряд до тех пор, пока URL не перестанет меняться.

Конфиг выше не защищает от запуска других PHP файлов, если в URL прописать путь к ним. Чтобы защититься от этого, нужно поменять правила с -f и -d, чтобы они проверяли еще расширение файла. Сейчас правило выглядит как:

- если URL указывает на файл или каталог, не переписывать URL

Соответственно, если указать URL вида /upload/photo.php и такой файл есть, то он запустится.

А должно быть:

- если URL указывает на файл И этот файл имеет расширение css/js/jpg/png/... то не переписывать URL.

Думаю, что эти правила надо заменить на примерно такое:

# Если URL заканчивается на css/js/png - не переписывать
RewriteRule \.(css|js|jpg)$ - [L]

В общем, почитай про mod_rewrite, напиши конфиг, протестируй:

- что вызывается index.php,
- что статика отдается корректно,
- что посторонние php-файлы не запустить по прямой ссылке или используя трюки вроде /upload/photo.php/styles.css

Если есть какие-то вопросы - спрашивай.
670 2095284
>>094702

Не всем нужен PHPStorm, и даже те, кто его использует, зачастую не пользуется, а то и не знает про все его возможности. Зачем покупать программу, которую ты будешь использовать на 5%? Потому стоит посмотреть и на альтернативы:

- VS Code с плагином intellisense, с lint-плагином для проверки корректности кода
- Eclipse (с багами)
671 2095305
В mvc во view допустимо хуярить блоки if else и ебашить / пропускать хтмл элементы по результатам выполнения этих блоков? Все вычисления в модели, из нее выходит массив с кучей true/false, потом если true, то элемент добавляется к верстке, если false, то нет. Такое же допустимо?
672 2095368
>>095284

>Зачем покупать программу, которую ты будешь использовать на 5%?


Потому что даже эти 5% работают лучше на 2 головы чем у всех конкурентов, не?
Да и изредка даже у 5процентника возникает таки запрос на редко используемые штуки. И вот в случае если он сидит на другой иде-он будет как то терпеть и жить как жил. А если на шторме-погуглит, и начнёт использовать уже 6%. Внезапно:да, процесс изучения инструментов тоже зависит от практики.
673 2095370
>>095305
Допустимо конечно, иначе этого бы не было во ВСЕХ шаблонизаторах.
Тут, конечно, тонкая грань(что есть бизнес логика, а что допустимо и в шаблоне), но в целом-ничего страшного в условных операторах в шаблоне нет.
674 2095481
>>095368
>>095283

>Хотя, как я помню, там есть какие-то баги.


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

>>095368

>даже эти 5% работают лучше


Эти 5% это как раз и есть обычный редактор да модуль гита. Такое сегодня везде есть искаропки, и везде отлажено.
675 2095488
Устанавливаю куки с локалхоста, в хроме она видна в настройках, но $_COOKIES не видит ту куки, что я поставил, в чем дело может быть?
676 2095498
>>095481

>Эти 5% это как раз и есть обычный редактор да модуль гита


Как минимум это ещё переход к дефайну функции, корректная работа с неймспейсами, удобный ssh клиент встроенный.
677 2095505
>>095498

>переход к дефайну функции, корректная работа с неймспейсами, удобный ssh клиент встроенный


Тоже везде есть - это базовые фичи. Переход к дефайну ещё в 2002 году встречал в ИДЕ для Дельфи.
678 2095507
>>095505
Есть то он есть, но с этими нашими неймспейсами и автолоадами не всегда и не всё корректно отрабатывает.
679 2095881
Самое сложное это найти идею для проекта.
Важно чтобы:
а) Не требовал сбора тонн информации
б) Не требовал годы на разработку
в) Привлек немного пользователей
680 2096051
>>095305

Логику можно разделить на бизнес-логику и логику отображения. Например:

- если пользователь зарегистрировался менее 7 дней назад, то он получает скидку на товар - это бизнес-логика, ей место в модели.
- если пользователь VIP, то около его ника рисуется корона - это логика отображения, ей место во view. То есть просто во view пишем: if ($user->isVip()): .... endif.

>>095488

Дело может быть в неправильном домене для кук, пути (по которому видна кука), или времени жизни куки.

>>095481

А зачем в IDE поддержка git? git абсолютно удобно использовать из консоли. Наоборот, в IDE часто поддержка git реализована плохо. Например, в PhpStorm при разрешении конфликтов, если я не путаю, используется 3-панельная система сравнения в то время, как сторонние программы вроде KDiff3 имеют 4 панели.

>>095498

Переход к определению есть в Eclipse, VS Code + intellisense. зачем нужен SSH клиент в IDE, не очень понятно - можно просто в консоли набрать ssh user@host.
681 2096062
>>096051

>git абсолютно удобно использовать из консоли


Нет, не удобно. Я никому не рекомендую начинать знакомство с гитом с консольного варианта.

>используется 3-панельная система сравнения в то время, как сторонние программы вроде KDiff3 имеют 4 панели


Да? А что через консольку не разгребаешь? Тебе ведь удобно.
682 2096065
>>096051

>можно просто в консоли набрать ssh user@host


Алсо IDE предполагает наличие консоли, сразу настроенной под проект. Вообще сам идея IDE это когда есть один инструмент, заменяющий собой пачку различных инструментов. Так-то никто не мешает взять их все в отдельности и использовать - я сам такое иногда вытворяю.
683 2096085
>>096051

>Diff3 имеют 4 панели


Для чего используется 4ая панель?
684 2096111
>>093190
А где конкретно в девтулс это? (в хроме?)

>отправляет или своё имя, или вообще ничего.


Да, я же пишу c нуля реквест по сути.
То есть юзер агент и всякие дефолтные поля (как бы для эмуляции браузера) могут помочь?
Но всё-таки не въехал до конца с механизмом передачи кукисов. Может Postman заюзать, он такое умеет? Просто ленив пока. Вообще это мой сраный ПЕТ, поэтому всегда можно забить.
685 2096141
Короче, аноны, я вообще хуй знает что это.

Задал куки вот так:

setcookie("uniqueID", $cookieValue, ["expires"=>time() + 315576000, "domain"=>"localhost"]);

Делаю var_dump($_COOKIE) из одного места в коде под одним урл:

array(2) {
["uniqueID"]=>
string(13) "60eeab98e6208"
["PHPSESSID"]=>
string(26) "5f2gptrshcnltvi6b1l6kjf110"
}


И из другого под другим урл:

array(1) {
["PHPSESSID"]=>
string(26) "5f2gptrshcnltvi6b1l6kjf110"
}


Че это вообще за нахуй, как такое возможно
686 2096143
>>096141
Аноны, сории за полотно, через пару минут разобрался сам. Нужно было в опциях "path"=>"/" прописать чтобы куки было видно по всему домену.
687 2096149
>>093608

>если за день 4 часа наберется, то это очень хороший результат


Двачую, тоже вкатываюсь, третий месяц, за все это время 4 часа чистой учебы у меня получилось всего пару раз, обычно 2 часа выходит.
688 2096229
Напишите, плиз, регулярное выражение "Любое количество любых символов".
689 2096234
>>096229
/(.)/igm
690 2096281
>>096111

>это мой сраный ПЕТ, поэтому всегда можно забить


А я вот даже на петах на 100% всё выполняю. А если на реальном проекте встретится? Это вызов для меня скорее - могу много времени потратить, порой переделывая и прикидывая как лучше. Благо с петами рамок по времени нет.
691 2096287
>>096281

>А если на реальном проекте встретится? Это вызов для меня скорее - могу много времени потратить, порой переделывая и прикидывая как лучше


На реальном проекте никто не даст время на выдрачивание кода. Сделал - заработало - в прод
692 2096586
>>096287
Так в это и смысл пета - лампово выдрачивать свои навыки в комфортной обстановке.
693 2096612
>>096586
Все навыки заранее не выдрочишь. В разработке масса узких специализаций, где можно годами выдрачивать. А какие из них придется использовать на проде - чистая лотерея. Могут дать ETL, могут работу с платежами, а могут какую-нибудь аналитику строить. На каждый случай будешь код задрачивать?
694 2096669
>>096612
Тебе 12 лет что ли - что за фатализм "все навыки заранее не выдрочишь" и, типа, нефига даже заниматься. Любишь на месте велосипеды писать как получится - твоё дело, но чё ты до меня-то доебался?
695 2096681
>>096612
Алсо таких как ты нельзя подпускать к критическим системам - такого нахуевертишь. Приходилось общаться с людьми для которых сроки на втором месте и важнее именно качество и вот ты туда не проходишь потому, что сделал - заработало - в прод. Это подход хуятора в подвальной галере.
696 2096714
>>096681

>к критическим системам


Мань, критические системы не пишут на пхп.
Максимум это финтех, где всё покрывается пачкой тестов и ревьюится.

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


Вряд ли выбирая качество люди будут писать на пхп
697 2096727
>>096669
Прихожу на новое место работы - там своя предметка и архитектура, так что мои знания сразу ополовиниваются, пока в проект въедешь, пока в бизнесовой части разберешься.
Ну и я заранее не знаю, какая фирма даст оффер и какой проект в фирме придет. Может это сервис доставки, может инет магаз, может какая-то црм. Заранее дрочить предметку - если на мамкиной шее сидеть, мб и можно. Но обычно погружение происходит в первые пару месяцев работы. А там уже пишешь норм код как остальные разрабы
698 2096804
>>096062

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

Тем более, что эти формы - это лишь интерфейс к тем же самым консольным командам.

> А что через консольку не разгребаешь?



Для разных задач удобнее разные инструменты. Сделать коммит или посмотреть, кто и как менял функцию x, удобнее через консоль. Разрешать конфликты удобнее специально сделанной для этого программой (а не в консоли или в PhpStorm).
699 2096807
>>096085

В Kdiff3 используются такие панели:

Вверху:

- оригинальный код, от которого были отпочкованы две конфликтующие ветки
- код после твоих правок
- код после правок на сервере

Внизу:

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

То есть, если был код $x = 1; и ты его поменял на $x = 2, а кто-то другой на $x = 3 то в трех верхних панелях будут эти три версии кода, а внизу - итоговый результат (который в том числе можно править вручную, например вписать $x = 4).

В PhpStorm, как я понял из мануала, нету панели с оригинальным кодом. Нельзя увидеть, как код выглядел до правок.
700 2096817
>>096229

.*

Точка значит "любой символ, кроме перевода строки". Звездочка значит "предыдущий символ может повторяться от 0 до бесконечности раз".
хелп парни от этого зависит моя жиза я бомж без денег нужна устроиться челик 701 2096834
парни кто шарит помогите кто может по брацки хоть чонить

Тестовое задание на вакансию PHP-Программист.

Здравствуйте! Высылаю вам тестовое задание на должность PHP-программист.

Плановый срок решения задания: 3-4 дня. Сообщите, пожалуйста, когда приступите к тестовому заданию, на почту hwdTrANUSastriV%'oPUNCTUMrWI2u.

Если при выполнении задания у вас возникнут вопросы, обращайтесь на почту h#yCrANUSastrj&;ioPUNCTUMrd:@u.

1. Дан массив "категории". Каждая категория имеет следующие параметры:

"id" — уникальный числовой идентификатор категорий

"title" — название категории

"children" - дочерние категории (массив из категорий)

Вложенность категории неограниченна (дочерние категории могу иметь свои вложенные категории и т.д.)

Пример массива :

$categories = array(

array(

"id" => 1,

"title" => "Обувь",

'children' => array(

array(

'id' => 2,

'title' => 'Ботинки',

'children' => array(

array('id' => 3, 'title' => 'Кожа'),

array('id' => 4, 'title' => 'Текстиль'),

),

),

array('id' => 5, 'title' => 'Кроссовки',),

)

),

array(

"id" => 6,

"title" => "Спорт",

'children' => array(

array(

'id' => 7,

'title' => 'Мячи'

)

)

),

);

Необходимо написать функцию searchCategory($categories, $id), которая по идентификатору категории возвращает название категории.

2. Даны три таблицы:

таблица `worker` (работник) с данными — id (id работника), first_name (имя), last_name (фамилия)

таблица `child` (ребенок) с данными — worker_id (id работника), name (имя ребенка)

таблица `car` (машина) с данными — worker_id (id работника), model (модель машины)

Структура таблиц:

CREATE TABLE `worker` (

`id` int(11) NOT NULL,

`first_name` varchar(100) NOT NULL,

`last_name` varchar(100) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `car` (

`user_id` int(11) NOT NULL,

`model` varchar(100) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `child` (

`user_id` int(11) NOT NULL,

`name` varchar(100) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Небходимо написать один SQL запрос который возвращает: имена и фамилии всех работников, список их детей через запятую и марку машины. Выбрать нужно только тех работников у которых есть или была машина (если машина была и потом её не стало то поле model становится null).

3. Написать функцию, которая на входе принимает массив из открывающихся или закрывающихся тегов (например “<a>”, “</td>” ), а возвращает результат проверки корректности: т.е. является ли принятая функцией последовательность тегов структурой корректного HTML документа. Например, последовательность “<a>”, “<div>”, “</div>”, “</a>”, “<span>”, “</span>” - корректная структура, а последовательность “<a>”, “<div>”, ”</a>” - некорректная структура.

Необходимо использовать нативный php без использования библиотек DOMDocument, Simplexml и тд.

4. Написать класс-оболочку хранилища «Box».

В хранилище можно установить данные (setData($key, $value)), получить данные (getData($key)), сохранить данные (save()) и загрузить данные (load())

$key — произвольный идентификатор данных

$value — скаляные данные или массив

Хранилище состоит из:

- Интерфейс описывающий методы установки данных, получения данных, сохранения и загрузки

- Абстрактный класс AbstractBox содержащий реализацию необходимых общих методов

- Класс FileBox расширяющий абстрактный класс AbstractBox. При вызове save() сохраняет заданные в класс данные в файл. При вызове load() достает данные из файла.

- Класс DbBox расширяющий абстрактный класс AbstractBox. При вызове save() сохраняет заданные в класс данные в базу. При вызове load() достает данные из базы.

Функция load не должна ничего возвращать, должна лишь сохранять полученные данные внутри объекта. Для получения данных служит функция getData($key).

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

Классы FileBox и DbBox должен быть реализованы таким образом, чтобы нельзя было создать более одного экземпляра каждого из классов.

Общие пожелание по выполнению всех заданий: по 1 и 3 заданию необходимо в отдельном файле создать одну функцию с необходимой логикой, если необходимо какую-либо из функций разбить не несколько, делать все в этом же файле, по 2 заданию, необходимо в отделльном файле написать один sql запрос и больше ничего, по 4 заданию в отдельной папке создать необходимые классы. Никаких index.php, html разметки и тем более стилей добавлять не надо.

Желаем вам удачи в выполнении задания!

Спасибо.
хелп парни от этого зависит моя жиза я бомж без денег нужна устроиться челик 701 2096834
парни кто шарит помогите кто может по брацки хоть чонить

Тестовое задание на вакансию PHP-Программист.

Здравствуйте! Высылаю вам тестовое задание на должность PHP-программист.

Плановый срок решения задания: 3-4 дня. Сообщите, пожалуйста, когда приступите к тестовому заданию, на почту hwdTrANUSastriV%'oPUNCTUMrWI2u.

Если при выполнении задания у вас возникнут вопросы, обращайтесь на почту h#yCrANUSastrj&;ioPUNCTUMrd:@u.

1. Дан массив "категории". Каждая категория имеет следующие параметры:

"id" — уникальный числовой идентификатор категорий

"title" — название категории

"children" - дочерние категории (массив из категорий)

Вложенность категории неограниченна (дочерние категории могу иметь свои вложенные категории и т.д.)

Пример массива :

$categories = array(

array(

"id" => 1,

"title" => "Обувь",

'children' => array(

array(

'id' => 2,

'title' => 'Ботинки',

'children' => array(

array('id' => 3, 'title' => 'Кожа'),

array('id' => 4, 'title' => 'Текстиль'),

),

),

array('id' => 5, 'title' => 'Кроссовки',),

)

),

array(

"id" => 6,

"title" => "Спорт",

'children' => array(

array(

'id' => 7,

'title' => 'Мячи'

)

)

),

);

Необходимо написать функцию searchCategory($categories, $id), которая по идентификатору категории возвращает название категории.

2. Даны три таблицы:

таблица `worker` (работник) с данными — id (id работника), first_name (имя), last_name (фамилия)

таблица `child` (ребенок) с данными — worker_id (id работника), name (имя ребенка)

таблица `car` (машина) с данными — worker_id (id работника), model (модель машины)

Структура таблиц:

CREATE TABLE `worker` (

`id` int(11) NOT NULL,

`first_name` varchar(100) NOT NULL,

`last_name` varchar(100) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `car` (

`user_id` int(11) NOT NULL,

`model` varchar(100) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `child` (

`user_id` int(11) NOT NULL,

`name` varchar(100) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Небходимо написать один SQL запрос который возвращает: имена и фамилии всех работников, список их детей через запятую и марку машины. Выбрать нужно только тех работников у которых есть или была машина (если машина была и потом её не стало то поле model становится null).

3. Написать функцию, которая на входе принимает массив из открывающихся или закрывающихся тегов (например “<a>”, “</td>” ), а возвращает результат проверки корректности: т.е. является ли принятая функцией последовательность тегов структурой корректного HTML документа. Например, последовательность “<a>”, “<div>”, “</div>”, “</a>”, “<span>”, “</span>” - корректная структура, а последовательность “<a>”, “<div>”, ”</a>” - некорректная структура.

Необходимо использовать нативный php без использования библиотек DOMDocument, Simplexml и тд.

4. Написать класс-оболочку хранилища «Box».

В хранилище можно установить данные (setData($key, $value)), получить данные (getData($key)), сохранить данные (save()) и загрузить данные (load())

$key — произвольный идентификатор данных

$value — скаляные данные или массив

Хранилище состоит из:

- Интерфейс описывающий методы установки данных, получения данных, сохранения и загрузки

- Абстрактный класс AbstractBox содержащий реализацию необходимых общих методов

- Класс FileBox расширяющий абстрактный класс AbstractBox. При вызове save() сохраняет заданные в класс данные в файл. При вызове load() достает данные из файла.

- Класс DbBox расширяющий абстрактный класс AbstractBox. При вызове save() сохраняет заданные в класс данные в базу. При вызове load() достает данные из базы.

Функция load не должна ничего возвращать, должна лишь сохранять полученные данные внутри объекта. Для получения данных служит функция getData($key).

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

Классы FileBox и DbBox должен быть реализованы таким образом, чтобы нельзя было создать более одного экземпляра каждого из классов.

Общие пожелание по выполнению всех заданий: по 1 и 3 заданию необходимо в отдельном файле создать одну функцию с необходимой логикой, если необходимо какую-либо из функций разбить не несколько, делать все в этом же файле, по 2 заданию, необходимо в отделльном файле написать один sql запрос и больше ничего, по 4 заданию в отдельной папке создать необходимые классы. Никаких index.php, html разметки и тем более стилей добавлять не надо.

Желаем вам удачи в выполнении задания!

Спасибо.
702 2096846
>>096834
Так и че? Задание для джуна адекватное вполне. За вечер делается. Бери и делай, хули еще надо? Как ты работать собрался если ты эти мелкие задачки сделать не можешь сам?
703 2096859
>>096846
да мне некогда ебать, завтра уезжать надо короче в другой город, а работы нет нихуя, да и мне онли 2 задание бы
704 2096862
>>096804

>проекта из 3 файлов


Где ты такие проекты видел и зачем им гит?

В общем у тебя консолька ради консольки, а когда не консолька, тогда можно, но почему-то только тебе. Все остальные зачем-то тоже должны вводить буковки вместо того чтобы пару раз кликнуть мышкой.
Использование консоли удобно только для более хитровыебанных операций, а базовые все давно уже прокликивают. Та же работа с ветками - набери, посмотри, переключись. Через интерфейс же все ветки сразу видно.
Я сам большой любитель попердолить консолечку, но когда надо писать код и думать о проекте, то посторонних движений должно быть минимум - Это хорошо экономит время.
705 2096863
>>096807

>В PhpStorm, как я понял из мануала, нету панели с оригинальным кодом. Нельзя увидеть, как код выглядел до правок.


Есть такое, да. Хотя не очень часто нужно обычно резолвишь конфликт и дальше идешь. А в случае чего можно откатиться
706 2096871
>>096859
Ты троллишь нас что ли? Кого должно ебать что тебе там что-то некогда?
707 2096873
>>096846
Ну ты борзый канеш. Некогда ебать. Одно дело помочь, а другое сделать за какого-то охуевшего черта его работу, на которую ему к тому же поебать.
708 2096875
>>096834

>astrio


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

А ты просто хуй с горы и думаешь вкатиться таким хитрым способом, лол. Они же там обещают обучение вроде как.
709 2097005
>>096859
Ну и пошел нахуй тогда
710 2097131
>>096586
Да хер знает.
Меня лично мотивирует только потенциальный доход от работы над ПЕТом, а ламповость в самом процессе, как впрочем и мозготрах.
Много всяких тонкостей изучал в том году, а теперь вижу что я долбоеб и просто въебал время вникуда, в знания, которые ВОЗМОЖНО когда-то пригодятся или нет. Ну такое.
Нужно четко структурировать кодинг и условно гуглинг различных техник в каждый момент времени, постоянно перепроверяя и соотнося это с реальными проблемами на земле, которые ты способен решить.
711 2097283
>>096586
И как вариант набить гитхаб перед собесом.
712 2098064
Пацаны, хэлп. Вкатываюсь уже какое-то время, вполне придрочился к PHP/SQL, прохожу книжечку из шапки по Гиту и уже начал забывать JS. Собственно проблема в том что я просто сижу читаю\делаю какие-то глупые упражнения и чувствую что нихуя дальше не развиваюсь, тк ни одной более менее реальной задачи не решил и даже не знаю какие они могут быть. Возможно ли с такими навыками найти подработку\стажировку за еду или даже бесплатно, или где можно дрочить скилы, чтобы не я сам оценивал свой говнокод, а мне могли указать на ошибки?
713 2098138
В MVC во внутренние функции модели можно передавать глобальные переменные, или это считается за тотальный харам?
714 2098315
>>098138
MVC не про глобальные переменные, а про архитектуру. Глобальные переменные вообще лучше не использовать нигде.
Собери из них объект реквеста и передавай в контроллеры. Например даже древний Опенкарт при инициализации делает этот Реквест и очищает глобальные чтобы никому моча в голову не ударила их использовать при создании плагинов.
715 2098387
>>098064

>Возможно ли с такими навыками найти подработку\стажировку за еду или даже бесплатно


Думаешь один такой?
На стажерские вакансии километровые очереди стоят.
Так что дрочи скилы дальше, пиши пет проекты, пробуй собесы на джуна/мидла

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


Для начала возьми какой-то пет проджект, хоть банальный интернет магазин.
А оценить его могут в тематических чатах в телеге. Некоторых разрабов бывает заебывает работа и хочется отвлечься - могут поревьюить твоё поделие.
716 2099478
У меня есть таблица авиарейсов, типов самолётов, мест в самолёте и таблица тапов мест. Для каждой таблицы есть класс с методом создание, в котором есть запрос sql, привязка значений и выполнения запроса.
Но что-то я понял, что создать отдельно каждое место в таблице мест как-то глупо.
Вопрос - как сделать, чтобы при создании авиарейса, в зависимости от типа самолёта(в таблице которое есть поле с числом максимальных мест), таблица мест автоматически заполнялась в каком-то соотношении типов мест? Как это вообще приблизительно реализовывать?
717 2100063
>>099478
Лучше всего никак. Зачем тебе в базе незанятые места? Подтягивай занятые и общую конфигурацию самолета и возвращай клиенту актуальную инфу.
718 2100099
>>099478

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

То есть, в самолете типа 1 есть места A1, A2 ... и так далее. Если тебе понадобится оформить билет, то ты в нем указываешь id рейса и id места.

>>098138

В принципе, можно. Но все зависит от ситуации. Если ты имел в виду "у меня есть функция регистрации пользователя. Можно я просто в нее передам $_POST целиком?", то это плохая идея. Так как функция регистрации пользователя должна заниматься именно регистрацией, а не разбором переменных из _POST или валидацией форм. У тебя же эта функция должна "знать", как выглядит форма регистрации пользователя, какие поля из нее приходят.

Обычно такую задачу разделяют на подзадачи:

- разбор данных, пришедших из формы и преобразование этих данных в объект какой-то стандартной структуры (например: User или UserRegisterForm)
- проверка правильности данных
- создание пользователя

Здесь каждая функция занимается своим делом и ничего не знает о других функциях. Функция валидации или регистрации ничего не знает о форме регистрации.
719 2100104
>>098064

"реальные задачи" отличаются от учебных упражнений следующим:

- во-первых, в реальных задачах используется много готового кода, а именно: фреймворки уровня Symfony/Laravel, плагины к ним, шаблонизаторы вроде Twig, ORM вроде Doctrine. Все фреймворки учить бесполезно, но познакомиться с одним из них стоит.

- во-вторых, в реальных задачах гораздо больше "фич" и больше объем кода. В учебной задаче ты делаешь сайт из 3 страниц с 5 элементам (кнопки, ссылки, таблицы) и на каждой. В реальной задаче будет сайт из 300 страниц с 5000 элементами.

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

В шапке есть задача про сайт Testhub, она по сложности приближается к реальным приложениям. Можешь посмотреть ее.
720 2100779
>>096862

Проект из 3 файлов и консоль - это нужно для изучения гита. Потому что изучать гит удобнее на маленьком числе файлов и без перегруженного графического интерфейса.

Ты предлагаешь: не изучать гит, а сразу взять интерфейс с кнопками из phpstorm и пользоваться им. Те, кто умеет только нажимать на кнопки, не понимая толком, что они делают, в итоге ломают код при мерджах, при конфликтах. Это глупый подход.
721 2100811
>>100779

>умеет только нажимать на кнопки, не понимая толком, что они делают


Как это должно изменить набирание команд через консольку?
Понимать гит как раз легче через интерфейс т.к. там базовые операции разделены по типам: работа с коммитами, ветками, удалёнными репами, тегами и тд.

>ломают код при мерджах, при конфликтах


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

>Это глупый подход.


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

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

И ты так и не сказал - почему в одном случает нужно пользоваться только командами, но в определённых случаях ты лезешь в интерфейс? У тебя логика с двойным дном.
screen.jpg104 Кб, 1138x612
722 2100893
Почему Визуал студио все красным подчёркивает, в том числе имя файлов?
723 2101394
В laravel есть какой-нибудь способ изкаропки реализовать null object пользователя? Можно, конечно, свой сервис сделать, к нему фасад и функцию; или макрос на реквест приделать. Но, блин, не верю, что в ларе для этого свои велосипеды нужны.
724 2101578
>>101394

>null object пользователя


Что за зверь?
725 2101631
>>101578
Null object pattern, чтобы об нулл не спотыкаться.
Алсо, вроде как пользователь оказался нужен только в шаблонах, поэтому расшарил переменную через View.
photo2021-07-2019-03-03.jpg49 Кб, 604x458
726 2101688
727 2101706
>>101631
Может хватит оператора ?? который вернет пустого юзера?
728 2101783
Подскажите, есть jquery скрипт, который должен вытаскивать $id из строки таблицы:

$(document).on('click', '.elem', function() {
let id = $(this).attr('id');
$.post('index.php' , {
elem_id: id
} , function(data){
location.reload();
})
});

Сама строка таблицы: <tr id='{$id}' class='elem'>;
$id точно не пуст.
Таблица выводится в Index.php, скрипт подключён туда же.

Я не понимаю, как нужно принимать $_POST? Могу ли я его принимать в том же самом index.php вот так:?

if ($_POST) {
$my_object= new MyObject($db);
$my_object->id = $_POST['id'];
$stmt = $my_object->запрашиваюСодержимоеДругойТаблицы();
include "другаяТаблица.php";
}

Где ошибка? Неправильно отправляется $_POST? Или он неправильно принимается? И почему чёртова перезагрузка срабатывает?
729 2101786
>>101783

>$my_object->id = $_POST['id'];


фикс, тут у меня $_POST['elem_id'];
730 2101918
>>101631

>чтобы об нулл не спотыкаться


Для этого существуют проверки как в коде, так и в шаблонах. Если дёргать его через нулл-объект, то будут на выходе левые данные из этого нулл.
Не надо тащить паттерны туда, где их не надо.
731 2101935
>>101783

>почему чёртова перезагрузка срабатывает?


>location.reload();

732 2102053
>>101935
Блять, гений, спасибо за такое ценное замечание. Только вот post c id нихрена не приходит, и вообще, то что внутри if не срабатывает, даже если я там просто что-то вывожу с подставленным id.
733 2102091
>>102053
Шиз, спок. Удали код и иди на завод - тебе нельзя в программизм.
TGuSjRBS6E.jpg64 Кб, 494x662
734 2102103
>>102053
В зависимости от способа объявления скрипта, возможно, у тебя в $this не элемент, а всё окно целиком -- проверь. В таком случае лучше передавать в функцию event.target.

> Могу ли я его принимать в том же самом index.php вот так:?


Да

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

Зачем понадобилось делать такую ебанутую навигацию через $_POST-параметры вместо $_GET? При всех очевидных минусах, какие плюсы?
735 2102116
>>100104
- во-вторых, в реальных задачах гораздо больше "фич" и больше объем кода. В учебной задаче ты делаешь сайт из 3 страниц с 5 элементам (кнопки, ссылки, таблицы) и на каждой. В реальной задаче будет сайт из 300 страниц с 5000 элементами.

Можно, пожалуйста, пример такого реального проекта. 300 страниц это имеется ввиду 300 шаблонов для 300 видов страниц же? Что-то не могу себе представить ни один сайт с такой вариативностью.
image.png29 Кб, 1034x269
736 2102355
>>102116

>Можно, пожалуйста, пример такого реального проекта. 300 страниц это имеется ввиду 300 шаблонов для 300 видов страниц же? Что-то не могу себе представить ни один сайт с такой вариативностью.


Например у меня сейчас 130 файлов шаблонов и это только в ядре, еще больше в модулях и либах лежит.

Тот анон привел гипертрофированный пример.
Если обобщить, то на учебном проекте у тебя условно 5к строк кода. На рабочем будет 100к-500к, а может и больше (больше я сам не встречал, на текущем 500к с копейками). Соответственно большая часть проблем будет с тем, как справиться с разросшейся кодовой базой
737 2102359
>>100811

Изучать удобнее и лучше именно в консоли, потому что там ты делаешь действия по одному. Сначала add, потом commit. Нет никаких лишних прослоек или абстракций.

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

Более того, GUI обычно рассчитаны не на новичков, а именно на тех, кто уже знает гит (и изучил его, например, с помощью консоли). Ты, наверно, просто не способен поставить себя на место новичка и понять его образ мышления.

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



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

> который считает, что копипастить код нельзя



Тут ты пишешь чушь. Конечно, это плохая идея, копипастить код, так как потом тебе придется делать правки в нескольких местах. И ты бессмысленно увеличиваешь объем кода.
738 2102367
>>100893

Наведи мышь, и может быть появится подсказка, почему.

>>101394

По моему, это плохая идея. Так как не будут работать проверки вроде if ($this->user) ...

Обычно для авторизованного пользователя и анонимного показывается разный интерфейс и потому нужды в null object нету. Ну например, авторизованному пользователю ты показываешь "Здравствуйте, Иван", а гостю - "Войти на сайт".

>>101783

При клике в this будет не tr, а элеимент, на который кликнули, наверно в этом дело?

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

> Неправильно отправляется $_POST? Или он неправильно принимается?



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

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

$object->findData($id);

Зачем ты придумал какое-то свое вывернутое ООП? Лучше на функциях писать код, чем в таком стиле.
739 2102368
>>102103

Запросы, которые меняют данные на сервере (удаление, правка контента) должны отправляться через POST, а не через GET.
740 2102372
>>102116

> 300 страниц это имеется ввиду 300 шаблонов для 300 видов страниц



Да. Такое количество страниц легко набирается: личные кабинеты, админки с кучей разделов, лендинги, промо-страницы. Вот представь админку блога. Только для таблицы постов нужно несколько страниц: список постов, редактирование поста, статистика просмотров поста. А таблиц может быть сотня.
741 2102395
>>102359

>потому что там ты делаешь действия по одному. Сначала add, потом commit


Мы точно про интерфейс говорим? Ну, там, где вместо набора буковок просто нужную кнопку выбрать и получить тот же результат.

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


Вот этот никак кроме бреда не назовёшь. На чём основано твоё утверждение, что при наличии кнопок человек даже не попытается узнать что же эти кнопки значат?

>Более того, GUI обычно рассчитаны не на новичков, а именно на тех, кто уже знает гит (и изучил его, например, с помощью консоли)


Более того IDE обычно рассчитаны не на новичков, а именно на тех, кто уже знает язык(и изучил его, например, с помощью блокнота)
Так что ли?

>Конечно, это плохая идея, копипастить код, так как потом тебе придется делать правки в нескольких местах


>ты бессмысленно увеличиваешь объем кода.


Ясно - это троллинг такой. Я не поверю, что кто-то до сих пор переписывает код вместо того, чтобы скопировать нужный кусок и подправить под конкретную задачу.
742 2102404
>>102372

>Такое количество страниц легко набирается


>лендинги


>промо-страницы


Проиграно.
743 2102484
>>102395

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


Так ты любой проект похоронишь, постепенно увеличивая число багов и кол-во времени на доработки. А кодовая база будет расти как на дрожжах
744 2102519
>>102484
Джун, иди и посмотри любую библиотеку на гитхабе - там в документации специально примеры для копипасты существуют.
И больше не рассказывай тут про баги и время доработки - смешно выглядишь.
745 2102528
>>102519
Анон выше говорит про копипаст уже существующего твоего кода, и подпиливания под новое требование, а ты про копипаст пяти строчек из примеров разных либ, это вообще разные случаи
746 2102542
>>102528

>Анон выше говорит про копипаст уже существующего твоего кода


Давай ты не будешь за меня выдумывать что я там говорил?

Копипаст кода из документации или когда кто-то решил схожую проблему это нормальное явление. Требовать чтобы код переписывали вручную - дурость. Как и рекомендация прописывать команды гита вручную - к обучению самому гиту и его подводных камней это имеет самое отдалённое отношение.
747 2102561
>>102542

>Требовать чтобы код переписывали вручную - дурость


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

Это в простейшем случае.
Бывает такое, что копипасту приходится терпеть, т.к. не заложили достаточно времени на проработку решения. Соответственно техдолг растет
748 2102584
>>102561

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


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

Ты не совсем понимаешь что такое копипаста в контексте разработки. Одно дело, когда 10 строк у тебя на проекте то тут, то там мелькают - тогда надо убирать куда-то, и другое, когда время от времени на разных проектах эти строки мелькают - для такого библиотеку городить это уже показатель скуки и большого количества свободного времени.
И совсем уже третье это когда у тебя декларативный язык - тот же HTML например. Ну убери давай Бутстрап-компоненты в метод, чтоб без копипасты. Тут народ уже просто сниппеты юзает без задней мысли, что по-сути является аж целой автоматизацией копипасты.
749 2102704
Может тут кто знает:
Есть ли способ заставить запущенные докер-контейнеры ходить в интернет через впн запущенный на хост-машине?
750 2102851
Я этот >>094060

>>094072
>>094090
>>094143
>>094201
>>094714

Ебать вы токсичные, пиздец. Кстати, двух недель не прошло и меня выгнали. Сказали, что я недостаточно квалифицирован. Откуда я мог знать, что нужно знать git, rest, api, ajax, JavaScript, css, html, всякие babel, jquery и прочие аббревиатуры, которые я даже не запомнил. Мало того ещё нужен макбук и уметь в линуксе работать. Я маки с линуксом в глаза никогда не видел. Вынесли мозги какими-то докерами, виртуализацией, вагрант... вы реально это всё знаете??? Только без пиздежа, пожалуйста.
751 2102875
>>102851
Сколько тебе зп то пообещали за макакинг джуном фулстеком?
все что ты перечислил кроме жопаскрипта и ксс учится за сутки
752 2102889
>>102851
Скажу по себе

>git, rest, api, ajax, JavaScript, css, html, всякие babel, jquery


>докерами, виртуализацией, вагрант



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

rest - там 5 методов всего и пара рекомендаций, можно пару статей прочесть, станет понятно, что за зверь

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

ajax - способ сделать запрос из жс к твоему или внешнему бекенду и получить ответ, надо знать, там несколько методов всего (в нативном жс и в жиквери)

JavaScript, css, html - хотя бы основы надо знать, не везде есть фронты, да и нужны они редко, уметь сверстать кнопку или форму с нуля или из готовых блоков собрать, навесить на неё обработчик через жс.

babel - это необзяательно, на месте разберешься, какая там сборка жс

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

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

>уметь в линуксе работать


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

>вы реально это всё знаете???


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

Я из этого только бабелем не пользовался и вагрантом.
752 2102889
>>102851
Скажу по себе

>git, rest, api, ajax, JavaScript, css, html, всякие babel, jquery


>докерами, виртуализацией, вагрант



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

rest - там 5 методов всего и пара рекомендаций, можно пару статей прочесть, станет понятно, что за зверь

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

ajax - способ сделать запрос из жс к твоему или внешнему бекенду и получить ответ, надо знать, там несколько методов всего (в нативном жс и в жиквери)

JavaScript, css, html - хотя бы основы надо знать, не везде есть фронты, да и нужны они редко, уметь сверстать кнопку или форму с нуля или из готовых блоков собрать, навесить на неё обработчик через жс.

babel - это необзяательно, на месте разберешься, какая там сборка жс

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

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

>уметь в линуксе работать


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

>вы реально это всё знаете???


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

Я из этого только бабелем не пользовался и вагрантом.
753 2102935
>>102875
Меня на собесе спрашивали про знание языка, про алгоритмы, про разные хитрости навроде отличия print от echo, про базы данных. Обещали чистыми 30к. Взяли на должность младшего разработчика. Говорили про джуна бэкэнд.

В первый же день такая оказия вышла. Посадили за стол, а на нем только моники. Я коллег спрашиваю мол как работать то, а они ебала вытянули и гогочат что куропатки. Через пол часа какой-то ушатанный комп притащили, сказали, чтобы я со своим ноутом приходил. Блядь, у меня ноута нет. Показали confluence, jira. Там «тикеты». «Роудмап» показали, работают agile. Что блядь? чо к чему... Блядь, это пизда просто. Я даже не думал, что настолько выебут мозг.

Короче, два дня сидел читал код, все жти хтмл/цсс/джава скрипт... если с первыми двумя вроде как веатуре за неделю можно разобраться, то с джавой... ебанутый какой-то язык. По самому РНР я начал вникать на 3и сутки, тут менеджер он же старший разраб говорит, хули у меня в джире тикеты копятся, весь процесс им руиню. я столько новых слов узнал... открываю джиру, а там просто нескончаемый поток каких-то писем, хуй пойми что мне, а что не мне. Попросил коллег помочь как работать с этой системой. Они то суки походу и начали меня высиживать. Я за 1 день закрыл 3 заявки. Код оставил в комменте к тикету, коммент удетает в вики конфлюэнса. Мне говорят какого хуя не через гит отправляю правки.

Я ЕБУ БЛЯДЬ КАК ЭТОЙ ЗАЛУПОЙ ЕБАНОЙ ПОЛЬЗОВАТЬСЯ??? Я пришел код писать, баги править. Ну короче вчера утром меня рассчитали. Грустно до соплей. Но объём знаний ебанись какой. Я вот даже и не знаю чо дальше делать.
754 2102942
>>102889
Нихуя. Как ты этим всем владеешь?! Я вообще не понимаю ни хуя. Я на ютубе начал смотреть про виртуализацию и тупо поплыл. Скачал virtualboz , установил в него линукс минт, пишут, что он для новичков самое то. А чо с ним дальше делать я хз. Как там программы ставить? Я качаю дистрибутивы с оф сайтов mysql/php — пишет не может установить, предлагает какую-то программу поставить для запуска win32 приложений. Я поставил эту программу, вроде установил. Ярдыков для запуска нет, структура диска не такая как в винде, как там ориентироваться в душе не ебу.

Про гит почитал, но так и не понял про ветки и прочее. Рили надо знать? Неужели он так строго нужен? Почему в виде комментария на той джире не принимают?
755 2102963
>>102935
>>102942
Ты жирный? Че за хуйню ты несёшь?
756 2102970
>>102851
Ну да, все это надо знать. А в некоторых конторах надо еще и начальнику в жопу по понедельникам и пятницам давать.
На хорошем проекте (там битрикса не будет) постараются разделить бек и фронт: тогда бек точно сможет забыть про babel, но jquery, возможно, все-равно понадобится.
А вот наезды на девопс менее оправданы: от виртуалок, лиуксов и докеров никуда не деться.
Гит, рест, апи, Аякс Великий - это база, без этого совсем никуда. Последние три учатся меньше чем за день.
>>102935

>Попросил коллег


За редким исключением, программистишки - тупые токсики, по-сути, нихуя не знающие и не умеющие: Вероника все по-фактам разъяснила в соответствующем видео.
Мимовыкатился после двух лет.
757 2102971
>>102942
Похоже, кодинг - не твоё.
Тут нужно уметь копнуть глубоко, разобраться в проблеме, если не шаришь

>Как ты этим всем владеешь?!


Постепенно осваивал инструменты один за другим, практиковался

>установил в него линукс минт, пишут, что он для новичков самое то. А чо с ним дальше делать я хз


Попробуй поднять на нем веб сервер nginx+php-fpm, настроить в nginx чтобы на твой сайт вел локалхост. Гайдов как это сделать тонны.

>Как там программы ставить?


Троллишь? Погугли

>Я качаю дистрибутивы с оф сайтов mysql/php — пишет не может установить, предлагает какую-то программу поставить для запуска win32 приложений


Ну ты совсем необучаемый. Не думал, что на лине софт по другому работает?

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


На ютубе полно видосов про ввод в линукс системы, если сам не можешь разобраться

>Про гит почитал, но так и не понял про ветки и прочее


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

>Рили надо знать? Неужели он так строго нужен? Почему в виде комментария на той джире не принимают?


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

Тебе явно рано на работу
758 2102976
Если мне надо сделать несколько разных селектов из бд, стоит ли все функции PDO для такого запроса prepare, execute, fetchAll обернуть в отдельную функцию и вызывать уже её, вместо того, чтобы каждый раз прописывать все это в коде?
759 2103009
>>102851

>Откуда я мог знать, что нужно знать git, rest, api, ajax, JavaScript, css, html, всякие babel, jquery и прочие аббревиатуры


Интересно чем ты 7 лет занимался. Хелловорлды писал что ли?
760 2103021
Допустим я сделал свой сайт и хочу добавить его в портфолио, подскажите пожалуйста, как мне это сделать? Не буду же я деньги платить чтобы это говно на хостинг поставить.
761 2103067
>>103009
Читал книги по РНР, по алгоритмам очень много времени заняло, в районе 5 лет, потому что пришлось вспомнить алгебру, со всеми этими функциями и прочим. Писал конечно же код, только вместо гита я использовал структуру папок - 0.01, 0.02 и т.д. Как по мне это удобнее, чем гит.

Так как я РНР бекэнд разработчик, то писал много вещей навроде запрос к БД, а выход в чистом виде. То есть без формирования визуального отображения. Это работа фронт эндов. Поэтому не учил хтмл и цсс с джавой.

Хелло ворлды конечно тоже писал, но не как вордпресс. Я так не напишу. Ядро движка мне пока что не под силу, да и думаю в одиночку такое никто не пишет.
762 2103069
>>102963
Либо перечитай внимательно, либо иди на хуй
763 2103072
>>102971
Да что там код собирать-то? Из джиры комментарий в конфлюэнс улетает, тикет закрыт - приходит уведомление, открыл его, увидел, что комментарий есть, оттуда скопировал код и вставил в проект, чего сложного то? Хули тогда старший прораб делать будет?

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

Я поставил арасне2 и mysql, на винде этой же связкой пользовался, очень удобный сервер, nginx не понимаю как настраивать.
764 2103082
>>103067

>Читал книги по РНР, по алгоритмам очень много времени заняло, в районе 5 лет


Сдаётся мне, что ты балду пинал по большей части.

>Как по мне это удобнее, чем гит.


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

>Это работа фронт эндов. Поэтому не учил хтмл и цсс с джавой.


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

>Ядро движка мне пока что не под силу, да и думаю в одиночку такое никто не пишет.


Тут каждый начинающий вкатывальщик, написавший тех же студентов из ОПпоста делает свой примитивный движок. Просто надо не книжки читать, а делать.
16260028952230.jpg37 Кб, 700x700
765 2103129
>>102935
>>102851
Зелёная жирнота не палится.
не ну конечно на земле миллиарды человек и такие тоже бывают но бля тебя же слог выдает
766 2103146
>>103072

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


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

>Хули тогда старший прораб делать будет?


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

>nginx не понимаю как настраивать


На винде его не поставишь. Ставь линь, либо виртуалку (всл или докер)
767 2103147
>>103129
Хоть какое-то подобие общения. А то пхп тред тухнет
768 2103148
>>103129
Слог у меня такой какой есть. В чём жирнота? Я учился на backend php developer, а требуется куча технологий знать. Попробую за пол года освоить виртуалки, линукс, и другое. Посмотрим, что выйдет.
769 2103149
>>103148
Вот серьезно, пока ты 5 лет хуйней страдал, я эти 5 лет работал на проде, повидал всякого
770 2103152
>>103082
Что значит балду пинал? Я нигде не писал, что 24/7 занимался. Это тупо нереально. Да и вообще более 2-3 часов в день нереально учиться. Да и возраст у меня уже не малый, я успел женится, двух детишек жена подарила, правда и развестись успели, но то моя вина, долго не мог вкатиться.

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

Касаемо проектов, в шапке я видел, но мне они показаилсь скучными и я решил не делать их. Мне понравилось работать с растровой графикой. Особенно когда вводишь текст в форме, а тебе генерируется изображение с введеным текстом. Рисовать неудобно, но прикольно. Свой аналог капчи придумал, почти как на дваче. ~70% задач решил по программированию из сборника задач. На код варсе несколько задач решил, литкод пробовал. Всё не упомнишь, что писал. Думаешь стоит порешать задачи из оп поста?
771 2103154
>>103149
Ну молодец, чо. У каждого своя судьба.
772 2103191
>>103152
Вот все сидел читал, а тут промолчать не могу.

У меня друг хороший очень долго работал не в IT-сфере. А потом, когда захотел, решил переучиться - я с этим ему помогал.
Вот сейчас, спустя полгода примерно, он устроился на свою первую работу в веб. Да, тупит. Да, знает меньше этой университетской студентоты - но он учится, справляется, меняет стиль мышления и главное, он работает.

Я согласен с ребятами - скорее всего, прога сейчас просто не твое.
773 2103395
>>103152

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


Думаешь на работе тебе, недостажеру, дадут интересные и уникальные задачи?
Задачи из шапки можно как минимум сделать с нуля, выбрать под это фреймворк, бд и остальной стек. Редко где тебе дадут начинать новый проект и выбирать технологии. Придешь на работу, а там "тут у нас древний проект на yii1, поднимай у себя локально, через час кину тебе задач на багфикс"
774 2103396
>>103152

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


Тогда ты попал не в тот стек. Php - бекенд язык, с графикой на нем практически не работают. Максимум пожмут загружаеме картинки, чтобы грузились быстрее.
775 2103470
>>102103

> возможно, у тебя в $this не элемент, а всё окно целиком -- проверь.


>>102367

>При клике в this будет не tr, а элемент, на который кликнули, наверно в этом дело?


В .on(events, [selector], [data], handler) я в качестве селектора передаю .elem, соответственно фильтроваться будет только по этим элементам и >обработчик будет срабатывать только в том случае, если событие «поднялось» от одного из отфильтрованных элементов.
А через let id = $(this).attr('id'); я получаю id из атрибута элемента. С чего там вообще должен быть какой-то другой элемент? Но дело не в содержимом, так POST вообще не приходил.
Немного поменял, теперь id получаю так:
$('.elem').on('click', function(e){
var id = $(this).attr('id');
отправляю
}
И теперь POST приходит, вместе с id, но в index.php ни if (!empty($_POST)), ни if (isset($_POST['id'])), ни if (!empty($_POST['id'])) не видит содержимого, хотя в network в form data приходит id, почему вообще так может происходить?
776 2103564
Ребятушки всем привет, может кто нибудь подробно объяснить в чем сакральный смысл связки nginx + apache. На многих хостингах и сайтах встречаю такую связку где nginx отдает статичные файлы, а обработка пыхи идет уже через апач. Но вот понять в чем смысл такой связки и в чем профиты не могу.
777 2103672
>>103470

>И теперь POST приходит, вместе с id, но в index.php ни if (!empty($_POST)), ни if (isset($_POST['id'])), ни if (!empty($_POST['id'])) не видит содержимого, хотя в network в form data приходит id, почему вообще так может происходить?



Так может произойти, если Content-type запроса не application/x-www-form-urlencoded или multipart/form-data. Если у тебя там application/json, то нужно совершенно по другому данные вытягивать, обрати на это внимание
778 2103851
>>103672
Так network также говорит, что это Content-Type: application/x-www-form-urlencoded; charset=UTF-8
При этом if($_SERVER["REQUEST_METHOD"] == "POST") тоже не видит post...
779 2104110
780 2104111
>>103072
>>103146
Кстати, с ужасом узнал, что Jira перестали делать дешёвый standalone сервер, да ещё и стоить стала больше на НДС.

Шо делать?
781 2104112
>>103564
У apache есть модули, которых нет у nginx.

Например, на вирт.хостинге нужно дать клиентам тот же mod_rewrite с управлением через .htaccess
782 2104233
>>103564
Давно читал что апащ быстрее обрабатывает пхп чем нжайнкс и поэтому имеет смысл их в связке использовать. На сколько это верно было тогда и на сколько верно сейчас я хз.
783 2104243
>>094060
>>102851
>>103067
>>103152
Как на эту жирноту вообще можно повестись?
784 2104279
>>104112
>>104233
tnks
почему тогда не использовать один апач?
785 2104314
>>104279
Нжнкс вроде быстрее статику отдает.
786 2104430
>>104279
>>104314
Один апач сильно медленнее
787 2104739
Ответьте мне всего на один вопрос, почему пыхапе, а не питон?
788 2104742
>>104739
А почему не нода?
789 2104746
>>104742
С нодой понятно, чтобы на нее скакнуть сначала надо стать вротендером
790 2104755
>>104739

>почему пыхапе, а не питон?


А почему питон?
791 2104842
>>104746

>сначала надо стать вротендером


Зачем? Бекенд на ноде это именно бекенд. Редкий пхпшник с нодой дела не имел.
dadasdw.png28 Кб, 981x516
792 2105021
Почему у меня в командной строке когда я прописываю php artisan serve, я теряю над ней контроль и не могу больше писать. А у тех по чьим видосам я начал учить лару, у них ничего такого не происходит.
793 2105025
>>104243
>>103129
А я хочу верить, что этот тип реальный, а не зеленый. Просто хочется в это верить.
794 2105098
>>105021

>php artisan serve


start php artisan serve - откроет новое окно.
795 2105101
>>105021
Потому что не страдай хуйнёй, и ставь уже локальный вебсервер nginx или apache. Все эти встроенные-от лукавого.
796 2105290
Как из бд pg вывести boolean?
Вывожу: CASE WHEN accepted=true THEN 'Да'
WHEN accepted=false THEN 'Нет'
END
и получаю Undefined variable. C 1/0 то же самое.
797 2105292
>>105290
А, всё, забыл AS хуй в конце.
798 2105527
Помогите раку. Перепробовал уже хуй знает сколько способов, и честно сказать в смятении.

Суть простая: я передаю данные с формы через fetch в файл .php. При print_r (или var_dump, неважно) $_POST показывает пустой массив. НО - на страницу с JS приходят обработанные данные в виде массива. Точно так же если я через .php запихну приходящие данные в текстовый файл, они там также появятся.

То есть данные приходят, но .php отказывается мне их выводить непосредственно У СЕБЯ. $_POST "типа" пустой, но он блять по факту не пустой как бы, раз данные приходят и уходят.

Где я туплю? Может быть, в .php и не получится выводить? Помогите плз.
799 2105537
>>105527
В дополнение. Могу вывести данные в другой .php файл тоже. То есть получается, что .php файл, на который приходит запрос, является чисто обработчиком-посредником, или как?
800 2105554
>>105021
Ну так открой новое окно в чем проблема
801 2105579
>>105101
Лучше линукс и докер.
802 2105664
>>105579
Чем лучше? Образами по 9гб для элементарных вещей? Хипстерская погань, мало имеющая отношение к разработке - это к девопсам.
803 2105808
>>105664
Как скажешь, борщехлеб.
804 2105886
>>102851

> git,


Это для всех разработчиков святая святых, но достаточно знать базовые команды

> rest, api,


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

> ajax,


2,5 функции на жабаскрипте

> JavaScript, css, html,


Для веба нужно знать обязательно

> babel,


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

> jquery


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

> вы реально это всё знаете???


Да и намного больше чем это все
805 2105901
>>105886
Есть какие-то материалы по Битриксу? Как его изучают вообще - он же платный.
Хотел бы оценить его для общего развития такскать.
806 2105905
>>102851

> нужен макбук


Ты конечно ещё до этого перетолстил, но это уже ни в какие ворота.

Тебе только на второй недели работы сказали, что нужен макбук?
На кой хуй он блять может быть нужен?
807 2106116
>>105579
Это уже для более серьёзных проектов(но мне WSL для этого хватает).
Для изучения фреймворка докер-оверкилл.
808 2106220
>>105901
Оф документация. Но оно тебя сожрет
809 2106316
>>105901
По сути это только официальная документация которая на пару лет отстает, но обычно в битриксгалеры берут всех с улицы кто может чуть-чуть по фронтенду и чуть-чуть в пхп. Скорее всего тебе через месяц другой придется сдавать первый экзамен https://academy.1c-bitrix.ru/certification/exams.php так что можешь сразу попробовать поделать эти задания. Бесплатно можешь 30 дней юзать локально, потом либо переустановить, либо расшифровать файлик include.php и там подшаманить и получить демку навсегда, в гугле есть все.
Но прям с головой советую не окунаться в эту хуйню, а потихоньку дрочить лару и реакт или ву.жс иначе есть риск остаться сантехником в мире программистов и всю жизнь ковыряться в унитазе. Я когда шел туда знал что битрикс это говно, но чтобы это было настолько сильным говном я не ожидал. И большинство задач будут в стиле передвинь этот блок, добавь новое в админке и выводи оттуда текст и прочая хуйня усложненная тем что твои коллеги до этого делали наотъебись.
810 2106347
>>106316
Чуть не забыл есть же охуенный курс https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&INDEX=Y с не менее охуенным цитатами разработчиков)
811 2106384
>>106347
Второй пик впечатляет.
812 2106433
>>106347
Тоже кекнул со второй.
813 2106436
>>106316
Ок, пасиба.
814 2106785
>>062494 (OP)
Какой SAPI лучший по производительности? Не гуглится сравнение с ReactPHP/Rachet и другими вариантами работы с постоянными соединениями. Почитал о внутреннем устройстве PHP, но так и не понял разницу в способах запуска PHP-FPM с другими вариантами. Не понимаю как PHP обрабатывает много запросов. Из за этого не могу понять как его лучше использовать.
815 2106798
>>105527

> Суть простая: я передаю данные с формы через fetch в файл .php. При print_r (или var_dump, неважно) $_POST показывает пустой массив.



А как ты просматриваешь результат? В инструментах разработчика? Если нет, то конечно оно работать не будет.

Скорее всего ты либо как-то не так вызываешь скрипт. Либо просто опечатался, например, написал $POST вместо $_POST.

Вообще, если ты хочешь дампить данные аякс-запросов, то удобно выводить их в консоль, если ты используешь встроенный в PHP веб-сервер (не Апач или php-fpm). Для этого можно написать просто:

fprintf(STDERR, "POST = %s\n", json_encode($_POST));

и сообщение выведется в ту консоль, где запущен веб-сервер.
816 2106800
>>106785

Чтобы объективно сравнивать, надо либо делать бенчмарки, либо найти готовые.

Если ты не хочешь писать свой сервер, то стоит использовать php-fpm и FastCGI - он рассчитан на продакшен-использование. Если ты готов писать свой сервер, то ты можешь написать его, но надо будет запустить много процессов, чтобы они могли загрузить все ядра процессора, и кто-то (nginx?) должен распределять приходящие запросы между ними.

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

php-fpm работает так: он запускает определенное количество процессов-работников (оптимальное количество настраивается в конфиге вручную). Затем он принимает от nginx запросы по протоколу FastCGI и распределяет их по работникам. Работников должно быть больше, чем ядер процессора, раза в полтора-два-тьри. Один работник может за свою жизнь обработать много запросов, но по очереди, по одному за раз. Работник однопоточный и использует максимум одно ядро. Поэтому их должно быть много. Но не слишком - иначе ресурсы будут уходить на переключения между ними.

Если есть конкретные вопросы, уточняй.
817 2106801
>>105021

Это принцип работы командной строки - пока выполняется одна команда, нельзя набирать или выполнять следующую. Более того, команда php artisan serve выводит логи и они бы мешали тебе выполнять другие команды.

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

Если ты хочешь прервать работу сервера, то используй Ctrl + C.

>>105101

Ты не прав. Для разработки как раз удобен встроенный в PHP сервер тем, что не надо ничего конфигурировать, что в фоне не крутится никаких подвисших скриптов и тд.
818 2106805
>>104739

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

В Питоне есть Доктрина? Абстрактные классы и интерфейсы? Проверка типов в рантайме? Да и он мягко говоря небыстрый. Хотя я для своих дел иногда использую: jupyter notebook, numpy, sympy и другие вещи.

>>104233

Это неверно. Nginx не "обрабатывает" PHP-код, а перенаправляет запросы к Апачу или php-fpm.

>>103564

Возможно совместимость со старым кодом, который использует, например, htaccess файлы.

>>104279

Потому что Апач не очень эффективно работает с медленными клиентами.

У Апача запущено N процессор-работников, которые обрабатывают запросы. Работник обрабатывает одновременно только один запрос. Если запрос отправил пользователь с медленным интернетом, то работник быстро выполняет PHP-скрипт (или читает запрошенный файл), но долго отдает ответ (так как канал медленный). И все время пока ответ отдается, работник не может заниматься ничем другим. То есть, получается, работник меньшую часть времени занимается полезной работой, а большую часть времени просто занимается ожиданием передачи ответа.

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

Нгинкс решает эту проблему - он очень быстро принимает ответ от Апача и потом не спеша отдает пользователю. При этом нгинкс параллельно с отдачей ответа обслуживает и других пользователей.
819 2106808
>>103851

А как ты смотришь, что выведет скрипт? В инструментах разработчика? Или как-то по-другому?
820 2106828
>>106800

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


Зачем много процессов? Конкурентный код в одном процессе, даже в одном потоке может исполняться на нескольких ядрах.

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


Можешь объяснить почему? Если код состоит из 100 чистых функций, то ОС же может конкурентно исполнять этот код на нескольких ядрах.

>php-fpm


Все таки он не так уж хорош по производительности и ресурсоемкости.

>>105021

>Почему у меня в командной строке когда я прописываю php artisan serve, я теряю над ней контроль и не могу больше писать.


Потому что ты запустил задачу в процессе ОС, он заблокирован для дальнейшего введения инструкций пока задача не выполнится.
821 2107103
Использование $_REQUEST или $_SERVER депрекейтед. Чем их заменить?
822 2107110
>>106808
F12 -> network -> нужный файл -> headers/preview
823 2107126
>>107103

>$_REQUEST или $_SERVER депрекейтед


Хуя себе новости, кто скозал?
824 2107132
>>107126
Та не, всё в порядке, просто я долбаеб. Идея ругается "Deprecated global variable usage" как тогда их правильно использовать, если внутри функции нельзя? https://www.php.net/manual/ru/language.variables.predefined.php
825 2107156
>>106828

> Конкурентный код в одном процессе, даже в одном потоке может исполняться на нескольких ядрах



Нет. Ты не понимаешь, что такое процесс и поток и как работает процессор.

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

> 1) a = 1


2) b = a + 10
3) c = b x 2
....

Процессор исполняет команды в программе строго по очереди. И программа рассчитана на то, что ее будут выполнять последовательно. Например, у нас в программе команда 2 использует результат команды 1 (a). Соответственно, нельзя выполнить команду 2 до выполнения команды 1 или параллельно с ней.

Такое последовательное выполнение команд еще называют "поток исполнения".

Если вдруг второе ядро попыталось бы выполнить команду 2 параллельно с тем, как первое ядро выполняет команду 1, то оно бы получило неправильный результат, так как значение a пока неизвестно.

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

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

1) a = b + 2 + c x 3
2) выполнить на втором ядре: d = b + 5 + с
3) e = a + d

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

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

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

Создание потока - это запуск второй копии программы в текущем процессе. То есть, мы говорим ОС "создай новый поток и пусть он выполняет команды, начиная с команды X". Второй поток будет видеть те же переменные, что и первый.

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

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

Таким образом, в языках вроде PHP, питон, JS, если ты вызываешь несколько чистых функций подряд:

$a = func1();
$b = func2();

Они выполняются последовательно. В языке Го есть возможность запустить выполнение нескольких функций (неважно, чистых или нет) параллельно:

go func1();
go func2();
...

здесь функции func1 и func2 запустятся как бы "в фоне", и будут исполняться параллельно с продолжением работы основной программы. Но это работает за счет использования потоков. В программе Го запущено несколько потоков, которые ждут задач и когда мы делаем go func1, мы посылаем такому потоку команду "выполни функцию func1" и он начинает ее выполнять.

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

> Если код состоит из 100 чистых функций, то ОС же может конкурентно исполнять этот код на нескольких ядрах.



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

>>php-fpm


> Все таки он не так уж хорош по производительности и ресурсоемкости.



Пруфов и бенчмарков, конечно, не будет.
825 2107156
>>106828

> Конкурентный код в одном процессе, даже в одном потоке может исполняться на нескольких ядрах



Нет. Ты не понимаешь, что такое процесс и поток и как работает процессор.

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

> 1) a = 1


2) b = a + 10
3) c = b x 2
....

Процессор исполняет команды в программе строго по очереди. И программа рассчитана на то, что ее будут выполнять последовательно. Например, у нас в программе команда 2 использует результат команды 1 (a). Соответственно, нельзя выполнить команду 2 до выполнения команды 1 или параллельно с ней.

Такое последовательное выполнение команд еще называют "поток исполнения".

Если вдруг второе ядро попыталось бы выполнить команду 2 параллельно с тем, как первое ядро выполняет команду 1, то оно бы получило неправильный результат, так как значение a пока неизвестно.

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

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

1) a = b + 2 + c x 3
2) выполнить на втором ядре: d = b + 5 + с
3) e = a + d

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

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

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

Создание потока - это запуск второй копии программы в текущем процессе. То есть, мы говорим ОС "создай новый поток и пусть он выполняет команды, начиная с команды X". Второй поток будет видеть те же переменные, что и первый.

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

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

Таким образом, в языках вроде PHP, питон, JS, если ты вызываешь несколько чистых функций подряд:

$a = func1();
$b = func2();

Они выполняются последовательно. В языке Го есть возможность запустить выполнение нескольких функций (неважно, чистых или нет) параллельно:

go func1();
go func2();
...

здесь функции func1 и func2 запустятся как бы "в фоне", и будут исполняться параллельно с продолжением работы основной программы. Но это работает за счет использования потоков. В программе Го запущено несколько потоков, которые ждут задач и когда мы делаем go func1, мы посылаем такому потоку команду "выполни функцию func1" и он начинает ее выполнять.

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

> Если код состоит из 100 чистых функций, то ОС же может конкурентно исполнять этот код на нескольких ядрах.



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

>>php-fpm


> Все таки он не так уж хорош по производительности и ресурсоемкости.



Пруфов и бенчмарков, конечно, не будет.
826 2107174
>>107110

Ты можешь попробовать поставить в скрипте var_dump($_POST); var_dump($_GET); var_dump($_SERVER); и посмотреть, что приходит в скрипт.

И еще, если ты используешь встроенный в IDE веб-сервер, то он может, например, не поддерживать POST.

>>107132

Скорее всего причина в чем-то другом. Использовать эти переменные можно и они не устарели.
827 2107203
>>107132
Завернуть их на входе в объект реквеста и передавать куда захочешь.
828 2107206
>>107203
Можно разжевать, пожалуйста? только учусь
829 2107233
>>107156

>Процессор исполняет команды в программе строго по очереди. И программа рассчитана на то, что ее будут выполнять последовательно. Например, у нас в программе команда 2 использует результат команды 1 (a). Соответственно, нельзя выполнить команду 2 до выполнения команды 1 или параллельно с ней.


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

>здесь функции func1 и func2 запустятся как бы "в фоне", и будут исполняться параллельно с продолжением работы основной программы


Не параллельно, а конкурентно. Параллельность это когда одна задача исполняется несколькими процессорами или ядрами одновременно.

>То есть, программы на Го многопоточные и потому умеют параллельно выполнять код.


Многопоточность не равно параллельность.

>Пруфов и бенчмарков, конечно, не будет.


Погугли. RoadRunner и ReactPHP могут обработать в несколько раз больше запросов в секунду.
830 2107354
>>107233

Ты пишешь то, в чем не разбираешься.

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



Может, но это ничего не меняет. Допустим, код 2 периода времени выполняется на ядре 1, а потом 2 периода времени выполняется на ядре 2. Что от этого поменяется? Производительность от этого не повысится, а даже чуть понизится (из-за расходов на переключение контекста. Они происходят, когда ядро переключается с выполнения одной программы на другую).

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



Ну так давай я тебе расскажу про ассемблер. В процессоре есть счетчик команд (в архитектуре x86_64 он называется rip), который указывает номер текущей команды. Каждый такт процессор берет команду по адресу rip, исполняет ее и увеличивает rip (условно) на единицу. Как ты в такой системе получишь параллельность? Она строго последовательная.

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

Если ты считаешь, что я ошибаюсь, дай ссылку, утверждающую обратное.

> Это аппаратные конкурентность и параллелизм.



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

> Есть и программные конкурентность и параллелизм, реализуемые компилятором, интерпретатором или виртуальной машиной.



Речь изначально шла о том, что однопоточная программа не может использовать более одного ядра. Компилятор или виртуальная машина здесь ничего не меняют.

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

> Не параллельно, а конкурентно. Параллельность это когда одна задача исполняется несколькими процессорами или ядрами одновременно.



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

> Погугли. RoadRunner и ReactPHP могут обработать в несколько раз больше запросов в секунду.



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

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

Также, я вижу, что ты даже не пытался разобраться в том, как работает RoadRunner, хотя в документации есть картинка: https://roadrunner.dev/docs/intro-about

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

Приложение на ReactPHP также нужно запускать в виде нескольких процессов, чтобы задействовать все ядра.
830 2107354
>>107233

Ты пишешь то, в чем не разбираешься.

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



Может, но это ничего не меняет. Допустим, код 2 периода времени выполняется на ядре 1, а потом 2 периода времени выполняется на ядре 2. Что от этого поменяется? Производительность от этого не повысится, а даже чуть понизится (из-за расходов на переключение контекста. Они происходят, когда ядро переключается с выполнения одной программы на другую).

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



Ну так давай я тебе расскажу про ассемблер. В процессоре есть счетчик команд (в архитектуре x86_64 он называется rip), который указывает номер текущей команды. Каждый такт процессор берет команду по адресу rip, исполняет ее и увеличивает rip (условно) на единицу. Как ты в такой системе получишь параллельность? Она строго последовательная.

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

Если ты считаешь, что я ошибаюсь, дай ссылку, утверждающую обратное.

> Это аппаратные конкурентность и параллелизм.



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

> Есть и программные конкурентность и параллелизм, реализуемые компилятором, интерпретатором или виртуальной машиной.



Речь изначально шла о том, что однопоточная программа не может использовать более одного ядра. Компилятор или виртуальная машина здесь ничего не меняют.

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

> Не параллельно, а конкурентно. Параллельность это когда одна задача исполняется несколькими процессорами или ядрами одновременно.



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

> Погугли. RoadRunner и ReactPHP могут обработать в несколько раз больше запросов в секунду.



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

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

Также, я вижу, что ты даже не пытался разобраться в том, как работает RoadRunner, хотя в документации есть картинка: https://roadrunner.dev/docs/intro-about

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

Приложение на ReactPHP также нужно запускать в виде нескольких процессов, чтобы задействовать все ядра.
831 2107358
>>107233

И попробуй просто вчитаться внимательнее в слова. Поток - это (условно) последовательность команд, которые выполняет процессор. Если программа однопоточная, значит в ней один поток и в любой момент времени выполняется одна последовательность команд. И значит, она никак не может использовать два ядра.
832 2107376

>$this->{'user:created_at'}



Увидел такое в коде класса, что оно делает? Чет не гуглится. Видимо тут идет обращение к полю user, который является объектом, и в нем считывается поле created_at, но это не точно. Причем в самом классе поля user нет, как нет его в трейтах и родительских классах и интерфейсах. Проект написан на Симфони.
833 2107378
>>107376
Полный код:

$userCreatedAt = $this->{'user:created_at'} ?? null;
834 2107396
>>107376
Ищи магические __set __get, всё там.
835 2107413
>>107396
Да вроде смотрел, тоже глухо. По всему коду буквально пара мест, где используются магические get/set и это не мой случай.
836 2107439
>>107413

>$this->{'user:created_at'}


Вот этот кусок это чтение или запись в поле user:created_at, но это невалидное имя если обращаться напрямую, его нельзя например вызвать как $this->user:created_at, поэтому приходится ебаться с подстановкой через строку, без кода непонятно нахуя там себе жизнь усложнять, но очевидно это было сделано не прям просто так
837 2107483
>>107376

Это просто такое имя свойства. Синтаксис такой:

$object->{выражение}

Например:

$object->{somefunc()}
$object->{'aaaa'}

То есть идет обращение к свойству с именем "user:created_at".

Как по мне, так какой-то изврат.
838 2107532
>>107354

>В процессоре есть некоторый "параллелизм", когда он может выполнить, например, две соседние команды одновременно, если они не зависят друг от друга и если исполнительные устройства свободны. Но ты этим не можешь управлять и это не позволяет выполнять параллельно две произвольные функции. Это можно не рассматривать.


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

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


Разве горутина создает поток ОС?

>>107358

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


Что ты понимаешь под потоком? Непонятно тогда что есть concurrency и асинхронность.
839 2107564
>>107354
>>107358
Предположим, что один поток может выполняться только на одном ядре. Как тогда эффективно исполнять код чтобы не было блокировок и чтобы ядро было утилизировано на 100%? Node.js из коробки исполняется в одном потоке. В нем появились легкие потоки, но сейчас не о них. Node.js является concurrency системой? Да. Асинхронный? Да. Вопрос как? Как они это делают без потоков? Почему в пхп нет?

В некоторых языках реализуют concurrency and parallelism как библиотеку языка и довольно успешно. Например в Guile. Внимание вопрос, почему в PHP такой тухляк? Почему в документации толком не описано как PHP код исполняется на машине? Почему не описано как множество запросов обрабатываются одновременно? Почему в книгах этого нет? Почему разработчики об этом не говорят? Почему нет попыток что то написать для исправления ситуации? Вот я загуглил про Go и есть доскональные объяснения как это работает в нем. Как мне понять как это работает в PHP?
840 2107719
>>107532

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

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

Например, у нас есть программа:

1) c = a + b
2) d = e + f

В этой программе команды не зависят друг от друга (команда 2 не использует результат команды 1).

Классический процессор выполнит их по очереди, затратив два такта. Современный процессор x86_64, если в нем есть два суммирующих устройства, может выполнить команды параллельно за один такт - каждую команду на своем устройстве. Но этот паралеллизм неявный, то есть ты не можешь им управлять. Ты просто пишешь программу последовательно, а процессор по возможности (анализируя зависимости команд друг от друга) выполняет команды параллельно, не нарушая последовательную логику программы. То есть, результат программы гарантированно такой же, как если бы она выполнялась последовательно.

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

1) c = a + b, d = e + f

> SIMD



SIMD это просто выполнение одинаковой операции над несколькими парами чисел. Ну например, попарное сложение 4 пар чисел с получением 4 результатов. Если у тебя есть два массива по 1000 чисел и тебе надо их сложить, то использование SIMD здорово ускорит процесс.

Все это не меняет того, что однопоточная программа использует одно ядро процессора.

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



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

> Разве горутина создает поток ОС?



Го при запуске (если не путаю) создает пул фоновых потоков. Эти потоки изначально просто ничего не делают и ждут команд. Когда встречается команда вроде

go func1()

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

> Что ты понимаешь под потоком?



Поток (thread) - это примитив операционной системы. https://ru.wikipedia.org/wiki/Поток_выполнения

> Непонятно тогда что есть concurrency и асинхронность.



Ну это ты эти понятия притащил, а не я.
840 2107719
>>107532

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

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

Например, у нас есть программа:

1) c = a + b
2) d = e + f

В этой программе команды не зависят друг от друга (команда 2 не использует результат команды 1).

Классический процессор выполнит их по очереди, затратив два такта. Современный процессор x86_64, если в нем есть два суммирующих устройства, может выполнить команды параллельно за один такт - каждую команду на своем устройстве. Но этот паралеллизм неявный, то есть ты не можешь им управлять. Ты просто пишешь программу последовательно, а процессор по возможности (анализируя зависимости команд друг от друга) выполняет команды параллельно, не нарушая последовательную логику программы. То есть, результат программы гарантированно такой же, как если бы она выполнялась последовательно.

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

1) c = a + b, d = e + f

> SIMD



SIMD это просто выполнение одинаковой операции над несколькими парами чисел. Ну например, попарное сложение 4 пар чисел с получением 4 результатов. Если у тебя есть два массива по 1000 чисел и тебе надо их сложить, то использование SIMD здорово ускорит процесс.

Все это не меняет того, что однопоточная программа использует одно ядро процессора.

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



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

> Разве горутина создает поток ОС?



Го при запуске (если не путаю) создает пул фоновых потоков. Эти потоки изначально просто ничего не делают и ждут команд. Когда встречается команда вроде

go func1()

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

> Что ты понимаешь под потоком?



Поток (thread) - это примитив операционной системы. https://ru.wikipedia.org/wiki/Поток_выполнения

> Непонятно тогда что есть concurrency и асинхронность.



Ну это ты эти понятия притащил, а не я.
841 2107756
>>107719

>Классический процессор выполнит их по очереди, затратив два такта.


Ты сказал?

>Ты просто пишешь программу последовательно


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

Посмотри на Erlang. Та же история. Нет точки входа. Нет никаких инструкций. Нет состояния. Есть только выражения. Виртуальная машина сама все скейлит. К этому нужно стремиться. Нужно стремиться отходить от уровня абстракции ОС и процессора. Пусть компиляторы и виртуальные машины абстрагируют от этого уровня. Нужно писать код удобно для программиста, а не удобно для машины. Идиотизм подстраиваться под машину, пусть она подстраивается под человека. Для чего тогда нужны компиляторы и VM?

>Го при запуске (если не путаю) создает пул фоновых потоков.


Говорят, что типичная программа на Go состоит из тысяч горутин. Хочешь сказать, что Go создает тысячи тредов в ОС? Не поверю. У него же есть рантайм, он же не голый как Си. В Эрланге создают миллионы эрланг-процессов. Естественно виртуальная машина не создает для них миллионы тредов ОС. Все они абстрактные и живут в рантайме.

Если Node.js однопоточный и по твоему исполняется в одном ядре, то как на нем поднимают миллион вебсокет соединений?

https://alexhultman.medium.com/millions-of-active-websockets-with-node-js-7dc575746a01

Статью написал автор стека uNetworking Алекс Халтман https://github.com/uNetworking/uWebSockets.js. Их либы используют в биржевой торговле крупнейшие брокеры мира. Так как он может держать миллион активных соединений на одном ядре?

>Ну это ты эти понятия притащил, а не я.


Ты их игнорируешь. Они между прочим отвечают на вопрос как на одном ядре держать миллион или более соединений.
841 2107756
>>107719

>Классический процессор выполнит их по очереди, затратив два такта.


Ты сказал?

>Ты просто пишешь программу последовательно


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

Посмотри на Erlang. Та же история. Нет точки входа. Нет никаких инструкций. Нет состояния. Есть только выражения. Виртуальная машина сама все скейлит. К этому нужно стремиться. Нужно стремиться отходить от уровня абстракции ОС и процессора. Пусть компиляторы и виртуальные машины абстрагируют от этого уровня. Нужно писать код удобно для программиста, а не удобно для машины. Идиотизм подстраиваться под машину, пусть она подстраивается под человека. Для чего тогда нужны компиляторы и VM?

>Го при запуске (если не путаю) создает пул фоновых потоков.


Говорят, что типичная программа на Go состоит из тысяч горутин. Хочешь сказать, что Go создает тысячи тредов в ОС? Не поверю. У него же есть рантайм, он же не голый как Си. В Эрланге создают миллионы эрланг-процессов. Естественно виртуальная машина не создает для них миллионы тредов ОС. Все они абстрактные и живут в рантайме.

Если Node.js однопоточный и по твоему исполняется в одном ядре, то как на нем поднимают миллион вебсокет соединений?

https://alexhultman.medium.com/millions-of-active-websockets-with-node-js-7dc575746a01

Статью написал автор стека uNetworking Алекс Халтман https://github.com/uNetworking/uWebSockets.js. Их либы используют в биржевой торговле крупнейшие брокеры мира. Так как он может держать миллион активных соединений на одном ядре?

>Ну это ты эти понятия притащил, а не я.


Ты их игнорируешь. Они между прочим отвечают на вопрос как на одном ядре держать миллион или более соединений.
842 2107757
>>107564

Есть несколько вариантов. Самый простой - это запустить несколько процессов. Когда первый процесс выполняет какую-то блокирующую операцию и останавливается, ОС передаст управление второму. Если процессов много, то все доступные ядра гарантированно будут загружены на 100%.

Плюс - простота. Ты просто пишешь обычный последовательный код.

Этот подход по умолчанию использует php-fpm. Он запускает N рабочих процессов и распределяет HTTP-запросы между ними. Рабочий обрабатывает поступающие ему запросы строго по очереди, но рабочих много, потому одновременно обрабатывается несколько запросов.

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

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

А для ОС это выглядит как один постоянно что-то делающий не блокирующийся процесс.

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

Еще из минусов - писать асинхронный код менее удобно, чем синхронный, тем более что в PHP нет async/await. Впрочем, в новых версиях будут fibers, которые облегчат это: https://wiki.php.net/rfc/fibers

> В некоторых языках реализуют concurrency and parallelism как библиотеку языка и довольно успешно.



concurrency это "принцип". Как ты его реализуешь в библиотеке? В Guile мне разбираться лень.

> Почему в документации толком не описано как PHP код исполняется на машине?



Наверно, предполагается, что программист и так это знает. Если ты программировал на Си или ассемблере, то ты и так понимаешь это.

> Почему не описано как множество запросов обрабатываются одновременно?



Потому что язык PHP не занимается обработкой запросов. Интерпретатор PHP лишь выполняет написанный в скрипте код. А вот запуском нужного количества копий интерпретатора, балансировкой запросов занимается php-fpm. Он подробно не описан, наверно потому, что предполагается, что разработчик знаком с моделью обработки запросов при помощи менеджера и множества работников.

> Почему нет попыток что то написать для исправления ситуации?



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

> Вот я загуглил про Go и есть доскональные объяснения как это работает в нем. Как мне понять как это работает в PHP?



Это потому, что в Го применен относительно новый принцип работы с потоками, а в PHP все работает по классической всем известной схеме.
842 2107757
>>107564

Есть несколько вариантов. Самый простой - это запустить несколько процессов. Когда первый процесс выполняет какую-то блокирующую операцию и останавливается, ОС передаст управление второму. Если процессов много, то все доступные ядра гарантированно будут загружены на 100%.

Плюс - простота. Ты просто пишешь обычный последовательный код.

Этот подход по умолчанию использует php-fpm. Он запускает N рабочих процессов и распределяет HTTP-запросы между ними. Рабочий обрабатывает поступающие ему запросы строго по очереди, но рабочих много, потому одновременно обрабатывается несколько запросов.

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

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

А для ОС это выглядит как один постоянно что-то делающий не блокирующийся процесс.

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

Еще из минусов - писать асинхронный код менее удобно, чем синхронный, тем более что в PHP нет async/await. Впрочем, в новых версиях будут fibers, которые облегчат это: https://wiki.php.net/rfc/fibers

> В некоторых языках реализуют concurrency and parallelism как библиотеку языка и довольно успешно.



concurrency это "принцип". Как ты его реализуешь в библиотеке? В Guile мне разбираться лень.

> Почему в документации толком не описано как PHP код исполняется на машине?



Наверно, предполагается, что программист и так это знает. Если ты программировал на Си или ассемблере, то ты и так понимаешь это.

> Почему не описано как множество запросов обрабатываются одновременно?



Потому что язык PHP не занимается обработкой запросов. Интерпретатор PHP лишь выполняет написанный в скрипте код. А вот запуском нужного количества копий интерпретатора, балансировкой запросов занимается php-fpm. Он подробно не описан, наверно потому, что предполагается, что разработчик знаком с моделью обработки запросов при помощи менеджера и множества работников.

> Почему нет попыток что то написать для исправления ситуации?



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

> Вот я загуглил про Go и есть доскональные объяснения как это работает в нем. Как мне понять как это работает в PHP?



Это потому, что в Го применен относительно новый принцип работы с потоками, а в PHP все работает по классической всем известной схеме.
843 2107758
>>107756

>https://github.com/uNetworking/uWebSockets.js.


В ссылке точка в конце приклеилась.
844 2107781
>>107756

Отвечая на твой первоначальный вопрос, про производительность, тебе нужно делать тесты и измерения на более-менее реалистичном бенчмарке. Померять php-fpm, сравнить с тем же Roadrunner и делать выводы.

> Ты сказал?


Не понял. Ты не согласен? Опровергни ссылкой или хотя бы напиши, что тут не так. А то трудно тебя понять.

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

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



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

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

> Нет никаких инструкций. Нет состояния. Есть только выражения.



Ну это уже вкусовщина. Мне, например, нравится последовательный код своей простотой и удобством чтения и написания. Это удобно для описания бизнес-логики. Мне нравится, что есть операторы if и циклы for и while и не надо, как в Хаскелле, имитировать цикл через рекурсию или как там принято. А адские функции вроде reduce это шаг в прошлое в сравнении с простым и удобным циклом foreach.

Если тебе нравится хаскелл - так просто пиши на нем, в чем проблема?

> Говорят, что типичная программа на Go состоит из тысяч горутин. Хочешь сказать, что Go создает тысячи тредов в ОС? Не поверю.



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

> Если Node.js однопоточный и по твоему исполняется в одном ядре, то как на нем поднимают миллион вебсокет соединений?



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

Например, если у него сетевое соединение 1 Гбит/с и это поделить на миллион соединений, то выходит всего лишь килобит/с (128 байт) на одно соединение. То есть данных там много не передается.

В такой ситуации однопоточная асинхронная модель подходит хорошо.

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

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



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

Твои два слова ни на что не отвечают, и ты сам толком не понимаешь их значения, и зачем-то притащил.
844 2107781
>>107756

Отвечая на твой первоначальный вопрос, про производительность, тебе нужно делать тесты и измерения на более-менее реалистичном бенчмарке. Померять php-fpm, сравнить с тем же Roadrunner и делать выводы.

> Ты сказал?


Не понял. Ты не согласен? Опровергни ссылкой или хотя бы напиши, что тут не так. А то трудно тебя понять.

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

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



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

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

> Нет никаких инструкций. Нет состояния. Есть только выражения.



Ну это уже вкусовщина. Мне, например, нравится последовательный код своей простотой и удобством чтения и написания. Это удобно для описания бизнес-логики. Мне нравится, что есть операторы if и циклы for и while и не надо, как в Хаскелле, имитировать цикл через рекурсию или как там принято. А адские функции вроде reduce это шаг в прошлое в сравнении с простым и удобным циклом foreach.

Если тебе нравится хаскелл - так просто пиши на нем, в чем проблема?

> Говорят, что типичная программа на Go состоит из тысяч горутин. Хочешь сказать, что Go создает тысячи тредов в ОС? Не поверю.



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

> Если Node.js однопоточный и по твоему исполняется в одном ядре, то как на нем поднимают миллион вебсокет соединений?



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

Например, если у него сетевое соединение 1 Гбит/с и это поделить на миллион соединений, то выходит всего лишь килобит/с (128 байт) на одно соединение. То есть данных там много не передается.

В такой ситуации однопоточная асинхронная модель подходит хорошо.

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

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



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

Твои два слова ни на что не отвечают, и ты сам толком не понимаешь их значения, и зачем-то притащил.
845 2107794
>>107757

>Плюс - простота. Ты просто пишешь обычный последовательный код.


А если нужен обмен данными? Тогда одни проблемы.

>Этот подход по умолчанию использует php-fpm.


Поэтому он никуда не годится. Процессы это дорого и не эффективно. Сколько времени нужно чтобы запустить процесс? Много. Сколько нужно памяти? Очень много. И снова проблема обмена данными. Это устаревший подход.

>concurrency это "принцип". Как ты его реализуешь в библиотеке?


Также как эвент луп внутри процесса. Существует много абстрактных математических моделей concurrency и parallelism, как реализовать это вопрос другой, реализуют как то же.

>В Guile мне разбираться лень.


Если интересно посмотри видео https://www.youtube.com/watch?v=7IcI6sl5oBc
Это инновационный подход. В мейнстим языках такого не найдешь. Зато никаких проблем. Еще об этом https://dl.acm.org/doi/10.1145/1596550.1596588

>Наверно, предполагается, что программист и так это знает.


Не смеши. Пхпшники ничего не знают об этом. Именно по причине того, что в языке ничего нет и в доке не описано.

>Если ты программировал на Си или ассемблере, то ты и так понимаешь это.


Я тебя умоляю. На php в основном приходят без опыта программирования. Только единицы переходят в php уже имея опыт. И чаще всего этот опыт нерелевантный. Они в 80-90хх что то там писали. Сейчас процессоры и подходы изменились и поэтому они не в состоянии запилить для php ничего. Чувак системщик приходит в node.js и говорит, что он плохо написан. Берет переписывает сетевой стек и код начинает летать. Это я про https://github.com/alexhultman он вроде еще написал сериализатор json для Go, который в 3 раза быстрее стандартного, написаного в гугл. В php и близко нет таких звезд. Это или недоучки или старперы, которые под многоядерные процы не писали никогда и вообще не понимают как писать современный параллельный софт.

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


Что за глупость. PHP обрабатывает запросы. Он только это и делает и для этого создавался. Должно быть пояснение как код с разными SAPI будет работать. Это же не десктопная программа, запросы посылать могут тысячи пользователей одновременно. Как писать эффективно если это не описано? В общем php и его сообщество крайне непрофессиональны. Кроме как формы обрабатывать не о чем больше не пишут, а ты говоришь что то знают.

>А вот запуском нужного количества копий интерпретатора, балансировкой запросов занимается php-fpm


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

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


Слушай, а ты не думал, что сейчас есть http2 и еще куча новых протоколов? Те же вебсокеты. Ты похоже застрял в 90-х как и весь php с его разработчиками.

>Ну а ты сам не хочешь разобраться и написать серию статей?


Хочу, но не хочу лезть в код на Си. Мне проще изучать исходники Go, они понятней и написаны на самом Go. Его ассемблер также легко можно посмотреть. В php многое вообще не описано. Даже как писать расширения.

>Это потому, что в Го применен относительно новый принцип работы с потоками


Если не ошибаюсь он придуман в 80-х, когда PHP еще не было.
845 2107794
>>107757

>Плюс - простота. Ты просто пишешь обычный последовательный код.


А если нужен обмен данными? Тогда одни проблемы.

>Этот подход по умолчанию использует php-fpm.


Поэтому он никуда не годится. Процессы это дорого и не эффективно. Сколько времени нужно чтобы запустить процесс? Много. Сколько нужно памяти? Очень много. И снова проблема обмена данными. Это устаревший подход.

>concurrency это "принцип". Как ты его реализуешь в библиотеке?


Также как эвент луп внутри процесса. Существует много абстрактных математических моделей concurrency и parallelism, как реализовать это вопрос другой, реализуют как то же.

>В Guile мне разбираться лень.


Если интересно посмотри видео https://www.youtube.com/watch?v=7IcI6sl5oBc
Это инновационный подход. В мейнстим языках такого не найдешь. Зато никаких проблем. Еще об этом https://dl.acm.org/doi/10.1145/1596550.1596588

>Наверно, предполагается, что программист и так это знает.


Не смеши. Пхпшники ничего не знают об этом. Именно по причине того, что в языке ничего нет и в доке не описано.

>Если ты программировал на Си или ассемблере, то ты и так понимаешь это.


Я тебя умоляю. На php в основном приходят без опыта программирования. Только единицы переходят в php уже имея опыт. И чаще всего этот опыт нерелевантный. Они в 80-90хх что то там писали. Сейчас процессоры и подходы изменились и поэтому они не в состоянии запилить для php ничего. Чувак системщик приходит в node.js и говорит, что он плохо написан. Берет переписывает сетевой стек и код начинает летать. Это я про https://github.com/alexhultman он вроде еще написал сериализатор json для Go, который в 3 раза быстрее стандартного, написаного в гугл. В php и близко нет таких звезд. Это или недоучки или старперы, которые под многоядерные процы не писали никогда и вообще не понимают как писать современный параллельный софт.

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


Что за глупость. PHP обрабатывает запросы. Он только это и делает и для этого создавался. Должно быть пояснение как код с разными SAPI будет работать. Это же не десктопная программа, запросы посылать могут тысячи пользователей одновременно. Как писать эффективно если это не описано? В общем php и его сообщество крайне непрофессиональны. Кроме как формы обрабатывать не о чем больше не пишут, а ты говоришь что то знают.

>А вот запуском нужного количества копий интерпретатора, балансировкой запросов занимается php-fpm


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

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


Слушай, а ты не думал, что сейчас есть http2 и еще куча новых протоколов? Те же вебсокеты. Ты похоже застрял в 90-х как и весь php с его разработчиками.

>Ну а ты сам не хочешь разобраться и написать серию статей?


Хочу, но не хочу лезть в код на Си. Мне проще изучать исходники Go, они понятней и написаны на самом Go. Его ассемблер также легко можно посмотреть. В php многое вообще не описано. Даже как писать расширения.

>Это потому, что в Го применен относительно новый принцип работы с потоками


Если не ошибаюсь он придуман в 80-х, когда PHP еще не было.
15636242351243.jpg49 Кб, 493x321
846 2107851
>>107794

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


Ну тебе с дивана-то виднее.
847 2107863
>>107781

>Ты не согласен?


Кто сказал, что на тот код будет затрачено 2 такта?

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


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

Взять к примеру .NET Core. Его за 3 года так прокачали, что он работает наравне с c++ и раст. Помню в бенчах TechEmpower они уступали джавовому Netty раза в 2, а сейчас обходят его в 2 раза. Вот что значит написан с нуля. И хорошо написан и спроектирован грамотно.

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


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

>Код на Хаскелл тоже превращается в императивный последовательный ассемблер.


В Хаскеле есть мощный параллелизм и конкурентность, еще ленивость. Чтобы это все работало и код оптимизировался, нужно писать нормально.

>А адские функции вроде reduce это шаг в прошлое в сравнении с простым и удобным циклом foreach.


Ясно. Надо было сразу сказать. Что лучше, декларативное утверждение или императивная инструкция? Ты когда просишь жену приготовить тебе борщ, ты зачитываешь ей императивную инструкцию типа иди к холодильнику, открой дверцу, возьми мясо, положи в кастрюлю, залей водой...? Или говоришь просто приготовь борщ? Reduce это декларативное утверждение, сделай это или дай мне, или верни. Foreach это императивня инструкция, возьми это сделай с ним то, потом выполни это, потом... Разве не тупо? Зачем жить на уровне процессора если можно подняться на высшие уровни и писать декларативные утверждения. Взять к примеру html и css. Они очень удобны свой декларативностью. Не нужно вместо <h1> писать выведи в координатах x,y символы a,b,c в кодировке z цветом u и размером n.

>reduce это шаг в прошлое


Какой ужас. Не представляю как можно сделать такой вывод. Я тебе описал все выше. Это цикл устаревший тупой подход, а reduce это высокоуровневый объект. Это же очевидно.

>Одно дело принять миллион соединений, другое дело обрабатывать приходящие по ним данные.


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

>То есть данных там много не передается.


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

>Твои два слова ни на что не отвечают, и ты сам толком не понимаешь их значения, и зачем-то притащил.


У меня есть понимание что это и как работает, а у тебя? Ты изначально все путал, называл конкурентную модель в Go параллельной. И еще мне говоришь, что я не понимаю. Просто смешно.
847 2107863
>>107781

>Ты не согласен?


Кто сказал, что на тот код будет затрачено 2 такта?

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


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

Взять к примеру .NET Core. Его за 3 года так прокачали, что он работает наравне с c++ и раст. Помню в бенчах TechEmpower они уступали джавовому Netty раза в 2, а сейчас обходят его в 2 раза. Вот что значит написан с нуля. И хорошо написан и спроектирован грамотно.

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


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

>Код на Хаскелл тоже превращается в императивный последовательный ассемблер.


В Хаскеле есть мощный параллелизм и конкурентность, еще ленивость. Чтобы это все работало и код оптимизировался, нужно писать нормально.

>А адские функции вроде reduce это шаг в прошлое в сравнении с простым и удобным циклом foreach.


Ясно. Надо было сразу сказать. Что лучше, декларативное утверждение или императивная инструкция? Ты когда просишь жену приготовить тебе борщ, ты зачитываешь ей императивную инструкцию типа иди к холодильнику, открой дверцу, возьми мясо, положи в кастрюлю, залей водой...? Или говоришь просто приготовь борщ? Reduce это декларативное утверждение, сделай это или дай мне, или верни. Foreach это императивня инструкция, возьми это сделай с ним то, потом выполни это, потом... Разве не тупо? Зачем жить на уровне процессора если можно подняться на высшие уровни и писать декларативные утверждения. Взять к примеру html и css. Они очень удобны свой декларативностью. Не нужно вместо <h1> писать выведи в координатах x,y символы a,b,c в кодировке z цветом u и размером n.

>reduce это шаг в прошлое


Какой ужас. Не представляю как можно сделать такой вывод. Я тебе описал все выше. Это цикл устаревший тупой подход, а reduce это высокоуровневый объект. Это же очевидно.

>Одно дело принять миллион соединений, другое дело обрабатывать приходящие по ним данные.


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

>То есть данных там много не передается.


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

>Твои два слова ни на что не отвечают, и ты сам толком не понимаешь их значения, и зачем-то притащил.


У меня есть понимание что это и как работает, а у тебя? Ты изначально все путал, называл конкурентную модель в Go параллельной. И еще мне говоришь, что я не понимаю. Просто смешно.
848 2107985
За бугор уезжать не светит. Подскажите, что начать учить из фреймворков, на чем сделать акцент?
849 2107986
>>107985
Чтобы можно было найти работу для начала хотя бы за миску супа
850 2107988
>>107985
На 1с.
851 2107989
>>107985
Laravel либо symfony, все остальное - либо микрофреймворки, либо протухший кал вроде yii2, на котором только в пидорашке некоторые отсталые и жадные кабаны заставляют писать.
852 2108259
Примерные вопросы на стажёра php?
853 2108274
>>108259
Сможете ли реализовать паттерн "Бочка", как в коворкинг входят, на какое кресло сядете, на какое тимлида посадите?
854 2108279
>>108259
Спросят общие вопросы про образование, дадут тестовое задание. Ну это если они не набирают в стажеры 20летних людей с 15летним опытом работы
855 2108297
>>108259
Солид, магические методы, паттерны, как http работает (что происходит, когда вбиваешь урл в строку браузера), скл запросы написать
856 2108298
>>107863

> Думаю, что процессоры


> думаю, что большую часть не используют



Проблема в том, что ты не знаешь, а "думаешь". Сам себе придумал что-то и пытаешься меня в этом убедить. Я знаю ассемблер, и понимаю, как работает процессор.

> Некоторые языки


> Важно какой код пишешь


> нужно писать нормально.



Это не аргументация. Аргументацией было бы "за счет использования команды X язык Y позволяет однопоточной программе задействовать более одного ядра процессора". Давай конкретные примеры, а не расплывчатые рассуждения что надо писать код "нормально" на "некоторых" языках.

> Кто сказал, что на тот код будет затрачено 2 такта?



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

> Reduce это декларативное утверждение, сделай это или дай мне, или верни. Foreach это императивня инструкция,



Reduce это костыль для языка, в котором нет циклов. Он снижает читабельность кода.

> Пхп даже 10к не сможет потянуть, даже пустых, неактивных.



Пруфов конечно не будет.
857 2108389
>>062494 (OP)
Как самостоятельно научиться писать красивый код без говна?
Почитал это: https://refactoring.guru/ru/design-patterns
Почитал про KISS, SOLID.
Но все примеры, какие там используются я не могу применять на практике, на реальных задачах. Все равно код хуевый.
Я впадаю в уныние от этого.
Работаю один на дядю, ему насрать, какой я код пишу, лишь бы работало. Уходить от него не планирую, т.к. нормально денег платит.
858 2108429
>>108389
Почитай Рефакторинг Фаулера.
Там описаны признаки плохого кода (code smell) и рецепты для избавления от него.
Для рефакторинга так же полезно покрывать код юнит и интеграционными тестами, чтобы знать, что твои изменения не ломают код.
Ну и 3 этапа написания кода:
1. make it work
2. make it clean
3. make it fast
859 2108473
>>107439
Да, понятно, что само по себе это невалидное имя. Я так понял, что это просто упрощенная запись для доступа к полю класса, которого может в нем не быть, если в терминах js, то это было бы:

this.user?.create_at || null
860 2108480
>>108298

>Я знаю ассемблер, и понимаю, как работает процессор.


Не знаешь, а знаком, в общих чертах. Мануал от intel с набором команд имеет размер более 2000 страниц. Не думаю, что ты знаешь новые оптимизирующие команды. Мало кто их вообще знает и использует.

>Reduce это костыль для языка


Ясно. У тебя дибилизм.
861 2108487
>>108473

Нет, это именно поле с именем, в котором есть двоеточие. В JS это было бы this['user:created_at'] || null.
862 2108513
>>108389

Есть еще другие принципы, например YAGNI, DRY.

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

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

Вот, на что стоит обращать внимание:

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

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

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

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

- не надо передавать данные в функцию или возвращать из нее обходными путями. Пример неправильной передачи данных:

$userTable->setId(1234);
$userTable->findUser();
$user = $userTable->getResult();

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

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

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

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

Или ты решил обновить фреймворк на новую версию. Как проверить, что ничего не сломалось?

В общем, поищи советы про правильный код, читабельный код, поддерживаемый код.

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

Есть еще другие принципы, например YAGNI, DRY.

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

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

Вот, на что стоит обращать внимание:

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

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

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

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

- не надо передавать данные в функцию или возвращать из нее обходными путями. Пример неправильной передачи данных:

$userTable->setId(1234);
$userTable->findUser();
$user = $userTable->getResult();

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

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

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

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

Или ты решил обновить фреймворк на новую версию. Как проверить, что ничего не сломалось?

В общем, поищи советы про правильный код, читабельный код, поддерживаемый код.

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

>Все равно код хуевый


Покаж код. Субъективщина она такая - всякое может чудиться.
Ну и в целом всегда нужна конкретика, а вот это вот "как писать хорошо" оно для тех, кто одно и то же советует всем.
864 2108929
>>108487
Ты прав. Нашел в коде одно место (сериализатор), где есть присваивание в это странное поле. Правда пока не понял, зачем именно такое имя, а не просто historyCreatedAt.
865 2108952
>>108389
1. Ты либо радился очень мозговитым и быстро смекаешь
2. Работаешь в команде и смотришь как пишут другие.
3. Много пишешь сам. Либо по работе либо пет проекты.
866 2108955
>>108952

> * Родился

867 2109077
>>108389

>Почитал это: https://refactoring.guru/ru/design-patterns


Паттерны это культ карго. Забудь про них.
868 2109082
>>108513

>не надо передавать данные в функцию или возвращать из нее обходными путями.


Что?

>Пример неправильной передачи данных:


>$userTable->setId(1234);


>$userTable->findUser();


>$user = $userTable->getResult();


Почему это неправильно?
869 2109089
>>109082

>Почему это неправильно?


$userTable->findUser(int $id): User
будет проще, не?
870 2109550
>>109082

Потому что менее явно, чем

$user =$userTable->findUser(1234);

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

$userTable->setId(1234);
..много кода..
$userTable->findUser();
...много кода ...
871 2109698
>>109082

>$userTable->setId(1234);


>$userTable->findUser();


>$user = $userTable->getResult();



Рассмотри каждую строчку отдельно.
Понятно, что делает $userTable->setId(1234); ?
К чему относится id? Как он будет использован?
И если кто-то после этой строчки засеттит другой id, мы об этом не узнаем

$userTable->findUser();
На основе чего он ищет юзера?
Т.е. нам надо какой-то стейт сконфигурировать внутри объекта

$user = $userTable->getResult();
Что за результат нам вернется?
А если не было поиска?
А если в классе есть другие методы поиска, чей результат будет возвращен?

Подобный код порождает много путаницы. Чтобы им пользоваться, нужно знать внутренности класса, чего в хорошем ООП следует избегать.
$user =$userTable->findUserById(1234); - подобная запись однозначно говорит, что мы получим юзера из таблицы по его айди, либо null/exception, если юзер на найден
872 2110487
>>108279

>спросят общие вопросы про образование



У меня диплом филолога. Мои действия?
873 2110518
>>110487
Так и скажи.
Главное не в дипломе, а в голове - если увлекался IT, то делай упор на это. Если никогда не интересно было - что ты там забыл вообще?
874 2110648
>>110487

>спросят общие вопросы про образование


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

Конторе от стажера нужно, чтобы он в максимально короткие сроки вырос до джуна и ему можно было поручать простые задачи.
Тут будет плюсом написание пет проекта на стеке, который используют в конторе. Можно будет про него рассказать на собесе, показать код, обозначить трудные места и как с ними справился.
875 2110902
собираюсь стать битриксоидом, что скажете? вакансий вроде много, вкат выглядит легким
876 2110914
Помогите, как передать в pdo-запрос дату для сравнения с датой в таблице?
Вставляю String, пишет: "столбец "value" не существует ... LIKE value='202... ^"
Что здесь понимается под value? По идее это дата из таблицы, а справа дата, которую я передаю, но почему value не существует? Select я точно делаю правильно, и в записях тб поля с датой не пустые.
877 2110917
>>110902
Земля пухом.
Хотя бы посмотри внутренности битрикса для начала. Можно пробник скачать.
Если зайдет в таком говне ковыряться - велкам.

Только вот часто вижу вакансии, где с битрикса переписывают на лару или симфони, потому что невозможно поддерживать и дорабатывать это недоразумение
878 2111002
>>110914
Всё, решил это хуйню.
879 2111061
Ребзи, что думаете о битииксе? Я ведь по адресу? Битрикс это же пыха?
880 2111089
>>110917

>с битрикса переписывают на лару или симфони


Для этого сам битрикс надо знать, нет?

Сам подумываю вкатиться потому, что берут почти с улицы. Знаю Лару, Симфу, докеры-хуёкеры, но нет опыта и поэтому меня не берут. Буду, значит, на Битриксе говно писать на работе, а дома уже на фреймворках.
Вот и получается, что у одних с говнокодом и Битриксом бизнес растёт, а другие супер-пупер-погроммисты настолько выёбистые, что никого себе найти не могут.
881 2111109
>>111089

>Знаю Лару, Симфу, докеры-хуёкеры, но нет опыта и поэтому меня не берут


Ну еблан значит. Надо было нарисовать опыта года полтора в рога и копыта.
Таким как ты дорога в битрикс

>на Битриксе говно писать на работе, а дома уже на фреймворках


Не, дома ты будешь разбираться в кишках битрикса, чтобы утром доделать рабочую таску

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


Битрикс - дешевая шлюха. В то время, как симфони - элитная эскортница, которую не каждый себе позволить сможет
882 2111111
>>111089

>Знаю Лару, Симфу, докеры-хуёкеры


проекты есть? на гитхабе разумеется. если нет, то ясно почему не берут, а если есть, то... то как ищешь? по всей России или только в своем мухосранске? если онли в своем мухосранске, то ясно почему не можешь найти...
883 2111128
>>111109

>Битрикс - дешевая шлюха. В то время, как симфони


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

>>111111

>проекты есть? на гитхабе разумеется


Какие ещё проекты? В одиночку ты ничего внятного кроме очередного блога\доски объявлений\тестовых не сделаешь. Дело даже не в опыте, а в отсутствии экспертизы в бизнесе.
884 2111147
>>111128

>Одни набирают людей практически с улицы на приемлемые деньги


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

>Другие раздувают понты, выписывая в требования списки из 15-20 технологий даже на позицию младшего перекладывателя жсонов.


Какие понты? Обычные собесы на веб инженегра. Или ты думаешь, что бекенд пилить это просто по кнопкам клацать?
885 2111151
>>111128
я их и имею в виду, очередной блог/форум, мне кажется, это и есть, что называется "пет-проджект", не? если у тебя нет, то ты так и скажи, чего злишься? бесишься, что я прав, что тебя не берут никуда из-за отутствия пет-проджектов? так если ты шаришь, то сделать такой кал не проблема, за неделю сделаешь и работу найдешь
886 2111199
>>111147

>Это большая куча дерьма


Да? Но на Симфони требуют 25 технологий, а на Битрикс хтмл, ЦСС и пхп.

>одинаково неэффективен будет чел с вышкой и опытом разработки и чел с улицы


Да мне похуй - деньги есть деньги. Страдают всё равно кабанчики, которых маркетологи битрикса развели.

>>111151

>если у тебя нет, то ты так и скажи


>бесишься, что я прав


Был блог - я его снёс из своего гитхаба, ибо пошлятина. Мой последний пет это cms на Ларавел 8 с пакетами админки, чат-бота, готовой системой статей тот самый блог, готовым личным кабинетом пользователя, сделано на бутстраповском ui +15 тем под него. Делал 2 недели, где-то, по вечерам, раз-через-раз. Вот это я понимаю ПЭТ-проект - можно сесть и писать хоть доску объявлений, хоть онлайн-магазин, с поддержкой мессенджеров и прочего говна. А ты про "блог" спрашиваешь.
887 2111220
>>111199

>на Симфони требуют 25 технологий


Перечисли все 25

>Страдают всё равно кабанчики


Страдают разрабы, пытаясь вовремя закрыть все баги. А кабан продал битрикс и доволен
888 2111232
>>111220

>Перечисли все 25


Открой среднюю вакуху на хх и сам почитай. Все 30 пунктов будь добр выложи - и ходи по струнке перед синьором, который нередко сам тот ещё хуй моржовый.

>Страдают разрабы


Лучше страдать, но с работой, чем ходить и собеседоваться раз за разом к очередным веб инженерам с ЧСВ овер 9к. Забесплатно делая тестовые.
889 2111261
>>111199

>Делал 2 недели, где-то, по вечерам, раз-через-раз


Ещё сайтов с десяток есть разной паршивости - штуки 4 на вордпресс 2 на элементоре и 2 на чистом хтмл, всё самопильное - не на готовых шаблонах, 4 на Винтер\Октобер, и прочее по мелочи - всякое на Слиме\Люмен и несколько тестовых: апишки, парсеры rss с админками, система баланса на транзакциях делаю только интересные.
890 2111276
>>111261
жесть, как ты до сих пор не нашел работу? ищешь только в своем городе? или по всей России с переездом? не видел ответа на этот вопрос
891 2111292
>>111232

>Все 30 пунктов будь добр выложи


Шиз, у тебя пункты куда-то растут.
В средней ваке всего несколько пунктов: пхп, фреймворк, скл, докер

Мы тебя поняли, иди уже в свой битрикс
892 2111294
>>111276
У него явные проблемы с софтами и с головой
893 2111296
>>111232
Интересно, что ты скажешь, когда тебя даже на битрикс стажера за бесплатно не возьмут
894 2111391
В ларавельке сессии не сохраняются при рефреше, редиректе на другой сайт(при руте сохраняются), при die, exit. Хотя сессия должна сохранятся как минмум на какое-то время, все таки глобальное хранилище.
Пробовал сохранять через ->save(), через ::save(), ничего не помогает.
Никто не знает как пофиксть, что придумать\проверить?
895 2111418
>>111391
В сейчас проверил, в папке хранилище сессия остается!
И не модифицируется, ничего.
В коде при редиректе обратно не обновляю сессию, я просто вызываю Сессию с нужным мне ключом. Но он возвращает пустоту, хотя явижу что файлик есть и там нужная мне инфа. Но он ее просто не достает.
896 2111437
>>111418
О, вот еще интересное наблюдение которое ломает мне голову.
При редиректе обратно Сессия у меня не читается, так, в этом проблема. Хотя файл на месте.

Но при перезагрузке сайта и снова заходе на контроллер с сессий ОН ЧИТАЕТ данные прошлой сессии.

Я просто не понимаю как это работает, че за х. Сохранил. Вернулся с зеркала. Прочитал - не читает.
Перезагрузил. Читает.

У меня даже догадок нет. Я просто охуеваю.
897 2111525
Где здесь найти плагин для ларавель?
16.jpg137 Кб, 1202x798
898 2111526
899 2111872

>>- Еще более сложная и долгая задача на Laravel/Symfony: https://gist.github.com/codedokode/8733007


>>Время выполнения: все зависит от тебя, но я бы смотрел на 4-6 недель



А за сколько миддл с опытов в несколько лет должен такое делать?
Тред утонул или удален.
Это копия, сохраненная 30 июля 2021 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски