Сохранен 604
https://2ch.hk/pr/res/2875886.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Клуб изучающих PHP #134 /php/

 Аноним OP !ieHLy1ev8. 12/10/23 Чтв 11:47:47 #1 №2875886 
image.png
image.png
Добро пожаловать в тред изучающих PHP. Тут мы изучаем этот язык (а также JS/CSS/HTML/SQL) и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

Предыдущий тред тут: https://2ch.hk/pr/arch/2023-10-09/res/2761920.html . Старые треды можно найти в гугле по словам "клуб изучающих PHP".

С чего начать - основы PHP

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

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

Какой редактор использовать

Простые задачки можно решать в онлайн-песочницах вроде onlinephp.io , но для программ посложнее лучше установить редактор. Есть (дорогая) IDE PhpStorm, есть бесплатный Netbeans и VSCode, условно-бесплатный Sublime Text. Чтобы в последних получить автодополнение для PHP, нужно установить и настроить PHP language server.

Вот инструкции по установке PHP на компьютер: https://github.com/codedokode/pasta/blob/master/soft/php-install.md
Гайд по командной строке: https://github.com/codedokode/pasta/blob/master/soft/cli.md

Что изучать дальше

Зная лишь основы PHP, сайт ты не сделаешь и работу не найдешь. Обычно от начинающего требуют чуть-чуть больше:

PHP, ООП, основы HTTP, HTML/CSS (основы верстки), JS, SQL, PDO, MVC, git, composer, какой-нибудь фреймворк (Laravel или Symfony), основы автоматического тестирования, основы linux, английский.

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

По многим из этих тем у нас есть уроки или задачки:

- для понимания, что такое веб-сервер, прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- для понимая MVC, работы с БД и формами, реши задачу про студентов, в ней много полезных советов: 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 (если ты не изучил ни одного фреймворка, то это будет рановато). Если хочешь увидеть примеры использования паттернов в реальном коде - ковыряй исходники Симфони, например Symfony Forms. Ну и скажем честно, начинающему без опыта, который не видел сложный код, паттерны понять будет сложно.
- для улучшения английского можно читать news.ycombinator.com - там много статей на тему IT.

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

- задачи на HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- хороший учебник по JS: https://learn.javascript.ru/
- задачи на 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/
- задачи на SQL: https://github.com/codedokode/pasta/blob/master/db/databases.md

Что еще почитать

- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- https://phptherightway.com/
- Книга: Профессиональное программирование на PHP Джордж Шлосснейгл
- Книга: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- Про Git: https://git-scm.com/book/ru/v2
- Задачи на алгоритмы: https://codeforces.com/problemset

Дополнительно

- скачать учебник: зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Code -> Download ZIP, распакуй на рабочий стол и открой index.html
- что будут спрашивать на собеседовании, если 0 опыта - будут гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-12 месяцев
Аноним 12/10/23 Чтв 11:55:21 #2 №2875906 
image.png
>>2875886 (OP)
Аноним 12/10/23 Чтв 13:13:53 #3 №2876027 
Пхпшники, как часто вас заебуют литкодом на собесах?
Аноним 12/10/23 Чтв 13:24:16 #4 №2876032 
Давно не видел этого треда, аноны...
Аноним 12/10/23 Чтв 17:16:16 #5 №2876409 
Помогите, пожалуйста
Я создал формы с методом POST
В обработчике формы я написал цикл, который берет значения из массива $_POST, проводит с ними математические операции и в зависимости от того, какое значение примут эти ?? элементы?? выводит надпись. Проблема в том, что у меня не сходятся количество итераций и значение одной переменной.
Может кто-нибудь рассказать что можно и что нельзя делать с элементами массива $_POST?
Я могу перезаписывать значение элементов этого массива?
Могу проводить математические операции с элементами этого массива?
Я совсем запутался.
Аноним 12/10/23 Чтв 17:27:12 #6 №2876416 
>>2876409
Покажи код-то. Ожидаемый результат и фактический
Аноним 12/10/23 Чтв 17:30:08 #7 №2876422 
>>2876416
Окей, минут через 5-10, хорошо?
Аноним 12/10/23 Чтв 17:47:23 #8 №2876443 
изображение.png
изображение.png
изображение.png
>>2876422
Обработчик формы пик1
Задание ОПа пик2
Выводит: время выплаты: 13 месяцев, сумма выплаты: 105000
13 тут, конечно, потому что цикл кажется бесконечный
Изначальная задача ОПа: пик3
Аноним 12/10/23 Чтв 17:48:21 #9 №2876445 
>>2876416
>>2876443
Аноним 12/10/23 Чтв 17:54:47 #10 №2876452 
изображение.png
>>2876416
Причем если закомментировать строчку, где я "меняю" значение кредита, то цикл перестает быть бесконечным
Аноним 12/10/23 Чтв 18:24:14 #11 №2876479 
>>2876443
Не нужно менять значения в объекте $_POST. Сделай отдельные переменные для этого.
$amountOfCredit = $_POST["amountOfCredit"] и т.д.
и дальше уже работай только с ними.
Саму логику не проверял. Для начала это исправь.
Аноним 12/10/23 Чтв 18:27:51 #12 №2876486 
Что лучше учить Симфони или Ларавель?
Аноним 12/10/23 Чтв 18:28:02 #13 №2876487 
>>2876479
Т.е. в начале каждому элементу массива POST дать свою переменную и их уже использовать в остальном коде?

Мне кажется, что я подобное пробовал делать, но вышло не то, но я попробую снова.
Я просто этот код пытался чинить несколько часов подряд и у меня уже голова кругом.
Спасибо, что откликнулся на мой вопрос!
Аноним OP 12/10/23 Чтв 18:35:41 #14 №2876492 
image.png
image.png
>>2875906
Простите анончики, я с шапкой проебался
Аноним 12/10/23 Чтв 18:37:42 #15 №2876493 
изображение.png
>>2876479
Так...Окей...
Я не знаю, то ли я написал!
Но по итогу цикл все равно выходит в бесконечность
Аноним 12/10/23 Чтв 18:41:39 #16 №2876498 
>>2876479
Не подумай лишнего, анон, но
Я пойму, если тебе не захочется разбираться в моем вопросе
Мне просто неловко навязываться к другим людям, чтобы они мне объясняли как маленькому, да и я чувствую себя в такие моменты тупым и надоедливым
Так вот, если у тебя нет желания, можешь не разбирать мой вопрос
(если ты хотел, конечно же), я тогда сам через гугл и уже на свежую голову буду разбираться завтра.
Аноним 12/10/23 Чтв 18:44:16 #17 №2876500 
Так ли необходимо ставить PHPStorm во время обучения? Некоторые менторы вроде Альберта Степанцева заставляют его устанавливать. Но вот мне кажется, что VS Code ни чем не хуже для РНР.
Аноним 12/10/23 Чтв 18:47:27 #18 №2876503 
>>2876500
Тебе кажется.
Аноним 12/10/23 Чтв 18:51:07 #19 №2876508 
>>2876503
Для вс кода есть крутые плагины. К примеру, Error Lens, который отображает ошибки прямо рядом с кодом. Я настроил так, что они выглядят как красные комментарии. Визуально сразу видно, но при этом органично смотрятся.
Для шторма сейчас искал аналогичный плагин - ни черта не нашёл. Есть кривые поделки васянов с версией 0.0.1, где даже настроек нет. Превращают код в месиво из-за вставок ошибок.
Вроде ИДЕ платная, но нифига в ней нет.
Аноним 12/10/23 Чтв 18:59:15 #20 №2876519 
codeerrlens.jpg
stormerrlens.jpg
>>2876508
Вот просто для сравнения сделал два скрина. Сразу видно "качество" платного шторма по сравнению с бесплатным вс кодом.
Аноним 12/10/23 Чтв 19:04:47 #21 №2876535 
>>2876493
Да, правильно. Так и нужно. Массив $_POST менять не нужно.
Теперь по поводу цикла. Цикл бесконечный потому что у тебя переменная $amountOfCredit всегда больше нуля.
Зачем тебе вообще там цикл, объясни? Сначала себе попробуй объяснить. Может станет сразу ясно, что поправить нужно будет.
Аноним 12/10/23 Чтв 19:06:15 #22 №2876540 
>>2876500
Пользуйся vs code конечно. Тем более он бесплатный. Главное чтобы дебаггер там был.
Аноним 12/10/23 Чтв 19:10:42 #23 №2876561 
>>2876508
По твоей логике если я напишу для шторма плагин, который будет пукать моим секретным пуком, то шторм автоматически станет лучше для разработки чем вскод.

Этот плагин ПОЛЬЗОВАТЕЛЬСКИЙ. Его написал какой-то хуй. Поддерживает его тоже какой-то хуй. Разработчики вскода к этому плагину никакого отношения не имеют. И точно также на каких-то хуях держится вся поддержка пхп в вскоде. Нет никакого системного подхода, просто рандомы пытаются что-то для себя скроить.
Аноним 12/10/23 Чтв 19:13:51 #24 №2876573 
>>2876500
>Так ли необходимо ставить PHPStorm во время обучения?
Чел, я в своё время только нотпадом++ обходился. Чем тебе удобней тем и пользуйся.
Аноним 12/10/23 Чтв 19:16:07 #25 №2876581 
>>2876535
>Зачем тебе вообще там цикл, объясни?

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

Изначально я задумывал, чтобы значение $amountOfCredit уменьшалось с каждой итерацией в цикле, поэтому и поставил условие, что если $amountOfCredit больше 0, то продолжать уменьшать.
Аноним 12/10/23 Чтв 19:16:23 #26 №2876583 
>>2876561
Окей, пускай плагины не имеют отношения в шторму. Но вопрос к разработчикам тогда, почему их поделие не поддерживает популярные фреймворки типа Лары или Симфони, и я вынужден ставить такие же васянские плагины?
Аноним 12/10/23 Чтв 19:18:26 #27 №2876587 
>>2876583
Потому ни лара ни симфони создателям шторма не принадлежат.
Логично что поддержкой своих фреймворков занимаются создатели этих фреймворков.
Аноним 12/10/23 Чтв 19:20:38 #28 №2876593 
>>2876587
Почему тогда в платной идее есть поддержка Спринга из коробки, а бесплатный плагин для коммьюнити от разработчиков "добрые" жидбрейнсы забанили?
Аноним 12/10/23 Чтв 19:23:19 #29 №2876602 
>>2876593
А тебе не приходило в голову что разрабы идеи учавствовали в разработке спринга?
Есть язык такой на основе джавы "котлин", угадай кто его создал.
Аноним 12/10/23 Чтв 19:27:14 #30 №2876607 
>>2876602
Но в итоге пользователи шторма получают некачественный продукт. Что он вообще может? Подсвечивать код на РНР? Серьёзно? Сейчас любой текстовый редактор это может. За что они деньги берут вообще?
Аноним 12/10/23 Чтв 19:31:30 #31 №2876614 
>>2876493
У тебя должно быть всего одно условие: проверка что можно выплатить кредит, зачем еще? https://3v4l.org/0Rv5i
Аноним 12/10/23 Чтв 19:44:45 #32 №2876661 
>>2876607
Хорошо быть биокарликом с магическим мышлением. Что-то как-то подсвечивается, а больше ничего и не надо.

Вкатыш, вкатулек, вкатусик, просто посмотри сюда https://youtrack.jetbrains.com/issues/WI?q=State:%20Resolved . Это issue трекер шторма (да, только пхпшной части не всей ide). Если осилишь прочитать до конца первой страницы у тебя глаза на лоб полезут от объема работы.

Каждый день, каждый месяц тысячи исправлений, уточнений, улучшений. Никакое камунити за спасибо и звездочку на гитхабе ничего подобного даже близко сделать не может. Там люди въебывают за бабки и чистят, чистят, чистят непрерывно.
Аноним 12/10/23 Чтв 19:45:16 #33 №2876664 
>>2876614
Все, я понял.
Я тупой.
В изначальной задаче проценты равны 3.
А я вписывал в форму 10.
И ориентировался по памяти на цифру 61к за 13 месяцев.
Столько часов потратил, а ошибка оказалась такой тривиальной.
Спасибо, анон, за код.
Только благодаря тому, что я взглянул на проценты, я понял в чем моя ошибка...
Аноним 12/10/23 Чтв 19:47:07 #34 №2876671 
>>2876664
Ты дебаггером пользуешься? Как ты проверяешь что у тебя в переменных находится каждую итерацию? Научись дебажить не принтами, начнёшь находить ошибки гораздо быстрее.
Аноним 12/10/23 Чтв 19:50:16 #35 №2876678 
>>2876664
Посмотри на него внимательнее. Даже если ты в моем коде напишешь больше процент, никаких бесконечных циклов там не будет.

>>2876671
Как раз нужно научиться сначала пользоваться принтами. Не нужен тут никакой дебаггер. Достаточно просто вывести прирост на каждом цикле и увидеть что он не такой как ожидалось.
Аноним 12/10/23 Чтв 19:56:36 #36 №2876699 
>>2876678
>Посмотри на него внимательнее. Даже если ты в моем коде напишешь больше процент, никаких бесконечных циклов там не будет.

Но я не исправлял код, я всего лишь при заполнении формы написал 3 вместо 10 и все стало работать.
При этом если снова вписать 10 при заполнении формы, то цикл снова станет бесконечным.
Я ограничил его итерацию до 30 - продолжал считать, ограничил до 100 - также продолжает считать.
Если вписать 11, то сразу кидает, что невозможно оплатить кредит.
При этом если добавить равно в строку:
if ($increaseInCredit>=$monthlyPayment) { //Если банк хочет взять за пользование кредитом больше, чем школьник готов платить в месяц
То сразу отсылает, что кредит нельзя оплатить
Видимо из-за этого он уходил в бесконечность
Аноним 12/10/23 Чтв 20:00:45 #37 №2876707 
>>2876699
Проблема в том что ты пытаешься делать несколько вещей одновременно и внутри цикла, который то можно выполнять, то нельзя.

Начни с того что сделай проверку на возможность выплаты кредита перед вычислением тела кредита. https://3v4l.org/85eBi
Проверку ведь можно сделать без цикла вообще.
Аноним 12/10/23 Чтв 20:08:02 #38 №2876719 
>>2876707
Думаю, что это из-за того, что я не знал, что return можно использовать в if
И как я примитивно понял, он останавливает выполнение остального скрипта?
Аноним 12/10/23 Чтв 20:20:19 #39 №2876742 
>>2876719
return прерывает выполнение и возвращает значение. Тут поскольку никаких функций нет просто прерывает выполнение. Как вариант можно писать die() https://3v4l.org/M6ob2 или if else https://3v4l.org/l3AoB

Важно чтобы ты понял что твоя программа состоит из двух маршрутов:
1) Выполнить цикл и вывести результат
2) Ничего не делать и вывести ошибку
А ты пытался это ветвление сделать внутри цикла, который всего лишь часть первого варианта. Ну и запутался офк.
Аноним 12/10/23 Чтв 20:29:49 #40 №2876764 
>>2876742
Окей, я понял.
Спасибо за ответы.
Узнал немного нового, да и ситуация с кодом прояснилась.
Все оказалось так банально (даже слишком), тогда как в начале ошибка представлялась мне непознаваемой я серьезно думал, что проблема в том, что я как-то неправильно понимаю как устроены суперглобальные переменные
Аноним 13/10/23 Птн 19:59:16 #41 №2877931 
>>2876409

> Я могу перезаписывать значение элементов этого массива?
Да, но так делать не надо.

> Могу проводить математические операции с элементами этого массива?
Да.

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

Также, тебе стоит сделать названия переменных чуть короче (но чтобы они оставались понятными). Сейчас из-за длинных названий, да еще и с добавлением $_POST, код тяжеловато читать. Вот, что можно поменять:

$canPayOrNot -> $canPay
$amountOfCredit -> $amount
$interestOnLoan -> $interest

Я прочитал код, но явной ошибки не вижу. Я советую тебе поставить лимит не на 13 месяцев, а на 20 или 30, и сделать в начале цикла вывод всех переменных (сумма кредита на начало месяца, прирост суммы, и тд), чтобы было видно, как меняются суммы в процессе выплаты, и не выскочит ли там что-то подозрительное.

Как я помню, там будет общая выплата в районе 65000 и выплачивать это придется около 13 месяцев.
Аноним 13/10/23 Птн 20:00:55 #42 №2877933 
>>2876443

> время выплаты: 13 месяцев, сумма выплаты: 105000

Вообще это странно, так как школьник за 13 месяцев может выплатить максимум 13 × 5000 = 65 000.
Аноним 13/10/23 Птн 20:05:14 #43 №2877936 
elephant-and-anime-girls-studying-php.jpg
>>2876492

Да, грустно как-то без картинок от нейросети.
Аноним 13/10/23 Птн 20:11:37 #44 №2877939 
>>2876500

IDE обычно дает такие возможности:

- навигация по коду (переход к классу или функции по клику)
- автодополнение
- проверка на ошибки

В принципе, в VS Code можно это реализовать, подключив и настроив расширения вроде phpactor language server, или какое-то аналогичное. Но придется повозиться.

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

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

Кстати, оказывается, в PhpStorm тоже не все встроено, например, для поддержки Симфони надо покупать какое-то левое расширение от какого-то левого чувака, а в комплекте это не идет, хотя PhpStorm платный, а Симфони самый популярный фреймворк. То есть, надо платить 2 раза.
Аноним 13/10/23 Птн 20:13:52 #45 №2877942 
>>2876587

Ну так PHP создателям шторма тоже не принадлежит. По факту имеем то, что дорогая платная IDE не поддерживает из коробки популярный фреймворк Symfony, и в этом плане не отличается особо от VS Code.
Аноним 13/10/23 Птн 20:15:28 #46 №2877943 
>>2876587

И вообще, концепция VS Code с поддержкой language server более правильная, чем проприетарные плагины для PhpStorm. Так как если ты что-то пишешь для VS Code, то этот же плагин подойдет и к другим редакторам.
Аноним OP 13/10/23 Птн 21:41:31 #47 №2878060 
image.png
image.png
>>2877936
Тему треда с нумерацией проебал. Вот это самое худшее

Короче если тред будете перекатывать не забывайте, что этот 134
Аноним 13/10/23 Птн 22:53:07 #48 №2878157 
Screenshot 2022-10-22 161630.png
Screenshot 2022-10-21 125727.png
>>2877942
Мудила гороховый, пикрелейтед поддержка симфони в вскод. Ебальник завали свой и пиздуй автора на коленях умолять, чтобы он раз за пять лет обновил свой высер.

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

>>2877943
Какая хуй разница "правильная" там конецепция или "не правильная" если никакой поддержки языка по сути нет. Микрософт НЕ создает и НЕ поддерживает языковой сервер для пхп. Возне энтузиастов можно поаплодировать и порадоваться. Но пользоваться этим можно разве что пару функций написать.

Как выглядит нормальная поддержка я уже показывал: https://youtrack.jetbrains.com/issues/WI?q=State:%20Resolved непрерывная нудная бесконечная работа с выяснением косяков, закрытием багов и выбором фич. Ничего подобного у микрософта для пхп даже близко нет. Вскод редактор чисто для микрософтовских языков: тайпскрипта и шарпа, и то с шарпом там большие проблемы до сих пор.

То что где-то есть кастомный плагин, который под нужным углом чешет тебе яйца это конечно заебись. Только вот в шторм добавляют реально важные для работы вещи. Из последнего например поддержка редис. ПОЛНАЯ. С кластерами, консолью, просмотром, сортировками и всем всем всем. Я знаю людей, которые за такое убили бы нахуй, только покажи кого.
Аноним 14/10/23 Суб 00:53:47 #49 №2878254 
>>2878157

> например поддержка редис.

Похоже на бессмысленную работу. Мне redis-cli вполне хватает для рабочих задач.
Аноним 14/10/23 Суб 02:09:03 #50 №2878290 
>>2878254
>redis-cli вполне хватает
Пфф, похоже что эти ебланы из редиса сделали бессмысленную работу по созданию этой консоли. Мне она для рабочих задач нахуй не нужна. Сру и в кеш и сру, хули туда вообще смареть.
Аноним 14/10/23 Суб 09:23:42 #51 №2878353 
>>2877931
Спасибо за ответ.
Я уже разобрался в коде.
Насчет названий возьму на заметку.
Менять сам массив $_POST больше не буду пытаться, если действительно не будет в этом крайней необходимости (я новичок, поэтому всех ситуаций не знаю).
Аноним 14/10/23 Суб 09:41:22 #52 №2878358 
>>2878290
Похоже ты тупой еблан. Редис не только как тупо кеш используется. У редиски есть PupSub и структуры данных

Here are some common use cases for data structures in Redis:

Key-Value Store:
Redis is often used as a key-value store. You can store simple key-value pairs, with keys and values being strings. This is the most basic data structure in Redis.

Strings:
Redis supports simple strings as values. You can use them for caching, session management, counters, and other use cases where you need to store a single value.

Lists:
Redis lists allow you to store ordered collections of strings. They are useful for implementing things like job queues, activity streams, and more. You can push and pop elements from both ends of the list.

Sets:
Sets in Redis are unordered collections of unique strings. You can perform set operations like union, intersection, and difference, making them suitable for tasks like tracking unique elements or implementing tags.

Sorted Sets:
Sorted sets are similar to sets, but each member has an associated score, allowing you to store and retrieve data in a sorted order. They are useful for leaderboards, ranking systems, and more.

Hashes:
Redis hashes are maps between fields and values, and they are useful for storing structured data. You can think of them as key-value stores within key-value stores, making them ideal for storing user profiles, configuration settings, and more.

Bitmaps:
Redis provides bit manipulation operations, allowing you to use Redis as a bitmap. You can represent and manipulate individual bits, which is useful for tasks like tracking user online status.

HyperLogLog:
HyperLogLog is a probabilistic data structure for estimating the cardinality of a set. It's used for counting distinct elements in a very memory-efficient way.

Geospatial Indexes:
Redis has data structures for geospatial indexing. You can store geospatial data (e.g., latitude and longitude) and perform operations like finding nearby points.

Pub/Sub:
Redis supports publish/subscribe mechanisms, allowing you to implement message queues and real-time messaging systems.

Lua Scripting:
You can use Redis with Lua scripting to create custom data structures and perform complex operations on your data.

Streams:
Redis Streams are log data structures that allow you to publish and consume messages. They are suitable for building event-driven systems and message brokering.

Bloom Filters:
You can implement Bloom filters in Redis, which are probabilistic data structures used for testing whether an element is a member of a set.

Caches:
Redis is often used as a caching layer to store frequently accessed data, such as database query results, to improve performance.

Distributed Locks:
Redis can be used to implement distributed locks, which are crucial for ensuring the coordination of processes in a distributed system.
Аноним 14/10/23 Суб 11:09:35 #53 №2878416 
Извините за глупый вопрос, я совсем зеленый
У меня есть HTML форма
У кнопки отправки формы есть изображение через тег img, ссылка - из Интернета
Я не знаю как работают вирусы/уязвимости, читал только про XSS
Примитивно понимаю как работает браузер через HTTP запросы
Так вот...вопрос!
Когда я пишу строчку тег img и ссылка из Интернета, это означает, что браузер, который будет выводить мой HTML-код, будет отправлять запрос сайту, на котором размещается изображение, чтобы вставить в мою HTML страницу?
И если так, есть тут вероятность, что я таким образом открываю дорогу чему-то вредному? Почему я вообще так подумал?
Потому что насколько я понял, XSS-уязвимость работает так, что при открытии страницы отрабатывает JS-код и когда браузер отправляет GET запрос сайту, он ??также открывает эту страницу (страницу с изображением)??
Простите, пожалуйста, если у того, кто это прочитает и знает, случится фейспалм.
Буду очень благодарен, если мне укажут на мои ошибки и разъяснят ситуацию.
Аноним 14/10/23 Суб 15:34:11 #54 №2878580 
>>2876492
Норм все, заебись перекатил
Аноним 14/10/23 Суб 15:50:11 #55 №2878588 
>>2878416
>Когда я пишу строчку тег img и ссылка из Интернета, это означает, что браузер, который будет выводить мой HTML-код, будет отправлять запрос сайту, на котором размещается изображение
да

>и когда браузер отправляет GET запрос сайту, он ??также открывает эту страницу (страницу с изображением)??
нет, загружается только картинка

если у тебя там ссылка http://pisechka.jpg, то это никакие JS парсеры не запустит

чтобы браузер начал парсить JS, то нужен корректный MIME-type text/javascript, а у <img src=....jpg> MIME-type будет image/jpeg.
JS не будет выполняться.
Аноним 14/10/23 Суб 16:20:53 #56 №2878609 
>>2878588
Окей, спасибо за ответ!
Аноним 14/10/23 Суб 16:27:55 #57 №2878615 
>>2878416

XSS-уязвимость подробно описана тут: https://github.com/codedokode/pasta/blob/master/security/xss.md

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

Да.

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

Да. Ну для начала, сторонний сайт может отказаться отдавать изображение или при загрузке твоего сайта подменить его на что-то неприличное или даже незаконное.
Аноним 14/10/23 Суб 16:42:34 #58 №2878629 
>>2878615
Так... Окей...
Спасибо за ответ!
Статью я читал.
Аноним 14/10/23 Суб 17:12:21 #59 №2878646 
>>2878615
Даже если подменит, то это все равно не будет выполняться.
Аноним 15/10/23 Вск 01:12:36 #60 №2879321 
image.png
На галере, где последний раз работал, был PHP'шник с армянской фамилией.
У вас там совсем днище что ли?
Вроде дворников, таксистов, сборщиков клубники и т.д., ну где обычно работают мигранты.
Аноним 15/10/23 Вск 02:46:16 #61 №2879349 
>>2879321
>На галере
Раздался писк из трюма.
Зато пхп макаки с индусами за весло барена не конкурируют.
Аноним 15/10/23 Вск 21:18:26 #62 №2880359 
>>2878646

Если ты у себя показываешь изображение с другого сайта, то другой сайт может подменить изображение и вместо него будет показываться что-то другое, например, что-то неприличное. Тоже своего рода уязвимость, так как сторонний сайт влияет на то, как выглядит твой сайт. При чем тут выполняться?
Аноним 16/10/23 Пнд 09:41:12 #63 №2880626 
>>2878060
Картинки никак не поправить, если проёбан тег, номер или текст в шапке номерного треда то описывай что надо поправить в посте кидай на этот пост репорт, в тексте репорта указывай что надо поправить шапку.
Всем добра.
Аноним 16/10/23 Пнд 09:45:59 #64 №2880633 
Что ещё надо знать помимо РНР+Ларавель на джуна?
Аноним 16/10/23 Пнд 09:47:43 #65 №2880635 
>>2880633
Базы данных, HTTP
Аноним 16/10/23 Пнд 10:35:04 #66 №2880700 
>>2880635
А докер надо учить?
Аноним 16/10/23 Пнд 12:10:52 #67 №2880842 
На сколько жесткие собесы на РНР?

Вообще, я хотел бы такой вариант, что прихожу на собес, разговариваем за жизнь и потом мне говорят - если согласны работать за 20к, то берём. А я такой - конечно, согласен!
Реально ли это? Или тоже душка всякой мутатой типа СОЛИДов, паттернов всяких, алгозадачек?
Аноним 16/10/23 Пнд 12:14:48 #68 №2880846 
>>2880842
>Вообще, я хотел бы такой вариант, что прихожу на собес, разговариваем за жизнь и потом мне говорят - если согласны работать за 20к, то берём. А я такой - конечно, согласен!
Как же я хотел чтобы всё было с точностью наоборот. Даже хуй знает что им рассказывать за жизнь можно. Для меня это будет как ёбанное испытание.
@
Что вы делали до 25 лет?
@
Хмм.... Это... Пук. Учился
Аноним 16/10/23 Пнд 12:32:09 #69 №2880870 
image.png
Дублирую свой вопрос тут, потому что есть мнение что это именно про Пыху(фулстак или цмски какие-то без разницы. Легче, менее заёбисто значит лучше). Что скажете на этот счёт? Может что посоветуете?
У меня в целом с программированием нет проблем, я специализированный ВУЗ закончил и хуй забил. Но сейчас нужны деньги и боле менее стабильная работка с грейдами.

>Посоветуйте какое-то направление где максимально можно хуй забить, чтобы после работки были силы параллельно учить что-то другое(рисование/игровой движок какой-то дрочить).
Аноним 16/10/23 Пнд 12:35:50 #70 №2880878 
>>2880700
Надо уметь с ним работать на уровне запустить проект/посмотреть логи/прокинуть файл
Аноним 16/10/23 Пнд 12:37:18 #71 №2880880 
>>2880842
Джуна вряд ли будут о паттернах спрашивать, если спрашивают - там пидоры
Алгозадачки дают только бездарные хуесосы в вк/яндексе/авито
Аноним 16/10/23 Пнд 13:35:36 #72 №2880961 
>>2880870
От конторы зависит. В целом, если в сроки укладываешься, то можешь спокойно после смены заниматься своими делами. Но чаще сроки заведомо делают маленькими, чтобы поработал ещё.
В общем, надо искать хорошую крупную фирму, но туда и вкат жестче. Новичку скорей светит ИП или ОАО "Рога и копыта", где лютая переработка.
Аноним 16/10/23 Пнд 14:39:03 #73 №2881033 
>>2880842
Чел, сейчас дойти до этапа собеса уже ебейшее достижение. А спрашивать там могут что угодно, хоть про два стула.

>Вообще, я хотел бы такой вариант

А работадатель хочет что ты и бэк и фронт с 25 лет опытом в 22 года, с двумя красными дипломами и такими софт скиллами что хрюша тебе отдалась в подсобке, и это всё за 20к, согласен на такой вариант?
Аноним 16/10/23 Пнд 15:15:48 #74 №2881088 
>>2881033
А если у меня не встанет на хрюшу?
Аноним 16/10/23 Пнд 15:27:21 #75 №2881112 
>>2876492
Да спасибо, что перекатил. А ты тот самый ОП или просто перекат решил устроить?
Аноним 16/10/23 Пнд 16:19:55 #76 №2881217 
>>2875886 (OP)
Я путаюсь в SOLID, а именно в принципе единственной ответсвенности (SRP).
Я приведу пример, а вы опишите, пожалуйста, как сделать правильно?
Нужно создать класс "База данных", который реализует CRUD операции. За таблицу БД будет приниматься файл.
Первый вопрос:
Что должно находиться в таком классе, если нужно следовать принципу SRP? CRUD операции (insert, delete, select, update)? Окей, а метод создания таблицы (файла) расписывать в том же классе или для него нужен отдельный класс?
Так же допустим файл содержит строки вида:
Ключ:значение
я хочу создать метод, который будет получать ключ этой строки. Этот метод нужен только для работы CRUD методов. Вопрос: если учитывать SRP и что в класс "База данных" входят CRUD методы, нужно ли выносить метод получения ключа в другой класс или нужно и этот метод писать в класс БД?

Так же хотел уточнить SRP для метода. Вот есть insert. Я понял, что он не правильно написан, так как этот метод принимает внутри себя открытый файл, а надо, чтобы файл открывался в самом методе и закрывался там же, так как иначе у нас может просто висеть открытый файл , кстати я не совсем понял зачем. Есть какие-то ограничения на открытые файлы?.
Мне сказали, что если я буду открывать файлы в самом методе, то это не нарушит SRP. А я не понимаю уже, почему не нарушит, ведь теперь у метода отвественность за открытие файл, за закрытие файла, и за поиск строки по ключу. Я запутался. Как правильно-то, если нужно учитывать SRP?
public function insert($file, $key, $value): void
{
$recordKey = '';

while (($line = fgets($file)) !== false) {
$recordKey = KeyValueDatabaseModel::getKey($line);

if ($recordKey == $key) {
break;
}
}

fseek($file, 0, SEEK_END);

if ($recordKey != $key) {
fwrite($file, "$key:$value\n");
} else {
echo "Ключ " . $key . " уже существует в файле</br>";
}

rewind($file);
}
Аноним 16/10/23 Пнд 16:21:54 #77 №2881218 
>>2881217
А, еще хотел спросить, вы мой текст поняли, или я плохо выражаюсь?
Аноним 16/10/23 Пнд 17:59:52 #78 №2881332 
>>2881112
Нет, я вкатывальщик. Увидел, что тред в архиваче а переката нет вот и перекатил.

>>2880626
Понял, буду знать. Спасибо.
Аноним 16/10/23 Пнд 19:32:07 #79 №2881493 
>>2880842

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

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

Тогда, может сеньора с опытом поменьше или миддла? Но эти просят по 200-300 к в месяц, а работы делают отнюдь не на 300к.

Получается, надо взять джуна. Джуну можно платить 50к, и 6 джунов за 50к, наверно, напишут больше кода, чем один миддл за 300к.

Кандидатов в джуны столько, что из них можно выстроить очередь от Москвы до СПб, но качество кандидатов очень разное. А тебе надо человека, который сразу придет и начнет исправлять баги, добавлять новые фичи. В идеале, из этой очереди отобрать самого умного. Как это сделать? Тут всего несколько вариантов:

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

А как "разговор о жизни" поможет в этой ситуации, я не очень понимаю. Ты сотрудника, генерирующего прибыль, ищешь, или человека для разговоров по душам?
Аноним 16/10/23 Пнд 19:33:10 #80 №2881496 
>>2880846

Ну скажи честно, до 25 был дураком, а потом поумнел и начал думать о карьере, будущем, поэтому пришел в вашу компанию.
Аноним 16/10/23 Пнд 19:33:57 #81 №2881498 
>>2880870

Доставка еды на электровелосипедах (пока эту дрянь не запретили).
Аноним 16/10/23 Пнд 19:37:04 #82 №2881504 
>>2880700

В идеале хорошо бы, если бы ты умел собрать образы php-fpm, nginx и mysql и объединить их с помощью docker-compose, чтобы внутри, например, запустить задачу про студентов.

Если хочешь изучать Докер, обязательно изучи сначала работу в командной строке Линукса: команды для работы с файлами, перенаправления, конвейеры, права итд.
Аноним 16/10/23 Пнд 19:45:29 #83 №2881516 
>>2876486
Так и не могу выбрать. Симфони вроде покруче, но на Лару больше вакансий.
Аноним 16/10/23 Пнд 19:50:19 #84 №2881520 
>>2881498
Так бы и делал если бы жил не в Украине где единственный способ заработать денег и не уехать пид Бахмут - удалёнка.
Аноним 16/10/23 Пнд 20:03:49 #85 №2881533 
>>2881217

Насчет принципа единой ответственности, мы его разбирали в прошлом треде, в оригинале этот принцип говорит о разделении приложения на крупные модули, а не про отдельные классы. Вот посты, почитай: >>2840503 Там есть ссылка на пост (на англ.) от автора этого принципа с объяснениями.

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

> Нужно создать класс "База данных", который реализует CRUD операции
> За таблицу БД будет приниматься файл.

Ты хочешь создать свою БД на файлах, которая хранит пары ключ-значение? Тогда я советую разбить код на 2 части:

- движок БД (Engine). Этот класс позволяет работать с любой таблицей (файлом), и делать операции вроде вставки данных, удаления данных, поиска данных и тд. Он универсальный, и не содержит каких-то действий для конкретных таблиц (например, в нем нет методов вроде "получить последние 10 записей в блоге")

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

При таком разделении ты сможешь в будущем поменять тип БД, например, отказаться от своей БД на файлах и перейти на MySQL или Postgres. Для этого достаточно будет только заменить "движок".

Вот пример, как может выглядеть класс Engine:

class FileDbEngine
{
// в конструктор надо передать папку, в которой хранятся файлы
public function __construct(string $directory);
// создает пустую таблицу
public function createTable(string $table);
// вставляет либо заменяет значение по ключу
public function insertOrUpdate(string $table, string $key, string $value);
// удаляет значение по ключу
public function delete(string $table, string $key);
// удаляет всю таблицу
public function drop(string $table);
// ищет по ключу
public function findByKey(string $table, string $key): ?string;
// ищет по диапазону ключей от A до B с сортировкой
public function findByRange(string $table, string $from, string $to): array;
}

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

Что касается высокоуровненвых классов для работы с конкретными таблицами, то есть уже готовые паттерны, они описаны тут: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md

> Что должно находиться в таком классе, если нужно следовать принципу SRP? CRUD операции (insert, delete, select, update)? Окей, а метод создания таблицы (файла) расписывать в том же классе или для него нужен отдельный класс?

В "движке" надо сделать и создание таблиц, и удаление, и CRUD методы, но они должны быть универсальные, и должны работать с любой таблицей. То есть в "движке" не должно быть методов вроде "добавить комментарий к посту". А только универсальный метод вроде "вставить запись в таблицу".

> я хочу создать метод, который будет получать ключ этой строки. Этот метод нужен только для работы CRUD методов. Вопрос: если учитывать SRP и что в класс "База данных" входят CRUD методы, нужно ли выносить метод получения ключа в другой класс или нужно и этот метод писать в класс БД?

Не нужно выносить. Можно сделать это приватным методом.

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

Да, верно. Надо принимать назание таблицы, а не дескриптор файла.

> Мне сказали, что если я буду открывать файлы в самом методе, то это не нарушит SRP.

Верно.

> А я не понимаю уже, почему не нарушит, ведь теперь у метода отвественность за открытие файл, за закрытие файла, и за поиск строки по ключу. Я запутался. Как правильно-то, если нужно учитывать SRP?

У класса Engine ответственность - это взаимодействие с БД на файлах. То есть создание, удаление, изменение и поиск данных. Если для этого надо открывать и читать или записывать файлы, то это тоже часть ответственности класса Engine.

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

> вы мой текст поняли, или я плохо выражаюсь?

Ну где-то на 80% понятно.
Аноним 16/10/23 Пнд 21:32:48 #86 №2881690 
Lack+of+Cohesion+of+Methods+(LCOM4).jpg
>>2881217
А ты не путаешься. Все именно настолько плохо, в определении нет конкретных способов достижения SRP. Только мутные истории типа: "у класса должна быть только одна причина меняться" итд. Так что ты задаешь правильные вопросы. На которые кстати очень сложно ответить по существу, в основном получается что-то типа >>2881533 "я примерно вот так чувствую".

Теперь по существу.
Существует специальная метрика, под названием LCOM4. Суть её примерно такова: твой класс состоит из методов и свойств, одни методы используют другие методы и свойства, и так или иначе через твой класс можно проложить n независимых маршрутов. Если маршрут только один - поздравляю, ты соблюдаешь SRP. Если больше, то класс надо делить. https://www.aivosto.com/project/help/pm-oo-cohesion.html#LCOM4

Вот пожалуй единственный способ конкретно без "мне кажется" или "а я щитаю это одна ответственность" проверить соответствие SRP.
Аноним 17/10/23 Втр 08:14:06 #87 №2881902 
>>2881690
Это тоже надо знать пхпешеру?
Аноним 17/10/23 Втр 10:30:21 #88 №2882005 
>>2881902
Ну можешь не знать. Ходить с умным ебалом и рассказывать что это кароч там одна ответственность, делает одну вещь кароч, но оччень хорошо, да.
99% так и делает, солид это вообще сектанство для ебланов.
Аноним 17/10/23 Втр 13:54:31 #89 №2882252 
>>2876486
битрикс, брат
Аноним 17/10/23 Втр 14:11:04 #90 №2882268 
>>2882252
А вордпресс норм вариант?
Аноним 17/10/23 Втр 16:39:51 #91 №2882463 
>>2882268
вордпресс это кал
Аноним 17/10/23 Втр 19:45:11 #92 №2882780 
>>2882005

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

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

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

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

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

// finds user by name
public function findUserByName()

(по моему, PhpStorm адаптирован под эти метрики и генерирует подобные мусорные комментарии)

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

Подобная проблема есть и в других отраслях. Вот, например, как определить алгоритмически, что у здания красивый фасад? Подходишь к дому 19 века, сразу видишь, красиво построено, или к современной многоэтажке и видишь, какое все уродливое. А алгоритмом это непонятно как формализовать. Разве что нейросеть обучить и ей проверять.
Аноним 17/10/23 Втр 20:52:44 #93 №2882933 
parfenon.jpg
isaak56.jpg
kunstkam23.jpg
Esdersshejfals.jpg
>>2882780
Магическое мышление маленького вкатусика, вкатуночка. Все такое сложное, такое неопределенное вокруг.

>ты бы хотел, чтобы были строгие критерии
Начнем с того что не строгий критерий это блядь не критерий.

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

>Но как сделать формальные критерии?
Начни с того что почитай что такое цикломатическая сложность.

>Можно сделать такую метрику
Это не метрика а исследование. И подобные исследования проводились. Есть, например, исследования делающие вывод что однобуквенные переменные ухудшают понимание кода.

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

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

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

Пчел, нахуй ты рассказываешь про то в чем не понимаешь нихуя? Пикрелейтед, вот почему. За прошедшие тысячелетия архитектура давно формализована и структурирована. "Современная" архитектура это как раз судорожные попытки из формализации выйти. Попытки понять может ли быть красиво за рамками золотого сечения.
Аноним 17/10/23 Втр 21:52:43 #94 №2882983 
>>2882933
Всегда проигрывал с этой хуиты про архитектуру.
Смотрим например на линии на втором пике и видим что на самом деле они не касаются ни че го. На левой они мимо башенок летят, на правой вообще от балды сквозь купола.
Аноним 17/10/23 Втр 22:08:56 #95 №2883007 
>>2882983
Ебать ты гений.
А то что толщина этих линий в реальности была бы около метра тебя не смущает?
Эти купола из чего-то сделаны, да еще и стоять должны, не падать. Речь о том какого размера купол должен быть ОТНОСИТЕЛЬНО здания, чтобы ты не смотрел на него и не думал: ну и залупа карликовая/гипертрофированная. У архитектора ответ на этот вопрос есть, причем это литерали база. Просто водолей из поста выше этого не знает.
Аноним 17/10/23 Втр 22:22:23 #96 №2883019 
>>2883007
Вот именно, что раз линии надо делать по метру то это натягивание совы на глобус, а линии нарисованы от балды. 3.153 или 3.567 какая разница да?
Аноним 17/10/23 Втр 23:20:51 #97 №2883074 
>>2883019
Всегда проигрывал с дебилов, которые что-то пытаются мерить по гвонокартинке разрешением три пикселя, нарисованной хуй пойми кем и каким-то полоскам нахуяренным сверху в пейнте.
Аноним 17/10/23 Втр 23:25:18 #98 №2883078 
>>2883074
Так ты сам привел эти картинки как аргумент. впрочем по другому с этими картинками и не бывает.
Аноним 17/10/23 Втр 23:35:13 #99 №2883085 
Заинтересовал один вопрос.
Используют ли библиотеки для того, чтобы пропихнуть вредоносный код? Есть ли шанс подключить библиотеку и сделать свой код уязвимым? Также есть ли шанс, что подключив библиотеку, и поставив ее в автоматическое обновление (composer вроде бы так делает, могу ошибаться), код библиотеки может переписаться кем-то и вместо безопасной библиотеки будет библиотека с вредным кодом? И если есть, то каковы эти шансы?
Аноним 17/10/23 Втр 23:43:19 #100 №2883094 
>>2883085
Добро пожаловать в опен сорс камунити. Слева попущенцы сидят по пол года и ждут когда автор либы исправит критическую багу. Справа сидят дегенераты и по пол года ждут, когда новый релиз можно считать достаточно безопасным.

Тут у нас все на ДОВЕРИИ и ДОБРОЙ ВОЛЕ.
Аноним 17/10/23 Втр 23:54:40 #101 №2883102 
>>2883094
В клозет сорсе то не подкладывают зонды и закладки, мда кек.
Аноним 18/10/23 Срд 06:48:44 #102 №2883175 
>>2883085
Главное, чтобы файлы в сердечки не превратили
Аноним 18/10/23 Срд 07:55:53 #103 №2883197 
Как заставить тупой шторм добавлять их поганую папку .idea в .gitignore? Создаёшь новый проект и вечно это говно вылазит, а я не хочу, чтобы оно лезло в мой репозиторий, где лежит исходный код, а не всякая идеевская параша.
Аноним 18/10/23 Срд 08:22:25 #104 №2883210 
gitignore.png
Screenshot 2023-10-18 082136.png
>>2883197
Берешь и без задней мысли добавляешь.
Аноним 18/10/23 Срд 08:43:33 #105 №2883223 
>>2883197
Гит поддерживает глобальный .gitignore
Это значит, ты можешь один раз в одном файле вне репозиториев указать все специфичные для тебя файлы, показать этот файл гиту — и не срать ими в .gitignore отдельных проектов.

Мак/линукс:
git config --global core.excludesfile ~/.gitignore
Винда:
git config --global core.excludesfile "%USERPROFILE%\.gitignore"
и т.д.

В крупных компаниях не принято заносить сотруднико-специфичные файлы, к которым относятся конфиги IDE, в общий .gitignore, потому что я на емакс работаю, зачем мне твоя .idea?
Аноним 18/10/23 Срд 09:32:40 #106 №2883257 
>>2883223
>зачем мне твоя .idea
Это чистая незамутненная кристальная шиза...
Аноним 18/10/23 Срд 10:15:39 #107 №2883301 
>>2883223
>В крупных компаниях не принято заносить сотруднико-специфичные файлы, к которым относятся конфиги IDE, в общий .gitignore, потому что я на емакс работаю, зачем мне твоя .idea?

Чел, в крупной компании принят стандарт что все пишем на PHPStorm, если ты пишешь на другом - твои проблемы
Аноним 18/10/23 Срд 20:43:24 #108 №2884074 
>>2883301

У разных людей могут быть разные настройки IDE, соответственно незачем их вываливать в репозиторий.
Аноним 18/10/23 Срд 21:20:26 #109 №2884093 
>>2884074
Как-то лихо ты перескочил от "добавить одну строчку в гитигнор" к "вываливать настройки IDE в репозиторий".
Спокуху оформи. Если есть возможность защититься от пуша левых файлов в проект каким-то забывчивым додстером, совершенно поебать на пару лишних строчек в гитигноре. Можно хоть все актуальные IDE туда захуярить, похуй абсолютно.
Аноним 18/10/23 Срд 21:53:04 #110 №2884119 
Можете объяснить на пальцах аутентификацию в Ларавеле для апи запросов? Я не понимаю, вот laravel/ui - это оно? А laravel/password? А laravel/sanctum? Там как будто несколько поколений аутентификационных систем. Что проще? Мне всего лишь нужно, чтобы фроненд обменивался с бекендом апи-запросами. Чтобы на сайте любой пользователь мог посмотреть список товаров (к примеру), но вот добавить или отредактировать товар мог только авторизованный юзер, зашедший в админку на сайте. У меня мозг плавится, когда пытаюсь понять, как это делается. Пока что есть только
composer require laravel/ui
php artisan ui bootstrap --auth

что дало возможность регистрироваться и логиниться через браузер.
Аноним 18/10/23 Срд 23:44:12 #111 №2884215 
>>2884119
>Можете объяснить на пальцах
Одеваем штаны на лямках, берем муриканскую азбуку и едем учиться читать в наш пхп детсад для альтернативно одаренных детей.

Первая остановочка https://github.com/laravel/ui . Заходим, читаем:
>This legacy package is a very simple authentication scaffolding built
>you should consider using Laravel Breeze for new projects

Поняли, приняли. Следующая остановочка https://laravel.com/docs/10.x/starter-kits#laravel-breeze . Заходим, читаем:
>Laravel Breeze is a minimal, simple implementation of all of Laravel's authentication features

Ага, фичи значит есть. Следующая остановочка: https://laravel.com/docs/10.x/authentication#laravels-api-authentication-services . Заходим, читаем:
>Laravel provides two optional packages to assist you in managing API tokens and authenticating requests made with API tokens: Passport and Sanctum.
>Passport. Passport is an OAuth2 authentication provider, offering a variety of OAuth2
>Sanctum. In response to the complexity of OAuth2 and developer confusion, we set out to build a simpler, more streamlined authentication package

Водитель волшебного автобуса уже минут пять сигналит, а значит эта остановочка конечная. Бери свои шмотки и выкатывайся нахуй, пока он тебя пинками по почкам не выпиздил.
Аноним 19/10/23 Чтв 14:36:48 #112 №2884864 
Взялся за задачу со списком студентов и...не понимаю как организовать свою деятельность.
Нужно и PHP код написать, и HTML сверстать, и валидацию данных сделать, и защиту от уязвимостей прописать, и, короче, много чего. Глаза разбегаются, не понимаю за что браться.
Может анон порекомендовать какие-нибудь советы как организовать себя?
Аноним 19/10/23 Чтв 14:53:46 #113 №2884937 
>>2884864
Поставь ларавель по любому гайду с первой страницы гугла.
Аноним 19/10/23 Чтв 21:24:42 #114 №2885777 
>>2884864

В описании к задаче много комментариев со ссылками.

Но начать можешь с вывода таблицы. То есть сделай таблицу в базе, руками туда вставь N человек и сделай чтобы при заходе на сайт выводился список этих людей.
Аноним 20/10/23 Птн 15:06:02 #115 №2886669 
Снимок.JPG
Забыл как это фиксить
Аноним 20/10/23 Птн 15:34:07 #116 №2886749 
Ставить всем свойствам класса модификатор доступа private/protected (в самом классе геттер и сеттер) считается нормальным или это считается перебор?
Не до конца понимаю когда какой модификатор доступа ставить.
Аноним 20/10/23 Птн 16:54:37 #117 №2886921 
>>2886669
Ты забыл, что строка в PHP - это последовательность байт, а строки с кириллицей - это мультибайтные строки и такая адресация не сработает. Можно переписать через mb_substr():

$eng = 'help';
$rus = 'помогите';
echo mb_substr($eng, 1, 1) . ' ' . mb_substr($rus, 1, 1);
Аноним 20/10/23 Птн 17:01:50 #118 №2886934 
>>2886749и
Зандстра пишет, что предпочтение следует отдавать конфиденциальности, сначала делайте свои свойства закрытыми или защищенными, а потом по мере необходимости ослабляйте ограничения.
Аноним 20/10/23 Птн 17:09:21 #119 №2886955 
>>2886921
Блин, вот проверял этот способ и он не работал, а сейчас скопировал твой код и работает. Наверное я где то опечатался, хз, спасибо в любом случае. А то кодировки менял минут 40 везде и всё никак
Аноним 21/10/23 Суб 12:51:40 #120 №2888441 
Как создаются проекты, которые состоят из нескольких сервисов? Допустим есть основной сервис, у которого есть БД и REST-API интерфейс для общения жсонами. Также есть 2 сайта с MVC архитектурой, у которых своя бд, для клиентов отображают инфу в виде html-страничек, но иногда им нужно запрашивать инфу на основном сервисе. Все они логически связаны друг с другом.
Вот как это всё оформляется в РНР? Делать три отдельных проекта? Или один проект с 3 папками под каждый сервис?
Аноним 21/10/23 Суб 14:40:46 #121 №2888654 
>>2886955
Почему тогда в платной идее есть поддержка Спринга из коробки, а бесплатный плагин для коммьюнити от разработчиков "добрые" жидбрейнсы забанили?
Аноним 21/10/23 Суб 14:53:40 #122 №2888666 
>>2886921
Так ли необходимо ставить HStorm во время обучения? Некоторые менторы вроде Альберта Степанцева заставляют его устанавливать. Но вот мне кажется, что VS Code ни чем не хуже для РНР.
Аноним 21/10/23 Суб 14:58:03 #123 №2888675 
>>2888666
Если хочешь быть профессионалом, то ставишь шторм. Других вариантов нет.
Аноним 21/10/23 Суб 15:12:12 #124 №2888702 
>>2876500
>>2888666
Так ли необходимо ставить ZStorm во время обучения? Некоторые менторы вроде Альберта Степанцева заставляют его устанавливать. Но вот мне кажется, что VS Code ни чем не хуже для РНР.
Аноним 21/10/23 Суб 18:36:19 #125 №2889038 
>>2888654
В платной идее хотя бы есть поддержка фреймворка, а шторме - фиг с маслом. Надо докупать плагин для фреймворков по отдельному ценнику.
Аноним 21/10/23 Суб 18:36:53 #126 №2889040 
изображение.png
В контексте задачи про список студентов, что означает дамп?
Что от меня хочет ОП, когда пишет то, что описано на пике?
Аноним 21/10/23 Суб 18:47:50 #127 №2889055 
>>2889040
Раньше работал сис. админом и делал дампы базы данных в качестве бэкапов. Там по сути просто команды SQL, которые позволяют восстановить базу данных.
Аноним 21/10/23 Суб 22:11:02 #128 №2889308 
>>2889040

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

Обычно дамп сохраняется в виде текстового файла с SQL-командами CREATE TABLE и INSERT. Вот пример дампа от другого анона: https://github.com/sergnik1995/students-list/blob/master/students.sql
Аноним 21/10/23 Суб 22:12:23 #129 №2889311 
>>2889040

Чтобы сделать дамп в mysql, используется команда mysqldump. есть также другие варианты, если ты, например, используешь какую-то графическую программу для работы с БД, то можно через нее. Если у тебя постгрес или что-то еще, то погугли сам.
Аноним 21/10/23 Суб 22:14:17 #130 №2889315 
>>2886749

Ставь максимально закрытый. То есть, private, если только у тебя нет причины поставить protected (если тебе надо в наследниках доступ) или public.
Аноним 21/10/23 Суб 22:21:49 #131 №2889323 
>>2888441

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

Яндекс, по-моему, использует монорепозиторий, и по-моему, он называется "Аркадия". Вот хорошие статьи по теме:

https://habr.com/en/companies/yandex/articles/482926/ (здесь Яндекс рассказывает о размерах своего репозитория)
https://habr.com/en/companies/yandex/articles/469021/
Аноним 22/10/23 Вск 01:53:42 #132 №2889413 
Как сделать, чтобы в слобце айди в мускуле не создавалось ещё одно такое же айди, а просто менялись данные в остальных столбцах?

Эти типа мне надо прочитать, что есть, забить в переменную и заново её записать? Не, там запишется новое значение.
Записать заранее в базу все айди и потом обновлять остальное по запросу? Мб ссылку на гайд дайте.
Аноним 22/10/23 Вск 02:27:20 #133 №2889421 
>>2889308
>>2889311
Спасибо за ответ!
Аноним 22/10/23 Вск 04:24:18 #134 №2889438 
image.png
Почему не работает понять не могу
Аноним 22/10/23 Вск 04:28:51 #135 №2889439 
>>2889438

<?php пиши слитно
Аноним 22/10/23 Вск 05:08:35 #136 №2889441 
Screenshot 2023-10-22 050414.png
>>2889438
Так ли необходимо ставить PStorm во время обучения? Некоторые менторы вроде Альберта Степанцева заставляют его устанавливать. Но вот мне кажется, что VS Code ни чем не хуже для РНР.
Аноним 22/10/23 Вск 09:16:45 #137 №2889481 
>>2889441
На работе могут сказать мол работаем только в шторме, придётся осваивать. Почему не сделать это сразу? Всего лишь разобраться в программе, это ж не фотошоп какой-нибудь.
Аноним 22/10/23 Вск 12:19:15 #138 №2889612 
>>2889481
На работе работают ТОЛЬКО в шторме. Без вариантов.
Аноним 22/10/23 Вск 12:59:37 #139 №2889672 
>>2889612
Полуграмотные пыхокорзинки, что с них взять?
Аноним 22/10/23 Вск 13:41:32 #140 №2889739 
image.png
Объясните долбоебу как через апи капчу получить на дваче?
Аноним 22/10/23 Вск 14:13:43 #141 №2889764 
>>2889441
Это местный мем или почему этот вопрос задают уже несколько раз и на него несколько раз отвечают?
Аноним 22/10/23 Вск 14:36:15 #142 №2889787 
>>2889764
Это жидбрейнсы поставили бота, чтобы своё платное говно пиарить
Аноним 22/10/23 Вск 14:36:20 #143 №2889788 
>>2889739
https://2ch.hk/api/captcha/2chcaptcha/show?id=f062a68881f4919378480c1b2b0ce7a52958c1ac09f8a4c4157942dc24a6f7728ac9ca5b30d2622c6a26d46293cf7f147c4e9b2e83f62e3e7c229bbc86653778692fd0475a

нашел спосибо
Аноним 22/10/23 Вск 15:05:07 #144 №2889822 
Screenshot 2023-10-22 150414.png
>>2889787
Такой-то пеар.
Аноним 22/10/23 Вск 16:27:53 #145 №2889951 
Как считаете, это нормально?

У меня есть класс.

В нем есть:
Метод1

Метод1, который помогает методу1
Метод2, который помогает методу1
Метод3, который помогает методу1

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

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

Эти методы у меня появились, чтобы не плодить огромную функцию, а разделить их на маленькие.
Аноним 22/10/23 Вск 16:36:45 #146 №2889959 
есть примеры задач и что спрашивают при собесе?
Аноним 22/10/23 Вск 16:38:03 #147 №2889961 
>>2889951
У класса есть публичный интефейс, с которым взаимодействует клиент. И есть приватные методы, содержимое которых снаружи невидно и никого ебать не должно.
Аноним 22/10/23 Вск 16:39:26 #148 №2889964 
>>2889959
Спрашивают сколько должна прибухнуть мамаша на сносях, чтобы у неё родился мелкобуквенный хуесос.
Аноним 22/10/23 Вск 16:44:22 #149 №2889976 
>>2889964
че злой такой? что не так с вопросом? тебе простыню текста надо?
Аноним 22/10/23 Вск 18:15:20 #150 №2890059 
>>2889951
Работает, значит нормально.
Аноним 22/10/23 Вск 18:19:09 #151 №2890065 
>>2889976
Он не до вопроса доебался а до того что ты с маленькой буквы пишешь, такое на доске не одобряется.
Аноним 22/10/23 Вск 18:38:47 #152 №2890084 
>>2890065
Ебать нашли до чего доебаться, шизы
Аноним 22/10/23 Вск 19:20:32 #153 №2890138 
У меня есть метод, который принимает объекты (эти объекты принадлежат разным классом).

Т.е.

function check (One $object, Two $object)

One и Two - это классы.

Как-нибудь можно это реализовать?
Я попробовал, получилось только условие поставить, что объект должен быть определенного класса, а два не получается, да еще так, чтобы можно было обоих называть именем object внутри метода, но приписывать название класса.

Мне нужно не просто отдавать функции объекты разных классов.

Я хочу, чтобы я написал в параметрах функции (One $object, Two object), а потом внутри функции, например, сделал это:

$result = One $object->number + Two $object->number; (т.е. сложил то, что лежит в их полях number)
return $result;

Знаю, что это неправильный синтаксис, но мб это можно как-то реализовать?

Это не сильно принципиально, но мне немного надоело называть каждый отдельный объект по-разному.
Аноним 22/10/23 Вск 19:53:26 #154 №2890207 
>>2890138
Попахивает какой-то шизофренией.
Что конкретно тебе надо?
Тебе надо чтобы параметр функции мог быть двух типов? Это легко https://3v4l.org/BsaY7
Или тебе надо чтобы был какой-то один супертип? Это тоже легко https://3v4l.org/UbAHs
Или тебе надо чтобы можно было передать много параметров? И это легко https://3v4l.org/i0hYC

Вот так, напрмер, я бы реализовал функцию по суммрованию всей хуйни https://3v4l.org/8mMt3
Красиво.

Так че те надо вообще?
Аноним 22/10/23 Вск 20:08:17 #155 №2890232 
>>2890207
У меня параметры функции - три объекта.
Каждый объект принадлежит разному классу.

Я хочу вместо имен $objectClassNumber1, $objectClassNumber2, $objectClassNumber3

писать

ClassNumber1 $object, ClassNumber2 $object, ClassNumber3 $object.

Чтобы копилятор понимал, что под одним именем $object находятся 3 разных объекта, а различал он их с помощью названия класса, которое стоит рядом. Но, возможно, такое не существует в языке. И можно только в параметрах функции указывать, что объект, который передается функции, должен быть экземпляром указанного класса.
Аноним 22/10/23 Вск 20:24:38 #156 №2890253 
>>2890232
https://www.youtube.com/watch?v=Ui9bgzFoP5w
Аноним 22/10/23 Вск 20:27:08 #157 №2890256 
>>2890232
Значит про шизофрению мне не показалось.
Ок. Допустим ты так даже можно сделать. Каким хуем ты будешь отличать у которого объекта ты вызываешь метод? Как ты вообще себе представляешь работу с разными значениями по одному названию?
Аноним 22/10/23 Вск 20:51:48 #158 №2890307 
>>2890256
Окей.
Я увидел, что при создании функции можно написать так:
function Check (One $object) (т.е. чтобы функция принимала экземпляры только этого класса)

И подумал, что это более читаемо, чем $OneClassObject.

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

Т.е. чтобы я не писал $OneClassObject, а One $object
Аноним 22/10/23 Вск 21:13:49 #159 №2890338 
есть род мап на вкат в любую cms за пару месяцев? мб есть бояре, что возьмут к себе в подованы с последующим наймом?
Аноним 22/10/23 Вск 22:29:23 #160 №2890419 
>>2890307
Ну так передавай туда массив, какие проблемы. Я же показал как: https://3v4l.org/aIYLn и переменная одна и типизация проверяется.
Аноним 22/10/23 Вск 22:34:39 #161 №2890425 
>>2890084
Я к такому не доёбываюсь, а вот это граммар-нацик >>2889964 да
Аноним 22/10/23 Вск 22:38:31 #162 №2890428 
>>2890338
А что ты умеешь, чтобы стать падаваном?
Юнилингов так-то десять лет дрочили перед этим. Да еще к тому же джедаи сами выбирали себе по ученику и только если хотели. Между юнлингами проходили целые турниры, чтобы впечатлить будущего мастера.
А тех кого не выбрали назначали в "корпус обслуживания". То есть "очки в храме драить" и "бант пасти".
Аноним 22/10/23 Вск 23:23:14 #163 №2890455 
>>2890428
лан , тогда на заводе останусь, придется дальше спать в коморке
Аноним 22/10/23 Вск 23:37:31 #164 №2890466 
>>2889413
Короче насоздавал айдишек вручную, обновляю нужные параметры через гет, where нужный айди. Не забывайте переводить переменную в нужный тип.
Аноним 23/10/23 Пнд 08:49:58 #165 №2890706 
Почему после того как я поменял код выводится старый текст а не новый..
Аноним 23/10/23 Пнд 08:53:29 #166 №2890708 
>>2890706
в пыхо треде можно бесконечно Риситаса постить
Аноним 23/10/23 Пнд 09:08:02 #167 №2890710 
>>2890706
Каша в браваёзере протухла
Аноним 23/10/23 Пнд 10:43:25 #168 №2890758 
pizda.png
Screenshot2023-10-2310-40-23.png
Screenshot2023-10-2310-38-59.png
Как заставить работать этот ебаный докер
Аноним 23/10/23 Пнд 10:45:45 #169 №2890760 
>>2890758
sudo usermod -aG docker $USER
Аноним 23/10/23 Пнд 10:51:44 #170 №2890764 
>>2890760
перелогиниться не забудь
Аноним 24/10/23 Втр 03:49:04 #171 №2891780 
>>2889951

Да. Но вспомогательные методы надо сделать приватными, чтобы было понятно, что они вспомогательные.
Аноним 24/10/23 Втр 03:50:31 #172 №2891781 
>>2889959

Гоняют по теории: PHP, ООП, SQL, БД, JS, HTML, CSS, алгоритмы итд. Могут дать простую задачку. Вопросы проще всего найти в инете где-нибудь.
Аноним 24/10/23 Втр 03:54:42 #173 №2891783 
>>2890138

Я плохо понял вопрос.

function check (One $object1, Two $object2)

Чем тебе такой вариант не годится?

Если ты хочешь, чтобы можно было передать либо объект класса One, либо Two, то можно написать так:

function check(One|Two $object)

А если надо передать 2 объекта, то можно так:

function check(One|Two $o1, One|Two $o2)

Вертикальная черта это union type, они появились в PHP 8.0.
Аноним 24/10/23 Втр 03:55:24 #174 №2891784 
>>2890232

Нет, так нельзя , нужно дать им разные имена.
Аноним 24/10/23 Втр 04:29:56 #175 №2891792 
У меня несколько классов.
У каждого класса методы.
Причем только методы.
Свойств нет.
Объекты этих классов постоянно используют методы друг друга.
Потому что логически каждый занимается своим:
Методы одного класса контактируют с БД, методы другого класса - с cookie и т.д.
Но мне кажется, что у меня начинается путаница в коде. Мои функции постоянно берут в качестве аргументов объекты, чтобы использовать присущие этим объектам методы.
Это считается нормальным в программировании?
У меня 0 опыт в ООП. Примитивно я понимаю что такое объект, класс и метод. А также их разновидности. Но когда дело доходит до проектирования класса, я вообще не понимаю что мне писать. Те классы, которые сейчас написаны, создаются по наваждению больше, чем по пониманию. У меня складывается впечатление, что я хаотично впихиваю методы и свойства в классы.
Например, я создал класс, у которого есть свойство - перечень символов для генерации пароля, есть метод, который перемешивает массив, а потом из перемешанного забирает произвольное количество символов. Создал метод внутри этого класса, который генерирует соль и хеш. Создал метод, который обращается к методу класса, который работает с БД, чтобы он положил соль и хеш в БД.
Еще там вроде бы есть метод, который обращается к классу с cookie, а именно к методу в этом классе, который создает куки и записывает туда пароль.
Короче, у меня теперь полная путаница в коде. И все из-за того, что объект одного класса лезет в методы другого объекта. Я не понимаю на что мне опираться, чтобы грамотно проектировать классы.
Аноним 24/10/23 Втр 07:47:48 #176 №2891866 
>>2891792
не нормально.
1) в методы надо передавать данные
2) зависимости в конструктор
3) конструктор лучше, чтобы зависел от интерфейсов (но не обязательно)
4) инстансы зависимостей создавать в одном месте (Service Locator, DI, простое проталкивание через все приложение)
5) должен быть только один скоуп, где все зависимости прокидываются в объект, который запускает всю логику приложения. Так называемый composition root
6) нужно иметь хороший пример архитектуры, а не с потолка придумывать свои трактовки
Аноним 24/10/23 Втр 09:16:11 #177 №2891916 
>>2891792
Все потому что ты не понимаешь что классы это всего лишь ДЕТАЛЬ реализации. Это просто способ писать код. >>2891866 вот это все к проектированию никакого отношения не имеет, это частности.

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

Вот тебе пример. Нам нужен сервис для работы с куками. Что он делает? Преобразует данные в формат кук и обратно, дергает куки из массива $_COOKIES на вход и на выход. Записываем это в виде классов https://3v4l.org/D2RQi . Сколько там получится у тебя классов значения не имеет, ты можешь, например, вместо класса Coookie использовать массив, а энкодинг вынести в какой-нибудь CookieEncoder.

Важно что сигнатура твоего сервиса по работе с куками соответствует твоему проекту. Тебя интересует чтобы была публично доступная функция для установки и получения куки, ВСЕ. Этим ты пользуешься, это ты тестируешь итд. Что там внутри - абсолютно поебать. Ровно до тех пор пока это не доступно снаружи, разумеется. А вот как добиться недоступности снаружи уже следует их особенностей пхпшного ООП и тех самых частностей >>2891866 .
Аноним 24/10/23 Втр 09:51:32 #178 №2891938 
>>2891916
>Это частности
>Кукисы вставляются вот сюда. Это проектирование
Другалек. Куда вставлются кукисы - это частности. Это джуну поручают, вставлять кукисы. А правильная композиция зависимостей, позволяющая расширять и тестировать код, это архитектура. Она одинаковая для всех языков и платформ.
Аноним 24/10/23 Втр 09:58:28 #179 №2891942 
>>2891938
Ну в общем-то да. Согласен. Я и говорю: важно понять что "композиция зависимостей" != "композиция классов".
Аноним 24/10/23 Втр 10:00:17 #180 №2891943 
>>2891938
уточнение
для всех ооп языков. в фп другая песня.
Аноним 24/10/23 Втр 13:59:29 #181 №2892243 
В чем разница форума/чата от высоконагруженного сайта?
Говорят мол чат на php выносит оперативку и прочее, а в чем разница если бы это был сайт например? Так же пишут что php дерит ебические нагрузки.

В чем принципиальная разница, если мы аяксом отправляем короткое сообщение и вторым запросом запрашиваем новые сообщения из чата? А сайт - ебейший бекенд + дохуя запросов к бд
Аноним 24/10/23 Втр 14:57:01 #182 №2892305 
>>2892243
>форума/чата
Так форума или чата? Форум это обычный сайт. Да и чат вполне может быть обычным сайтом, сто проц видел "чат с поддержкой" в разных интернет магазах.

>Говорят мол чат на php выносит оперативку и прочее
Отличие обычных веб запросов от подключения через сокет в том что обычный веб запрос поле отработки всю использованную память освобождает. А пока кто-то в чате подключен через сокет процесс будет висеть на сервере и память на него будет выделена.

>Так же пишут что php дерит ебические нагрузки.
Пхп ДОСТАТОЧНО быстрый. У тебя узким местом всегда будет получение данных. Даже из кеша данные получаться будут дольше чем отрабатывает весь пхп скрипт по их получению.

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

Я не понимаю хули вы прицепились к этим ебучим чатам? Вы дохуя чатов в 2к23 видите или что? Какие нахуй чаты вообще блядь?
Аноним 24/10/23 Втр 15:32:19 #183 №2892352 
Как вообще надёжно осуществлять вычисления на РНР? Ведь постоянно случаются перетекания типов из одного в другой. Даже казалось бы безобидная операция деления двух целых чисел может привести в результате к вещественному числу. Так или иначе приходится работать с деньгами и там недопустимы подобные неточности.
Аноним 24/10/23 Втр 15:45:24 #184 №2892365 
>>2892352
https://www.php.net/manual/en/book.bc.php
https://www.php.net/manual/en/book.gmp.php
Аноним 24/10/23 Втр 16:01:32 #185 №2892405 
>>2892305
Везде чаты. У пыхеров обычно купленые и интегрированные у третьих лиц, но иногда и в пыхе надо через вебсокет (или SSE) обновлять данные на фронте. Сравни ситуации
1) Событие на беке происходит раз в час. У тебя миллион клиентов (приложения для мобилок) дудусят твой код каждую секунду, на предмет было ли событие. Имеем милллион запросов в сек
2) Ты при событии на беке, ты раз в час рассылаешь сообщение клиентам. Имеем милллион запросов в час
Конечно ты можешь сказать что нахуй не нужно, ведь ты будешь пушами отправлять сообщения на мобилки. Т.е опять же через третье лицо. Но это просто пример описывающий кейс, когда одного рест апи недостаточно
Аноним 24/10/23 Втр 16:06:01 #186 №2892415 
А выдают ли на РНР макпуки за счёт фирмы или надо на своей машине работать, куда ещё поставят какой-нибудь говно, которое мониторит всю твою деятельности даже во внерабочее время?
Аноним 24/10/23 Втр 16:46:51 #187 №2892469 
>>2892405
>Везде чаты.
Где блядь везде? Если ты про >>2892305
>"чат с поддержкой" в разных интернет магазах
То эта залупа просто ставится готовая, её никто не пишет и никаких сокетов там нет. Этой парашей пользуется один инвалид в год.

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

>описывающий кейс, когда одного рест апи недостаточно
Ну бывает такое иногда. ЧАТЫ блядь тут откуда сука? Это что-то из разряда "пишем свой фейсбук". Нахуй кому нужны новые чаты когда есть телега и слак. Ты блядь с обычным круд рестом разберись, какие нахуй сокеты хуекеты.
Аноним 24/10/23 Втр 16:53:46 #188 №2892480 
>>2892469
Ну то есть ты согласен, что пыха это для создания сайтов шаурмичных, а когда нужно создать SaS типо pusher.com то пыха пролетает, как говно над пропастью?
Аноним 24/10/23 Втр 17:06:53 #189 №2892499 
>>2892480
>Ну то есть ты согласен, что пыха это для создания сайтов
Согласен.
Аноним 24/10/23 Втр 21:37:38 #190 №2892966 
image.png
Content-Disposition: form-data; name="files"

[
{
"type": 1,
"nsfw": 0,
"size": 272,
"width": 1200,
"height": 675,
"displayname": "image.jpg",
"fullname": "16981660903840.jpg",
"name": "16981660903840.jpg",
"path": "/b/src/294854520/16981660903840.jpg",
"md5": "4580a11b4056c5fd431d43fc8a299250"
}
]



Что я не так делаю? Картинка через апи не цепляется
Аноним 24/10/23 Втр 21:39:41 #191 №2892971 
image.png
>>2892966
Аноним 25/10/23 Срд 04:40:39 #192 №2893301 
Почему в интернете так часто негативно относятся к php?
Я знаю только основы языка и это мой первый язык программирования.
Чем так не устраивает php людей, которые о нем нелестно отзываются?
Почему постоянно говорят о смерти php?
Аноним 25/10/23 Срд 10:15:56 #193 №2893385 
docker-compose.jpg
И что я делаю не так? Сделал файл для докер-композера и пытаюсь запустить зеленой стрекой в шторме, но мне выдаёт выхлоп, что ничего запустить нельзя. Если внимательно посмотреть, то тупой шторм пытается запустить команду docker compose, в то время как надо запускать docker-compose. Где это правится в шторме - не нашёл.
Если самому запустить из консоли: docker-compose up, то всё прекрасно работает.
Вывод: хваленое творение жидбрейнсов опять обосралось.
Аноним 25/10/23 Срд 10:52:15 #194 №2893412 
>>2893385
это новый композ встраивается в докер. У тебя либо композ не установлен, либо старая стандалон версия
https://docs.docker.com/compose/install/linux/
Аноним 25/10/23 Срд 19:44:00 #195 №2894390 
>>2891792

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

Еще часто классы делят на сущности и сервисы. Сущности - это объекты со свойствами, например, "товар" со свойствами название, цена, описание и тд. А сервис - это объект, который не хранит данные, а выполняет различные операции, например: добавление товара в БД, удаление товара, регистрация пользователя, отправка email.

И, наконец, классы часто делят на "слои". Вот, например, регистрация. У тебя может быть класс для регистрации и логина. Он вызывает классы для работы с паролями (хеширование), для работы с email, для работы с таблицей пользователей. То есть, есть высокоуровневый класс, делающий какую-то сложную операцию, и низкоуровневые классы для более мелких задач. И высокоуровневый класс сам не лезет в базу, а вызывает методы класса работы с таблицей пользователей.

Я тебе могу посоветовать для начала почитать статьи, в них рассмотрены типичные ситуации, в том числе работа с БД, и как их решать с помощью ООП:

https://github.com/codedokode/pasta/blob/master/arch/mvc.md
https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
https://github.com/codedokode/pasta/blob/master/arch/di.md

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

Скорее всего этот перечень никогда не меняется и его лучше сделать константой.

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

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

> Еще там вроде бы есть метод, который обращается к классу с cookie, а именно к методу в этом классе, который создает куки и записывает туда пароль.

Это тоже убирай.
Аноним 25/10/23 Срд 19:49:21 #196 №2894394 
>>2892243

> Говорят мол чат на php выносит оперативку

Говорят, что кур доят. Думаю, что это зависит от того, как он написан.

Например, я встречал истории, что в приложении не на PHP, а на Ruby или Node.JS утекала память и орангутанги, которые не осилили профайлинг памяти, просто поставили в крон задачу перезапускать приложение раз в N часов. А вот для PHP, кстати, есть профайлер памяти, я им пользовался, единственный минус, сам профайлер и обработка его данных требует несколько гигабайт памяти, так что это не для бюджетных ноутов.
Аноним 25/10/23 Срд 19:51:43 #197 №2894399 
>>2892305

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

Веб-сокеты работают по-другому. Там один (1) PHP процесс на любое количество веб-сокетов.

> Пхп ДОСТАТОЧНО быстрый. У тебя узким местом всегда будет получение данных

Вообще не всегда. Знаю случаи, когда выполнение PHP кода, шаблонов занимает больше времени просто потому что они сложные, там много условий, циклов и тд.
Аноним 25/10/23 Срд 19:52:40 #198 №2894403 
>>2892415

Можно поставить софт в виртуалку или купить отдельный ноут для работы.
Аноним 25/10/23 Срд 19:55:31 #199 №2894408 
>>2892469

> Круто. Сокеты то тут причем? Ты же не держишь миллион открытых коннектов постоянно, чтобы раз в час им что-то слать.

Вообще такое иногда бывает, но не для миллиона пользователей. Представь например CRM (система для приема заказов, заявок). Когда один менеджер берет заявку в работу, у всех других она должна поменять цвет. Это можно делать через дерганье AJAX раз в секунду, но обычно делают через сокеты: каждая страница поддерживает постоянное соединение и по нему приходят обновления информации в реальном времени.

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

Но в CRM конечно не миллионы пользователей. А если ты пишешь соцсеть на миллион человек, то ты напишешь сокет-сервер на Rust или Go.
Аноним 25/10/23 Срд 20:54:01 #200 №2894455 
>>2894390
Спасибо, анон. Я все это попробую пережевать и прочитаю то, что ты оставил ссылками.

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

Ну, он не совсем работает с БД.
Он берет объект класса, который работает с БД.
Вызывает его метод, который кладет соленый хеш в БД.
Т.е. обращается к БД не класс, создающий и хеширующий пароли, а класс, работающий с БД.

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

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

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

Я сейчас выполняю задание со списком студентов.

И единственное до чего дошел мой мозг - вернуться к MVC.

Я не отрицаю, что это хороший паттерн проектирования.

Просто и его я понимаю на поверхностном уровне.

ОП, или тот, кто составлял советы по задаче со студентами, пишет "в качестве модели можно создать такие-то классы" и я просто примитивно полагаюсь на это. У меня нет четкого понимания почему именно эти классы. Я просто беру как пишет ОП и делаю это (насколько позволяет опыт). Проблема в том, что это не из-за понимания (что я бы сам, своим умом дошел до мысли, что нужно создать такие классы), а из-за того, что у меня нет выбора. У меня 0 идей, почему именно эти классы должны представлять модель и если не они, то какие именно.

Извиняюсь за такую простыню, если ты будешь ее читать.
Аноним 25/10/23 Срд 20:54:59 #201 №2894457 
>>2891866
>>2891916
Спасибо за ответы.
Я буду на них опираться при решении своей задачи.
Аноним 25/10/23 Срд 20:58:35 #202 №2894464 
>>2894390
Ну и да, я не имею ничего против того, чтобы учиться через код более профессиональных людей.Но было бы лучше, если бы я, видя, что делает человек, понимал, почему именно я должен это делать. Почему так, а не иначе.
Аноним 25/10/23 Срд 23:08:50 #203 №2894608 
>>2894408
>Веб-сокеты работают по-другому. Там один (1) PHP процесс на любое количество веб-сокетов.
На любое количество сокетов, подключенных к этому процессу. Только вот не всем нужен один и тот же процесс, один и тот же чат, одни и те же данные.
Даже если ты каким-то образом заставишь один процесс обрабатывать весь миллион пользователей он будет висеть в памяти и расти пока не упадет к хуям.

>Вообще не всегда. Знаю случаи, когда можно из воздуха накрутить бесконечный цикл, который никогда не выполнится
Сделать хуйню можно на любом языке. Речь о том что минимальное время получения данных из базы 12мс. Это запрос константы типа SELECT 1;. В хайлоаде "быстрыми" считаются запросы в пределах 100мс. А рабочий цикл огромного фреймворка симфони с генерацией шаблона и тысячами классов под капотом примерно 60мс. Скорость пхп ДОСТАТОЧНА для того чтобы не быть бутылочным горлышком в типичной работе сайта.

>Представь например CRM
>Это можно делать через дерганье AJAX раз в секунду
>но обычно делают через сокеты
Ага. Прямо между црмными крудами и оперднями вставляют всю эту асинхронную сокет дрисню. Что за маняфантазии? Именно запросы в цикле и хуярят, если вообще хуярят. Никому это в реалтайме нахуй не надо. Каждый кто с хоть каким-то подобием црм работал видел "баг" от гения, который форму неделю заполнял и у него csrf токен устарел.

>А если ты пишешь соцсеть на миллион человек
Весь поинт был в том что никто блядь не пишет соцсеть на миллион человек.
Аноним 26/10/23 Чтв 04:57:23 #204 №2894958 
Насчет установки Xdebug:

На одном сайте написано:
Отредактируем php.ini:

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

zend_extension='G:\webserver\php\ext\php_xdebug-2.2.1-5.3-vc9.dll'

в конце файла php.ini создаем секцию xdebug со следующими параметрами:
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_host=localhost
xdebug.remote_port=9000


Вопрос: куда именно в php.ini вставлять подобный кусок текста?

В php.ini есть только одна +- схожая строка:
;zend_extension=opcache
Аноним 26/10/23 Чтв 07:08:40 #205 №2894998 
dynamodb-auto-scaling-4.gif
>>2894608
>минимальное время получения данных из базы 12мс
>В хайлоаде "быстрыми" считаются запросы в пределах 100мс
>тысячами классов под капотом примерно 60мс
Ха-ха-ха. Чёт ржу накуй. У моей dynamodb примерно 2.89 миллисекунд на чтение и 4.33 миллисекунды на запись. Поржал с фразы хайлоад в пределах 100мс.

мимо-любитель-nosql
Аноним 26/10/23 Чтв 07:46:22 #206 №2895005 
>>2894998
>пик
пульс стабильный?
Аноним 26/10/23 Чтв 07:53:57 #207 №2895007 
>>2895005
Да. Ещё и пасасямбру даёт всем реляционкам.
Аноним 26/10/23 Чтв 07:58:11 #208 №2895012 
>>2894403
За свой счёт купить?
Аноним 26/10/23 Чтв 08:14:54 #209 №2895018 
>>2895012
1) Работай в офисе
2) Устраивайся в хорошую компанию, где выдают железо удаленщикам
3) Ищи кабана, который не требует трекеры
4) Прогибайся и ставь трекеры на свое домашнее железо
Если ты пхп вкатун то опция 2 тебе скорее всего не доступна
Аноним 26/10/23 Чтв 08:28:37 #210 №2895024 
>>2894998
У тебя там 100500 взаимосвязанных сущностей? Это обычный юзкейс реляционок. Если у тебя одна там жисонина для хранения говна юзеров, то иди нахуй со своими сравнениями.
Аноним 26/10/23 Чтв 09:05:46 #211 №2895041 
Screenshot 2023-10-26 084314.png
>>2894998
>У моей dynamodb примерно 2.89 миллисекунд на чтение
А кто говорил про "чтение", дебс? Пикрелейтед реляционный постгрес отработал за 2мс, провел по губам твоей неконсистентной параше. Только есть нюанс - подключение к базе идет по сети и на передачу данных уходит гораздо больше времени. У тебя сетевой запрос физически быстрее 12мс выполниться не может. А где на твоем графике fetching, додстер?

>Поржал с фразы хайлоад в пределах 100мс.
Додик, а ты не думал откуда берутся данные, которые в твой кеш попадают? Очевидно что результат 100мс запроса кешируется. Но все равно этот запрос надо периодически выполнять. А малейшая обработка данных пролетает мимо этой дрисни. Аггрегации? Группировки? Ах да у нас же тупая как пробка ключ-значение параша, которых миллион.

И да кстати, твоя nosql дрисня гарантирует мне что при конкурентной записи порядок будет соблюден? Или это просто помойка в оперативе, которая смывается в унитаз при любой проблеме на серваке?
Аноним 26/10/23 Чтв 09:36:17 #212 №2895060 
Нужно ли учить Phing?
Аноним 26/10/23 Чтв 13:14:22 #213 №2895242 
>>2895024
Петуху ниприятна. Ну и сиди со своими взаимосвязными сущностями)

>>2895041
Вай вай, смотри как разошёлся! Короче, факт в том, что при любых расчётах DynamoDB быстрее. Если я включу DAX-кеширование, ты вообще охуеешь. Там чтение в районе микросекунды. Это даже не миллисекунды. Я боюсь такое показывать, у тебя вообще жопа сгорит. Ты конечно можешь аргументировать типа то не умеет сё не умеет... но я так скажу - плохому танцору всегда что-то мешает)
Аноним 26/10/23 Чтв 13:28:40 #214 №2895256 
>>2895242
А чтение чего?
Вот в реляционной базе я могу данные как-то обрабатывать. Типа сложить помидоры с огурцами, получить салаты, посчитать их калорийность и выбрать самый калорийный салат для каждого набора ингредиентов.

А из DynamoDB я могу получить за кратчайшие микросекунды... что? Я понимаю использование в качестве кеша. Умная реляционная база за долго посчитала и положила в быструю. Ну так один хуй получается что твоя DynamoDB без реляционной просто бесполезна. А перфоманс системы все равно будет считаться в совокупности.

Нахуй твоя nosql параша нужна если не в качестве обслуги более умных реляционных баз?
Аноним 26/10/23 Чтв 14:06:15 #215 №2895293 
electrodb.fun.png
>>2895256
Да эт всё есть. А с orm будут ещё и типы и подсказки и всё остальное https://electrodb.fun )
Аноним 26/10/23 Чтв 14:15:16 #216 №2895302 
Screenshot 2023-10-26 141241.png
>>2895293
>джаваскриптовый кал
Ты ебнутый?
Аноним 26/10/23 Чтв 14:18:22 #217 №2895307 
9cd20d83018d9b6510f273324eac70d5.jpeg
>>2895302
))))
Аноним 26/10/23 Чтв 20:19:51 #218 №2895792 
>>2894958
Какие-то древние настройки, похоже для второй версии, сейчас уже 3.2.0.

1) У меня в php.ini первой строчкой (макось):

zend_extension="xdebug.so"

2) Внизу файла php.ini идет секция xdebug:

[xdebug]

xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.discover_client_host = true
xdebug.client_host = localhost
xdebug.log_level = 0

Перед инструкциями недолжно быть символа ';' - это комментарий.

3) Номер порта задается в настройках phpstorm -> двойной шифт, далее в поиске набираешь то что ищеш.
Там заданы через запятую порты 9000,9003 для версий xdebug соответсвенно 2.x, 3.x.

Или можно добавить в секцию [xdebug] для своей версии:

xdebug.remote_port=9003

Главное, чтобы загрузился модуль (проверить в консоли: php -v или в скрипте phpinfo(), или xdebug_info()),
Для установки на виндовс есть инструкция:

https://xdebug.org/wizard
Аноним 26/10/23 Чтв 20:28:36 #219 №2895801 
>>2895792
Спасибо за ответ
Аноним 26/10/23 Чтв 22:05:28 #220 №2895891 
>>2893301
Кто-то где-то когда-то слышал что пхп 5 гавно, пукнул в чатике, васян запомнил и повторил
Аноним 27/10/23 Птн 01:29:46 #221 №2896044 
>>2894455

> Он берет объект класса, который работает с БД.
> Вызывает его метод, который кладет соленый хеш в БД.

И это неправильно. Смотри, какая у класса зона ответственности? Работа с паролями, хеширование и проверка. Сюда работа с БД никаким боком не входит. Ни напрямую, ни косвенно.

Кто должен класть пароли в БД? Класс, отвечающий за авторизацию. У него может быть 3 метода - зарегистрировать пользователя, авторизовать пользователя и разлогинить пользователя. Этот класс может работать с БД (через другой класс конечно), так как это нужно для выполнения его задач.

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

Ну логика тут такая: у нас есть Студент со свойствами, очевидно, нам нужен какой-то объект, который будет его представлять (является моделью этого Студента). Потому что бе з этого - как мы будет представлять студентов в коде? Не массивами же (мы все-таки ООП используем, а не технологии 2000 года).

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

Далее, мы должны запоминать пользователя в куках, значит нужен класс для этого.

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

Плюс такого разделения программы на классы:

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

- если ты используешь автоматические тесты, то классы можно тестировать по отдельности. То есть, написал один класс и тестируешь его, хотя весь код еще не дописан.
Аноним 27/10/23 Птн 01:30:49 #222 №2896045 
>>2894464

Ну тогда задавай конкретные вопросы, вроде "почему надо использовать паттерн X, а не Y" или "почему в статье рекомендуют X, как можно сделать по-другому" и тебе может быть ответят.
Аноним 27/10/23 Птн 01:32:48 #223 №2896046 
>>2894608

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

Чушь. Есть сборка мусора, так что при правильно написанном коде расти ничего не будет.

> Речь о том что минимальное время получения данных из базы 12мс. Это запрос константы типа SELECT 1;

Где ты такое взял? Ты на 486 процессоре что ли код запускаешь? Или у тебя база находится на другом конце Земли?
Аноним 27/10/23 Птн 01:33:46 #224 №2896047 
>>2894998

На MysQL запросы спокойно выполняются за 1 мс и меньше, если в индексы попадают и ты не пытаешься выкачать миллион строк.
Аноним 27/10/23 Птн 01:37:50 #225 №2896048 
>>2895041

> У тебя сетевой запрос физически быстрее 12мс выполниться не может.

Откуда ты взял пинг в 12 мс? Это пинг от Москвы до Питера, то есть когда приложение в одном городе, а база в другом. Если в одном дата-центре то пинг там может быть в десятки микросекунд (специально померял).
Аноним 27/10/23 Птн 01:43:33 #226 №2896049 
>>2895242

> Ну и сиди со своими взаимосвязными сущностями)

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

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

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

> Если я включу DAX-кеширование,

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

Вообще, если бы ты изучил вопрос СУБД повнимательнее, то знал бы, что ради повышения одного показателя приходится жертвовать другими, например ради повышения числа коммитов в сек. приходится снижать надежность и отключать защиту от аварийных ситуаций и тд.
Аноним 27/10/23 Птн 01:45:54 #227 №2896050 
>>2895293

То есть когда тебя просят "а глянь сколько лайков поставили юзеры из Сахалина за последнюю неделю", ты идешь писать скрипт вместо того, чтобы просто быстро ввести 1 SQL-запрос?

Тебе время не жалко? Я часто пишу SQL-запросы (например: понять, сколько лайков в среднем ставит один юзер; есть ли юзеры, ставящие их очень много, чтобы решить как их оптимальнее обрабатывать), и не представляю, как бы я жил если бы мне надо было скрипты писать каждый раз.
Аноним 27/10/23 Птн 03:18:58 #228 №2896063 
ERD-2-1280.png
table-design-annotated-1280.png
table-design-gsi-annotated-1280.png
subs-1280.png
>>2896049
>>2896050
Лол, изначально разговор был про скорость. Ты сейчас переводишь в срач у кого функционал мощнее. NoSQL нахуй не нужны foreign keys, потому что там другие механизмы работают. У реляционщиков в мозгах одни ЗАПРОСЫ. Бля, в NoSQL не запросы меняют, а ДАННЫЕ адаптируют под запросы. Если мне нужно лайки связать с пользователем, я просто сделаю primary key USER#anon31232 и sort key что-то типа LIKE#5e7245ab. Если сделать query и подставить USER#anon31232, он просто будет выводить все сущности, которые принадлежат пользователю. Дальше я могу просто фильтровать, begins_with(LIKE#), begins_with(ARTICLE#), begins_with(GROUP#) и так далее. Я могу сколько угодно наклепать этих индексов, у меня может быть отдельный индекс где будет primary key PROJECT#das32dasd и просто буду запрашивать всё что относится к проекту.

Конечно никто не спорит, если у тебя там сложнейшие запросы, то лучше взять реляционную БД. Но то что NoSQL быстрее по скорости - это просто факт. Ну и плюс, мне не нужно делать ALTER TABLE, не нужно объявлять schema заранее. У меня нет шардинга в принципе, у тебя БД на миллион пользователей нужно будет шардить на несколько таблиц. Я об этой проблеме просто нахуй не думаю) Так что твой наезд мимо кассы.
Аноним 27/10/23 Птн 06:44:51 #229 №2896095 
>>2896044
>выложить сюда и аноны покритикуют
Звучит как что-то страшное.
В любом случае, спасибо за ответ. Я все возьму на заметку.
Аноним 27/10/23 Птн 06:48:08 #230 №2896096 
Насколько сложно устроиться человеку, который сам, без курсов и гос.образования, учился писать на пхп (все сопутствующее - HTML, CSS, SQL, JS и т.д. тоже учил/доучитывает)? Без опыта работы.
Мне немного жутко от мысли, что у меня ничего не получится.
Аноним 27/10/23 Птн 07:49:49 #231 №2896109 
>>2896096
>Мне немного жутко от мысли, что у меня ничего не получится.
Это тебе к психологу. Такие мысли не имеют ничего общего с программированием. Это признаки синдрома жертвы. 1) Выученная беспомощность. 2) Драматизация незначительных событий. 3) Низкая самооценка. 4) Жалость к себе.

В состоянии выученной беспомощности индивид, испытывающий неудобства, боль и тому подобные негативные факторы, не предпринимает попыток к улучшению своего положения, хотя имеет такую возможность. Это состояние возникает после серии неудачных попыток воздействовать на отрицательные обстоятельства среды или избежать их, для него характерны пассивность, отказ от активных действий, нежелание менять враждебную среду или избегать её, даже когда появляется такая возможность. У людей выученная беспомощность сопровождается потерей чувства свободы и контроля, неверием в возможность изменений и в собственные силы, подавленностью воли и депрессией вплоть до наступления смерти.
Аноним 27/10/23 Птн 09:41:41 #232 №2896151 
>>2896063
>то что NoSQL быстрее по скорости - это просто факт
Ломающие новости. Хуйня, которая ничего не умеет, ничего не проверяет и ничего не гарантирует оказывается быстрее.

В следующем выпуске еще больше откровений от нашего js зверька:
- Запись в оперативную память быстрее, чем на диск.
- Но что если сервак просто выключится?
- Я об этой проблеме просто нахуй не думаю)

Наша редакция с теплотой вспоминает далекий 2013 год и великолепную Сару Мей. Которая великолепно и безвозвратно разъебала бекэнд своей компании, после чего выпустила нашумевшую статью "Почему вы никогда не должны использовать MongoDB" https://habr.com/ru/articles/231213/

История циклична и наше джаваскрипт животное, неведомым образом вырвавшееся из своего загона, имеет все шансы повторить успех Сары с очередным nosql высером. Помянем.
Аноним 27/10/23 Птн 09:59:47 #233 №2896162 
>>2896046
>Чушь. Есть сборка мусора
Мусором считаются данные, на которые никто не ссылается. Речь же о том что с подключением каждого пользователя тебе нужно создать n объектов для его обслуживания. То есть выделить какое-то количество памяти, и далеко не факт что линейное. А еще в цикле обходить каждый раз миллион пользователей и читать данные в память. Ты бы хоть почитал как в пхп с сокетами работать, перед тем как пытаться умное ебало сделать.

>Где ты такое взял? Ты на 486 процессоре что ли код запускаешь? Или у тебя база находится на другом конце Земли?
Я как бы скриншот к посту добавил, там вообще 22мс. Причем это локальная база и запрос без доступа к диску. Процессор тут не причем, это сеть. Попробуй у себя локально поднять базу и проверь сколько времени займет фетчинг.

>>2896048
>Если в одном дата-центре то пинг там может быть в десятки микросекунд (специально
Ты путаешь пинг и полноценную передачу данных. Просто подними локально какую-нить базенку и проверь. И это на одном кампуктере, а не в соседних стойках. Задержка локальных веб запросов это как бы одна из главных проблем микросервисов, можешь погуглить. Везде минималочка примерно столько и есть.
Аноним 27/10/23 Птн 11:38:00 #234 №2896216 
Снимок экрана в 2023-10-27 11-36-02.png
Пишет что докер композе установлен но при этои команда не найдена, что не так?
Аноним 27/10/23 Птн 11:40:04 #235 №2896218 
>>2896216
А всё, от рута не надо запускать
Аноним 27/10/23 Птн 12:28:44 #236 №2896257 
Снимок экрана в 2023-10-27 12-26-53.png
Снимок экрана в 2023-10-27 12-27-04.png
Теперь такая хуйня
Аноним 27/10/23 Птн 13:02:25 #237 №2896323 
>>2896257
1) добавь пользователя в группу docker
2) докер не видит плагин композа
Аноним 27/10/23 Птн 13:14:52 #238 №2896347 
Привет. Есть небольшой скриптик на пыхе, который берет данные с бд и выводит на страницу в виде таблицы, на этой странице также будут размещены кнопки взаимодействия с каждой записью.
Мне надо как раз написать эту страницу, морду. Лезть в залупу и говнокодить не хочу, я так понимаю проще будет взять фронт фреймворк и на нем все сделать. Что взять попроще?
Аноним 27/10/23 Птн 13:17:26 #239 №2896352 
>>2896151
Зачем ты эту хуйню пишешь я не понимаю? Видно же что ты не шаришь в теме. Причём здесь mongodb и dynamodb? Причём здесь javascript вообще? Клиентская часть может быть на чём угодно написана. Ты щас пытаешься недостатки найти? Лол, не утруждай себя. Не надо писать "ой а вот там вообще всё плохо". Плохо - значит сиди на своих реляционных базах. Нет смысла переубеждать тебя)
Аноним 27/10/23 Птн 13:33:03 #240 №2896380 
>>2896352
>не шаришь
>трехсотая по счету nosql дрисня
>джаваскрипт макака
>)
Я это кино десять лет смотрю. Там все шутки про говно и мочу, а в конце главный герой умирает клянется никогда больше но потом повторяет все с новой nosql дрисней.
Аноним 27/10/23 Птн 14:21:25 #241 №2896477 
>>2896323
Добавил, но все равно пишет bash: docker-compose: команда не найдена
Аноним 27/10/23 Птн 14:27:40 #242 №2896486 
>>2896477
Всё, заработало по оф гайду
https://docs.docker.com/engine/install/linux-postinstall/
Аноним 27/10/23 Птн 15:53:05 #243 №2896648 
>>2896347
Возьми ларавель и не еби мозги. В нем даже обезьяна разберется.
Аноним 27/10/23 Птн 16:00:14 #244 №2896663 
Посоветуйте как быстро развернуть на докере пхп и мускул, в интернете одни вырвиглазые гайды с ngnix и прочей туфтой
Аноним 27/10/23 Птн 16:29:09 #245 №2896703 
>>2896663
>гайды с ngnix и прочей туфтой
Лол, а как ты без веб сервера собрался с пхп работать?
Аноним 27/10/23 Птн 16:29:50 #246 №2896705 
>>2896703
Так у пхп встроенный веб сервер
Аноним 27/10/23 Птн 16:42:29 #247 №2896724 
Screenshot 2023-10-27 164038.png
Screenshot 2023-10-27 164012.png
Screenshot 2023-10-27 164025.png
>>2896705
Я теряюсь в догадках и почему же его никто не использует и ни в одном гайде его нет. Может быть это все из-за надписей на красном фоне ВНИМАНИЕ НЕ ИСПОЛЬЗОВАТЬ БЛЯДЬ
Аноним 27/10/23 Птн 18:20:44 #248 №2896822 
>>2880842
это забавно, но я так на 2 работы устроился, чисто пиздя за жизнь.
Сначала устоирлся стажером за МРОТ. Потом устроился тимлидом
Сука как же мне повезло в первый раз и как не повезло во второй, это пиздец. Оказалось не только меня взяли на работу "просто попиздев". Но и еще 2 наебщиков системы спиздевших про опыт и которых мне приходится учить Челики даже гитом никогда не пользовались, но зп мидлов.
Аноним 27/10/23 Птн 19:27:01 #249 №2896869 
image.png
image.png
Ну вот и всё
https://hh.ru/vacancy/88509650?from=vacancy_search_list&hhtmFrom=vacancy_search_list&query=php

Требования дохуя на зп 1000$.

В 2013 году, девочка знающая MODx без знаний js и mysql столько получала
Аноним 27/10/23 Птн 19:55:51 #250 №2896905 
>>2896380
>говно и мочу
>дрисней
Хейтер не палится) Хейть дальше, нет смысла тебя переубеждать)
Аноним 27/10/23 Птн 20:07:53 #251 №2896929 
Screenshot 2023-10-27 200707.png
>>2896869
Что ты знаешь про боль?
Аноним 27/10/23 Птн 20:22:33 #252 №2896944 
>>2896929
Ну хз, может вкатун или 10 лет сидел на одном месте и пишет лапшекод в процедурном стиле для какого-нибудь магазина который в старой хрущевке во внутреннем дворе находится.
Аноним 27/10/23 Птн 21:27:43 #253 №2897021 
>>2896869
>>2896929
Так заебись, может хоть так меньше вкатунов ебаных станет и останутся только реально кому нравится кодить.
Аноним 27/10/23 Птн 21:28:29 #254 №2897023 
>>2896724
Так я и не собираюсь его в продакшене использовать
Аноним 27/10/23 Птн 21:30:01 #255 №2897024 
image.png
Я не понял, что уважаемый переводчик имел в виду
Аноним 27/10/23 Птн 21:31:22 #256 №2897025 
>>2896703
В сокет фпма FastCGI запросы слать видимо бинарные кек
Аноним 27/10/23 Птн 21:32:23 #257 №2897026 
>>2897025
Кстати, расскажите дауну, у меня сетевой сокет ассоциируется с текстовой информацией, как фастсги работает-то в итоге, если он бинарный?
Аноним 27/10/23 Птн 22:06:12 #258 №2897060 
>>2897024
Разворачивай свой стручок, что непонятного?
Аноним 27/10/23 Птн 22:07:29 #259 №2897062 
>>2897026
"Текстовый" отличается от "бинарного" не передаваемыми данными, а тем что по протоколу нужно передать "текстовый" заголовок, например "Connection: Keep-Alive". Этот заголовок по протоколу должен быть читаем, т.е. понятен человеку. И разумеется имеет лишний оверхед.

А по бинарному протоколу передается то что удобно, читается и понимается только кампуктером и ничего лишнего для мясных мешков в заголовках там нет. При этом передаваться с помощью обоих протоколов могут абсолютно одни и те же данные.
Аноним 28/10/23 Суб 00:56:32 #260 №2897210 
изображение.png
изображение.png
Объясните, пожалуйста, почему в дочернем классе используется строчка parent::construct(...).
Аноним 28/10/23 Суб 01:01:21 #261 №2897212 
>>2897210
Ладно, я кажется понял :)
Аноним 28/10/23 Суб 05:43:39 #262 №2897251 
изображение.png
изображение.png
изображение.png
Пик3:
Почему там написано, что статические методы в трейтах становятся доступны из базового класса?
Насколько я понимаю, базовый класс - класс, от которого наследуют.
В данном примере UtilityService наследуется от Service.
Т.е. базовый класс - Service.
А переводя строчку из пика3, получается, что вызвать статический метод из трейта можно, написав:
Service::calculateTax(100)
Но метод вызывается как на пике2 (я понимаю, что пик2 рабочий вариант, а то, что написал я - нет, но я не понимаю что подразумевает автор в строчке из пика3).
Аноним 28/10/23 Суб 09:29:00 #263 №2897311 
>>2897025
Php -S localhost:4000
Аноним 28/10/23 Суб 10:37:56 #264 №2897352 
Снимок экрана в 2023-10-28 10-32-24.png
Снимок экрана в 2023-10-28 10-36-56.png
Ну я собрал и запустил докер, но локалхосты не открываются. Вот композ файл:
version: '2.0'
services:
php-apache-environment:
container_name: php-apache
build: ./php
volumes:
- ./php/src:/var/www/html/
ports:
- 8000:80

db:
image: mysql:5.6.27
restart: always
environment:
MYSQL_ROOT_PASSWORD: PassWord
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: root
ports:
- "9906:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
environment:
PMA_HOST: db
PMA_PORT: 9906
PMA_USER: test
PMZ_PASSWORD: root
ports:
- '8080:80'
depends_on:
- db
Аноним 28/10/23 Суб 10:49:36 #265 №2897360 
>>2896648
спс
Аноним 28/10/23 Суб 10:51:09 #266 №2897362 
>>2897352
>apache
>mysql:5.6.27
Где ты эту хуйню древнюю откопал? Пиздец нафталином повеяло. Вернул мне мой 2013.

>локалхосты не открываются
Ты же блядь сам написал что порт на хосте не 80, который по умолчанию, а 8000
ports:
- 8000:80
host port:container port

Плюс хуй пойми че там у тебя в апаче настроено. Это ведь апач должен твой запрос получать и на пхп директить.
Аноним 28/10/23 Суб 11:08:52 #267 №2897371 
Screenshot 2023-10-28 110511.png
Screenshot 2023-10-28 110429.png
Screenshot 2023-10-28 110757.png
>>2897251
Потому что нужно читать литературу в оригинале, а не с каловым переводом от хуй пойми кого.
Аноним 28/10/23 Суб 12:54:24 #268 №2897500 
>>2897362
>Где ты эту хуйню древнюю откопал? Пиздец нафталином повеяло. Вернул мне мой 2013.

Можешь посоветовать актуальную сборку?
Аноним 28/10/23 Суб 13:14:50 #269 №2897516 
>>2897500
php-fpm 8.1+
nginx 1.23+
postgres 15+
redis 7+
Это база. АКТУАЛ ОЧКА

phpmyadmin нахуй не нужон. Все что нужно для работы с любой актуальной базой есть в шторме.
Вот хорошие примеры как надо делать:
https://github.com/tarohida/docker-php80-nginx-postgres-composer
https://habr.com/ru/articles/317504/
https://dev.to/nicolasbonnici/how-to-build-a-clean-docker-symfony-5-2-php8-postegresql-nginx-project-3l5g
Обновляешь версии контейнеров, выкидываешь лишние типа монги и вперед.
Аноним 28/10/23 Суб 13:23:04 #270 №2897526 
>>2897500
wsl --install
wsl --set-default-version 2
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install nginx postgresql php8.3-cli php8.3-curl php8.3-xml php8.3-pgsql php8.3-zip php8.3-mbstring
Аноним 28/10/23 Суб 13:28:12 #271 №2897531 
>>2897526
>wsl
Гавной воняет
Аноним 28/10/23 Суб 13:32:03 #272 №2897533 
А правда, что никто не пишет модели и контроллеры ручками, а используют команды фреймворка для их генерации? Ну там запускается консольная утилитка, где как макака вводишь последовательно название, параметры и так далее для каждой сущности.
Аноним 28/10/23 Суб 13:40:47 #273 №2897539 
>>2897531
Согласен, лучше линух накатить на железо, но сборочками обычно виндовозы интересуются. Луноходы обычно ищут пакетный менеджер и репозиторий.
Аноним 28/10/23 Суб 14:13:08 #274 №2897580 
>>2897533
Какой смысл руками бойлерплейт писать если есть CLA для этого
Аноним 28/10/23 Суб 14:16:53 #275 №2897593 
>>2897580
А теперь прямо отвечая на вопрос: мне лень гуглить команды фреймворка, поэтому я копипащу руками контроллер и меняю его, но вообще да, многие юзают
Аноним 28/10/23 Суб 14:21:02 #276 №2897599 
>>2897593
php artisan list
php bin/console list

На одну секунду забудешь какие на пхп пишут животные, и тебе сразу напомнят какой-нибудь невероятно тупорылой хуйней.
Аноним 28/10/23 Суб 14:25:02 #277 №2897604 
>>2897599
Ну если тебе надо положить контроллер условно в тот же неймспейс и он читает какую-то хуйню и похож структурно на уже существующий контроллер, то генерить его неудобнее, чем копипастнуть. Хорош выёбываться братишка
Аноним 28/10/23 Суб 17:06:32 #278 №2897808 
Screenshot2023-10-2817-02-24.png
Как фиксить?
Аноним 28/10/23 Суб 17:07:35 #279 №2897810 
>>2897808
service docker start попробуй
Аноним 28/10/23 Суб 17:10:47 #280 №2897816 
>>2897810
Да пробовал уже, вообще второй день хуею с этого докера, настолько кривая система, лучше бы по старинке все делали чем такое говно высирать
Аноним 28/10/23 Суб 17:20:07 #281 №2897826 
>>2897816
Кривой ты. У людей все работает 24/7.
Аноним 28/10/23 Суб 17:55:16 #282 №2897890 
Screenshot2023-10-2817-54-28.png
>>2897826
Да, охуенная система, работает как швейцарские часы блять
Аноним 28/10/23 Суб 18:06:49 #283 №2897902 
>>2897890
Ну ебаный по голове. Ну ты же видешь что нет службы с таким названием. Ну посмотри ты список служб, грепни оттуда все что с докером связано.

Я уж не говорю о том что ошибка гуглится.
Аноним 28/10/23 Суб 18:33:12 #284 №2897959 
>>2897902
Конечно гуглится, только ничего не помогает
Аноним 28/10/23 Суб 18:39:55 #285 №2897968 
>>2897959
с твоим уровнем только убунту
Аноним 28/10/23 Суб 18:40:01 #286 №2897969 
>>2897902
>Ну ты же видешь что нет службы с таким названием

И какого хуя её нету? То есть докер собственные службы установить не может?
Аноним 28/10/23 Суб 18:46:26 #287 №2897991 
>>2897969
это дело мейнтейнеров пакетов, докер имее официальные пакеты только для дебиан убунты и красношапки

попробуй
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
Аноним 28/10/23 Суб 19:26:46 #288 №2898060 
>>2897969
Тебе, обмылку микрософта, линукс от бабки достался в наследство?
Пропиши блядь sudo systemctl list-units --type=service | grep "docker"
и узнай, чучело. Ты же блядь его устанавливал, а не я.
Аноним 28/10/23 Суб 20:48:06 #289 №2898204 
>>2896063

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

Во-вторых, архитектура DynamoDB это не шаг вперед в сравнении с SQL, а возвращение к истокам, так как до появления SQL БД так и работали, когда ты вручную делал в таблицах индексы и вручную по ним искал записи (запросов-то не было).

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

> не нужны foreign keys, потому что там другие механизмы работают.

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

> я просто сделаю primary key USER#anon31232 и sort key что-то типа LIKE#5e7245ab

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

> Но то что NoSQL быстрее по скорости - это просто факт.

Ты ничего не понял, хотя я писал. Одни БД быстрее других не из-за того, что они используют SQL или NoSQL. А из-за того, что жертвуют чем-то, например, надежностью. Условно, SQL база не подтверждает коммит пока данные гарантированно не ушли на жесткий диск, а NoSQL сбрасывает данные раз в N секунд и если что-то потерялось, то это не ее проблема.

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

> Конечно никто не спорит, если у тебя там сложнейшие запросы,

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

> мне не нужно делать ALTER TABLE

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

То есть, преимуществ я вижу мало. Единтсвенное что может если у тебя миллионы запросов, а целостность данных не особо важна (например, игра какая-нибудь для детей, данные потерялись и фиг с ними) то придется отказаться от удобной SQL в пользу неудобной NoSQL, но других причин использовать я не вижу, один минусы и недостатки.
Аноним 28/10/23 Суб 20:57:51 #290 №2898211 
>>2896063

И еще, у тебя там есть скриншоты, если честно это больше напоминает свалку, чем базу данных:

- зачем-то, без всякой логики, данные разного типа свалены в одну таблицу ( list(не понял, что это), quiz, sentence, user, datasent )
- записи одного типа имеют разное количество атрибутов, значит, надо в приложении писать if и костыли на случаи, когда что-то отсутствует. Надеюсь, это делает ODM, а не ты руками
- в некоторые колонки засунут JSON (Quiz details), то есть для работы с ними нужно еще отдельно костыли писать и невозможен поиск по этим колонкам
- из-за отстутствия внещних ключей трудно надохить и удалять или изменять связанные записи. Например, ты решил удалить LIST, а как ты найдешь и удалишь все ссылки на него?
- как я понял, схемы нет и при ошибке скрипт может вставить данные неправильного формата и из-за этого потом что-нибудь сломается в приложении

Ну и простой вопрос, когда при регистрации вводят существующий email, но в другом регистре ([email protected] вместо [email protected]), ты поиском сможешь найти, что такой email уже есть в базе?

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

Ну и скажу также, что база у тебя очень маленькая, там меньше 10 сущностей. А в реальности сущностей может быть 100 или больше.
Аноним 28/10/23 Суб 21:02:31 #291 №2898222 
>>2896162

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

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

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

> Я как бы скриншот к посту добавил, там вообще 22мс. Причем это локальная база и запрос без доступа к диску. Процессор тут не причем, это сеть. Попробуй у себя локально поднять базу и проверь сколько времени займет фетчинг.

Я занимался профайлингом и многие запросы занимают менее 1 мс. Но правда там и сервер не нищебродский, и памяти много, и SSD стоит, а не жесткий диск.

> . Просто подними локально какую-нить базенку и проверь.

Я мерял на реальной БД в продакшене, находящейся под нагрузкой.
Аноним 28/10/23 Суб 21:07:32 #292 №2898231 
>>2897024

Я думаю, "стручками" называют узлы сети. То есть ты на сервере устанавливаешь этот софт и твой сервер становится "стручком".
Аноним 28/10/23 Суб 21:13:21 #293 №2898243 
>>2897026

Сокеты (я имею в виду сетевые сокеты Беркли, а не вебсокеты) вообще-то все бинарные, то есть ты посылаешь и принимаешь из сокета последовательность байтов (чисел от 0 до 255).

Ну представь, что у тебя термометр, который передает температуру через сеть.

Если протокол текстовый, и температура 25 градусов, то он шлет коды символов "2", "5" и перевод строки как признак того, что это конец числа: 34, 39, 13. То есть, он шлет строку "25\n".

А если протокол бинарный, то данные кодирутся в байты как-то по -другому (обычно для каждого протокола и устройства свои правила). Например, он может просто температуру послать как оин байт 25.

Текстовые протоколы легче читать, но они как правило требуют больше байт для передачи данных.
Аноним 28/10/23 Суб 21:14:29 #294 №2898246 
>>2897026

Ну то есть, все сокеты бинарные. Просто при использовании текстового протокола ты шлешь по сокету коды символов.
Аноним 28/10/23 Суб 21:15:15 #295 №2898247 
>>2897210

Родительский конструктор не вызывается автоматически, это надо делать явно.
Аноним 28/10/23 Суб 21:17:01 #296 №2898250 
>>2897251

Здесь видимо базовым называется класс, в который добавлен трейт. Согласен с аноном, скинувшим английский оригинал, что это кривой перевод.
Аноним 28/10/23 Суб 21:19:34 #297 №2898259 
>>2897352

Тебе было бы хорошо не копировать конфиги докера и докер композе вручную, а изучить документацию или туториалы по ним. Например, то, что ты не добавил себя в группу Докер указывает, что ты либо не читал документацию, либо это какая-то дебиановская фишка с группами, а ты про нее не знал. Часто дистрибутивы вроде Дебиан немного меняют конфигурацию программы под себя.
Аноним 28/10/23 Суб 21:20:24 #298 №2898260 
>>2897516

8.1 брать смысла нет, он уже почти end of life, надо брать 8.2.
Аноним 28/10/23 Суб 21:21:25 #299 №2898264 
>>2897533

Никогда не использовал, быстрее и удобнее самому писать, особенно если в редакторе настроены сокращения для ввода конструкицй вроде private int (у меня они есть, в PHPStorm их нету).
Аноним 28/10/23 Суб 21:22:27 #300 №2898267 
>>2897604

Не надо ничего генерить. Неймспейс в файл вставляется одной кнопкой в Sublime Text, не знаю конечно как в PHPStorm, там может такого и нету.
Аноним 28/10/23 Суб 21:36:09 #301 №2898282 
>>2897890
>>2897890

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

Смотри, в чем проблема:

- во-первых, в разных дистрибутивах могут быть по-разному сконфигурированы программы. Ты читаешь туториал по Ubuntu 22, а у тебя Debian 12 и там все по-другому. Или у тебя Mac, а туториал под Windows.
- во-вторых, если туториал от Debian 11, а у тебя Debian 12, опять же, может не сработать
- в-третьих, ты мог невнимательно читать туториал и пропустил начало, где сказано что надо установить какой-то пакет или что--то поменять в конфиге, а ты этого не сделал
- в-четвертых, нужно минимальное знание основ линукс, например, пользователи, суперпользователь, права на файлы и тд

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

Теперь разберу каждую команду для твоего развития:

1) Ошибка с gnome-terminal: gnome-terminal работает только в графическом интерфейсе. Либо у тебя не запущен X/Wayland (например, ты подключился к серверу или виртуалке без графического интерфейса), либо там баг, что-то сломалось и надо перезагрузиться (у меня один раз такое было), либо ты чего-то не установил.

Когда я у себя набираю gnome-terminal, то открывается окно терминала. Но у меня другой дистрибутив, не NixOS.

2) ошибка с docker version. Докер состоит из 2 частей: демон/сервис, который работает постоянно, и клиент, который ты запускаешь и который подсоединяется к демону и просит выполнить команду (команда docker это и есть клиент). В твоем случае у тебя либо недостаточно прав для соединения с демоном, либо демон не запущен. Тебе надо найти не устаревший туториал или мануал по установке Докер на NixOS и строго следовать ему.

3) Failed to start docker.service - это значит, либо сервис называется не docker, а как-то по-другому (например: super-puper-docker-server), либо ты установил только клиент от Докера, а демон не установил.

Скорее всего. ты либо использовал туториал от другой ОС, где все по-другому сконфигурировано, либо накосячил при установке и пропустил какой-то шаг. Либо докер обновился и туториал устарел.
Аноним 28/10/23 Суб 21:39:07 #302 №2898285 
>>2897969

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

То есть, ты сначала читаешь доки от оригинального Докера, а потом документацию от дистрибутива, что они там поменяли.
Аноним 28/10/23 Суб 22:49:47 #303 №2898368 
>>2898222
>Сокет-сервер на PHP обрабатывает только данные, которые изменились
Именно это я и имел ввиду когда писал что ты нихуя не понимаешь, чучело. Напиши блядь код для обработки хотя бы двух соединений. Ты же блядь вообще не понимаешь о чем говоришь. Тебе блядь в цикле придется читать из каждого соединения. А потом блядь эти данные отправить во все остальные соединения, которым они нужны. Это ж блядь хранить еще надо что куда писать. Сколько это времени для миллиона коннектов займет сам посчитай, хуйлуша. И это я не говорю про проблемы со свежими пользователями, которым нужно старую переписку показать. Нихуя память расти не будет, да чмоня?

>Я занимался профайлингом и многие запросы занимают менее 1 мс.
Ебанько, что означает "занимают"? Есть конкретные части запроса Planning Time, Execution Time, Fetching Time. Я говорю про Fetching Time. Покажи мне результат запроса где fetching занял меньше 10мс или заваливай ебало.

>Я мерял на реальной БД в продакшене
А у меня блядь виртуальная что-ли?

>находящейся под нагрузкой.
Ну под нагрузкой-то оно все быстрее идет чем без нагрузки. Хуйлуша, запрос был SELECT 1; какая нахуй нагрузка вообще?

Короче, обмудок солевой, ты давай в следующий раз сразу прикладывай рабочий код или пруфы своего гнилого пиздежа. А то твои кукаретические маняфантазии доебали уже.
Аноним 28/10/23 Суб 23:55:26 #304 №2898465 
Yandex Managed Service for YDB.png
>>2898204
>DynamoDB не предоставляет никто, кроме Amazon
Не пизди чего не знаешь) Есть куча решений совместимых с dynamodb, тот же яндекс-облако например.

>вручную по ним искал записи (запросов-то не было).
Про что ты несёшь, дурачок? Там есть запросы https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html

Короче из всей твоей тирады понял что тебя не устраивает отсутствие schema. Блять, так это наоборот хорошо! Мне наоборот по кайфу гибкий подход. Зачем мне загонять данные в жёсткий тип, может я не знаю заранее какие у меня данные будут. Валидация - это вообще задача программиста. Ты можешь у себя на бекенде какие угодно валидации сделать. Мусор? Ну и что мусор.... Это же не конец света. Так у вас вообще на каждый чих нужно делать миграцию. Я же не ною, мол какие реляционки говно, всё засрали своими миграциями...

>>2898211
Ты заебал уже, реально. Доебался до типов... Сказали же структура ГИБКАЯ. Чел, ты просто не шаришь. Там нет никаких костылей. Всё что нужно делается через ORM: валидация, типы, запросы, удаление. Надо мне к нижнему регистру привести всё, проверить почту - я делаю это через ORM. Надо мне объявить тип - я тоже сделаю это через ORM. Объявлю модель и там будет всё прописано. Вставить данные неправильного формата не получится - ORM не позволит. Непонятно что это такое - потому что ты не шаришь. Это служебная инфа, некий аналог foreign keys. При использовании ORM всё лишнее скроется под капотом, останется только одна мякотка. Такой "странный" способ хранения данных на самом деле приём под названием "single-table design", который знают все nosql'щики. Без разницы, кассандра ли это, монга или ещё что. Ты естественно можешь не следовать принципам single-table design, не ставить ORM, тебя насильно под автоматами не заставляют. Просто не надо проецировать реляционное мышление на другие базы данных. Здесь другая блять философия. Это всё равно что применять мышление классической музыки на техно концерте ёпт.
Аноним 29/10/23 Вск 00:02:00 #305 №2898474 
>>2898465
>ORM не позволит
Че-то в голос с этого недоразвитого чимпанзе.
Аноним 29/10/23 Вск 03:23:59 #306 №2898638 
>>2898368

Почитай про reactor pattern прежде чем писать что-то дальше.

> что означает "занимают"?

Время от вызова функции до получения результата запроса, то есть время выполнения запроса + сетевые задержки.
Аноним 29/10/23 Вск 07:52:04 #307 №2898700 
>>2898264
>PHPStorm их нету
Не может быть! Ведь Альберт сказал, что шторм - это лучшая иде для профессионалов.
Аноним 29/10/23 Вск 11:02:03 #308 №2898759 
>>2898638
>Короче, обмудок солевой, ты давай в следующий раз сразу прикладывай рабочий код или пруфы своего гнилого пиздежа.
>пук
Аноним 29/10/23 Вск 11:28:59 #309 №2898782 
>>2898282
Спасибо за подробное объяснение, поставил обратно дебиан буду курить офф документацию
Аноним 29/10/23 Вск 15:00:31 #310 №2899024 
Desktop 2023.10.29 - 14.36.09.04.mp4
Screenshot 2023-10-29 145348.png
>>2898264
>>2898700
Шизики, в шторме для сниппетов кода целый язык придуман, с переменными, условными операторами и функциями.
На нем если постараться можно вообще самопишущиеся программы создавать.
Аноним 29/10/23 Вск 17:34:18 #311 №2899191 
>>2899024
Ого круто
Аноним 29/10/23 Вск 17:55:01 #312 №2899209 
>>2879349
>Зато пхп макаки с индусами за весло барена не конкурируют.

Лол что, это самая индуксская область после жс
Аноним 29/10/23 Вск 18:38:36 #313 №2899237 
>>2899209
Все самые крупные галеры это джава и мобильная разработка. Жс там потому что все интерфейсы сейчас на жс.

А назови мне хоть одну пхп галеру хотя бы на двести гребцов? Может и есть такие, но придется побегать и поискать.
Аноним 30/10/23 Пнд 12:52:11 #314 №2899924 
изображение.png
Добрый день, я совсем дурачок пытающийся что-то поннять и остановившийся на задаче с циклами. Задачу я вроде как выполнил, но по своему, создав еще одну переменную и выведя умножение первой на саму себя через нее же. Но может мне кто-то пояснит почему если писать просто echo$x*$x то он не считает значение, а просто выводит умножение?
Аноним 30/10/23 Пнд 13:30:58 #315 №2899974 
>>2899924
Прикладывай ссылку на код.

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

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

https://3v4l.org/YQK6c

Тебе нужно почитать про интерполяцию и конкатенацию строк в php.
Аноним 30/10/23 Пнд 13:32:33 #316 №2899976 
>>2899974
знак имел ввиду умножить *
Аноним 30/10/23 Пнд 15:06:48 #317 №2900128 
Пилю свой пет-чатик параллельно с изучением пхп, пару дней и там уже такая каша которую я хрен зарефакторю, папки, импорты, это ппц, эх надо было изначально не торопиться наверное и по красоте всё делать, ну ладно в след раз буду аккуратнее. Главное работает.
Аноним 30/10/23 Пнд 15:13:07 #318 №2900138 
screenshot22-1.png
>>2900128
На сокетах?
Аноним 30/10/23 Пнд 15:18:39 #319 №2900151 
cat-3602557960720.jpg
>>2900138
На аяксе, в сокеты не умею
Аноним 30/10/23 Пнд 15:26:09 #320 №2900169 
>>2900151
Ну сразу видно что ты пацан ровный. Могу помочь с рефакторингом если есть желание.
Аноним 30/10/23 Пнд 15:43:35 #321 №2900206 
>>2900169
Спасибо, да я займусь как-нибудь, надо только время выделить, а я всё функционалом в занимаюсь, не до того
Аноним 30/10/23 Пнд 16:05:16 #322 №2900233 
>>2900206
Ну смари сам, если че заходи в дискорд https://discord.gg/6RJvFkDNWN
Если какая помощь нужна спрашивай.
Аноним 30/10/23 Пнд 16:17:47 #323 №2900252 
>>2900233
О, благодарочка.
Аноним 30/10/23 Пнд 16:20:41 #324 №2900256 
>>2900233
За что слим можно назвать ебаным, если в нем воопще ничего нет?
Аноним 30/10/23 Пнд 16:30:22 #325 №2900280 
>>2900256
Бля, это просто случайный набор слов. Там и слим то никто никогда не обсуждал.
Аноним 30/10/23 Пнд 20:54:35 #326 №2900672 
Добрый вечер. Подскажите какие шаблоны проектирования нужно выучить (минимум и максимум).
Аноним 30/10/23 Пнд 21:02:33 #327 №2900688 
>>2900672
Добрый вечер. Подскажите какие знаки препинания нужно выучить (минимум и максимум).
Аноним 30/10/23 Пнд 22:24:37 #328 №2900831 
Как усвоить логику использования классов, объектов, интерфейсов и т.д. как 2*2?
Я понимаю что в отдельности значат классы, объекты, интерфейсы, что они делают, но у меня не получается их использовать по назначению.
Например, читаю цитату "Программирование в соответствии с интерфейсом, а не с реализацией".
Как научиться понимать эту и подобные цитаты как само собой разумеющееся?
Для меня это как формула.
Я могу заучить, что какой-то показатель нужно умножить, а потом поделить на другой показатель, но почему именно такие операции нужно совершить и именно с такими показателями - нет.
Аноним 30/10/23 Пнд 23:01:39 #329 №2900883 
howtotrollsomeonebyonyxcarmined8lb1l6-fullview.png
>>2900831
Как быть охуенным? Как не ошибаться? Как знать все что нужно? Как решать все по красоте?
Пчел 99% пхп макак просто катаются ебалом по клавиатуре, иногда с умным видом высирая что-то вроде >>2882780 "все так зыбко, так неопределенно, неформализуемо".
Аноним 31/10/23 Втр 03:14:07 #330 №2901078 
Абсурдный вопрос.
Есть класс, который хранит информацию.
Я планирую создать класс, который будет наполнять первый класс.
Т.е. таким образом я хочу, чтобы каждый класс делал одно.
Один хранит, другой забирает извне данные и вносит в первый класс.
Это нормально или я дохожу до абсурда?
Как понять в делении класса, насколько приемлемо его делить?
Аноним 31/10/23 Втр 06:44:55 #331 №2901100 
изображение.png
изображение.png
изображение.png
изображение.png
Решаю задачи из интернета по РНР.
Задача: дан массив с числами, извлечь квадратный корень.
Как я понял, автор не предполагал, что там будут неудобные числа, потому что сама задача находится среди элементарных задач, суть которой просто закрепить понимание цикла for.
Я подумал и решил, что мне полезнее будет решить ее так, чтобы можно было давать и неудобные числа, например, 101761.
Нашел алгоритм извлечения корня из подобных чисел.
И т.к. я учусь писать на ООП, решил попробовать написать на ООП.
Хотелось бы почитать от опытных анонов какие бы классы они предложили для такой задачи.

Алгоритм на скриншотах.
Аноним 31/10/23 Втр 06:46:36 #332 №2901101 
изображение.png
изображение.png
изображение.png
изображение.png
Страница с алгоритмом извлечения корня:
http://spacemath.xyz/algoritm-izvlecheniya-kvadratnogo-kornya/
Аноним 31/10/23 Втр 07:49:40 #333 №2901113 
>>2901100
Ни одного класса. ООП нужно, когда ты добавляешь фичу в код и хочешь сделать это расширяемо и поддерживаемо, т.е на практике ООП бывает полезным, когда появляется необходимость управлять зависимостями, например для работы нужна одна реализация зависимости, а для тестирования другая. Для написания одного алгоритма ООП не нужно. А вот если ты пишешь код который использует несколько взаимозаменяемых алгоритмов, то ты можешь это дело реализовать в виде стратегии.
Аноним 31/10/23 Втр 15:11:36 #334 №2901589 
>>2900831
Не слушай >>2901113 еблана, он не шарит нихуя.

Тебе как минимум понадобится разбивать входящее число на "грани" и хранить их. То есть некий RootableInt, который содержит массив Edge. Так же обрати внимание на результат, он формируется путем добавления чисел в конец. Сам по себе язык так не умеет, то есть нужна некая обертка Result, которая меняется путем appendNumber().

То же самое кстати с гранями - опять добавляются а не суммируются, то есть нужен какой-то новый тип, который сам число, а увеличивается не математическими действиями а путем добавления числа в конец. Один раз создаешь такой класс и просто пользуешься. Имаджинируй лапшу процедурного хуесоса выше.
Аноним 31/10/23 Втр 15:54:35 #335 №2901627 
>>2901589
Задача простым алгоритмом решается, нахуя для нее классы городить? Даже в промышленном коде. Напимер методом деления отрезка пополам. Все это в несколько строк кода помещается с двумя переменными (с тремя). Если ты концы отрезка поместишь в класс и сделаешь метод возвращающий другой такой же отрезок с корнем, ты ничего не добавишь к рещению. просто напишешь немного больше нерасщиряемого кода. Это не есть ООП.

Вот если тебе нужно несколько алгоритмов вычисления корня, и ты напишешь интерфейс с методом public function sqrt(float $a): float, это будет ООП. Но это задачу в вопросе не решает, это решает задачу совмещаения нескольких алгоритмов с одним интерфейсом.
Аноним 31/10/23 Втр 16:47:35 #336 №2901672 
>>2901627
Каловичек, спок. Предъяви процепердурную реализацию заданного алгоритма или завали ебало. "Ето не есть оопе", чучело блядь.
Аноним 31/10/23 Втр 17:24:23 #337 №2901719 
>>2901672
https://onlinegdb.com/KcWh6Sr8EI
Аноним 31/10/23 Втр 17:58:19 #338 №2901748 
>>2901719
Не то о чем просили, да еще и не на том языке. Вся суть дегенеративных пхп макак.
Аноним 31/10/23 Втр 18:16:14 #339 №2901780 
>>2901748
Ты хочешь сказать что на пыхе ооп нужно потому что язык бедный на синтаксис?
Аноним 31/10/23 Втр 20:03:10 #340 №2901921 
Ничего не понимаю.jpg
Зачем и почему опытные челы работают на битриксе? Это стокгольмский синдром?
Аноним 31/10/23 Втр 20:19:05 #341 №2901939 
>>2901780
Я хочу сказать что ты вертлявый хуесос.
Напиши на пхп в процедурном стиле алгоритм, который тебя попросили или съеби в закат, чмоня.
Аноним 31/10/23 Втр 20:28:30 #342 №2901957 
>>2901939
Не хочу. Ты путаешь OOP и ADT в языке. Если чел собирается изучить ООП ему надо задачу с проектированием, а не составление структур данных для алгоритмов. И с хуя ли ты такой здесь агрессивный, валерьякку пей если с нервами проблемы.
Аноним 31/10/23 Втр 20:50:19 #343 №2902007 
>>2901957
>Не хочу.
Ну и пшел нахуй отсюда. Пиздуй в плюсотред аббревиатурами жонглировать. Тебе там быстро шершавым по губам проведут.
Аноним 01/11/23 Срд 07:58:30 #344 №2902251 
>>2901957
Да он ебанкрат какой то, нахуя что-то объяснять дауну который не понимает что функции и ооп это подходы к архитектуре, что с ним будет если он на какой-нибудь работе будет свои аутистские умозаключения высирать, мол есть алгоритмическая задачка я думаю её функциями не решить, надо ооп и ларку поднять ящитаю, вот умора будет.
Аноним 01/11/23 Срд 12:41:21 #345 №2902513 
>>2902251
О, еще один процедурный хуесос. Сейчас сделаю так что он съебет в закат что-то там пердя про архитектуру.

Напиши на пхп в процедурном стиле этот алгоритм http://spacemath.xyz/algoritm-izvlecheniya-kvadratnogo-kornya/ . А я напишу используя классы.
А потом сравним что будет читаемым и понятным, а что будет ебучей лапшой.
Аноним 01/11/23 Срд 13:42:24 #346 №2902585 
>>2902513
Написал алгоритм твоей мамаше за щеку, проверь. А чо ты кстати переобулся и говоришь теперь что на классах код будет просто читаемее чем на функциях, чуть выше от тебя был тезис что есть алгоритмические задачки которые функции в принципе неспособны решить, а классы могут, а теперь оказывается что и так и так можно всё решить, но на классах просто красивее будет. Получается ты тут единственный вертлявый хусос, так что обоссан и пиздуешь в закат ты.
Аноним 01/11/23 Срд 13:44:24 #347 №2902593 
>>2902585
>пук
Аноним 01/11/23 Срд 13:57:16 #348 №2902611 
>>2902593
Мощный контраргумент обосравшегося на весь тред дебила.
Аноним 01/11/23 Срд 14:05:44 #349 №2902620 
>>2902611
А что ты хотел? Ты на выдумывал хуйни какой-то.
>чуть выше от тебя был тезис что есть алгоритмические задачки которые функции в принципе неспособны решить, а классы могут
Это че? Стекломойный хуесос, где ты это прочитал?

Вот конкретная цитата:
>>2901589
>Имаджинируй лапшу процедурного хуесоса выше.

Ебать процедурные фантазеры. Срут простынями бессмысленных аббревиатур, а когда их просят предъявить код сливаются и убегают.
Аноним 01/11/23 Срд 20:55:03 #350 №2903150 
>>2898267
>PHPStorm
прописываешь неймспейс и шторм сам переносит куда надо
Аноним 01/11/23 Срд 21:38:49 #351 №2903207 
>>2875886 (OP)
Ссылка на паттерны из ОП-поста некорректная, надо убрать README.html

https://designpatternsphp.readthedocs.io/ru/latest/
Аноним 02/11/23 Чтв 21:15:43 #352 №2904429 
>>2903207

Спасибо, учтем.
Аноним 02/11/23 Чтв 21:16:08 #353 №2904430 
>>2901100
Какой ооп лол, для этого одна функция есть
Аноним 02/11/23 Чтв 21:23:56 #354 №2904437 
>>2899924

Давай разберем на примере с плюсом. Допустим ты пишешь:

$a = 2;
$b = 3;
echo $a + $b;

Здесь $a и $b это переменные, а + это операция. Конструкция $a + $b называется выражение, и PHP вычисляет выражения перед тем, как выполнить echo. PHP выполняет сложение, и получившееся число (5) передает команде echo, которая его выводит.

Теперь возьмем код:

echo "$a + $b";

Здесь кавычки все меняют. То, что в кавычках - это строка, набор символов. И знак "+" это не оператор сложения, а просто символ плюса. При этом, PHP подставляет переменные в строку, и вместо $a и $b он подставит "2" и "3", и получится строка (не маетиматическое выражение, а просто набор символов) "2 + 3". И echo выведет эту строку как есть.

Рассмотрим еще один пример:

echo '$a + $b';

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

То есть, $a + $b, "$a + $b" и '$a + $b' это три разных вещи (выражение, строка с подстановкой переменных, строка без подстановки переменных).
Аноним 02/11/23 Чтв 21:28:05 #355 №2904442 
>>2900672

Выучить мало, надо понять, когда они используются и почему их используют вместо того, чтобы написать более простой код. Я могу посоветовать для начала: Builder, Pool, Dependency Injection, Fluent Interface, Entity-Attribute-Value.
Аноним 02/11/23 Чтв 21:30:31 #356 №2904444 
>>2900831

> Программирование в соответствии с интерфейсом, а не с реализацией

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

> Как научиться понимать эту и подобные цитаты как само собой разумеющееся?

Может, просто туториал или книга плохо объясняет и надо почитать другую?

Также, ты можешь попробовать задать себе вопрос вроде: а зачем нужны интерфейсы, если можно обойтись без них? Почему делают так, а не иначе?
Аноним 02/11/23 Чтв 21:32:37 #357 №2904446 
>>2900883

100% программистов, ты хотел сказать?

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

Сейчас до сих пор исследователи не используют компьютерные доказательства в научных работах по математике, а ты ждешь что тебе сделают формальные правила для PHP.
Аноним 02/11/23 Чтв 21:33:37 #358 №2904448 
>>2901078

Это часто используется. Классы с данными часто называют "сущности", а классы только с операциями называют "сервисы".
Аноним 02/11/23 Чтв 21:36:34 #359 №2904450 
>>2901100
В чем ошибка?
https://onlinephp.io?s=LYvNCoJQEIXXCb7DEC4SxLLSipIepCIuYbnIsmsFEUG2cZEPI2Jkv88w940ayVnN951zBkPf9WWpXgfMMMEP4BsTEYoQc0xBhCAizIleFL4x14D8HVPim4hEDPgkSDATZ5pd8COu-Cjkl8SNMNZlSZYUxjk7gA0jo2F0LEMDo9lqm1rP6na0dsu0Jv2iNl9zh83cGpR9FoCyZ8udA-pRlirlb8PC86fBhm-549X-UqU90Dkzd11u9Op4VSV9-gE%2C&v=8.2.10
Аноним 02/11/23 Чтв 21:40:05 #360 №2904452 
>>2901100

Вообще, в PHP уже есть готовая функция для этого.

Можешь сделать этот алгоритм, но если что, есть список методов в Википедии: https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D1%80%D0%BD%D0%B5%D0%B9

Один из самых простых это метод Ньютона:

- пусть надо вычислить корень из y
- берем в качестве начального значения x = y/2
- затем берем среднее между x и y/x: x = (x + y/x) / 2
- повторяем последний шаг и получаем все более точные значения
- повторяем, пока x и y/x будут различаться больше чем какое-то очень маленькое число, например, 1/1 000 000. Это число определяет точность ответа, чем меньше, тем точнее ответ.
Аноним 02/11/23 Чтв 21:40:43 #361 №2904453 
>>2901100

Классы тут не нужны, так как у нас нет объектов со свойствами. Достаточно 1-2 функций или 1-2 статических метода в одном классе.
Аноним 02/11/23 Чтв 21:44:31 #362 №2904459 
>>2904450
>Call to undefined function gmp_sqrtrem()
Проблемы с английским?
Аноним 02/11/23 Чтв 22:11:56 #363 №2904484 
>>2904442
Спасибо за совет, т.к. разобраться с 5-ю шаблонами мне будет проще, чем с 20-ю и более.
Аноним 02/11/23 Чтв 22:25:47 #364 №2904507 
>>2904450

Эта функция gmp_sqrtrem() находится в составе математического модуля GMP, который не подключен на данном сайте. Можешь попробовать другой, например https://3v4l.org/ или поставить PHP себе на комп.

В закладки добавь https://translate.google.com/ и бросай туда ошибки.
Аноним 03/11/23 Птн 06:29:32 #365 №2904632 
изображение.png
Почему эта хуйня высерает мне про неопределенную переменную, если она выше в коде определена?
Аноним 03/11/23 Птн 06:30:31 #366 №2904633 
>>2904632
а, блять...
Я понял.
Название класса-контейнера неправильно написал...!
Аноним 03/11/23 Птн 09:14:08 #367 №2904670 
>>2904633
Почему бы не поставить IDE или редактор кода, чтобы сразу видеть такие ошибки.
Аноним 03/11/23 Птн 09:16:20 #368 №2904671 
>>2904507
Ок, спасибо
Аноним 03/11/23 Птн 09:36:51 #369 №2904687 
>>2904670
Заебисто для такого новичка как я.
У меня есть notepad++ и недостроенный VsCode (стоит PHP и xDebug, но я хз как сделать так, чтобы результат кода выводился внутри программы)
Пробовал NetBeans, но сложным показался интерфейс.
Так что решил ручками проверять результат через онлайн компиляторы и на бумаге расписываю коротко логику.
Аноним 03/11/23 Птн 09:55:17 #370 №2904700 
изображение.png
>>2896044
А вот что делать, если...
У меня есть класс, который проверяет уникальность email.
Для того, чтобы проверить ее, нужно обратиться к БД, чтобы алгоритм перебрал таблицу с информацией абитуриента и сравнил входный емайл с имеющимися.
БД в планах будет заниматься другой класс.
Как мне правильно поступить?
Пока что я остановился на том, что метод внутри своего тела просто будет вызывать метод, который объявлен внутри класса с БД. И результат, который вернет этот метод из класса БД, метод класса, который проверяет на уникальность, положит в другой объект-сущность, где хранятся тексты всех ошибок.
Прости, пожалуйста, что так забористо пишу. Приложу картинку, надеюсь, что станет понятнее.
Аноним 03/11/23 Птн 11:29:52 #371 №2904818 
Снимок экрана в 2023-11-03 11-28-34.png
Аноним 03/11/23 Птн 13:35:26 #372 №2904994 
>>2904818
зарплату какую хочешь?
Аноним 03/11/23 Птн 15:24:07 #373 №2905091 
Screenshot 2023-11-03 152239.png
>>2904700
Не достаточно просто вынести доступ к базе в отдельный класс. Нужно сделать так чтобы валидатор мог только получать данные, причем только нужные.

Вот пример https://3v4l.org/ObHTt
Мы отделили валидатор от доступа к управлению хранилищем, он не сможет ничего никуда записать или поменять. А еще от способа хранения. Нам не важно хранятся емэйлы в таблице пользователей или где-то отдельно. Код валидации от этой перемены никак не поменяется. И валидатор ничего не знает ни о каких пользователях, он получает "строчку" и никаких ненужных зависимостей у него нет.

И поставь блядь наконец шторм. Даже мне, пока я писал этот пример, он с десяток ошибок исправил а половину кода сгенерил.
Аноним 03/11/23 Птн 16:41:25 #374 №2905232 
>>2904818
Не знаю в чем вопрос и ничего не знаю по пхп. Советую использовать docker-compose, с ним намного все понятнее. Алсо, почему такой жирный образ? Используй alpine.
Аноним 03/11/23 Птн 18:37:30 #375 №2905406 
scr.jpg
В чем ошибка? Индекс файл в директории есть
Аноним 03/11/23 Птн 18:38:35 #376 №2905409 
>>2905406
А всё заработало, надо было билд сделать
Аноним 03/11/23 Птн 18:50:10 #377 №2905448 
scrn3.png
scrn2.png
Почему я выполняю кучу команд а директория остается пустой?
Аноним 03/11/23 Птн 19:03:48 #378 №2905474 
>>2905448
Каких "команд"?
В какой папке лежит твой скрипт?
На какую папку ведет $PWD?
Почему ты прокидываешь именно в /var/ww/html?
Что делает твойскрипт вообще, откуда там какие-то новые файлы должны возникнуть?
Аноним 03/11/23 Птн 19:17:12 #379 №2905495 
>>2905448
Тебе надо понять что происходит когда ты команду прожимаешь чтобы диагностировать свои заулпы. Что у тебя есть эмулятор терминала, что он форкает оболочку операционной системы с интерфейсом командной строки под названием BASH (скорее всего), баш форкает процесс, где докер CLI отправляет команду докер-деймону по API, что докер CLI шарит файловый дескриптор stdout'а с эмулятором терминала, поэтому ты на экране видишь данный текст... и так далее
Аноним 03/11/23 Птн 19:19:27 #380 №2905498 
>>2905448
Алсо по докеру дока пиздец охуенная. Тупо почитай её блять и всё. По архитектуре докера верхнеуровневой по тому что команда делает которую ты тыкаешь. Но учитывая что ты нулёвый я не знаю зачем тебе докер
Аноним 03/11/23 Птн 19:25:13 #381 №2905504 
>>2905474
>На какую папку ведет $PWD?
На ту, которая у него в промпте, /home/его юзер/php. Промпт её из этой переменной окружения и выковыривает я полагаю
Аноним 03/11/23 Птн 19:26:03 #382 №2905507 
>>2905474
А маунтит он на вар ввв хтмл потому что пхпшная приложуха в образе докера там валяется
Аноним 03/11/23 Птн 19:44:13 #383 №2905515 
>>2905504
>>2905507
>я полагаю
1) Полагать ты можешь че угодно. Его код должен лежать в папке, на которую указывает $PWD, то есть "хуй пойми где" пока он не убедится где это на самом деле.

>пхпшная приложуха
your-script.php это блядь и есть "пхпшная приложуха", а запускает её апач. А откуда апач пытается её запустить, на какую папку он настроен? "хуй пойми на какую", пока он не проверит и не убедится.

То есть получается: он монтирует "хуй пойми что" в /var/www/html, а апач ищет пхп скрипт "хуй пойми где". После чего "хуй пойми какая" директория "хуй пойми почему" остается пустой.

Вот и "полагай" хуй к носу.
Аноним 03/11/23 Птн 19:47:47 #384 №2905519 
>>2905515
Где ты у него апач увидел додич
Аноним 03/11/23 Птн 19:49:32 #385 №2905522 
>>2905519
Я увидел что образ это апач+пхп. Теперь я додич. Всё. Маски сброшены. То что он какую-то хуйню вызывает это и так понятно, я не про это а в целом. Что неплохо бы разобраться
Аноним 03/11/23 Птн 19:50:06 #386 №2905524 
>>2905522
Но ты всё равно пидорас что так токсично навонял на меня. Иди нахуй пидорас
Аноним 03/11/23 Птн 19:56:00 #387 №2905530 
>>2905524
Ты просто пытался с умным ебалом что-то пиздануть, получился пердежь в воздух. Нахуя ты пытаешься делать вид что знаешь, когда ты нихуя не знаешь? Ты блядь даже не знаешь про какую папку он спрашивал.
Аноним 03/11/23 Птн 20:35:56 #388 №2905573 
>>2905530
Не пизди еблан прыщавый блять
Аноним 03/11/23 Птн 20:50:53 #389 №2905582 
>>2905573
Да никто тебя пиздить не будет, просто обоссым.
Аноним 03/11/23 Птн 21:43:24 #390 №2905638 
>>2904687

К VSCode можно подключить Phpactor (придется повозиться с конфигами) или intelephense (но там часть функций платная). Тогда будут подсказки и некоторые проверки.

Зачем тебе нужно запускать код прямо в IDE я не очень понял, но в VS Code ты просто можешь открыть консоль и набрать команду вроде php 1.php
Аноним 03/11/23 Птн 22:14:00 #391 №2905684 
>>2904700

Разумеется, валидация и работа с БД это разные вещи и ими занимаются разные классы.

Ты можешь сделать так (по-простому):

Класс-валидатор, который проверяет различные поля по разным правилам. При этом для проверки уникальности email он вызывает метод вроде isEmailUsed у класса для работы с БД.

Ты передаешь объект БД в аргументы. Но лучше передавать его в конструктор, используя DI (туториал: https://github.com/codedokode/pasta/blob/master/arch/di.md )

Или по-сложному:

Для каждого правила делаем свой класс-валидатор. То есть, для проверки, что поле не пусто, один класс, для проверки, что там только цифры, другой класс и тд. И главный класс, в который ты сначала добавляешь объекты-правила (в стиле "поле X должно соответствовать правилу Y") и он проверяет данные из формы на соответствие всем правилам. Это сложнее, но позволит лучше освоить ООП.

Это может быть примерно так:

$validator = new Validator([
'name' => [new NotEmptyValidator, new LengthMaxValidator(30)],
'...' => ...
]);

$errors = $validator->validate($form);

Конечно, $errors тоже можно сделать массивом объектов.

Если хочешь посмотреть, как валидацию делают в реальных фреймворках, можешь почитать:

- https://symfony.com/doc/current/components/validator.html
- https://laravel.com/docs/10.x/validation
Аноним 03/11/23 Птн 22:16:56 #392 №2905687 
>>2904818

PHP, запущенный внутри контейнера, не видит PHP-файл. Скорее всего ты забыл примонтировать папку с PHP-кодом внутрь контейнера или примонтировал ее не туда (смотри параметр volumes в конфиге Докера).

Ты можешь проверить, что видно из контейнера, запустив в нем команду ls:

docker exec имя-контейнера ls -a

Вот поэтому, кстати, я советую перед изучением Докера изучить основы Линукса - команды типа ls, pwd, mount в таких ситуациях помогают.
Аноним 03/11/23 Птн 22:26:02 #393 №2905700 
>>2905091

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

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

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

Далее, желательно бы не просто сообщать, что email невалидный, а пояснять, почему.

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

И так как это обучающий тред, то пиши хотя бы кратко, почему ты делаешь так, а не иначе, ведь человеку нужны знания, а не готовое решение.
Аноним 03/11/23 Птн 22:27:00 #394 №2905702 
>>2905409

Твои PHP-файлы должны быть не внутри образа докер, а монтироваться внутрь контейнера. Если ты просто включил файлы в контейнер, то это неудобно будет.
Аноним 03/11/23 Птн 22:29:09 #395 №2905704 
>>2905448

Ты выполняешь команды, которые не пишут ничего в директорию. Например, docker ps.

Также, если ты что-то пишешь внутри контейнера, то это теряется при завершении контейнера. Тебе надо примонтировать директорию с хоста в контейнер, чтобы результат сохранялся. Сам контейнер неизменяемый.
Аноним 03/11/23 Птн 23:31:18 #396 №2905765 
>>2905700
>неудачно выбрано название для метода __invoke
Invoke не выбирают, это единственный способ сделать класс-функцию.

>Из-за этого нельзя сделать класс, реализующий несколько интерфейсов.
Каво? Пример кода пожалуйста.

>Также, имя метода не является самодокументирующим
Шо? Почитай доку по invoke. При таком подходе имя класса = имя метода.

>ты сделал метод "найти первого пользователя по email", но тут другая задача: проверить
У хранилища нет никакой задачи ничего проверять. Проверяет валидатор. Вся суть примера в том что валидатору насрать кто и откуда вытащил этот емэйл, он сам интерпретирует его наличие или отсутствие. В этом примере вообще не важно как там валидация работает, там половина методов вообще заглушки с true.

>Далее, ты используешь странный способ наименования классов и интерфейсов: ты называешь их не существительными, а глаголами, как функцию
Потому что они выполняют функцию. Причем единственную. Шизофрения и тавтология писать что-то типа $search->search() или $query->query(). Вместо этого пишется просто $search() или $query() или $findEmail().

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

>объясни пожалуйста, зачем ты решил сделать интерфейсы, для которых существует только одна реализация и никогда не будет альтернативных реализаций?
RuntimeUserStorage implements IUserStorage то есть хранилища в базе не будет "никогда"? А емэйлы "всегда" хранятся только в хранилище пользователей? Интересно откуда такие выводы.

>И так как это обучающий тред, то пиши хотя бы кратко, почему ты делаешь так, а не иначе, ведь человеку нужны знания
Что я имел ввиду я пояснил в посте. Писать все в виде комментариев, а потом давать комментарии к комментариям никакого здоровья не хватит. Я уже скидывал ссылку на дискорд: https://discord.gg/6RJvFkDNWN велком в войс, разберем хоть построчно.
Аноним 04/11/23 Суб 03:20:33 #397 №2905827 
>>2905091
>>2905684
Хорошо, спасибо за ответ!
Аноним 04/11/23 Суб 12:53:46 #398 №2905973 
Здорово, анчоусы. Есть парочка серьёзных вопросов, просьба ответить по существу, без воды.

Что по зарплатам на PHP? Реально ли для сеньора зарабатывать 4000$ в РФ или восточной Европе (например, Польше)?
Собираюсь вкатываться в пхп, но как мне кажется - потолок у сеньоров 3500, а то и 3000 долларов. Поправьте, если я не прав.

Второй вопрос: достаточно ли вакансий, нацеленных на фреймворки, а не на CMS/Bitrix?

Третий вопрос: что лучше сразу изучать: ларавел, или симфони? И где больше вакансий: на первом, или на втором?

Заранее благодарю за ответы.
Аноним 04/11/23 Суб 13:15:16 #399 №2905984 
>>2905973
https://justjoin.it/all-locations/php/with-salary_yes?targetCurrency=usd&orderBy=DESC&sortBy=salary
Аноним 04/11/23 Суб 13:35:48 #400 №2906012 
>>2905984
Это о многом говорит. Нет.

Начиная от договора B2B, который не подходит для понаеха, заканчивая большим разбросом зарплат.
Сайты с зарплатами потыкать и я могу; это конечно хорошо, но лучше узнать о реальном положняке конкретно от итт экспертов.
Аноним 04/11/23 Суб 15:59:40 #401 №2906199 
>>2905973
>как мне кажется - потолок у сеньоров 3500, а то и 3000 долларов
Да, где-то так. Больше тебе вряд ли кто даст. Если только какая-нибудь залётная фирма из Швейцарии или Норвегии.

>нацеленных на фреймворки, а не на CMS/Bitrix?
Фу блять фу нахуй. Ничего не имею против ларавела/yii, классные фреймворки. Но работа на пхп фреймворках - это дно из дна просто. Ты будешь соревноваться с индусами работающими за $3/час, это самые низкооплачиваемые программисты из всех программистов по всем языкам. У программиста на ларавеле нет вообще никакой перспективы, у них примерно зарплата как у тестировщика. Может это парадоксально прозвучит, но даже на битриксе или вордпрессе больше платят. Даже мне кажется имеет больше смысла устроиться водителем такси в Москве или курьером/развозчиком еды.

>что лучше сразу изучать: ларавел, или симфони
Я бы вообще никакой пхп фреймворк не изучал. На мой взгляд, ниша пхп просто нахуй мертва. Я сам ушёл из пхп в рякт, ноду и раст, потому что бестолковая работа. Ну да, какбе вакансий много, но они низкооплачиваемые. Что толку от этих 3х или сколько там тысяч вакансий, если они в среднем предлагают тысяч 100. А те, которые 200-250 тысяч, там требования будут запредельными, длиннющий список из кубернетиса, баз данных, облаков и ещё бог пойми чего. То есть работы много, это абсолютная правда. И её на тебя хватит, это тоже правда. Но платить будут мало. То есть количество не равно качество.

Сейчас есть миллион БОЛЕЕ ИНТЕРЕСНЫХ ниш. Даже если какую-нибудь java взять и то будет лучше. На чисто мой взгляд, можно чисто для себя изучить WordPress/Bitrix. Но карьеру на этом строить я бы не стал.
Аноним 04/11/23 Суб 16:33:37 #402 №2906253 
>>2906199
> Ты будешь соревноваться с индусами работающими за $3/час
What? Я имел ввиду не фриланс, а работу в компании, если ты говоришь о фрилансе, тогда могу согласиться
> У программиста на ларавеле нет вообще никакой перспективы, у них примерно зарплата как у тестировщика
Возможно. Тогда стоит изучать симфони.
> На мой взгляд, ниша пхп просто нахуй мертва
Можно как-нибудь аргументировать? Я не спорю с тобой, просто из любопытства спрашиваю

> Но платить будут мало
А если не в РФ работать, а в Европе? Как там дела с пыхой обстоят?
Аноним 04/11/23 Суб 17:08:31 #403 №2906282 
>>2906199
>Сейчас есть миллион БОЛЕЕ ИНТЕРЕСНЫХ ниш. Даже если какую-нибудь java взять и то будет лучше.
Чистая правда. Заебался говорить вкатунам на пхп что им нахуй не нужен именно пхп. Что они себя загоняют в узкую тупиковую нишу.

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

>php работа бестолковая
>нода работа не бестолковая
Ну и написал бы: идите на фронт ребята, там бабки и знать нихуя не надо. Что частично правда. Но нахуя такую жирноту вываливать.

>можно чисто для себя изучить WordPress/Bitrix
И последняя строчка обесценивает всю простыню. Ты либо говна въебал, либо просто ничего про сегодняшние пхп реалии не знаешь. Просто как фонариком посветил и весь текст превратился в шизофазию с ебанутым выводом.
Аноним 04/11/23 Суб 17:13:09 #404 №2906294 
>>2906253
>Можно как-нибудь аргументировать?
А что здесь аргументировать? Язык просто медленно умирает, вот и всё. Его область использования ограничена говносайтами. Заказчики на пыхе не привыкли много платить, ты можешь хоть 10 лет опыта иметь и всё равно зарабатывать 180к. В пхп огромное количество говнокодеров, легаси, ебланов-заказчиков. Переехать куда-то в Европку по релокации тупо нереально, там своих пхпшников хватает. Интересных там каких-то модных молодёжных стартапов/проектов на php почти не бывает. То есть особых перспектив на будущее лично я не вижу. Да, под php много вакансий. Но это в основном всякая шелупонь типа личных кабинетов, говно-crm, говно-маркетплейсы, говно-магазины, говно-интеграции и так далее. Итого, чтобы подытожить:

- Нет релокации
- Мало интересных проектов
- Низкая зп по сравнению с другими программистами
- Много вакансий
- Много легаси и говнокода
- Особых перспектив у языка нет
- Область использования ограничена говносайтами
Аноним 04/11/23 Суб 17:19:44 #405 №2906303 
>>2906253
Чувак, если боишься пожалеть о вкате в пхп, то помни, что вкат в пхп - это окно выката в голанг. Он сейчас требуется в каждой третьей пхп вакансии
Аноним 04/11/23 Суб 17:45:48 #406 №2906337 
>>2906303
голанг в ваканисии пхп
@
устроился
@
легаси & монолит & лапша
@
в гите 100500 неизвестных "индусов"
@
дали задачу добавить редактирование неопубликованных комментов
@
на мите тимлид рассказывает как мужественно борется с единственным микросервисом на голанге
Аноним 04/11/23 Суб 17:47:24 #407 №2906338 
>>2906337
Значит тебе не повезло с проектом, коллега

Мимо выкатился с пхп в чистый голованг
Аноним 04/11/23 Суб 17:55:27 #408 №2906357 
>>2906337
Бугурт от чела, который ни разу не видел что такое голанг в пхп конторе.
Смари как надо.

ГОЛАНГ В ВАКАНСИИ ПХП
@
ВСЕ КТО ПИСАЛ НА ПХП ЛЕГАСИ МОНОЛИТ И ЛАПШУ ПИШУТ ТЕПЕРЬ НА ГО
@
ТВОЙ ТИМЛИД ТОЖЕ
@
СЕРВИС НА ГО ОДНА СТРАНИЧКА КОДА
@
СЕРВИС НА ПХП МЕШАНИНА ИЗ СОТНИ ФАЙЛОВ
@
ПОНИМАЕШЬ ЧТО ТЕБЯ ВЗЯЛИ ПОДМЫВАТЬ ЭТУ ЛЕГАСИ ПХП ПАРАШУ
@
ГО РАЗРАБЫ СИДЯТ ЧИСТЯТ СВОИХ ХОМЯКОВ И СОРЕВНУЮТСЯ НА ЛИТКОДЕ
@
ТЫ ЧИСТИШЬ ЗА НИМИ КАЛ ПЯТИЛЕТНЕЙ ДАВНОСТИ


Го беженец >>2906338 , верифицируй бугурт.
Аноним 04/11/23 Суб 17:59:59 #409 №2906376 
>>2906357
Ну не все так плохо было, но да. Но через месяца четыре уже пересадили в го
Аноним 04/11/23 Суб 18:07:15 #410 №2906391 
>>2906376
Я к тому что го в пхп конторе это мгновенная сегрегация на "го элиту" и "пхп плебс". А вчерашний раб это самый жестокий хозяин.
Если ты го вообще не знаешь или по какой-то причине именно го вакансии сейчас нет или что самое хуевое вас пхп программистов несколько, то отношение как говну и обслуге гарантировано.
А если сюда добавить тот факт что на го переписываются обычно самые важные части системы, то и от начальства будет отношение как к бесполезным ебланам которых мы вообще нахуя тут держим.
Аноним 04/11/23 Суб 18:39:33 #411 №2906485 
>>2906357
Хахаха дк это классика. Пхп+го это почти всегда говномонолит распиливать. Но деньхи-то плотют так что ладно
Аноним 04/11/23 Суб 18:44:30 #412 №2906500 
>>2906485
Да мало кто пыхо монолиты распиливает. В пыхоконторах вообще не принято давать время на устранение технического долга. Обычно есть МОНОЛИТ приносящий бабки, который ковыряют джуны с мидлами и несколько микросервисов интеграций на разных языках для развлечения сенек и тимлида
Аноним 04/11/23 Суб 19:06:51 #413 №2906563 
>>2906500
Я устал ковырять монолит...
Аноним 04/11/23 Суб 20:48:18 #414 №2906742 
А как вы перекатились на го? Я вот пару лет на пыхе работаю и хочу вкатиться в го, но во всех вакансиях вижу требование - от года коммерческого опыта на го
Аноним 04/11/23 Суб 21:04:43 #415 №2906784 
never-give-up-bitrix.png
>>2906563
Аноним 05/11/23 Вск 21:53:15 #416 №2908239 
>>2905973

Зачем ты пишешь зарплату в долларах? Его курс меняется так часто, что трудно понять, сколько ты хочешь рублей.
Аноним 05/11/23 Вск 21:55:28 #417 №2908241 
>>2906199

> устроиться водителем такси
Ага, целый день общаться с неадекватами

> или курьером/развозчиком еды
То же самое, плюс дождь, грязь, сырость. Это подработка для способных выжить в любых условиях студентов и мигрантов, а не для взрослого человека.
Аноним 05/11/23 Вск 21:58:09 #418 №2908247 
>>2906282

> идите на фронт ребята, там бабки и знать нихуя не надо.

Да, постоянно на улице вижу рекламу такую.
Аноним 05/11/23 Вск 21:58:51 #419 №2908251 
>>2906282

Но есть нюанс...
Аноним 05/11/23 Вск 22:02:41 #420 №2908261 
>>2906294

> Область использования ограничена говносайтами

Ну давай, расскажи про достойные сайты и на чем они написаны. Только пожалуйста не приводи в пример озон, яндекс маркет и подобный отстой, который инвалиды не осилили сделать в виде монолита и сжигают деньги заказчика на микросервисы.
Аноним 05/11/23 Вск 22:04:17 #421 №2908267 
>>2906337

> микросервис
> несколько языков

Почему ты на этом месте не хлопнул дверью? Тебе, что, нравится в конфигах Докера ковыряться и JSON из сокета в сокет перекладывать вместо полезной работы?
Аноним 06/11/23 Пнд 12:15:05 #422 №2908721 
https://ideone.com/cLfIKL
Привет, помогите победить феменитивы. Я что-то пытался сделать в 120 строке, но нихуя не вышло, я тупой.
Аноним 06/11/23 Пнд 14:23:12 #423 №2908929 
>>2905524
>>2905515
Специальное уведомление: на дваче посылают нахуй. Прошу вас обоих не рваться сверх меры.
Аноним 07/11/23 Втр 00:34:36 #424 №2909991 
>>2905973
>Собираюсь вкатываться в пхп, но как мне кажется - потолок у сеньоров 3500, а то и 3000 долларов. Поправьте, если я не прав.

Ты где такие зарплаты видел? Потолок 80 тысяч рублей фантазер ты наш

>Второй вопрос: достаточно ли вакансий, нацеленных на фреймворки, а не на CMS/Bitrix?

Достаточно чтобы понять что вкатун нахуй не нужен

>третий вопрос: что лучше сразу изучать

Укладку плитки или сварочное дело

ларавел, или симфони? И где больше вакансий: на первом, или на втором?

Оба надо знать, вакансий нет
Аноним 07/11/23 Втр 01:37:39 #425 №2910014 
Может кто-нибудь объяснить мне, что такое PHP? Я привык видеть, что это какой-то колхоз в одном файлике из html, javascript и самого php, потом какой-нибудь apache это все отдает на клиент, тем самым у нас самый что ни на есть SSR. Сейчас пхп это что? Все тот же апач? Все те же портянки или что-то изменилось? Где с этим всем ознакомиться можно? И ещё мне вот что непонятно: кто исполняет php? Только apache или nginx тоже умеет?
Аноним 07/11/23 Втр 04:24:54 #426 №2910033 
>>2910014
> И ещё мне вот что непонятно: кто исполняет php? Только apache или nginx тоже умеет?

Это бэкенд язык блять, он на любом сервере запускается в том числе встроенном лркалхосте
Аноним 07/11/23 Втр 06:37:11 #427 №2910065 
>>2910033
Хуйню сказал, просто так он не будет исполняться без определенных телодвижений.
Аноним 07/11/23 Втр 08:45:27 #428 №2910136 
>>2908721
У тебя функция inclineWord() после объявления переписывается два раза, зачем?
Также два раза рекурсивно вызывается функция numberToWords(), так задумано или ошибка?
Аноним 07/11/23 Втр 09:34:03 #429 №2910183 
>>2910014
Если у тебя нджинкс занимается, чем-то кроме отдачи статики, то у меня для тебя плохие новости
Аноним 07/11/23 Втр 12:08:50 #430 №2910337 
>>2910014

Программу на языке PHP исполняет интепретатор PHP. Интерпретатор PHP - это программа, написанная на Си. Она читает твой PHP код и выполняет команды в нем.

Когда ты используешь Апач, к нему подключается плагин с интепретатором PHP (он называется вроде mod_php). Если от браузера приходит запрос к файлу с расширением .php (вида http://localhost/test.php), то Апач вызывает плагин mod_php и интепретатор выполняет код скрипта test.php, и то, что программа выведет с помощью echo или как-то еще, интерпретатор отдает Апачу, а тот отправляет это назад в браузер. Обычно PHP-скрипт выводит HTML-код, и бразер его отображает.

То есть, связь такая:

Браузер <-> Апач <-> Модуль mod_php, содержащий интерпретатор PHP

Апач отвечает за взаимодействие с браузером, поддержку протокола HTTP, отдачу статических файлов (без кода PHP), а mod_php за выполнение PHP-скриптов.

Апач сейчас не очень часто используется, обычно используют nginx + php-fpm. Тогда схема такая:

Браузер <-> nginx <-> php-fpm

Отличие в том, что к Апачу PHP подклюается как модуль (плагин, расширение), а в случае с nginx мы отдельно запускаем nginx и отдельно запускаем php-fpm, и PHP здесь запускается как отдельная программа, а не модуль для nginx.

> Я привык видеть, что это какой-то колхоз в одном файлике из html, javascript и самого php,

PHP ничего не знает про HTML и Javascript и не пытается никак анализировать или выполнять такой код. Он выполняет код, который находится внутри тегов <?php ... ?> или <?= ... ?>, а все остальное просто выводит как есть. Соответственно, если ты напишешь HTML код снаружи тега PHP, то PHP просто его выведет как есть, а Апач передаст это в браузер.

> тем самым у нас самый что ни на есть SSR

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

> Где с этим всем ознакомиться можно?

В документации по Апачу, mod_php, php-fpm, nginx.

> И ещё мне вот что непонятно: кто исполняет php? Только apache или nginx тоже умеет?

Только интепретатор PHP. Ни Апач, ни nginx ничего про PHP не знают. Им надо специально указывать в кофниге, чтобы запросы к php-файлам обрабатывал интепретатор PHP.
Аноним 07/11/23 Втр 12:13:05 #431 №2910344 
>>2908721

> function numberToWords($number)

Тебе надо дополнительно передавать в функцию род, в котором ты хочешь получить число, например так:

function numberToWords($number, $isFemale) // $isFemale = 0 - мужской, 1 - женский род

Или, если ты знаешь про булев тип, то можно передавать false = мужской род, true = женский.

Чтобы было так:

numberToWords(1, 0) // один
numberToWords(1, 1) // одна

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

Также, не делай несколько копий функции inclineWords, достаточно одной.

Спрашивай, если что-то непонятно.
Аноним 07/11/23 Втр 12:44:53 #432 №2910392 
>>2910337
Спасибо большое. Теперь все понятно.
Аноним 07/11/23 Втр 12:48:18 #433 №2910397 
>>2910183
У меня никакой нжинкс ничем не занимается, я только разбираюсь.
Аноним 07/11/23 Втр 16:41:59 #434 №2910886 
Почему пхпшторм подсвечивает функцию xml_parser_create как ошибку ('ext-xml' is missing in composer.json ).

Это же встроенная функция? Зачем она в файле composer.json?
Ранее тоже замечал и по другим функциям, например по работе с sqlite3.
Аноним 07/11/23 Втр 16:56:47 #435 №2910903 
>>2910886
Это функция добавляемая расширением php, например в убунте она добавляется через apt
sudo apt-get install php8.1-xml
Она вполне может отсутствовать в системе
Аноним 07/11/23 Втр 17:54:43 #436 №2910961 
Снимок экрана 2023-11-07 в 16.40.09.png
Снимок экрана 2023-11-07 в 16.51.32.png
Снимок экрана 2023-11-07 в 16.46.53.png
>>2910903

> php -m | grep -i xml
libxml
SimpleXML
xml
xmlreader
xmlwriter

Вот на примере Simple XML, на скринах та же ситуация.
Модуль установлен, объект создается, а пхпшторм подсвечивает проблему.

Вопрос не особо важный, просто интересно, почему так.
Аноним 07/11/23 Втр 20:52:37 #437 №2911218 
>>2910961
А какая разница установлена ли у ТЕБЯ эта либа?
Шторм подсвечивает не проблему:
>Ты не сможешь выполнить этот код.

Шторм подсвечивает проблему:
>Никто не знает что для работы этого кода нужна либа.

Если ты не указываешь зависимости в менеджере зависимостей, то как сервер узнает что нужна либа? На сервере шторма нет. Как твой коллега узнает что нужна либа? А если ты это укажешь, то композер выдаст ошибку, в которой напишет все что нужно для запуска проекта, какой фреймворк, какой версии, какие либы, какая версия пхп в конце концов.
Аноним 07/11/23 Втр 22:14:18 #438 №2911374 
>>2911218
Хорошо, я понял.

Не подумал о том, что можно так сконфигурировать пхп перед установкой, что множества "стандартных" библиотек просто не будет установлено.
Аноним 08/11/23 Срд 10:57:59 #439 №2911851 
>>2906742
Без просада никак наверное. Если прямо до усрачки надо, я бы в таком случае джуном на го пошёл, наверное, или по знакомству попробовал
Аноним 09/11/23 Чтв 00:14:57 #440 №2913372 
>>2910886

Эта функция входит в расширение xml. Допустим, другой человек скачает твой код, но из-за отсутствия расширения у него код не заработает. Поэтому лучше явно указать, что для твоего проекта нужно это расширение, и composer.json как раз подходящее место для этого. Композер при установке автоматически проверит его наличие.

> Это же встроенная функция?

Не совсем. У PHP есть ядро, а есть расширения, которые надо ставить отдельно (хотя в некоторых ОС они ставятся вместе с PHP). xml это как раз расширение, и функция находится в нем. Просто у тебя оно наверно установилось вместе с PHP и ты даже не заметил.
Аноним 09/11/23 Чтв 00:16:25 #441 №2913374 
>>2911374

Это зависит от ОС, в некоторых ОС ставится PHP + стандартные расширения, а в некоторых ставится по умолчанию только ядро PHP.
Аноним 09/11/23 Чтв 04:24:36 #442 №2913529 
вот по пайтону есть курс у балакирева, там и упражнения и все остальное. А по пыхе есть что нибудь такое? чтобы от одного чела с заданиями и тд?
Аноним 09/11/23 Чтв 06:10:15 #443 №2913566 
>>2913529
>А по пыхе есть что нибудь такое?
Ну так открой тот же stepik, на котором ты читал Балакирева и вбей там в поиске php.
>Хто? Я?
Аноним 09/11/23 Чтв 06:32:22 #444 №2913579 
>>2913566
Да там хуйня одна. Думаю курс на хекалете купить лол
Аноним 09/11/23 Чтв 06:53:56 #445 №2913593 
>>2913579
>купить
Лох не мамонт хули.
Аноним 09/11/23 Чтв 06:54:16 #446 №2913595 
>>2913529
ОП текст тебе ничего не говорит?
Аноним 09/11/23 Чтв 23:54:58 #447 №2914865 
GaecXsgZG8Y.jpg
Почему Докер такой сложный? Я просто хочу запустить пхп и мускул
Аноним 10/11/23 Птн 00:58:38 #448 №2914923 
>>2914865
Докер лёгкий, просто ты тупой))
Аноним 10/11/23 Птн 02:19:32 #449 №2914955 
>>2914865
https://youtu.be/KuqiV0w0wew?si=qI-7IjTgvA36YaBh
Аноним 10/11/23 Птн 08:29:06 #450 №2915082 
>>2905091
У меня нет возможности пообщаться голосом, можешь объяснить тут текстом две строчки из своего кода?
>return array_shift($usersWithEmail);
Почему тут array_shift
>$foundEmail = ($this->findEmail)($email);
Что означает эта строчка?
Не совсем понимаю для чего там вторая скобка.
В переменную foundEmail кладется ссылка на объект типа IFindEmail, а дальше я не понял.
Аноним 10/11/23 Птн 08:38:36 #451 №2915089 
Каждый класс должен быть в отдельном файле.
А что если файл представляет собой объявление класса и пустое тело, потому что он наследует от общего класса?
Все также в отдельный файл?
Аноним 10/11/23 Птн 09:31:26 #452 №2915140 
>>2915082
Насчет второй строчки можешь не пояснять, я понял.
Аноним 10/11/23 Птн 10:47:00 #453 №2915245 
>>2915082
>У меня нет возможности пообщаться голосом
В крайнем случае поставь дискорд на мобилку и всего делов. А микро тебе в итоге все равно понадобится, и на собесы и по работе.

>Почему тут array_shift
Потому что коротко и делает в точности то что нужно - возвращает первый элемент или null если элементов нет. Да, в идеале нужно получить первый ключ через array_key_first, а потом вернуть значение по этому ключу и так технически будет на наносекунду быстрее.

>Что означает эта строчка?
Это обращение к функции внутри свойства объекта. Скобки позволяют не вызвать функцию findEmail(), а вызвать функцию внутри свойства (findEmail)().

>кладется ссылка на объект типа IFindEmail
Все правильно, просто объект типа IFindEmail работает как функция. Я уже писал зачем: чтобы не писать тавтологию типа $findEmail->findEmail().
Аноним 10/11/23 Птн 10:49:59 #454 №2915251 
>>2915089
>А что если файл представляет собой объявление класса и пустое тело
Это не имеет значение. Автолоадинг классов работает по psr-4, а по пср имя файла = имя класса, один файл = один класс, структура папок = неймспейс, и ничего кроме классов в приложении не существует. Че там у тебя внутри класса похуй абсолютли.
Аноним 10/11/23 Птн 11:28:08 #455 №2915300 
Какой смысл вкладывают в слова "объекту известно о другом объекте"?
Иметь ссылку на объект другого класса считается?
Аноним 10/11/23 Птн 11:35:58 #456 №2915312 
>>2915089

да.
Аноним 10/11/23 Птн 11:37:51 #457 №2915314 
>>2915245
>Потому что коротко и делает в точности то что нужно - возвращает первый элемент или null если элементов нет.
Меня немного смутило описание этой функции в документации, а именно, что она вырезает первый элемент массива и его возвращает и я гадал, а зачем его вырезать в данном случае.
В любом случае, спасибо, что ответил.
Аноним 10/11/23 Птн 11:38:19 #458 №2915315 
>>2915300

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

Если же ты:

- используешь название другого класса в коде
- получаешь или возвращаешь его объект
- пишешь логику с учетом логики другого класса

То, получается, твой класс "знает" о другом.
Аноним 10/11/23 Птн 11:38:48 #459 №2915316 
>>2915251
>>2915312
Окей, приму к сведению.
Немного коробило от полупустого файла, вот и решил спросить у опытных.
Аноним 10/11/23 Птн 11:39:41 #460 №2915317 
>>2915315
Хорошо, спасибо за ответ!
Аноним 10/11/23 Птн 11:46:49 #461 №2915327 
>>2905765

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

Вот у тебя есть 2 интерфейса, сделанных по твоей системе:

interface UserFinderByEmail
{
public function __invoke(string $email): ?User;
}

interface UserKarmaFinder
{
public function __invoke(User $user): int;
}

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

>>ты сделал метод "найти первого пользователя по email", но тут другая задача: проверить
> У хранилища нет никакой задачи ничего проверять. Проверяет валидатор. Вся суть примера в том что валидатору насрать кто и откуда вытащил этот емэйл, он сам интерпретирует его наличие или отсутствие. В этом примере вообще не важно как там валидация работает, там половина методов вообще заглушки с true.

Я тебе хотел написать, что ты неправильно реализовал проверку уникальности email, но ты, похоже, это понять не можешь.

>>объясни пожалуйста, зачем ты решил сделать интерфейсы, для которых существует только одна реализация и никогда не будет альтернативных реализаций?
> RuntimeUserStorage implements IUserStorage то есть хранилища в базе не будет "никогда"? А емэйлы "всегда" хранятся только в хранилище пользователей? Интересно откуда такие выводы.

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

Не нарушаешь ли ты тут YAGNI? То есть, нам сейчас не нужно иметь несколько реализаций, но ты пишешь интерфейсы на случай "а вдруг в будущем понадобится".
Аноним 10/11/23 Птн 11:49:38 #462 №2915332 
>>2913595

Увы, в ОП-посте не полный курс, а только основы, а анон наверно ищет полный курс.
Аноним 10/11/23 Птн 11:50:51 #463 №2915337 
>>2914865

А ты наверно не знаешь основы Линукс, не умеешь работать в командной строке?

Докер это всего лишь аналог легкой виртуальной машины. Ты получаешь пустой контейнер и пишешь команды, которые установят в него нужный софт.
Аноним 10/11/23 Птн 12:26:15 #464 №2915398 
>>2915332
Для начала достаточно основ, потом будет смотреть по карте, что нужно пхп разработчику.
Не вижу особой проблемы.
Он дольше будет искать полноценный курс, чем будет учить так.
Единственное, что можно полазать по сторонним сайтам с пхп темами, потому что ОП не разбирает некоторые темы, например, те же стрелочные функции или анонимные классы, или коллбэки.
Аноним 10/11/23 Птн 13:11:15 #465 №2915477 
>>2915327
>потому что нам надо
Не нам, а вам. У меня никаких проблем с этим нет. Если договорились быть в определенное время - я буду.

>Вот у тебя есть 2 интерфейса, сделанных по твоей системе
Не у меня, а у тебя.

>Как ты сделаешь класс, который реализует оба интерфейса одновременно?
Лол, ок. Меняем страшный непонятный invoke на понятный find https://3v4l.org/7oMPs . Стало можно?
Очевидно что проблема в том что класс, который ты хочешь написать пытается делать одновременно разные вещи. И тут всего два пути. Либо эти разные вещи начнут между собой согласовывать свой функционал, в виде запрета на одинаковые методы например. И становятся зависимыми друг от друга. Либо мы держим дядьку в киеве, а бузину в огороде и чай с кофе не смешиваем.

>Я тебе хотел написать, что ты неправильно реализовал проверку уникальности email
1) Хочешь написать пиши. Очередная причина почему эта переписка бессмысленная поебень, в которой собеседники больше половины написанного не понимают.
2) Мне ПОЕБАТЬ на правильность проверки, пример не про проверку вообще.

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

>В реальных приложениях (по моему опыту)
Судя по тому как ты на invoke вылупился опыта маловато.

>Не нарушаешь ли ты тут YAGNI?
А откуда мне знать? Это просто очередной не формализуемый баззворд. Одному кажется что понадобится, а другому кажется что не понадобится. Мнение против мнения. А если нет объективного критерия, то и разговаривать не о чем.

Короче тут мы заканчиваем. Беседа закольцевалась, и начала повторяться. На третий круг я не пойду.
Аноним 10/11/23 Птн 16:48:01 #466 №2915827 
изображение.png
Посмотрел называется справочник по html и css на удобненьком сайте
Аноним 10/11/23 Птн 16:51:57 #467 №2915837 
изображение.png
ru еще называются, выбрали уже бы тогда ua, чего позориться
Аноним 10/11/23 Птн 16:55:29 #468 №2915848 
PHP подходит для веб-сервиса для стриминга контента, или для этого Erlang лучше взять?
Аноним 10/11/23 Птн 18:20:30 #469 №2916117 
Как же приятно писать html-код в VsCode.
После Notepad++ чувствую себя как в раю.
Аноним 10/11/23 Птн 18:35:20 #470 №2916169 
>>2916117
И в чем разница? Типа emmet из коробки? Так на notepad он тоже ставится.
Аноним 10/11/23 Птн 18:38:31 #471 №2916176 
>>2916169
Да, хотя бы автоматическое закрытие тегов, выпадающий список цветов для css.
Я новичок, это мой первый серьезный опыт верстки сайта.
Так что профессионально разобрать разницу не смогу.
Просто немного устал от notepad, который максимум немного подсветит текст и немного дополнит вводимый текст.
Аноним 10/11/23 Птн 18:51:35 #472 №2916197 
Screenshot 2023-11-10 183241.png
>>2916176
Какое нахуй закрытие тегов. Кто блядь теги руками пишет вообще?
https://code.visualstudio.com/blogs/2017/08/07/emmet-2.0
Аноним 10/11/23 Птн 18:54:07 #473 №2916202 
>>2916197
>Кто блядь теги руками пишет вообще?
Я писал.
Признаю, что ручками делать это муторно.
Но я не писал ничего сложнее тестовых страниц, чтобы разобраться с теорией по html и css.
Аноним 10/11/23 Птн 18:55:41 #474 №2916205 
>>2916197
>теги руками пишет
А, блять...
Не так прочитал.
В любом случае, я новичок, который ничего серьезного не писал и знает html и css на общем уровне.
Аноним 10/11/23 Птн 18:57:47 #475 №2916207 
>>2916202
>теорией по html и css
>знает html и css на общем уровне
Бля, а что там за "теория" такая? Звучит как: знаю json на общем уровне.
Аноним 10/11/23 Птн 19:02:28 #476 №2916220 
>>2916207
>Бля, а что там за "теория" такая?
Ну, описывают тег и его атрибуты и идешь ручками писать это и смотреть результат в браузере. Все.
Для лучшего усвоения знаний.
Сейчас я на примитивном уровне понимаю от чего пахать при верстке страницы и что гуглить.
Ну и для того, чтобы все это стало реальными знаниями, я стараюсь теперь сверстать свою страничку.
Аноним 10/11/23 Птн 20:24:20 #477 №2916344 
Снимок экрана в 2023-11-10 20-22-13.png
Что надо вводить в Сервер? Пробовал локалхост не пускает
Аноним 10/11/23 Птн 20:46:49 #478 №2916384 
>>2916344
>Что надо вводить в Сервер?
IDDQD
Обмылок, ты сервер с базой поднял? Вот его адрес и вводи, чучело.
Аноним 10/11/23 Птн 21:22:18 #479 №2916455 
>>2916384
какой злой мальчик
ты битриксойд что ли?
Аноним 10/11/23 Птн 21:24:13 #480 №2916461 
>>2916455
Нет.
А ты мелкобуквенный хуесос?
Аноним 10/11/23 Птн 22:01:58 #481 №2916555 
Снимок экрана в 2023-11-10 21-59-46.png
Снимок экрана в 2023-11-10 22-01-02.png
Хули он мозги ебет?
Аноним 10/11/23 Птн 22:16:20 #482 №2916570 
>>2916555
Может быть блядь потому что ты пытаешься задать образ php контейнера внутри массива links?

Допустим ты слишком тугой чтобы прочитать правила форматирования yaml файлов. Так раздупли свои зенки на эти красные полоски, которые тебе ide высветила. Может тебе невдомек, но в нормально написанных файлах никаких красных подчеркиваний нет.
Аноним 10/11/23 Птн 22:46:15 #483 №2916620 
>>2916570
>так раздупли свои зенки на эти красные полоски, которые тебе ide высветила. Может тебе невдомек, но в нормально написанных файлах никаких красных подчеркиваний нет.

Ну я поэтому и спрашиваю че ему не нравится
Аноним 10/11/23 Птн 22:52:48 #484 №2916625 
yml-error.png
>>2916620
>Ну я поэтому и спрашиваю че ему не нравится
По монитору стукаешь и кричишь: ты че епта?
Ide всегда пишет че там не так, его два раза спрашивать блядь не надо.
Аноним 11/11/23 Суб 02:20:29 #485 №2916960 
>>2915848
Для стриминга типа для непрерывной передачи данных между клиентами в течение длительного времени? Не подходит конечно, пыха такое не умеет.
Аноним 11/11/23 Суб 10:24:11 #486 №2917196 
>>2915848
Из коробки - нет, а используя расширение Parallel - да, легко и элегантно.
https://www.php.net/manual/en/philosophy.parallel.php

Еще из наиболее интересных расширений - Swow. Мощная штука.
https://docs.toast.run/swow/en/

Про множество других проверенных временем и всем известных расширений писать не буду.
Аноним 11/11/23 Суб 12:23:27 #487 №2917284 
>>2916344

localhost или 127.0.0.1

Не пускает скорее всего из-за неправильного имени пользователя или пароля.

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

mysql -u пользователь -p пароль -h 127.0.0.1
Аноним 11/11/23 Суб 12:25:24 #488 №2917286 
>>2916555

Этот файл в формате YAML. Тебе надо хотя бы в общих чертах изучить YAML сначала.

В данном случае, он пишет, что в строке 6 какой-то неправильный символ.

Одна из ошибок при работе с YAML файлами это использование табов вместо пробелов. Табы в YAML запрещены (и правильно).
Аноним 11/11/23 Суб 12:26:22 #489 №2917288 
>>2916555

Также, обрати внимание, что отступы важны в YAML. Ты не можешь просто так взять и поменять число пробелов в начале строки, так как они определяют вложенность пунктов.
Аноним 11/11/23 Суб 12:34:02 #490 №2917292 
>>2916960
>>2917196
Возможно я не так выразился. Заходит пользователь на сайт, тыкает на видео, отправляется запрос не сервак, например с range 0-N, а сервер отправляет обратно ответ с байтами.
Аноним 11/11/23 Суб 14:37:44 #491 №2917441 
Порекомендуйте, пожалуйста, толковую книгу по проектированию программ.
Не перечень паттернов проектирования, а именно логику.
Про связанность, зависимости и т.д.
Аноним 11/11/23 Суб 17:23:19 #492 №2917760 
16997125982082459560268314831064.jpg
>>2917441
Мб это.
Аноним 11/11/23 Суб 17:51:32 #493 №2917823 
Снимок экрана в 2023-11-11 17-34-46.png
Как запустить?
Аноним 11/11/23 Суб 17:52:21 #494 №2917826 
>>2917823
Сорри, промахнулся тредом
Аноним 11/11/23 Суб 18:34:11 #495 №2917911 
>>2917760
Спасибо, обязательно гляну
Аноним 11/11/23 Суб 19:27:25 #496 №2917997 
>>2917441
https://dmkpress.com/catalog/computer/programming/978-5-93700-926-3/
https://dmkpress.com/catalog/computer/programming/978-5-97060-955-2/

Ну и СИКП конечно же (без шуток).
Аноним 11/11/23 Суб 19:50:55 #497 №2918029 
>>2917997
Спасибо. Это я тоже обязательно гляну.
Аноним 12/11/23 Вск 00:59:55 #498 №2918429 
>>2917823
Надо просто пятьдесят раз попытаться открыть несуществующий файл и он появится.

Бля, эта линукс эпопея как сериал из дурки. Как эти сцены из будущего в "12 обезьян". Какие-то ебанутые люди делают какие-то ебанутые вещи и уже непонятно это блядь реальность или троллинг. Реально ли он думает что раз написано что файла блядь нет, то на самом деле это значит он просто неправильно попросил?

Ты как будто смотришь через мутное стекло на полуслепого полуглухого сумасшедшего, который мечется в разные стороны пытаясь по мутным образам и странным звукам собрать что-то волшебное из тумана и дождя.
Ему кричат: не тот пакет. И он бежит сломя голову по лужам собирая целофановые пакеты.
Ему кричат: не та команда, проверь там-то и там-то. Он задирает к небу невидящие глаза и пытается из камушков и веток на ощупь выложить какие-то случайные слова, смысл которых не понимает. Слова не работают, магия не получается. И он с остервенением раз за разом перекладывает палочки в надежде на чудо.
В конце концов он не выдерживает и в припадке злобы расшвыривает палочки и кучи дырявых пакетов, пинает камушки.
И с обидой и непониманием кричит во тьму консоли: ГОСПОДИ, ЗА ЧТО?
Аноним 12/11/23 Вск 12:48:14 #499 №2918649 
Если интерфейс это контракт и клиенту достаточно знать только интерфейс, чтобы сделать запрос, нормальна ли следующая ситуация: сигнатура метода в интерфейсе
public function SomeMethod();
сигнатура метода в классе, реализующем этот интерфейс:
public function SomeMethod($name="", $text="") {...};

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

Сомнение в том, что, вот клиент будет опираться на интерфейс, но в самом интерфейсе не указаны ни типы, ни параметры, ни тип возвращаемого значения.
Аноним 12/11/23 Вск 13:21:34 #500 №2918688 
>>2918649
>Сомнение в том, что, вот клиент будет опираться на интерфейс, но в самом интерфейсе не указаны ни типы, ни параметры
Очередная причина почему пхп - язык говна.

ДОЛЖНЫ быть указаны все типы у всех параметров. Если у тебя в интерфейсе указано что возвращаемое значение void, вернуть значение в имплементации у тебя физически не получится. И всякие ебанутые вопросы сразу отпадают.
Аноним 12/11/23 Вск 13:46:44 #501 №2918707 
>>2918688
Это-то понятно.
А как по-умному сделать?
Абстрактно я понимаю, что класс, реализующий определенный интерфейс, должен выполнять такие и такие методы. Если это абстракция, как я буду прописывать сигнатурку метода с указанием типов? А учитывая требование, что сигнатура из интерфейса и сигнатура из класс, реализующего этот интерфейс должны быть совместимы, приходится прописывать нужные параметры в виде значений по умолчанию.
Аноним 12/11/23 Вск 14:09:58 #502 №2918733 
>>2905684
>Для каждого правила делаем свой класс-валидатор. То есть, для проверки, что поле не пусто, один класс, для проверки, что там только цифры, другой класс и тд.

Не совсем понял тебя.
У меня есть поле name, оно должно пройти три проверки: на пустоту, на минимальное и максимальное количество символов и на то, что оно содержит только определенные символы.
Мне нужно создать три класса-правила:
1. Класс, который проверяет поле name на пустоту;
2. Класс, который проверяет количество символов поле name;
3. Класс, который проверяет качество символов поле name.
? //и, конечно, аналогично для всех остальных полей
Или же у меня должно быть только 4 класса-валидатора
(проверка на пустоту, проверка на количество, проверка на качество и проверка на уникальность емайла - которые работают по всем полям формы, кроме тех, где нужно выбирать флажок)?
//Правила...валидатора, короче, не обращай внимание на название.
Аноним 12/11/23 Вск 14:13:42 #503 №2918739 
>>2918707
>как я буду прописывать сигнатурку метода с указанием типов?
Руками. Какая-то пустопорожняя болтовня. Вот тебе конкретный пример https://3v4l.org/FcbPh . Нахера выдумывать какие-то опциональные параметры, какую-то хуйню, малафью?
Аноним 12/11/23 Вск 14:18:42 #504 №2918745 
>>2918733
А еще класс, который будет содержать ошибку валидации. Класс- exception на случай если все сломается. Класс, который будет содержать все правила валидации, проходить по ним и собирать все ошибки. И класс, который будет создавать класс, в котром будут все нужные правила валидации. Надо ведь как-то определять какие правила валидации нужны и куда там какие доступы к базам и хелперы прокидывать.
Добро пожаловать в мир ООП.
Аноним 12/11/23 Вск 14:31:31 #505 №2918762 
>>2918649

>Если интерфейс это контракт
>сигнатура метода в интерфейсе
>public function SomeMethod();

тогда

>сигнатура метода в классе, реализующем этот интерфейс:
>public function SomeMethod($name="", $text="") {...};

нарушает данный контракт, так как ничего не сказано про параметры в сигнатуре метода интерфейса.
Аноним 12/11/23 Вск 15:16:13 #506 №2918791 
>>2918649
>интерфейс это контракт
Интерфейс - абстрактное понятие. Это не фича языка. Можно писать абстрактные интерфейсы с помощью одних только функций. Они будут выполнять ту же самую функцию.

$point1 = makePoint(1, 2);

Функция makePoint является интерфейсом для абстракции точка. Нет необходимости знать как она реализована. Главное, что она моделирует точку на координатной плоскости с помощью значений координат x и y.

Допустим необходима абстракция User.

<?php
// Online PHP compiler to run PHP program online
// Print "Hello World!" message

function makeUser($name, $birthday)
{
return [
'name' => $name,
'birthday' => $birthday
];
}

function getAge($user)
{
return calculateAge($user['birthday']);
}

function isAdult($user)
{
return getAge($user) >= 18;
}

function calculateAge($birthday)
{
$secondsInYear = 31556926;
return floor((time() - strtotime($birthday)) / $secondsInYear);
}

$user1 = makeUser('Vasya', '18.05.1996');

print getAge($user1);

Вот рабочий пример https://onlinephp.io/c/b1b5d

Таким образом можно реализовать любую сложную логику.
Аноним 12/11/23 Вск 17:45:41 #507 №2919039 
>>2918739
Я думаю, что мы друг друга не понимаем.
Я пишу валидацию.
Что должен делать валидатор?
Абстрактно - взять информацию, проверить ее по своему алгоритму, сообщить результат проверки/что-то сделать с результатом проверки.
Т.е. интерфейс для классов-валидаторов будет такой:
Метод, который забирает значение, которое нужно проверить;
Метод, который проверяет по своему алгоритму;
Метод, который что-то делает с результатом проверки.

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

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

Я не считаю себя правым в этом диалоге, просто излагаю свою вкатунскую логику, чтобы опытные аноны могли указать мне на ошибки.
Аноним 12/11/23 Вск 18:35:29 #508 №2919184 
>>2918649

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

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

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

То есть, ты можешь только вызывать someMethod() без параметров и все. Передавать в него что-то ты не имеешь права.
Аноним 12/11/23 Вск 18:37:31 #509 №2919185 
>>2918688

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

Так что читай внимательнее, прежед чем что-то вякать в сторону PHP.
Аноним 12/11/23 Вск 18:39:43 #510 №2919188 
>>2918733

> 1. Класс, который проверяет поле name на пустоту;

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

Главный класс, который знает правила валидации (что к полю X надо применить правила Y и Z) как раз и будет брать нужные поля и передавать их в нужные классы.
Аноним 12/11/23 Вск 18:40:34 #511 №2919191 
>>2918762

Не нарушает, так как у аргументов есть значения по умолчанию и их можно не передавать.
Аноним 12/11/23 Вск 18:41:44 #512 №2919192 
>>2918791

> Функция makePoint является интерфейсом для абстракции точка.

Не согласен, интерфейс не содержит кода, а лишь описание функций и их параметров.
Аноним 12/11/23 Вск 18:46:23 #513 №2919195 
>>2919188
Окей, спасибо за ответ.
Аноним 12/11/23 Вск 18:47:53 #514 №2919198 
>>2919039

Идея, которую я предлагал где-то выше, заключается в том, чтобы разделить функционал "проверить данные формы" на части:

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

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

interface RuleValidatorInterface
{
public function validate($value): ?Error;
}

> Метод, который забирает значение, которое нужно проверить;

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

> Метод, который что-то делает с результатом проверки.

не нужен.

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

Тогда переделаешь код. Не надо пытаться предусмотреть все случаи на свете заранее.
Аноним 12/11/23 Вск 19:27:50 #515 №2919241 
Подскажите, как файлы передаются между серверами?
Вот что-то пришло - обработать - раздать.
По NFS сетевые папки монтируют и тупо туда сохраняют? Еще слышал что с помощью Go пишут нечто подобное. Ну и взрослые компании S3 для этого используют?
Аноним 12/11/23 Вск 19:30:55 #516 №2919244 
>>2919198
>Тогда переделаешь код. Не надо пытаться предусмотреть все случаи на свете заранее.
А как же принцип открытости-закрытости?
Аноним 12/11/23 Вск 19:33:38 #517 №2919246 
>>2919244
Мимо другой, очень гибкие системы тоже не ок, особенно там где не нужно. От случая короче.
Немчинского послушай все плейлисты по рефакторингу, там много инфы
Аноним 12/11/23 Вск 19:37:51 #518 №2919251 
adt.png
>>2919192
>Не согласен, интерфейс не содержит кода, а лишь описание функций и их параметров.
Ты не в теме. Почитай что нибудь. В СИКП это есть. Обобщенно, интерфейс - не языковая конструкция. Почитай про абстракцию данных. Конструктор, геттер, сеттер - тоже не языковая конструкция. Это все абстрации для построения АТД (абстрактных типов данных). Все это появилось задолго до появления этих языковых конструкций в языках, в том числе классов.

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

http://aliev.me/runestone/Introduction/WhyStudyDataStructuresandAbstractDataTypes.html
Аноним 12/11/23 Вск 19:43:38 #519 №2919254 
>>2919192
В продожение... Интерфейс, как видно на этой картинке >>2919251 обозначает операции. Над ядром, которое реализует тип данных. Посмотри на библиотеки. Говорят, что они имеют интерфейс. Что является их интерфейсом? Функции, которые выставлены наружу, чтобы использовать код библиотеки в других проектах. Интерфейс - операции над данными, а в конструкциях языка - просто функции.

Можно конечно из этого слепить интерфейс как языковую конструкцию, или налепить сверху классы, но это будут просто обертки. Суть не изменится.
Аноним 12/11/23 Вск 19:46:52 #520 №2919259 
image.png
>>2919241
Спросил у яндекса. А может реально по http, guzzle клиентом каким-нить и пост запросом с токеном между своими серверами? Или хуйня? Допустим видос 2гб нужно обработать
Аноним 13/11/23 Пнд 01:50:33 #521 №2919741 
>>2919185
Внимательный окурок, я конечно понимаю что ты ни на пхп ни на каком либо другом языке не пишешь.

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

Я понимаю что дохуя прошу, потому что, как выше упомянул, ты на пхп не пишешь и тебе такое тяжело.
Поэтому Вот тебе, тупорылый хуесос, разница между
"ты не имеешь права" https://3v4l.org/inEfe в говноязыке всем на твои права поебать
и
"в этом методе нет блядь аргументов" https://www.onlinegdb.com/_8IKCM2VL в нормальном языке ты действительно можешь писать open/closed код и что-то там пиздеть про солид.
Аноним 13/11/23 Пнд 02:08:52 #522 №2919761 
>>2919039
>Я думаю, что мы друг друга не понимаем.
>Я пишу валидацию.
Это я пишу. Я не видел от тебя ни одного листинга с рабочим кодом.

>Т.е. интерфейс для классов-валидаторов будет такой:
Показывай реальный код, а не маняфантазии на тему.

>то как я могу указывать типы/параметры в сигнатурах методов в интерфейсе?
Может выйти в интернет с таким вопросом? "Должны ли в интерфейсах указываться параметры функций" это на новый подход в программировании тянет не меньше. Может и в имплементациях параметры не писать? Использовать func_get_args(), будет очень гибко. Если только тип не писать, то можно вместо емэйла коннекшен к базе передать, а так вообще все что угодно в каких угодно количествах. Красота.

>Сейчас метод, который что-то делает с результатом проверки просто записывает текст ошибки
Опять без кода не понятно что происходит. "записывает"? Куда записывает? В файл? На стену?

>А что если бы завтра я хотел бы иначе что-то другое делать с результатом проверки? И параметры тогда могли бы поменяться.
Опять без кода непонятно в чем проблема. Берешь результат проверки и делаешь с ним другое. Валидатор тут причем?
Аноним 13/11/23 Пнд 08:39:11 #523 №2919843 
>>2910136
Нет, я просто макака с 2 недельным стажем
>>2910344
Спасибо, сейчас попробую
Аноним 13/11/23 Пнд 18:18:45 #524 №2920460 
Так как скрипт php запускается каждый раз на запрос клиента, как тогда сохранять стейт, если логика того требует?
Аноним 13/11/23 Пнд 19:58:12 #525 №2920579 
>>2920460
Ну хуй знает, может в специальное хранилище? Мне кажется это слишком специфическая задача, никто такое не делал никогда.
Аноним 13/11/23 Пнд 21:05:58 #526 №2920648 
Для того, чтобы скрыть .php в URL, надо будет всю логику роутинга переписывать? Грубо говоря есть /video.php, хочу чтобы было просто /video, надо будет писать какой-то главный модуль, который будет парсить url, в данном случае /video и отправлять нужному обработчику?
Аноним 14/11/23 Втр 07:19:53 #527 №2920978 
>>2920648
>надо будет писать какой-то главный модуль, который будет парсить url, в данном случае /video и отправлять нужному обработчику?
Да не, не надо.
Аноним 14/11/23 Втр 11:04:11 #528 №2921082 
РАБоты НЕТ!

Более 3 лет опыта PHPшником, одно говно только на галеры(аутстафф).
Последнее место работал на запад за евро на продукте, сейчас приходится говнище наше перебирать, делайте выводы :)

На западе вообще даже не рассматривают уже.
Не думал что скачусь до наших анальных галер опять, лол. Придётся брать что есть и попутно следующие пол-года искать нормальное что-то.
Аноним 14/11/23 Втр 11:39:18 #529 №2921112 
>>2920648

Сейчас у тебя роутингом занимается веб-сервер (Апач, например). То есть, приходит запрос /watch/video.php?id=123 и Апач вызывает скрипт watch/video.php

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

Простейший роутер пишется примерно так:

if (preg_match("!^/video/([0-9]+)$!", $path, $m)) {
$videoId = $m[1];
require 'video.php';
return;
} else ...
Аноним 14/11/23 Втр 11:40:31 #530 №2921118 
>>2920460

- в файлы
- в куки
- в сессию
- в базу данных
- в redis
- в другие хранилища
Аноним 14/11/23 Втр 13:34:54 #531 №2921373 
>>2921112
>Простейший роутер
https://www.slimframework.com/
Не изобретайте велосипеды, заебали
Аноним 14/11/23 Втр 13:44:12 #532 №2921394 
>>2921112
>>2921373
То, что надо. Спасибо.
Аноним 15/11/23 Срд 17:29:12 #533 №2923254 
Сап, для себя консольное приложение. Как вообще лучше аргументы хранить? Делать класс и объект с аргументами и передавать его в качестве свойства другим объектам, которые выполняют всю логику?3
Аноним 15/11/23 Срд 19:51:59 #534 №2923406 
>>2921082
А по деньгам предлагают хоть?
Аноним 15/11/23 Срд 20:29:57 #535 №2923442 
>>2923254
Нет.
Аноним 15/11/23 Срд 23:43:56 #536 №2923630 
class A {
private B $child;

public function __construct () {
$this->child = new B();
????????
$this->child->act();
}
}

class B {
private Cone|Ctwo $childchild;

public function act () {
$this->childchild = new ????????
}
}

Как сделать подобную фигню? Чтобы в классе A я мог указать, внутри B использовать Cone или Ctwo.
Аноним 16/11/23 Чтв 00:06:02 #537 №2923639 
>>2923630
1) У тебя B нихуя не child, наследования нет.
2) Если A знает про содержимое B, то нахуй тебе вообще посредник в виде B? Пусть будет A и содержимое.
3) Ты можешь указать что использовать буквально передав Cone или Ctwo в конструктор B или в метод act.
Аноним 16/11/23 Чтв 00:28:01 #538 №2923653 
>>2923639
1. Нужно было назвать govno и mocha, ладно.
2. Чтобы класс A не представлял из себя гигантскую портянку?
3. Как? Мне нужно именно что-то типа

$this->child->useCone();
Или там $this->child->cType("Cone");
Или как там ещё.

$this->child->act(new Cone);

Не подойдёт явно, потому что там должно быть new Cone(value), которое вычисляется в классе B. Короче, как мне сделать что-то типа

class A {
private B $child;

public function __construct () {
$this->child = new B();
$this->child->Ctype = "Ctwo";
$this->child->act();
}
}

class B {
public Ctype = "Cone";

private Cone|Ctwo $childchild;

public function act () {
$this->childchild = new {$this->Ctype};
}
}
Аноним 16/11/23 Чтв 09:12:55 #539 №2923739 
>>2923653
>Чтобы класс A не представлял из себя гигантскую портянку?
А щас там не портянка? Вся нутрянка класса B итак в A.

>потому что там должно быть new Cone(value), которое вычисляется в классе B
Так а хули ты об этом не написал?. Какие-то блядь childchild'ы какой-то блядь act.

Короче .
Ты либо рассказываешь что конкретно ты делаешь, без бессмысленных A Б В. Либо так и будешь класс из строчки создавать и портянки наматывать.
Пиздец обфускатор ебать.
Аноним 16/11/23 Чтв 09:13:26 #540 №2923740 
>>2875886 (OP)
В PHP же есть неблокирующие сокеты? Почему тогда считается и везде пишут, что в PHP нет неблокирующего ввода-вывода?
Аноним 16/11/23 Чтв 09:15:20 #541 №2923741 
>>2923254
ООП головного мозга.

>>2923630
У тебя тоже. У всех.
Аноним 16/11/23 Чтв 09:15:47 #542 №2923742 
>>2923740
Так пойди на хх и найди там вакансию с сокетами.
Аноним 16/11/23 Чтв 09:17:29 #543 №2923745 
bonobo-1.jpg
>>2923741
>php тред
>OOP
Аноним 16/11/23 Чтв 09:22:38 #544 №2923748 
>>2923742
При чем здесь вакансии? PHP язык программирования или что? Заглянул сейчас в гайд из шапки, не увидел ни слова про модель выполнения кода виртуальной машиной PHP. И в книгах об этом не пишут. По факту получается, что пхпшник даже не понимает как исполняется код. Это не программирование, а макакинг. Как без сокетов реализуешь вебсокет сервер?
Аноним 16/11/23 Чтв 09:42:41 #545 №2923766 
>>2923748
>При чем здесь вакансии?
Вакансии это места где язык используют для зарабатывания денег. Нет вакансий в которых нужны знания сокетов = никто этой хуйней не пользуется.

>Заглянул сейчас в гайд из шапки, не увидел
Гайд из шапки написан аноном за бесплатно году в 2012. Чтобы помочь другим анонам заработать копеечку. zval'ы op'коды и прочая дрисня там не нужна.

По факту получается что пхп говно язык и на это куча причин. Но ты слишком тупой жирный хуесос и кормить тебя тут не будут.
Аноним 16/11/23 Чтв 12:57:54 #546 №2923930 
Когда тредик будет перекатываться, аноны?
Аноним 16/11/23 Чтв 13:02:06 #547 №2923937 
>>2923739
Ладно, упрощу свой вопрос в 10 раз.

use Foo\Bar\MyYobaClass;
// ...
$className = "MyYobaClass";
$obj = new $className;
// PHP Fatal error: Uncaught Error: Class "MyYobaClass" not found

У меня есть варианты, кроме
$className = "Foo\Bar\MyYobaClass";
, Что мне нужно написать, чтобы вместо

use Foo\Bar\MyYobaClass;
// ...
$obj = new MyYobaClass();

Я смог

use Foo\Bar\MyYobaClass;
// ...
$className = "MyYobaClass";
$obj = new $className(); // ????
Аноним 16/11/23 Чтв 13:18:35 #548 №2923957 
>>2923937
$className = MyYobaClass::class;
Аноним 16/11/23 Чтв 13:26:12 #549 №2923970 
Screenshot 2023-11-16 at 13-25-23 phpMyAdmin.png
В Open server сталкивался кто с такой ошибкой?
Аноним 16/11/23 Чтв 13:33:23 #550 №2923994 
>>2923937
>use Foo\Bar\MyYobaClass;
>// ...
>$className = "MyYobaClass";
>$obj = new $className();

Работает, если создать класс в этом же файле
>class MyYobaClass{...}
>$className = "MyYobaClass";
>$obj = new $className();

Значит проблема именно в use, он не подтягивает из MyYobaClass из другого файла.
Попробуй использовать require вместо use.
Аноним 16/11/23 Чтв 14:14:31 #551 №2924060 
>>2923254

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

Мы делаем отдельно:

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

Эти модули не должны знать ничего про аргументы командной строки. У них есть свои настройки, и они либо передаются напрямую (если их мало) или в виде объекта настроек. Модулю все равно, откуда пришли эти настройки - из аргументов, из конфига, из переменных окружения или из базы данных. Например, для модуля скачивания можно сделать класс настроек:

class DownloadSettings
{
private int $maxSpeed;
private array $proxies;
private int $timeout;
...
}

В основной программе ты разбираешь аргументы и создаешь настройки для каждого модуля.
Аноним 16/11/23 Чтв 14:18:53 #552 №2924067 
>>2923748

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

Я думаю, что надо написать, что код выполняется последовательно, строчка за строчкой, кроме случаев ветвлений и циклов. Этого наверно будет достаточно?
Аноним 16/11/23 Чтв 14:19:31 #553 №2924069 
>>2923930

Давай еще пару дней посидим тут спокойно, и я перекачу.
Аноним 16/11/23 Чтв 14:20:55 #554 №2924072 
>>2923937

Это практически всегда плохая идея, передавать имя класса вместо объекта. Возможно, пришло время использовать какую-нибудь Фабрику тут. То есть, ты передаешь в конструктор одну из двух Фабрик, чтобы выбрать, какой объект надо создать.
Аноним 16/11/23 Чтв 14:22:12 #555 №2924073 
>>2923970

Имя пользователя либо пароль неправильные, либо в MySQL запрещен доступ для этого пользователя. Надо подсоединиться к MySQL из командной строки и просмотреть права пользователей. Если и из командной строки не подключиться, то надо сбросить пароли для root.
Аноним 16/11/23 Чтв 15:29:20 #556 №2924162 
16989539570470.mp4
>>2923937
>не надо упрощать и редуцировать, нужны детали и реальное назначение классов
>Ладно, упрощу свой вопрос в 10 раз.
Аноним 16/11/23 Чтв 17:38:02 #557 №2924331 
>>2924067
>Этого наверно будет достаточно?
Надо написать, что модель выполнения PHP-процесса отличается от модели выполнения процессов на других языках. Что PHP-процесс всегда умирает после выполнения. Что в других языках не требуется внешний процесс (Apache, Nginx, etc) для запуска виртуальной машины. И какие это дает ограничения. Вообще нужно про всю историю и подноготную PHP написать, про CGI и прочее.
Аноним 16/11/23 Чтв 17:38:47 #558 №2924332 
>>2923630
Зачем?
Аноним 16/11/23 Чтв 17:39:26 #559 №2924334 
>>2923970
Ты менял пароль? Там по умолчанию вроде пустая строка
Аноним 17/11/23 Птн 02:53:00 #560 №2924918 
Есть ли хоть одна причина, по которой я должен делать json_decode без $associative = true? Пока что попытки использовать результат в виде объекта принесли мне только проблемы.
Аноним 17/11/23 Птн 12:08:54 #561 №2925200 
json-decode.png
>>2924918
Какие проблемы?
Создаешь пустой класс. В нём описываешь все поля и типы в пхп доке. Указываешь типом декодированного объекта.
Дока по схеме есть, подсветка типов и комментов в коде есть. Автокомплит есть. Вы великолепны.

А что с массивами ебучими? Доки нет. Названия каждый раз руками писать. Опечатку никто не подсветит. Автокомплита тоже нет, писать руками обработку массива элементов на двадцать сомнительное удовольствие.
Аноним 17/11/23 Птн 13:31:50 #562 №2925364 
>>2924331

То, что ты описываешь это не "модель выполнения PHP", а лишь особенности работы PHP в составе Apache или PHP-FPM. Учебник же посвящен основам языка PHP.

> Что PHP-процесс всегда умирает после выполнения.

Любой процесс умирает после выполнения, хоть на Си, хоть на bash.

> Что в других языках не требуется внешний процесс (Apache, Nginx, etc) для запуска виртуальной машины.

В PHP ты можешь тоже сам написать сервер и не пользоваться ни Apache, ни nginx.

> И какие это дает ограничения.

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

> про CGI

CGI годов с 90-х никто уже не использует. Может, ты имел в виду FastCGI, но это совсем другой протокол.
Аноним 17/11/23 Птн 13:33:02 #563 №2925370 
>>2924918

Нету. Сам по себе stdClass абсолютно дурацкая идея и я никому не советую им пользоваться. Потому что это как массив, но без удобных функций для работы с ним.
Аноним 17/11/23 Птн 13:36:50 #564 №2925379 
>>2925200

Ты делаешь какие-то кривые костыли. Реально там возвращается объект stdClass, а ты зачем-то присваиваешь ему фейковый класс и твоя кривая IDE не видит тут ошибки. Например, если в твой класс добавить метод, то он не появится у объекта.

stdClass хуже чем массив, так как для работы с ним нет удобных функций.

Надо либо описывать структуру массива (и тогда IDE увидит нужные поля):

/**@var array { age: int, name: string ... } */

Либо использовать десериализатор, который реально преобразует JSON в нужный объект.
Аноним 17/11/23 Птн 13:38:25 #565 №2925381 
>>2925200

И еще с твоим подходом не будет работать валидация в Симфони: если ты добавишь аннотации для валидаторов в класс UserJson, то валидатор Симфони их не увидит и не применит.
Аноним 17/11/23 Птн 14:22:14 #566 №2925422 
>>2925379
>Надо либо описывать структуру массива (и тогда IDE увидит нужные поля)
Ебанько, то что ты написал это psalm формат. Phpdoc из коробки не поддерживает описания массивов.

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

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

Потому что psalm предназначен не для ОПИСАНИЯ, а для ПРОВЕРКИ. Автоматической причем. Эти комментарии очень полезны если ты используешь стат анализатор, они ГАРАНТИРУЮТ что содержимое массива именно такое как описано. Но читать их человеку неудобно и нахуй не нужно, это для машин. Да и сам pslam используют единицы.

>stdClass хуже чем массив, так как для работы с ним нет удобных функций.
И этой функцией был альберт эйнштейн?

>>2925381
>И еще с твоим подходом не будет работать валидация в Симфони: если ты добавишь аннотации для валидаторов в класс
А с массивом очень легко добавить аннотации в класс. Ты совсем ебнулся, чучело? Валидируется модель. А это обычная dto с хуй пойми чем. Вот когда из этой dto будет создаваться модель пользователя, тогда и будет валидация.
Аноним 17/11/23 Птн 16:36:59 #567 №2925702 
>>2925364
>То, что ты описываешь это не "модель выполнения PHP", а лишь особенности работы PHP в составе Apache или PHP-FPM.
Это особенность работы виртуальной машины Zend Engine. Она фактически построена на принципах работы CGI. Для запуска виртуальной машины требуется SAPI.

Интерфейс программирования серверных приложений (SAPI) — это точка входа в Zend Engine.
Цитата из исходников PHP
https://github.com/php/php-src/tree/master/sapi/embed#the-embed-sapi

Все языки общего назначения кроме PHP, запускают веб-приложения безо всяких SAPI, просто передавая на вход движку файл с кодом. Zend Engine без SAPI не работает. Он рассчитан на модель запрос-ответ, после которого процесс умирает. Поэтому приложение с каждым запросом полностью подгружается в оперативную память. Из-за чего придумали всякие костыли, чтобы хоть как-то снизить этот оверхед. Данные между веб-сервером и приложением передаются через STDIN/STDOUT.

В других языках процесс не умирает, а продолжает принимать запросы. Веб-сервер и приложение работают в одном процессе и не используют STDIN/STDOUT/

Почитай PHP Internals или послушай Дмитрия Стогова, ведущего разработчика движка, он об этом говорит.

https://wiki.php.net/internals
https://www.phpinternalsbook.com/
Аноним 18/11/23 Суб 15:26:20 #568 №2926802 
>>2925422

> ты написал это psalm формат.

Не только psalm, но и phpstan его поддерживает, и открытые PHP-серверы LSP вроде phpactor. Если твоя проприетарная IDE его не понимает, это не моя проблема.

> Phpdoc из коробки не поддерживает описания массивов.

не моя проблема.

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

В случае с десериализатором он генерирует настоящие объекты, с полями и методами.

> А с массивом очень легко добавить аннотации в класс.

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

Короче, хватит тормозить. Ты, по моему, просто не работал с десериалайзерами и не понимаешь, о чем речь.
Аноним 18/11/23 Суб 15:31:21 #569 №2926808 
>>2925702

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

> Данные между веб-сервером и приложением передаются через STDIN/STDOUT.

Еще раз говорю, CGI устарело, в php-fpm давно используют FastCGI. Почитай что-нибудь современное.

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

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

То есть, в других языках у тебя один вариант: писать свой FastCGI- сервер. В PHP у тебя выбор: либо писать свой FastCGI-сервер, либо использовать тот, что встроен в php-fpm и позволить ему очищать перемнные и память после каждого запроса, следить за таймаутом и лимитами по памяти и тд.
Аноним 18/11/23 Суб 15:33:22 #570 №2926811 
>>2925702

Даже в Википедии написано :

> В то время как CGI-программы взаимодействуют с сервером через STDIN и STDOUT запущенного CGI-процесса, FastCGI-процессы используют Unix Domain Sockets или TCP/IP для связи с сервером.

Ты опираешься на устаревшую информацию. В PHP-FPM поднимается N процессов-воркеров и Nginx распределяет между ними поступающие запросы. И никто процесс PHP после каждого запроса не завершает.
Аноним 18/11/23 Суб 15:34:19 #571 №2926814 
>>2925702

И еще скопирую для тебя из Википедии:

> FastCGI снимает множество ограничений CGI-программ. Недостаток CGI-программ — в том, что они должны быть перезапущены веб-сервером при каждом запросе, — что приводит к понижению производительности. FastCGI (вместо того, чтобы создавать новые процессы для каждого нового запроса) использует постоянно запущенные процессы для обработки множества запросов; это позволяет экономить время.
Аноним 18/11/23 Суб 15:47:21 #572 №2926834 
>>2917997
>Ну и СИКП конечно же (без шуток).
Начал с этой книги, книга ведь не о том, чтобы научить меня языку программирования лисп? Да, ведь?...
Аноним 18/11/23 Суб 16:27:26 #573 №2926903 
>>2917760
С каждой страницей мне хочется избить человека, который отвечал за всю ту воду, которая есть в книге. О своей важности-хуяжности автор мог поразмышлять в своей голове.
Аноним 18/11/23 Суб 16:36:32 #574 №2926925 
>>2926802
>десериализация в объекты лучше по этому и вот поэтому
>массивы неудобная хуета вот поэтому и поэтому
>а вот десериализаторы
Просто срыгни, попущ.
Как ты не верти сракой, а преобразование json'а в объект лучше чем в массив. Точка.
Аноним 18/11/23 Суб 19:40:10 #575 №2927174 
>>2926808
>CGI давно уже нету
Что значит нету? Принципы CGI встроены в ядро PHP. Движок PHP рассчитан на работу по модели CGI, чтобы его запускал внешний процесс веб-сервера, он отдавал результат и PHP-процесс умирал. PHP в режиме CGI по прежнему на любом виртуальном хостинге.

>ты точно так же можешь на PHP открыть порт, принять запрос и руками его распарсить и у тебя будет точно такой же сервер, как на Питоне или Руби
Не будет. В Питоне и Руби такой режим работы предусмотрен изначально, для этого есть необходимые либы. В PHP ничего кроме голых сокетов нет. К тому же процесс будет снова умирать, нужно лепить костыли.

>в php-fpm давно используют FastCGI
И что? Ядро PHP по прежнему работает по другому.

>"умирает" только PHP-код
О чем я и пишу. Движок запускается, а потом умирает. Это его модель работы. По этому причине, долгоживущие приложение создавать без костылей нельзя. Так работает только PHP.

>>2926811
Процесс PHP-FPM и процесс запущенного приложения это отдельные процессы?
Аноним 18/11/23 Суб 20:57:09 #576 №2927253 
>>2926834
Суть есть в том, что лисп даже учить не надо, он элементарный и за счет его простоты учить программированию. Если бы ты выбрал аналогичную книгу на js/python/php/c++/c/<языкнейм>, то пришлось бы сначала посвещать тебя в язык, а не суть.
Аноним 18/11/23 Суб 21:07:45 #577 №2927273 
>>2926834
Лисп это сверхвысокоуровневый язык. Не смотря на то, что программа на нем выглядит на AST. Он позволяет не думать о языке и его ограничениях, а сконцентрироваться на данных, на задаче.
Аноним 18/11/23 Суб 21:19:03 #578 №2927293 
>>2926808
Приложение запускается на каждый запрос. Это модель работы CGI. То есть главный недостаток CGI не устранен. Кроме того, PHP-FPM не развивается уже 10 лет. За это время появились высокопроизводительные интерфейсы, вроде io_uring. По этим причинам у приложений с PHP-FPM очень низкая производительность, 10k RPS недостижимая емкость.
Аноним 18/11/23 Суб 21:21:23 #579 №2927296 
>>2927293
>FastCGI снимает множество ограничений CGI-программ. Недостаток CGI-программ — в том, что они должны быть перезапущены веб-сервером при каждом запросе, — что приводит к понижению производительности. FastCGI (вместо того, чтобы создавать новые процессы для каждого нового запроса) использует постоянно запущенные процессы для обработки множества запросов; это позволяет экономить время.
Аноним 18/11/23 Суб 21:44:50 #580 №2927326 
>>2927296
После запроса процесс не умирает, но все состояние уничтожается. При следующем запросе приложение нужно заново поднимать.
Аноним 18/11/23 Суб 21:47:40 #581 №2927329 
>>2927326
Основные ресурсы тратились на создание процесса операционкой.
Аноним 18/11/23 Суб 22:28:40 #582 №2927351 
>>2927174

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

Не пиши, о чем не знаешь. Для PHP точно так же есть "либы".
Аноним 18/11/23 Суб 22:30:29 #583 №2927352 
>>2927253

Он "элементарный" только в плане минимализма синтаксиса. Во всем остальном он сложнее и неудобнее того же Питона. В Питоне ты хотя бы математические выражения можешь писать нормально и скобок сотни не надо ставить.
Аноним 18/11/23 Суб 22:32:51 #584 №2927355 
>>2927293

> 10k RPS недостижимая емкость

То же можно сказать про Ruby on Rails, например.

10k RPS чаще всего бывает в дурацких тестах, которые отдают фразу hello world. У реальных приложений немного другой профиль, и там часто 100 RPS уже проблема. Сталкивался с подтормаживаниями и в проектах Яндекса, и Сбера, а они вроде не на PHP написаны.
Аноним 18/11/23 Суб 22:34:16 #585 №2927356 
>>2927293

Ты можешь написать приложение, которое не перезапускается. С PHP у тебя есть выбор, в отличие от других языков. Если ты не осилил, как это сделать, то это проблема твоего уровня образования, а не проблема PHP.
Аноним 18/11/23 Суб 22:42:19 #586 №2927360 
>>2927293

Специально померял, страница Яндекс-Маркета с товаром грузится 230 мс, весит 2,29 Мб (ужато до 400Кб). Может, конечно, виноват мой небыстрый Интернет, ну пусть она 100 мс грузится на быстром.

Объясни мне, как Маркету обеспечить 10k RPS в таких условиях? Не в дебильном тесте на отдачу текста hello world, а в реальном коммерческом приложении? Какой язык позволит это сделать?
Аноним 18/11/23 Суб 23:52:29 #587 №2927412 
>>2927329
Типа перезапуск приложения на каждом запросе это мелочи? К сожалению, сообщество у PHP соответствующее языку.

>>2927351
Какие?

>>2927355
Так это целые рельсы не могут 10k RPS, а тут голый PHP-FPM не может. Позорище. Последний коммит 10+ лет назад был. Давно пора выкинуть это легаси.

>>2927356
С помощью чего?

>>2927360
Это не аргумент, это их проблемы.Емкость приложения в 10k давно уже стандартное требование. Это вообще мелочи. Например, uwebsockets может тянуть 1 миллион нагруженных соединений на одном ядре. Так что 10k это детский лепет. А FPM и того не может.
Аноним 19/11/23 Вск 00:22:46 #588 №2927453 
>>2927412
Вот что бывает, когда совершенно не разбираешься в вопросе.
Аноним 19/11/23 Вск 00:45:40 #589 №2927486 
>>2927412
>Емкость приложения в 10k давно уже стандартное требование
Какого приложения? От кого требование? Мудила, ты понимаешь что разные приложения делают разные вещи на разном железе? Если твое приложение, например, картинки форматирует, то ты хоть обосрись, а rps от затраченного процессорного времени зависеть будет. Если процессор тянет одновременную обработку только ста картинок, то хуй тебе в нос, а не 10к rps.

>может тянуть 1 миллион нагруженных соединений на одном ядре
Куда тянуть? Куда тянуть, сука ты тупая? Какая нахуй разница сколько там соединений если ядро загружено на сто процентов и один хуй процессор все это переварить не может? Какая нахуй разница сколько там соединений встало колом? Это просто означает что вместо того чтобы обслужить сколько можешь по очереди, ты заставляешь весь миллион пользователей сидеть ждать весь миллион.
Аноним 19/11/23 Вск 01:01:51 #590 №2927492 
>>2927486
Говна кусок
Аноним 19/11/23 Вск 01:04:24 #591 №2927496 
>>2927486
>процессор все это переварить не может
Тупой говна кусок
https://github.com/uNetworking/uWebSockets.js
https://unetworkingab.medium.com/millions-of-active-websockets-with-node-js-7dc575746a01

Миллион работающих соединений. Это сетевой стек, на котором работают крупные мировые биржи.
Аноним 19/11/23 Вск 01:05:16 #592 №2927498 
>>2927453
Ты так и будешь искать оправдания или что?
Аноним 19/11/23 Вск 01:14:45 #593 №2927504 
>>2927486
Вебсокет сервер в Bun построен на uwebsockets, говна ты кусок.
https://bun.sh/docs/api/websockets
Аноним 19/11/23 Вск 09:39:54 #594 №2927653 
>>2927496
>>2927504
Кончелыга, никто не сомневается что твоя js дрисня существует. И никто не сомневается что сами по себе сокеты не грузят проц на сто процентов.

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

А по поводу "мировых бирж". Смешная "маленькая" московская биржа, которую кастрировали и превратили в местную "кухню" хостися в "двух залах по 72 стойки серверов, 500м²". Макака тупорылая, ты со своей ссылкой на "6-year-old laptop" в этом зале заблудишься и умрешь от голода и холода.
Аноним 19/11/23 Вск 15:19:44 #595 №2928194 
>>2927653
Обосрался, говнюк, а теперь оправдываешься. Это не просто вебсокеты, а работающие вебсокеты. Код в открытом доступе, запусти и покажи если не так. В противном случае заткнись.
Аноним 19/11/23 Вск 15:27:27 #596 №2928212 
>>2927653
uWebsockets один из самых известных и топовых проектов на C++. А ты просто кукарекаешь.
https://github.com/uNetworking/uWebSockets
Аноним 19/11/23 Вск 15:56:27 #597 №2928296 
>>2928194
>Это не просто вебсокеты, а работающие вебсокеты.
А можно пример "не работающих" вебсокетов?
Аноним 22/11/23 Срд 05:24:35 #598 №2932074 
>>2906282
>>2906199
А куда вкатываться тогда, по-вашему?
Аноним 22/11/23 Срд 07:07:54 #599 №2932095 
>>2875886 (OP)
На Битриксе всегда потогонка ебаная? Вкатился пару месяцев назад что-то обомлел. Задачи заранее оценены лидом - 5 часов, 7 часов и т.д. Я не укладываюсь совсем, могу несколько дней просидеть, из-за этого куча стресса.
Аноним 22/11/23 Срд 13:30:05 #600 №2932373 
>>2932074
Да не слушай их, есть в пхп релокейт через любую галеру, и пхп это база веб-разработки.
Аноним 22/11/23 Срд 13:57:38 #601 №2932410 
>>2932074
1) Фронтенд. Знать и учить надо гораздо меньше. А вакансий больше. Потому что вротеэнд нужен для любого языка. Сейчас даже для десктопных приложений js используется, даже для игр.

2) Мобильная разработка. Рисуешь экранчики и никто не ебет тебя солидами хуелидами на собесах. А платят гораздо больше чем за пхп код.

3) Нормальные энтерпрайз языки. Шарп, жаба и производные. Будешь рисовать те же опердни для корпоратов, только за гораздо больший прайс.
Аноним 22/11/23 Срд 14:44:32 #602 №2932476 
Переходите пожалуйста в новый тред: >>2932466 (OP)

Этот тред уезжает в архив. Не забывайте свои вещи в вагоне.
Аноним 30/11/23 Чтв 07:01:10 #603 №2943404 
Зашел на flru, все заказы разные. Это же какой блядь объем знаний нужен чтобы там хоть что то взять? Это пиздец
Opencart Аноним 07/12/23 Чтв 15:44:27 #604 №2953970 
image.png
Добрый день, пользуюсь Opencart 2.3, поставил модуль на минификацию скриптов и стилей, а он работает через event, изначально триггерился от пары контроллеров, а хотелось бы от одного - header, но при таком раскладе выдаёт ошибку, я примерно понимаю с чем она связана, но не понимаю как её исправить.
comments powered by Disqus

Отзывы и предложения