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

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

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

В нашем треде отвечают почти на все вопросы, только бампайте каждые 5 дней.

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

Предыдущий тред был тут: >>1511146 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (там есть поиск, так что можно легко найти обсуждение какой-то задачи или ответы на свой старый пост) или ищутся в гугле по словам "клуб изучающих php" и в архиваче.

Мейлач лежит? Есть запасной тред на доброчане: /s/res/23225.xhtml#i46467

Форматируй свой код, если хочешь, чтобы его читали (как, написано во втором посте).

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

С чего начать

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

Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Visual Studio Code, Netbeans PHP или PhpStorm (с ним будет удобнее).

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

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

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

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

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

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

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

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

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

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

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

Что почитать

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

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

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

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

- Почему PHP? Потому что вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
grammar.png56 Кб, 500x644
2 1552980
Давайте будем писать код не как попало, а аккуратно. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть. Если каждый будет оформлять код как хочет, будет бардак.

Если тебе лень выравнивать код руками, закачай его на http://beta.phpformatter.com/ и нажми «format». Робот исправит выравнивание и отступы в мгновение ока (да, прогресс не стоит на месте). Если ты используешь мощную IDE вроде PhpStorm, там тоже есть функция форматирования кода.

Горячие клавиши для форматирования кода в разных IDE: https://gist.github.com/codedokode/8759492

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

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

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

PSR-1 (рус.): https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2 (рус.): https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md
PSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
3 1552992
Мёртвый язык.
4 1553002
Раньше писал на Yii2 и в ус не дул, а теперь перешел на другую работу, где проект - динозавр с лапшичным кодом с скриптами на 10 экранов.
Как в этом адовом говнокоде соорудить ООП, валидацию форм и ORM?
Алсо там даже Композер не юзается, нет автозагрузки классов с неймспейсами..
5 1553004
>>552992
Не мертвый. Просто о чем говорить когда и так все всем известно, Беня!
6 1553011
>>553002
Никак. Есть более срочные задачи. Вот последнии правки ага
7 1553072
Кто-то уже юзает 7.4?
8 1553080
>>553072
Когда запилят

fn($var) => {
expr1;
expr2;
return expr3;
}

тогда приходите
10 1553403
>>552992
Мертвый тред, мертвого языка
913-1181 11 1553497
Ответы на посты из утонувшего треда, его можно найти в архиве или на phpclub.tech

>>1552283



> такие абстракции вообще нормально делать или можно как-то лучше? https://pastebin.com/4i0YJ2C3



Нет, это неправильный подход. Если у тебя есть "обычная" и "ленивая" (что бы это не значило) книга, то они должны реализовывать один интерфейс BookInterface, но по-разному. То есть в "обычной" книге метод getChapters() делает что-то одно, а в "ленивой" - другое. И метод getChapters() находится в "книге", а не снаружи её.

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

У тебя это не выполняется. Ты вручную проверяешь, какой интерфейс реализует объект. А зачем тебе вообще интерфейсы? Что тебе мешает проверять сразу имя класса? Если задачу можно решить простым кодом, не надо в него добавлять интерфейс просто "чтобы был". Должна быть причина для его добавления.

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

>>1549188



> как сделать самопальный MVC?



Можешь взять за основу урок https://github.com/codedokode/pasta/blob/master/arch/mvc.md
Ответы на посты из утонувшего треда. 12 1553498

>>1551598



> Я не создам сто методов в ReportsController.


> Я создам сто методов в ClassGenerator. Ну или как то опишу один метод ClassGenerator максимально под общий случай запроса.



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

Плюс, например, в том, что мы отвязываем отчет от контроллера, от $_GET/POST и можем генерировать его программно из командной строки, например. Также можно отделить генерацию данных от представления, это позволит отображать данные отчета в разных видах: HTML, PDF, XLSX, JSON итд.

$r1 = new Report1(...);
$data1 = $r1->generate();
$xls = $xlsView->render($data1, $r1->getHeaders()); // или $xlsView->render($r1), или даже $r1->renderXls()

$r2 = new Report2(...);
$data2 = $r2->generate();

>>1551369



> на симфони скорее всего стоит доктрина которая нифига не Post.find_by, там придеться попотеть, но в принципе всё делается как на скринах в репе.



В Доктрине это пишется как $em->getRepository(Post::class)->findBy(...)
13 1553501

>>1549619



>> В "условии" можно объединять условия с помощью операторов && (и) и || (или)


> А где такие тонкости узнать можно?



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

Операции сравнения (<, >, ==, !=, ===, !==, <=, >=) возвращают булево значение. Например, 5 > 2 вернет true, а 5 == 6 вернет false. И когда ты пишешь if ($x == 5) то выражение в скобках возвращает true/false, а if в зависимости от этого выполняет или не выполняет код.

Проверить это можно командой var_dump, например: var_dump(5 > 2) выведет true.

Операторы вроде && или || принимают 2 булевых значения и возвращают новое. && вернет true, только если И справа, И слева от него true (а иначе он вернет false). || вернет true, если хотя бы справа ИЛИ слева есть true.

Оператор ! (НЕ) меняет значение на противоположное: !(true) дает false.

Например, var_dump(false && true) выведет false.

Почитать про булеву логику можно поиском по этому слову, а также тут:

- https://www.php.net/manual/ru/language.operators.logical.php
- https://www.php.net/manual/ru/language.operators.comparison.php
- http://www.mir-koda.ru/full_leson.php?id=7
- https://ru.wikipedia.org/wiki/Логический_тип
- https://ru.wikipedia.org/wiki/Булева_алгебра (сложными словами)
- https://inf1.info/logic

В общем, гугли и задавай вопросы.
13 1553501

>>1549619



>> В "условии" можно объединять условия с помощью операторов && (и) и || (или)


> А где такие тонкости узнать можно?



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

Операции сравнения (<, >, ==, !=, ===, !==, <=, >=) возвращают булево значение. Например, 5 > 2 вернет true, а 5 == 6 вернет false. И когда ты пишешь if ($x == 5) то выражение в скобках возвращает true/false, а if в зависимости от этого выполняет или не выполняет код.

Проверить это можно командой var_dump, например: var_dump(5 > 2) выведет true.

Операторы вроде && или || принимают 2 булевых значения и возвращают новое. && вернет true, только если И справа, И слева от него true (а иначе он вернет false). || вернет true, если хотя бы справа ИЛИ слева есть true.

Оператор ! (НЕ) меняет значение на противоположное: !(true) дает false.

Например, var_dump(false && true) выведет false.

Почитать про булеву логику можно поиском по этому слову, а также тут:

- https://www.php.net/manual/ru/language.operators.logical.php
- https://www.php.net/manual/ru/language.operators.comparison.php
- http://www.mir-koda.ru/full_leson.php?id=7
- https://ru.wikipedia.org/wiki/Логический_тип
- https://ru.wikipedia.org/wiki/Булева_алгебра (сложными словами)
- https://inf1.info/logic

В общем, гугли и задавай вопросы.
14 1553502

>>1549328



> Вопрос: можно пне по-умолчанию считать, что у пользователя включен джаваскрипт? Потому что половина функционала типа перетаскивание вопросов, визуальные редакторы работают на джаве. В крупных конторах предъявляют требования из разряда "САЙТ ОБЯЗАТЕЛЬНО ДОЛЖЕН РАБОТАТЬ БЕЗ ДЖАВЫ И ОТОБРАЖАТЬСЯ В ИЕ 6 !!"



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

>>1545313



> Еще непонятным остается следующее - почему первые фигуристые скобки указывают на вторые в конце, а вторые - наоборот?



У тебя там лишняя точка с запятой после for():

for (....); { ... }

Это ошибка, так как точка с запятой заканчивает for, и скобки уже не относятся к нему и их содержимое выполняется просто один раз после выполнения цикла, а не как часть цикла.
15 1553503

>>1544366



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


> Сайт развернут на хостинге бегета. Использую стандартный свифт-мейлер, встроенный. Прописал пароли в parameters.yml.


> Вопрос первый: почему у меня соединение не подтверждено? Я пароль/логин от хостера ввел, сам в свою почту зайти могу, надо в parameters.yml дополнительные параметры добавлять?



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

Возможно, что у твоего хостера нельзя отправлять через SMTP, а только стандартной командой mail().

Swiftmailer умеет слать как через SMTP, так и через mail() если я не путаю.

> Вопрос второй: а я могу тупо вместо смтп.бегет.ком вставить свою яндексовскую почту с логином и паролем? Так может прокатить?



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

> Вопрос третий: кого мне вообще тормошить? Провайдера/хостера? Просто если я обычную библиотеку типа PHPMailer вручную подключаю контроллеру, то так все отправляется. А системной почтой симфони 3.4 не отправляется. Куда копать-то?



Смотреть админку хостера, информацию в FAQ и в помощи.
16 1553504

>>1544069



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


Подскажите что почитать в общем.

Основы использования консоли в Линукс. Потоки ввода-вывода, stdin, stdout, stderr, перенаправление ввода-вывода. Код завершения (код выхода).

Далее мануал https://www.php.net/manual/ru/features.commandline.php

>>1543949



> Не понимаю как должен работать класс аутентификации Auth. И гугл ничего толкового не выдаёт, кроме документации к ларавель и чего-то древнего.



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

- пометить пользователя как залогиненного под аккаунтом X (по сути, установить ему куки)
- разлогинить пользователя (удалить куки)
- определить, залогинен ли текущий пользователь, если да, под каким аккаунтом (проверить его куки)

Заметь, что здесь функции только для управления куками и состоянием залогиненности, и нет никаких форм логина, регистрации, восстановления пароля. Это ответственность других классов, контроллеров, которые будут показывать и проверять формы, создавать аккаунты, и залогинивать/разлогинивать пользователя с использованием класса Auth.

Так у нас получается четкое разделение ответственности:

- класс управления залогиненностью Auth
- класс управления пользователями UserManager (создание, удаление, проверка логина/пароля, генерация и проверка кода восстановления пароля)
- контроллеры форм логина, регистрации, восстановления пароля
17 1553505

>>1543797



> Код: echo "$dollars долларов можно обменять на {$x * $y} рублей"


> А что с ними, куда пихать? Ругается. Зато с одной фигуристой скобкой не ругается, хотя нигде раньше ее не писал.



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

Маунал: https://www.php.net/manual/ru/language.types.string.php#language.types.string.parsing

>>1543434



> Пытаюсь в задачу W2 из гайда


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



Умножать нельзя внутри двойных кавычек. Снаружи - можно, например:

$x = $y * $z;
echo "x = $x\n";

>>1542931



> Я правильно понял, что PHP FastCGI работает только с Apache с помощью mod_fastcgi, а для Nginx есть только реализация FastCGI в виде PHP-FPM?



Нет. Если ты хочешь использовать протокол FastCGI, то ты запускаешь PHP-FPM и он готов принимать запросы по FastCGI. Слать их можно либо из нгинкса встроенными средствами, либо из Апача с помощью mod_fastcgi, хотя нгинкс тут справится явно лучше.
18 1553507

>>1542610



> Сап пхпч. Что за (new static) и (new static($arg)). Кто может расшифровать?



static - это ссылка на класс текущего объекта. То есть, если эта строчка написана в методе, который вызван на объекте класса Some, то это создаст объект класса Some.

Если написано new self - то это создаст объект того класса, внутри которого написана эта строчка, а вот static создаст объект того класса, на котором вызван метод. Разница проявляется при использовании наследования.

class A {
public function x() {
new self; // Создаст объект класса A (и выкинет, никуда не сохранив)
new static; // Создаст объект A или его наследника
}
}

class B extends A {}

$b = new B;
$b->x(); // создает объект A и объект класса B

$a = new A;
$a->x(); // создаст 2 объекта A

К "статическим" функциям или классам это не имеет отношения.

>>1542561



> А где-нибудь есть список фреймворков?



Нет, но можно погуглить.
18 1553507

>>1542610



> Сап пхпч. Что за (new static) и (new static($arg)). Кто может расшифровать?



static - это ссылка на класс текущего объекта. То есть, если эта строчка написана в методе, который вызван на объекте класса Some, то это создаст объект класса Some.

Если написано new self - то это создаст объект того класса, внутри которого написана эта строчка, а вот static создаст объект того класса, на котором вызван метод. Разница проявляется при использовании наследования.

class A {
public function x() {
new self; // Создаст объект класса A (и выкинет, никуда не сохранив)
new static; // Создаст объект A или его наследника
}
}

class B extends A {}

$b = new B;
$b->x(); // создает объект A и объект класса B

$a = new A;
$a->x(); // создаст 2 объекта A

К "статическим" функциям или классам это не имеет отношения.

>>1542561



> А где-нибудь есть список фреймворков?



Нет, но можно погуглить.
19 1553508

>>1542550



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



Ищи постепенно. Сначала поставь в начало index.php что-то вроде die('End'); и посмотри - есть редирект или нет? Если есть - он до index.php (в настройках веб-сервера, htaccess итд), если нет - после. Если после, то поставь die подальше и снова посмотри. И так пока не найдешь место.

>>1542298



> Да я всё пытаюсь вот такую картинку нарисовать через svg



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

>>1542278



> а как на винде запустить файл? (PHP файл к консоли)



Урок есть: https://github.com/codedokode/pasta/blob/master/soft/cli.md
20 1553509

>>1541367



> Работяги, как вы начинали писать на фреймворке? Просто когда начинаю писать - хочется закрыть и сижу афк. Не важно какой фреймворк. Без него почему-то и желание есть.



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

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

Ах да, перед этим надо выучить ООП, если ты его не знаешь, изучить DI и ORM. Что-то по этим темам есть у меня в гитхабе: https://github.com/codedokode/pasta/

>>1541124



> Ошибка при попытке сделать composer install: какой-то файл с гитхаба не удалось загрузить из-за ошибки 404 Not Found



Ссылка на репозиторий неправильная. Скопируй правильную из кнопки "clone this repository" с методом HTTPS на гитхабе.
21 1553625
>>553080

Нафига, если есть обычные коллбеки?
22 1553630
>>553625
Коряво

array_map(function($item) use($someVariableName1, $someVariableName2, $someVariableName3, $someVariableName4) {
return array_map(function($item) use($someVariableName1, $someVariableName2, $someVariableName3, $someVariableName4) {
.....
}, $item))
}, $array);
image.png50 Кб, 749x430
23 1553913
Сап, есть простой код для отправки данных из формы на почту. Как сделать, чтобы он отправлял изображение из этой же формы? Текст отсылает нормально.
В форме стоит enctype="multipart/form-data".
24 1553921
>>553080

Это не нужно. Короткие стрелочные функции нужны для использования в качестве коллбеков в array_map, array_filter и тд.

А длинные стрелочные функции, как правило, не нужны. А если нужны - их можно писать через function. Я видел, как в JS пишут в стиле

const fn = () => {

}

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

function x() {

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

В общем. я был бы против того, чтобы тянуть идиотизм из JS в PHP. Правильно сделали, что разрешили только короткие стрелочные функции.
25 1553923
>>553921

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



Как ты относишься к linq?
26 1553938
>>553921
Пиздос
array_map(function($item) use($someVariableName1, $someVariableName2, $someVariableName3, $someVariableName4) {
op1($someVariableName1, $someVariableName2, $someVariableName3, $someVariableName4);
op2($someVariableName1, $someVariableName2, $someVariableName3, $someVariableName4);
return array_map(function($item) use($someVariableName1, $someVariableName2, $someVariableName3, $someVariableName4) {
op3($someVariableName1, $someVariableName2, $someVariableName3, $someVariableName4);
op4($someVariableName1, $someVariableName2, $someVariableName3, $someVariableName4);
}, $item));
}, $array);
1577048015.jpg40 Кб, 500x353
27 1554333
Охайо, няшки пэхапэшники.
На связи кунец 19 lvl.
Нет знаний в математике/английском.
Нет опыта в программировании от слова совсем.
По урокам в шапке треда дошёл до массивов за 7 дней, ленивых дней, если быть правдивым. Задачки все решал, сейчас более-менее свободно играюсь с условиями/переменными/циклами/массивами, стараюсь писать код красиво и понятно.
Недавно вот глянул, сколько нужно знать джуниору на пхп и просто сдох нахуй - невероятное количество информации, просто невероятное. А я всё же считаю себя тупеньким, знаний даже математики хватает на третий класс где-то, лол.
Итак, господа хорошие - за год/полтора я смогу дойти до уровня околоджуна, чтоб устроиться хотя бы за 30к? Не в ДС, но миллионик
Или нахуй это не нужно, и с моими реально нулевыми знаниями уйдёт куда больше времени и в целом я хуй анимешный, которому лучше в петлю залезть?
Без злобы, без доброты, просто скажите как есть. Стоит ли в эту клоаку лезть, или только время зря потеряю?
До джуна даже без JS нужно учить дохуя чего, меня это пиздец демотивирует.
Так ладно бы, если знал матан или английский - так и этого не знаю. Мозгов как у хлебушка.
В общем - выносите приговор, анончики. Пиздец мне или не пиздец?
А если не пиздец - посоветуйте пожалуйста если желание есть - хорошие методы учёбы, какие-нибудь секретики, или ещё что-то.
Жить хочется, устроиться хочется чтоб опыт побыстрее начать бить, но как только понимаю сколько всего учить придётся, и смогу ли выучить.. не знаю, в общем.
Посоветуйте что делать, в общем. Добра.
28 1554341
>>554333
пыха давно умерла
просто катись в жс
29 1554387
АААААА, горю... болит.

Короче, надо отправлять емейл. Юзаю PHPMailer.
В качестве емейла отправителя зарегана мылосру почта (долбики в гугле не могут нормально мультиакк сделать, я зае* переключать левые почты)

В моем локальном WAMP все работает зашибись (письма приходят всё ок):
$mail->isSMTP();
$mail->Host = 'ssl://smtp.mail.ru';
$mail->SMTPAuth = true;
$mail->Username = 'хуйнаWb'мылоANUSmailPUNCTUMru';
$mail->Password = 'хуйпароль';
$mail->SMTPSecure = ENCRYPTION_STARTTLS;
$mail->Port = 465;
$mail->SMTPSecure = 'SSL';
$mail->setFrom('хVj'уйнамылоANUSmU\\ailPUNCTUMr.C"u', 'хуйнамыло');
$mail->addAddress($email);
$mail->CharSet = "utf-8";
$mail->isHTML(true);
$mail->Subject = 'Вам посылка';
$mail->Body = 'Но я ее вам не отдам';
$mail->send();

Заливаю на помойного хостера, не работает:
2019-12-23 06:31:50 SMTP ERROR: Failed to connect to server: Network is unreachable (101)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Чё делать? куда копать? сроки жмут, пердак горит, тяги хватит до луны.
29 1554387
АААААА, горю... болит.

Короче, надо отправлять емейл. Юзаю PHPMailer.
В качестве емейла отправителя зарегана мылосру почта (долбики в гугле не могут нормально мультиакк сделать, я зае* переключать левые почты)

В моем локальном WAMP все работает зашибись (письма приходят всё ок):
$mail->isSMTP();
$mail->Host = 'ssl://smtp.mail.ru';
$mail->SMTPAuth = true;
$mail->Username = 'хуйнаWb'мылоANUSmailPUNCTUMru';
$mail->Password = 'хуйпароль';
$mail->SMTPSecure = ENCRYPTION_STARTTLS;
$mail->Port = 465;
$mail->SMTPSecure = 'SSL';
$mail->setFrom('хVj'уйнамылоANUSmU\\ailPUNCTUMr.C"u', 'хуйнамыло');
$mail->addAddress($email);
$mail->CharSet = "utf-8";
$mail->isHTML(true);
$mail->Subject = 'Вам посылка';
$mail->Body = 'Но я ее вам не отдам';
$mail->send();

Заливаю на помойного хостера, не работает:
2019-12-23 06:31:50 SMTP ERROR: Failed to connect to server: Network is unreachable (101)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Чё делать? куда копать? сроки жмут, пердак горит, тяги хватит до луны.
30 1554393
>>554387
Может хостер блокирует письма?
31 1554418
>>554387

>2020


>$mail->isSMTP();


>$mail->Host = 'ssl://smtp.mail.ru';


>$mail->SMTPAuth = true;


>$mail->Username = 'хуйнамылоANUSmajvxilPUNCTUMr@zbu';


>$mail->Password = 'хуйпароль';


>$mail->SMTPSecure = ENCRYPTION_STARTTLS;


>$mail->Port = 465;


>$mail->SMTPSecure = 'SSL';


>$mail->setFrom('хуйна*8cмылоANUSmaA'nilPUNCTUMrH/ju', 'хуйнамыло');


>$mail->addAddress($email);


>$mail->CharSet = "utf-8";


>$mail->isHTML(true);


>$mail->Subject = 'Вам посылка';


>$mail->Body = 'Но я ее вам не отдам';


>$mail->send();

32 1554451
>>553498
>>553501
спасибо
33 1554452
>>553503
Спасибо, Оп
34 1554454
>>553913
а ты можешь не отправлять саму картинку, а ссылку на нее? Типа картинка лежит у тебя, а в письме делаешь ссылку вида <img src="путь к моей картинке" /> Так же наверное тоже будет работать и письмо меньше весить будет
35 1554460
>>554333
Делай уроки опа. Там очень хорошо продумано:
-Сначала ты изучаешь простой синтаксис
-Потом делаешь простой сайт
-Потом делаешь простой сайт по правилам - с отловом исключений, проверкой форм отправки и прочее
-Потом используешь маленький фреймворк и понимаешь его преимущества, потому что он за тебя уже решает часть того, что ты раньше руками делал
-Потом ты используешь большой фреймворк, где вообще все за тебя делается

Так что если дойдешь до последней стадии, то там за тебя фреймворк основную работу делает, ты сам пишешь пару строчек. Самое трудное - это начать, а потом все легче и легче.
За год легко до джуна дойдешь на одних этих уроках. Я сидел пять лет дулбаебом, делал сайты на штмл, а тут за пол-года уроков понял больше, чем за все прошедшее время.
Если посмотришь несколько фреймворков, то поймешь, что все они похожи. Это как с языком - вот учишь ты английский, тебе непривычно, потом пошел учить немецкий - а там все тоже самое, те же определенные/неопределенные артикли, так же вопросительные предложения строятся и так далее. То-есть выучил один - уже на 80% знаешь все остальные. Главное уроки делай оповы, тут актуальное по крайней мере.
Про мертвую пшп не слушай, большинство вакансий на нее. Ну и, на крайний случай, изучив пшп ты влегкую перекатишься на другой язык. Все тоже самое, те же конструкции
sage 36 1554829
>>554460
Пиздец жирнота. Ты охуел просто..
37 1554886
аноны, помогите нюфагу. нужно запилить компонент для битрикса, внутри которого еще будут вложены четыре компонента. как это сделать то? могу ток с одними компонентами работать если что, без вложенности, потому что это пока для меня сложна
38 1554914
>>554333
Имею похожие данные, лишь лвл чуть больше, две недели как занимаюсь по задачам опа. Секрета тащемто никакого нет, старайся заниматься как можно больше заданий, если че непонятно - гугли, пытайся работать с информацией. если не запоминаешь - конспектируй, еще советую распечатать роадмапы roadmap.sh, примеры вакансий на жунов (и зп!) - чтобы это все висело перед глазами и не забивал заниматься.
39 1555170
Поясните за знание JS для PHP программиста. Его нужно знать на таком же уровне, как и PHP? Или можно по верхам пробежаться и этого будет достаточно?
40 1555176
>>555170
Попробуй сделать форму загрузки картинки через пост, чтобы валидация была на клиенте, запрос на клиенте, и клиент переделывал файл из jpeg png bmp в base64 строку. Вот примерно такой уровень должен быть, на язык похрен, но какую-то задачу обработки данных и вызова чего-то на клиенте должен сделать
41 1555213
>>554886
Сделай модуль с несколькими компонентами, а лучше не имей дел с битриксом
42 1555239
Люди, помогите. Я не знаю как сделать отправку электронной почты.

Что мне надо - надо отправить письмо с вложениями. Так как я нуб и не шарю, я искал готовые решения - увидел PHPMailer. написал такой код:
$mail->SMTPDebug = 4;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'почтiHZаANUSgmail9^kPUNCTUMcoUMMm';
$mail->Password = 'пароль';
$mail->SMTPSecure = ENCRYPTION_STARTTLS;
$mail->Port = 587;
$mail->setFrom('436h2R46ANUSgmailU3@PUNCTUMc=~6om', '56756757');
$mail->addAddress($email);
$mail->isHTML(true);
$mail->Subject = '123';
$mail->Body = '456';
$mail->send();

(да, я вчера уже спрашивал, но все молчат).

А оно мне пишет:
2019-12-23 23:35:01 Connection: opening to smtp.gmail.com:587, timeout=300, options=array()
2019-12-23 23:35:02 Connection failed. Error #2: stream_socket_client(): unable to connect to smtp.gmail.com:587 (Network is unreachable) [/home/PHPMailer/SMTP.php line 349]
2019-12-23 23:35:02 SMTP ERROR: Failed to connect to server: Network is unreachable (101)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

(при этом на локальном все нормально отправляет, именно на хостере такое)

От отчаяния я решил вообще проверить отправку почты без ничего:
mail($email, "Загаловок", "Текст");
И вот это работает... но я не хочу ебаться с байтоебством перегонки вложений и кодировками - меня просто пугают эти примеры.
Я просто хочу отправить это ебучее письмо

Подскажите решение - может есть что готовое, которое бы работало через mail()
42 1555239
Люди, помогите. Я не знаю как сделать отправку электронной почты.

Что мне надо - надо отправить письмо с вложениями. Так как я нуб и не шарю, я искал готовые решения - увидел PHPMailer. написал такой код:
$mail->SMTPDebug = 4;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'почтiHZаANUSgmail9^kPUNCTUMcoUMMm';
$mail->Password = 'пароль';
$mail->SMTPSecure = ENCRYPTION_STARTTLS;
$mail->Port = 587;
$mail->setFrom('436h2R46ANUSgmailU3@PUNCTUMc=~6om', '56756757');
$mail->addAddress($email);
$mail->isHTML(true);
$mail->Subject = '123';
$mail->Body = '456';
$mail->send();

(да, я вчера уже спрашивал, но все молчат).

А оно мне пишет:
2019-12-23 23:35:01 Connection: opening to smtp.gmail.com:587, timeout=300, options=array()
2019-12-23 23:35:02 Connection failed. Error #2: stream_socket_client(): unable to connect to smtp.gmail.com:587 (Network is unreachable) [/home/PHPMailer/SMTP.php line 349]
2019-12-23 23:35:02 SMTP ERROR: Failed to connect to server: Network is unreachable (101)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

(при этом на локальном все нормально отправляет, именно на хостере такое)

От отчаяния я решил вообще проверить отправку почты без ничего:
mail($email, "Загаловок", "Текст");
И вот это работает... но я не хочу ебаться с байтоебством перегонки вложений и кодировками - меня просто пугают эти примеры.
Я просто хочу отправить это ебучее письмо

Подскажите решение - может есть что готовое, которое бы работало через mail()
43 1555301
>>555213

>не имей дел


была бы такая возможность то уж давно бы

>модуль с несколькими компонентами


то есть мне еще самому модуль надо запилить чтобы эту хуйню реализовать?)))
44 1555380
>>555301

> была бы такая возможность то уж давно бы


Это самооправдания. Рынок айти огромный, вакансий кучи в любом Подзалупинске, не говоря уже про удалёнки. Ларавел, симфони, чего только нет.
Нет уж, если ты сидишь в говне на битриксе - значит, тебя это полностью устраивает и ты именно этого и достоин. Туда тебе тогда и дорога.
изображение.png1 Кб, 292x78
45 1555411
>>555380

>Рынок айти огромный, вакансий кучи в любом Подзалупинске


Может быть мне не повезло или искать не умею, но дела обстоят так - 4 вакансии для жуниоров, с#, qa, сисадмин, 1с, на другом сайте есть еще фулстак.

мимо
46 1555441
>>555411
Ищи во-первых на нескольких площадках, не зацикливайся об одной единственной.
Во-вторых, ищи не по слову Junior, а по стеку, например, PHP. Там могут быть разные варианты: стажёр, новичок, джуниор, junior, младший разработчик и так далее.
В-третьих, не стесняйся писать на миддловые вакансии. Так и говори: "да, я джуниор, но я соответствую вашей вакансии на 90%, вот у меня есть примеры работ и я готов учиться и вкалывать", запросто могут решить взять толкового джуна из расчёта, что быстро вырастешь и закроешь миддловую позицию. Плюс спрашивай знакомых, может кто ищет джуна. Плюс, пиши в рекрутинговые агенства, какие-то вакансии могут быть размещены у них, не попадая на hh.
Короче, не сиди на попе ровно, а мониторь рынок труда, если хочешь найти что-то стоящее.
47 1555453
>>555441
Ну не знаю, я не тот анон и из ДС2, но тут кажется адекватных вакансий штук 10-20 по любому бэкенд стэку на джунов, остальное это либо бред, либо нерелевантно. Фронты тоже не то что в полном шоколаде, на джуниоров там вечно ищут скорее версталу за 20к, нормальных вакансий типа фронт реакт/вью 60к или хотя бы 40 не так и много. Это если о хх.ру, через другие каналы больше, конечно.
48 1555471
>>555453

>но тут кажется адекватных вакансий штук 10-20 по любому бэкенд стэку на джунов


>для джуниоров


прикалываешься? в моем зажопье-миллионике в централ рашке не дальнезалупинск или усть-пиздинск было пару сениоров на питона, и штук 5 мидлов за полгода. 3 штуке на жсе тоже соответственно сениор с 300к/сек зпшкой и хуевым стеком технологий, один на руби. все остальное - пхп. при том что джунов минимум 10 штук было. именно на нем. это вот было пока я полгода работу искал
49 1555489
Что я упускаю, если обучаюсь по PHP мануалу на русском языке? Он вообще полный? Я хоть и понимаю английский, но считаю, что ещё не достиг того уровня на котором могу обучаться адекватно. Или лучше пользоваться сайтами, как у ОПа, где все объясняется более подробно?
изображение.png1 Кб, 282x54
50 1555516
>>555441
Если по стеку искать, то вот так. Совсем печалька. Но я пока только вкатываюсь, ни знаний толком, ни опыта.
Кстати, хорошая ли идея будет наклепать сайтов, будто я фрилансил, но прикрыться NDA и вместо фирмынейм просто заглушки делать?
51 1555544
>>555516
там нет нда ты спокойно можешь добавлять себе в портфолио все что сделал
52 1555696
>>555544
Я о том, что даже если не смог во фриланс, то таким образом наебать, что дохуя сайтов уже сделал.
53 1555719
>>554454
Для этого её загружать куда-то нужно.
Сделал через phpmailer, короче.
54 1555808
>>554341
Пацаны, срочно хелпаните пожалуйста!

Есть массив со строкой и числом, число допустим 2.
Есть второй массив с заданными ключами и числами от 0 до 5, к примеру.
Вопрос: как узнать, сколько чисел во втором массиве больше числа в первом массиве? Как сравнить и проверить?
Как будет выглядеть такой код на практическом примере?
Заранее спасибо!
55 1555815
>>555808
Примерно такое
for (int i; i>array2.lenght;)
if (array1 > array2)
count++;
else continue
56 1555978
Аноны, поясните пожалуйста, что в коде не так, и почему переменная $a выдаёт ебанутый ответ
57 1556024
>>555978
потому что if не в цикле
58 1556026
>>555978

С того что цикл foreach у тебя отделен от if.
То есть вначале ты ты выводишь список по росту. Потом выводишь $a = $a + 1 (0+1), то есть 1, после чего, без пробелов, безе перевода на следующую строку выводишь второе echo c $a равным 1.
59 1556103
>>555380

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


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

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

Если бы рынок был настолько огромен, то такие галеры просто не находили бы себе сотрудников
60 1556137
>>556024
>>556026
Понял; спасибо, анончики!
cas1.jpg34 Кб, 316x400
61 1556162
>>552970 (OP)

Привет, мой самый любимый тред на свете!

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

Может кому-нибудь нужна микро-помощь с проектом? Хотел бы поучаствовать и больше научится чему-нибудь и полезным оказаться.
62 1556222
>>556162
пиши на почту superwp'2ebdev1337ANUSmailPUNCTUMru
63 1556227
>>556103
Я тебя сейчас удивлю, но большинство людей не особенно-то и хочет стараться ради достижения какой-то цели.
К примеру, сейчас можно зайти на любой сайт с вакансиями и убедиться, что программистам платят сравнительно дохуя. Ну и другие вакансии есть, востребованные и очень хорошо оплачиваемые. Но почему-то при этом целая куча людей работают таксистами, кассирами и прочим неквалифицированным персоналом. Почему? А потому что крутить баранку, ссать в уши про то, что "я бизнесмен, а такси-это хобби" и ныть про то, что денег нет легче, чем вкалывать, повышая свою квалификацию.
То же самое верно и для программистов. Многие работают там, куда их взяли, не пытаясь расти или менять работу. Многим вообще насрать, они плывут по течению и не задумываются ни о чём. Многим ссыкотно что-то делать, проще сидеть на жопе там, где уже сидится.
Короче, всегда есть варианты, но ты хотя бы лотерейный билет купи.
1577308747592.jpg39 Кб, 470x380
64 1557157
>>555380

> Это самооправдания. Рынок айти огромный,


Да. Ето так огромная яма с говном

> вакансий кучи в любом Подзалупинске,


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

> Знать ВордПресс друпал джумлу битрих модых yii ларавел симфани верстка адаптив ие6+ жыквери зп 15-25к ОСНОВНАЯ ОБЯЗАННАСТЬ ДЕЛАТЬ МАГАЗИНЫ НА ВОРДПРЕСС


Во многих городах с населением ~500к примерно так же ситуация, маня.

> не говоря уже про удалёнки.


Так говоришь словно беспроигрышный вариант лол. А по факту сидеть 24/7 на жепе дома проходит далеко не всем. Молиться чтоб тебя кинули. Плюс есть шанс что от тебя будут требовать чтоб ты был онлайн 25/7.

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


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

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

Короче пиздец у тебя манямир.
65 1557274
>>556227
я хз, я например с 14 лет развивался в десктоп и 3д программирование, охуенно знаю С++, разбираюсь в его стандартах вплоть до С++20. Всегда мечтал вкатится в разработку серьезного софта или 3д (не игры), а еще подумывал о серверном программировании.
Чтобы родаки отстали, закончил институт с корочкой программиста (программная инженерия), с серьезным дипломным проектом (в области шифрования улучшил один известный алгоритм)...

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

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

>>557274

> Прошло десять лет - теперь я работаю в госконторе, говнодрочу пыхапы сайт и пишу обертки над SQL запросами в MS Basic. Получаю 36к на руки...


Звучит как пиздец, что можно сказать.
Но тут непонятно, если ты настолько охуенно знаешь С++, то какого чёрта ты сидишь в госконторе и пишешь на пыхе и бейсике? Тебя там цепью к батарее приковали что ли?
Возьми себя в руки и найди себе нормальную работу. Нет в твоей мухосрани -> ищи удалёнку или в соседних городах, много какие компании предлагают релокационный пакет. Или найди просто работу и у друзей позанимай по 5-10к на переезд, потом отдашь.
67 1557387
>>557342
>>557274

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

Нищук: у нас в деревне реально нет работы
Мажор: да ты праста плаха ищищшь я сразу нашел. Ты линивий

А вообще этого >>557342 пидора-критикана надо гнать из треда. Он ничего путного не советует, только издевается над новичками, что в предыдущих тредах, что в этом.
68 1557388
>>557387
за мат извени
69 1557390
>>557387
Вот ни разу не попал, чтобы достичь своей текущей работы и денег я впахивал как папа Карло, успевая днём работать на галере, а ночью программировать и саморазвиваться. И да, я из провинции и мне потребовалось чуть меньше десяти лет чтобы в итоге оказаться на сеньорской вакансии в ДС. Начинал с 15 или 20к рублей, если не путаю.
А моим мессаджем, который ты всё никак не можешь уловить хз что с тобой не так, было то, что если ты сам не найдёшь себе хорошую работу, то никто её тебе не найдёт. И возможностей у тебя достаточно, на самом деле, потому что ты не умираешь, не инвалид хотя я уже начал сомневаться, не в рабстве и с какой-никакой базой .
70 1557393
>>557274
Вот это неудачник. Я скажу тебе, что пошло не так. Вместо того, чтобы переехать в ДС, жить сначала в хостеле с хачами, искать работу джуном по своему стеку, потом накопить на съем однушки за мкадом и тратить каждый день по 1,5-2 часа на работу ты выбрал сидеть в своей мухосрани у мамки под юбкой. Привык делать то, чего от тебя хотят родители, а если родители хотят чтобы ты гнил, как они, на нищенской зарплате, то ты так и делаешь. Карьера в айти - это не только хард скиллы
71 1557690
>>557390

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


Это - распиздевшийся школьник.
Саморазвивался он по ночам, лол.

мимошёл
72 1558239
ПЫХаны, есть 2 таблицы:
user_group
id | name | user_ids

user
id | email

Есть ли смысл хранить в user_group.user_ids ID юзеров через запятую "1, 2, 3" или в любом случаем более правильно делать таблицу связей типа:
user_group_link_user
id | group_id | user_id

БД - MySQL

Может еще есть какие-то способы хранить массивы в полях таблицы?
73 1558279
>>558239

>user_group


>id | name | user_ids


groups
id | name

>user


>id | email


users
id | group_id | email

Так правильно, если я тебя правильно понял.
И не надо никаких лишних таблиц городить.
74 1558288
>>558279
В одной группе может быть несколько юзеров.
И почему названия таблиц во множественном числе?
75 1558291
>>558239

Тебе надо прочитать урок по нормализации БД, и если ты там не найдешь ответа, или появятся доп. вопросы, то пиши: https://github.com/codedokode/pasta/blob/master/db/normalization.md
76 1558301
>>558288

>В одной группе может быть несколько юзеров.


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

>почему названия таблиц во множественном числе?


Потому, что таблица с пользователями и таблица с группами. Как их ещё называть? Чем тупее - тем лучше.
77 1558321
>>558301
А если юзер может быть и в группе 1 и в группе 2, то как быть?

Алсо в единственном числе нейминг вроде удобнее дня ООП схем, где модель так же называется User, объект называется $user, и обращение к свойствам читается приятнее: $user->id.
78 1558337
>>558321

>А если юзер может быть и в группе 1 и в группе 2, то как быть?


Городить таблицу связей тогда. Но это всё ещё гораздо лучше, чем пачка значений в одном поле таблицы БД.
Чем атомарнее значение - тем лучше.

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


Он нормально с ним сочетается. Модель User - описывает одного пользователя и берёт свои данные из таблицы users(пользователи). Это по умолчанию везде принято.
79 1558343
>>558337
Но в SQL-запросах по мне так тоже приятнее писать:
WHERE user.id = 123
WHERE group.id = 234

Для неймнинга таблиц во множественном/единственном числе есть какие-то стандарты или это просто дело вкуса?
80 1558349
>>558343

>Для неймнинга таблиц во множественном/единственном числе есть какие-то стандарты


Стандартов нет, как таковых, но все более-менее современные ОРМ и вообще библиотеки настроены именно на множественное число по умолчанию.

>в SQL-запросах по мне так тоже приятнее писать


А мне приятнее использовать ORM и не страдать ерундой.
81 1558390
>>558343

Есть рекомендации и я не советую придумывать свои стандарты, а пользоваться готовыми:

- https://www.sqlstyle.guide/
- другие гуглятся: https://www.google.com/search?q=sql+style+guide
82 1558415
>>557342

>>Но тут непонятно, если ты настолько охуенно знаешь С++, то какого чёрта ты сидишь в госконторе и пишешь на пыхе и бейсике?


Потому что в целом крае (не городе, а крае... а даже скорее в области) нет ни одной конторы где требуется С++/Java/C#.

Все что тут есть - это клепать сайты, батрачить на аутсосрной галере (это которые делают американские заказы, а платит российские зарплаты-копейки)... в лучшем случае 1С еще
83 1558419
>>557393

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


чувак, мне надо пол-планеты перелететь чтобы в ваш мкад попасть - денег на это просто нет (ведь еще надо жить, и снять комнату в бомжатнике)
84 1558502
>>552970 (OP)
ребятки помогите с Yii2 христа ради, как передать Yii::$app->params->['currentUrl']
В чем смысл?
На одной из страниц есть формочка, в том числе ссылка на авторизацию, если нажать на эту ссылку то перейду на страницу ввода логина/пароля, мне надо чтобы после успешной авторизации меня перекинуло на страницу с формочкой. Хотел записать url этой страницы в Yii::$app->params->['currentUrl'], но блядь выдает что переменная Yii::$app->params->['currentUrl'] не определена. Как можно еще передать переменную глобально или как params осилить?
85 1558513
как по английски называется минимальный набор джентельмена - то есть самый минимум?

На B начинается - но не могу вспомнить это слово
86 1558514
87 1558521
Анончики, хочу приобрести в переплете Котеров Д., Симдянов И. "PHP 7 в подлиннике", как думаете нормальный выбор для нуфага?
88 1558542
>>558419
Монгол что ли?
89 1558550
>>558521
нет.
он и как справочник говно
90 1558793
>>558502
Yii::$app->params - возвращает массив с данными, которые заранее прописаны в конфиге. На лету не переопределишь.
Пиши в сессию Yii::$app->session.
Спасибо, что упомянул про yii2. Щя местный шизик придет кукорекоть что симфани лучше
91 1558911
>>558793

> симфани лучше


ларавел лучше
92 1558915
>>558911
Для хриланса да. Для еба круда который год тщательно разрабатывают - нет
93 1558927
>>558915
что за ёба круд?
94 1559178
>>558502
Попробуй
Yii::$app->request->getReferrer()
95 1559207
>>558927
йоба круд это устаревший мем уже, это он про ROR, но это тема другого треда, так что забей.
1WTbcpRHjdU92jL.jpg71 Кб, 1200x675
sage 96 1559283
>>557342

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


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

> удалёнка тебе не подходит,


Написал какие подводные у твоего беспроигрышного варианта, давен.

> Или найди просто работу и у друзей позанимай по 5-10к на переезд, потом отдашь.


Советы уровня /b.

В каком же сказочном мире ты живёшь. Типичный 100к в сек пиздобол
97 1559314
>>559283

>Советы уровня /b.


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

Еще мне нравится, что когда начинаешь спрашивать дядь работающих за 200-300к в месяц, как они устроились на такую работу - так все сплошь через знакомых.
Не через знания, не через стаж, не через вклад в опенсорс, и даже не через "умные" собеседования, а блядь по знакомству, блядь программистом - "друг пристроил, бла-бла-бла, работы полно".
Такое практикуется даже в гугле/мыле/яндексе. (через hr там ищут только рабов - от того и такая текучка)
98 1559329
>>559314

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

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

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

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

А треды психологической помощи находятся в других разделах.
99 1559336
>>559329
Я о том что диванные советы не гарантируют свою правдивость, и многие кто их пишут - не имеют на это моральных прав из-за отсутствия опыта. Точно также как школьник прослушавший пару лекций пыхапы в ютубе не имеет права давать какие-либо советы по php.

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

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

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

>Люди, которые зарабатывают по 300к, просто талантливые


талант не всегда гарантирует успех. Сколько талантливых художников сдохло от голода потому что не смогли продать свой талант?

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

Если бы все было так легко, не существовало бы контор-галер. Иначе зачем талантливому программисту сидеть по 15 часов в день (по труд договору оказывается рабочий день не 8 часов, а "пока не сделаешь"), получать зарплату раз через раз и при этом видеть как эффективные менеджеры уволившие очередного недовольного "нытика портящего рабочую атмосферу" получили еще одну премию?
Нет таланта? Например разработчики метро 2033 одно время работали на такой галере, при том что американской галере (был скандал), они не талантливые?
Их всё устраивало? Человеку не очень нравиться быть рабом.

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

ну и конечно если у тебя в фрилансе нет связей, то работать придется на том что укажут - том же битрексе.
101 1559474
>>559336
>>559339
Да всем насрать на ваши проблемы.
102 1559739
>>559329
Люди, которые зарабатывают 300кк нифига не талантливые. Они просто могут себе это позволить. Т.е. просто берешь и ставишь такую сумму. И тебе могут платить столько. А могут и не платить. Нужно ставить себе такую цену, которую сам считаешь нужной (ну окей, завысить процентов на 20, для торга)
103 1559827
>>559739
Подозреваю, что всё немного не так - это зависит не только от их хотелок. Вангую, что и работают они с полной отдачей, а не в стиле - нахуячил и в продакшен, и жопа у них порой горит от сроков не меньше, чем у их начальников.
104 1560502
Аноны, для нужд регистрации/авторизации использую либу cartalyst/sentinel.
Нормальный выбор? Или стоит какую то другую использовать?
105 1560506
>>555170
Этот прав. Первична психология.
106 1560508
>>560506
промахнулся, ответ на >>556227
107 1560518
>>557690
Зря ты так. Все кого я знаю, кто был из нищуков и кто пришел к успеху - хуярили, не боялись менять работы и города, искали всегда работу лучше.
Тот анон прав - сам за себя не посуетишься - никто не посуетится. Редко кому из нищих везет прям, что деньги на халяву.
Я сам то - тот самый ебанат который никогда не суетился, вот в 33 вкатываюсь блядж в пхп.
Единственное от чего спокоен - словил определенный дзен.
108 1560522
>>559336
Если я правильно тебя понял, то. И?
И? Жизнь тяжела, не справедлива, и не всем одинаково дано. И? Сесть и ныть? Пить пивко по вечерам и катать в дотку?
Из моего нищего круга добились чего то только те, кто набрались храбрости хотеть. И что то делали. Пусть им было тяжелее чем остальным.
109 1560639
>>558419

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



Чувак, это такая чушь что просто не смешно нихуя. Я сам будучи пхп макакой перебрался в Питер со всеми твоими вводными: съемная хата, лететь через всю страну (я с ДВ), никакой помощи или страховки от друзей/родни.

Весь твой аутотренинг разбивается об несколько фактов:
1. У любой приличной конторы есть релокационный пакет. Даже в моей, хотя я переезжал сам и работу искал уже на месте. Чуваки, которым оплатили переезд спрашивали меня сколько подъемных дали, а я как еблан объяснял что я сам переехал.
2. У любого джуна/студента есть акки на биржах труда и они постоянно подрабатывают. Я сам своим джунам все время говорю: смари не перегори, не трать все время на кодинг. Просто они хотят себе уровень жизни выше, все эти айфончики новые, сходить на концерт, в норм ресторан.
3. Твоя зп ограничена только твоими компетенциями, ну или умением грамотно о них пиздеть. В том же Питере вполне реально получать 200к даже работая с битриксом.
4. Никто не мешает тебе искать вакансию в областном миллионнике, сидя в зажопинске, никто не запрещает тебе искать вакансию в ДС, сидя в миллионнике.
110 1560663
>>560639

>Я сам будучи пхп макакой


Просто для интереса - тебе сколько тогда лет было?
111 1560670
>>560663
28 годиков
112 1560676
>>560663
Ты не сравнивай себя с другими - нервы будут крепче
113 1560702
>>560676
Почему?
114 1560704
>>560702
Себя есть смысл сравнивать только в ключе: сегодняшний - вчерашний, а с другими людьми - нехрен.

мимомакакен
115 1560709
Здравствуйте, как можно вывести рандомную строку из нескольких элементов массива?
lyubvi-dobra-i-schastya.gif.jpg74 Кб, 600x600
116 1560738
>>560709
Держи, братишка. https://3v4l.org/G9JjW

Старайся в новом году держаться подальше от пхп помойки.
117 1560763
>>560709
Просто же делается.

https://3v4l.org/Gr73W
118 1560765
>>560763
Хрень написал.
Фикс: https://3v4l.org/FRcBq
119 1560811
>>560765
не-не, суть в том что из нескольких элементов в массиве нужно строку создать, а не из всех массивов
120 1560812
>>560811
не из всех элементов*
Быстрофикс, уже внимательность под утро теряю
121 1560861
>>560738
и куда идти-в питон или руби помойку?
122 1560966
почему ларка качает кучу пакетов после создания проэкта,а не до него(до него он качнул немного пакетов какой то симфони)?
123 1560967
>>560966
Потому что она делает composer install просле создания проекта, а не до
124 1560968
>>560967
как то неудобно...
125 1560969
а как вырубить запущенный сервер?
126 1560970
>>560968
composer create-project laravel/laravel MyEbaProject
127 1560972
>>560969
Перестать виндузятничать
128 1560978
>>560970

>composer create-project laravel/laravel MyEbaProject


начал грузит 6.8 версию,а выше я грузил 6.9
129 1560980
>>560978
composer create-project laravel/laravel=6.9 MyEbaProject --prefer-dist
130 1560981
>>560972
а что,обязателен линукс,вроде для винды все есть?
131 1560982
>>560978
Добавлю важное Тебе на работе никто жопу подтирать не будет
132 1560984
>>560981
Я тоже виндой пользуюсь. Но тебе нельзя пока что
133 1560985
>>560982
мне до работы далеко
134 1561064
>>560969

>Для завершения работы сервера нажми в консоли Ctrl + C (если ты читал мой гайд по командной строке то и так знаешь, что эта комбинация клавиш завершает выполняющуюся программу). https://github.com/codedokode/pasta/blob/master/soft/php-install.md



Оно?
135 1561147
>>560811

>из нескольких элементов в массиве нужно строку создать


Ну так обрежь сам массив перед обработкой.
https://3v4l.org/d6XfE
136 1561156
>>560981
Винда хуже подходит для разработки веб-приложений. Дело не в ней самой хотя имхо она то ещё говно, а в инфраструктуре и экосистеме.
К примеру, чтобы поставить какой-нибудь сервис в винду (например веб-сервер), тебе нужно скачать инсталлятор, он сделает какую-то магию и у тебя что-то где-то заработает.

В линуксе ты всегда знаешь, куда смотреть:
apt-get install nginx/чтоугодно - установит тебе сервер/базу данных/что угодно
service nginx start/stop/так_далее - можно управлять сервисом
cat /var/log/nginx - можно посмотреть логи
cat /etc/nginx - можно посмотреть конфиги
всё намного структурнее и понятнее, чем виндовая графонистая магия.

С непривычки оно конечно сложно заходит (если ты всю жизнь ездил на такси, а тут тебе предлагаю за руль сесть), но возможностей реально больше и в голову оно ложится лучше, потому как устроено логичнее. но говна везде хватает конечно
Я бы тебе посоветовал минимально поиграться с разработкой на винде (может, недели две или месяц), а потом перекатываться на линуксы. Если брать убунту и делать всё по мануалам, то довольно быстро освоишь, никакого rocket science тут нет и не было.
137 1561174
>>561156

>apt-get install nginx/чтоугодно - установит тебе сервер/базу данных/что угодно


>service nginx start/stop/так_далее - можно управлять сервисом


>cat /var/log/nginx - можно посмотреть логи


>cat /etc/nginx - можно посмотреть конфиги


>всё намного структурнее и понятнее, чем виндовая графонистая магия.


Есть какой-то список файловой системы - где и что смотреть?
138 1561176
>>561156
ну я пока просто поиграться,я еще с пхп не закончил
139 1561184
и одному мне кажеться,что в ларавеле папки как то херово скомпанованы.какого хера роутинг называется вебом?
140 1561381
Аноны, хочу сваять магазин, в принципе дополз до этого уровня. Но как бизнес-логика в приложения такого плана устроена - не очень понимаю.
Есть какой то магазин-пример?
141 1561390
>>561381
Ну опенкарт посмотри на гитхабе.
142 1561464
>>561390
Это что то типа CMS-ки?
143 1561467
>>561464
Типа того. CMSка для онлайн-магазинов.
Хочешь бизнес-логику магазинов узнать - там её навалом.
144 1561478
>>561467
Ок, спасибо.
145 1561479
А вообще, вот условно - есть ли смысл на ларавел, или вообще на солянке из роутера, ORM и прочего - писать "стандартный " интернет магазин? Или стоит взять специализированное что то типа опенкарт?
146 1561546
>>561174
Ага, гугли "linux directory structure".
По первой ссылке:
https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
Но там даже как бы и слишком много, как правило пользуешься /home, /var/log, /tmp, /etc, /usr/bin, usr/lib и как бы даже и всё.

Ну и в принципе, погугли какой-нибудь гайд по линуксам.
Тебе нужны базовая архитектура (демоны, пакетные менеджеры, конфиги, суперюзеры, исполняемые файлы и как это всё вместе работает), файловая система и пермишены + терминал (10 самых распространённых команд + пайплайны) + основы баша (потоки ввода-вывода, переменные среды, маски и по вкусу можно мини-скриптик написать).
Я думаю, если активно разбираться (не просто прочитать, я прям пробовать) и взять какую-нибудь статью https://habr.com/ru/post/184396/, можно чуть ли не в пару-тройку дней уложиться (один уйдёт на установку, если какие-то проблемы вылезут).
147 1561553
>>561479
Если интернет-магазин нужен твоему бизнесу (или другу/свату/брату), то возьмите любой saas типа shopify и не парьтесь, там всё уже решено и не потребуется тратить время на решение 100500 банальных задач отображеняи товара, а потом поддержку всего этого.
Если бизнесу уж совсем критично ставить у себя (по моему опыту, чаще всего это некритично, но доморощенные бизнесмены отчего-то ссут и всё хотят хостить у себя дома под кроватью) - то берите специализированное решение, тот же opencart или на крайняк cms'ку и обвешивайте плагинами.
Если у бизнеса куча денег, квалифицированных программистов и времени (не твой случай, иначе бы ты здесь не спрашивал), то тогда пишите самописное решение на чём вам больше нравится.
Если тебе хочется просто потренироваться в программировании, то делай сам на Laravel.
148 1561558
>>561553
А, ты наверное тот анон, что выше писал, что хочешь потренироваться. Если так, то всякие opencart'ы тебе для тренировки помогут мало, потому что они максимально заточены на накликивание всего мышкой, поэтому ты накликаешь себе что-то и ничему не научишься.
Туда можно заглядывать, но писать код нужно самому и с нуля (плюс-минус), иначе пропадает смысл тренировки.
149 1561764
>>561553
>>561558
У меня двоякая тема. Вообще я программирую, и чисто технически я способен написать магаз. Но бизнес-логику я не вкуриваю вообще. Тоесть сам я понапридумываю то еще... Плюс такая дилемма - я не знаю рынка. Я так полагаю что магазы на опенкарт и магазы самописные на ларавел - это все таки две разных ниши? Зачем что то пилить на ларе задорого, если для этого хватит опенкарт по функционалу и возможностям и гораздо быстрее/дешевле?
Ну и раз уж мир пхп состоит из всяких цмс - то наверное можно окунуться в какую то его часть, и вроде опенкарт норм спроектированная система. MVC образная.
150 1561765
А есть ли смысл учить PHP не программисту, а например, системному администратору.
151 1561781
>>561764
98% интернет-магазинов вполне типовые или сводятся к типовым решениям: витрина, корзина, чекаут, скидки, купоны, импорт, экспорт, под это уже давно написаны всевозможные решения и поэтому нет смысла что-то изобретать без причины. Но! Если у тебя дохуя уникальная бизнес-логика или охренительные нагрузки (если ты какой-нибудь алиэкспресс, эльдорадо или авито), то проще написать решение под себя, чем пытаться прогнуть и оптимизировать нечто уже готовое (оно априори менее гибкое и заточено на более распространённые сценарии).
Я бы на твоём месте взял любой существующий магазин и попробовал сделать его копию, сначала на этом opencart'е либо cms-ке, а потом уже самописную.

>>561765
Сисадмину точно есть смысл научиться ставить знаки вопроса в конце предложения, чтобы превращать утверждения в, собственно, вопрос.
По существу: если тебе нужно поддерживать сервера на которых крутится что-то пехапешное, имет смысл выучить хотя бы основы (синтаксис, композер, флоу работы, php-fpm), чтобы легче было диагностировать проблемы и можно было самому что-то поправить простенькое.
152 1561815
будете ковырять код под бой курантов?
153 1561842
>>561781

>>Я бы на твоём месте взял любой существующий магазин....



Ок, спасибо. Так и поступлю. С наступающим тебя и добра тебе.
И всех в треде с наступающим, желаю вкотиться в 300к в наносек. И ОП-у в отдельности респект и благих пожеланий.
154 1562254
День добрый.
Имеется вот такой вот код: https://ideone.com/kvgG96
Вопрос: можно ли каким-то образом получить абсолютно тот же самый результат, только при этом использовав в коде цикл? Если да, то какие функции для этого нужно использовать? Помогите, пожалуйста.
155 1562255
>>552970 (OP)
Привет ребят, есть ли смысл сейчас вкатываться с нуля? Просто хотелось бы знать есть тут те кто начал с нуля и нашел работу или просто добился хорошего успеха в осваивании материла?
156 1562265
>>562255
Привет.

>есть ли смысл сейчас вкатываться с нуля?


Не, нету. Причина ниже.

>есть тут те кто начал с нуля и нашел работу или просто добился хорошего успеха в осваивании материла?


С нуля ты 33 года будешь учить, а индустрия вперёд движется и сегодняшний джун должен знать столько же, сколько вчерашний сеньёр. Сам прикинь какие объёмы.
Вкатываются только с вышкой по проганью и те, кто с детства этим занимается.
157 1562297
>>562255
Вкатываюсь с нуля, последний раз кодом занимался 10 лет назад, в средней школе что-то на дельфи было. За 2 недели прочитал 200 стр компутер саенс и половину задач из оп-сайта порешал. На работу не надеюсь, контор мало думал больше, целый 300к облцентр, вакансий и того меньше (3 бэка, 2 фронта, 1 фуллстак), притом все это в 2-х конторах, но есть должность интерн/трейни, в которую по-идее реально вкатиться и набраться опыта.
158 1562483
Гугл в результатах пихает мне Swoft. Я прочитал про него всего один абзац, но уже хочу его форсить.
159 1562598
Поясните по хардкору:
ЗАчем нужны области видимости методов и свойств public, protected, private. Что они делают, я понял. Но какого их НАЗНАЧЕНИЕ?
Желательно на примере.
160 1562601
Ш
161 1562618
>>562598

>Но какого их НАЗНАЧЕНИЕ?


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

>на примере


На каком? Примере кода или аналогия?
162 1562623
>>562618
Аналогия наверное.

Например, всеми любимый класс Animal и дочерний класс Cat.
163 1562736
>>562623
Echo "mimocrocodil ";
Cat::makeSound();

Class Cat extends Animal
{
Const SOUND = "Maw";

Protected static function getSound()
{
Return parent::getSound() . self::SOUND;
}

Public static function makeSound()
{
Echo self::getSound() . PHP_EOL;
}
}

Class Animal{
Private static function beforeSound()
{
Return "I say: ";
}

Protected static function getSound()
{
Return beforeSound();
}
}
163 1562736
>>562623
Echo "mimocrocodil ";
Cat::makeSound();

Class Cat extends Animal
{
Const SOUND = "Maw";

Protected static function getSound()
{
Return parent::getSound() . self::SOUND;
}

Public static function makeSound()
{
Echo self::getSound() . PHP_EOL;
}
}

Class Animal{
Private static function beforeSound()
{
Return "I say: ";
}

Protected static function getSound()
{
Return beforeSound();
}
}
164 1563014
>>562598

>ЗАчем нужны области видимости методов и свойств public, protected, private. Что они делают, я понял. Но какого их НАЗНАЧЕНИЕ?



Ты не забывай, что разработка коммерческого ПО - это не удел одиночек, а работа десятка людей, которым, в общем-то пофиг что пишут другие программисты.
165 1563446
Что делать, если появляется ошибка Cannot redeclare a() (previously declared in /.../... .php:96) in /.../... .php on line 96 ?
Т.е. на ту же строку указывает, а там просто function a($e){
166 1563516
>>563446
Файл с кодом дважды не инклудится нигде у тебя? Симлинков на него нет?
Аннотация 2020-01-03 105924.png29 Кб, 629x569
167 1563623
оказалось,что можно пользоваться консолью без всякого пердолинга
168 1563657
>>563516
Не, просто эта часть кода была в цикле. Я дурак.
169 1563922
Посоветуйте по пыхе видеоролики, желательно плейлисты, читать оп-уроки не всегда есть возможность, а втыкнуть в наушник лекцию о циклах - хуже не станет.
170 1563949
>>563922

>втыкнуть в наушник лекцию о циклах - хуже не станет


Лол, вкатывальщик думает наебать систему.
171 1563953
>>563949
Пытаюсь бороться с тем, что голова дырявая, сегодня прошел задачу, завтра же с трудом повторю, тут либо распечатки нужны на каждом шагу, чтобы мозг впитывал информацию, либо вливание звука, поможет или нет, хз, но стоит попробовать.
172 1563958
>>563953

>поможет или нет, хз


Нет, не поможет. Никому никогда не помогало.
Нужно самому сидеть и делать раз за разом, а не аудиокнижки слушать на расслабоне.
173 1563970
>>562598
Позднее связывание. Можно создать protected метод, в нем сделать типа $this->toString() т.е. в методе родителя вызывать метод потомка.
Вообще это для так называемой инкапусляции.
Публичные методы - это твое АПИ, то, чем будет пользоваться клиент (другой программист, ты и тд), приватный метод - это что-то конкретное для данного типа. Например калькулятор что-то считает.
174 1564062
есть к-л библиотеки вебсокета для пхп,чтобы прикрутить к ларке?
175 1564327
А какие топовые российские компании щас используют PHP (кроме Skyeng)? Чувствую, что засиделся в своей говноконторе, вторую неделю мониторю вакансии, и кроме рогов с копытами ничего толком и нету.
176 1564414
177 1564446
>>564327
Яндекс (но весь PHP потихоньку переписывается)
178 1564456
>>563953
Нужно сразу несколько решать, в идеале 3-5, тогда точно запомнишь, можешь ещё к похожим задачам свои фичи добавлять(валидацию например) или добавлять свои условия, код всегда с 0 нужно писать, я раньше обсирался и менял только те части, которые меняются в похожих задачах.

Ещё рекомендую параллельно разрабатывать свой простенький сайт, по мере получения знаний ты будешь понимать как добавлять те или иные фичи, и на нем же сможешь проверять свои реальные знания. Так же при работе с базой данных сразу учись в ручную писать запрос, например нужна тестовая таблица не создавай и не добавляй значения через графический интерфейс, а пиши вручную запросы.
179 1564483
>>564327
Skyeng - те ещё говношлёпы, судя по отзывам. Будь осторожнее с ними.
180 1564485
>>564062
Каждый тред приходит кто-нибудь с одним и тем же вопросом, хоть в шапку добавляй ответы.
Смотри в прошлых тредах, ищи в поиске по слову "сокет"
181 1564519
>>564446
У них же везде python/C++.
182 1564520
>>564483

>кроме Skyeng

183 1564554
Приглашаю в тг конфу для вкатывающихся в пхп, писать
chchprANUSyandexPUNCTUMru
185 1564802
>>564554
Из него надо выкатываться, а вы вкатываетесь.
186 1564836
А нет ли такого только про питон?
187 1564843
>>564327
Avito, VK
188 1564844
>>564519
Вакансии на пхп есть, вообще да, согласен, много питона и плюсов, но компания большая, так что там хоть нода, хоть скала
189 1564934
>>562254
Просто помещаешь набор ключей для формирования строк в массив.
https://ideone.com/2FMySE
Другое дело по каким правилам ключи в этот набор попадают, ты бы задание описал что-ли. Охуеть, давно я в телепатии не практиковался.
190 1564969
>>564554
написал:3
191 1565005
Ребят, как работать в цикле с числом переменной?
Вот к примеру мы имеем переменную:
$number = 7
Вопрос: как запихнуть эту переменную в цикл?
Как это будет выглядеть на примере? Точно в точности напишите пожалуйста, чтоб я не запутался.
-
И можно ли работать с элементами массива в цикле?
Как работать с числами/строкой, которые находятся в массиве?
Напишите пожалуйста мини-код на php, как это будет выглядеть.
Заранее спасибо, аноны!
15564543854581.jpg964 Кб, 2048x1536
192 1565046
>>564934
Анончик, ты гений! Спасибо тебе огромное! :3
Благодаря твоему коду для меня многое стало понятно.
193 1565055
>>564519
https://yandex.ru/jobs/vacancies/dev/phpdev_eda/

В еде у Яндекса PHP. Но это в рамках исключения.
194 1565124
>>565005
Попробовал расписать - https://ideone.com/3RJR5j
195 1565353
>>565124
Спасибо тебе большое, анон! Благодаря тебе наконец-то стало всё понятно:З
196 1565780
Аноны, такой вопрос, на фронте собираю большой массив, в котором как JS объекты, так и бинарные данные (файл).
JS объекты перегоняю в JSON
Но какие заголовки ставить? Файлы передаются с заголовком "Content-Type: form/multipart"
И в одном запросе с файлом я не могу оправить JSON? Причем JSON у меня не из формы в которой загружается файл.
197 1565886
Только сейчас осознал, что по факту это старейший тред раздела.
То есть он пережил максимально токсичные времена, пережил совершенно безнадежных даунов, пережил всё.
Я не знаю сколько тут сменилось ОПов, помню ещё самого первого, который с трипкодом сидел. В общем удачи вам ребята в новом году, оставайтесь няшами.
198 1566024
>>562598

С помощью их ты определяешь правила использования поля или метода:

- только внутри данного класса (private)
- только внутри класса или в наследниках (protected)
- отовсюду (public)

Это нужно для таких целей:

- гарантия корректности кода. Если поле имеет тип private, то ты (автор класса) можешь осмотреть свой класс и гарантировать, что в него всегда пишутся только правильные значения. Ты определяешь правила работы с объектом. Если же поле имеет тип public, то как ты гарантируешь, что в нем всегда будут правильные значения? Ведь ты не знаешь, как другие люди будут использовать твой класс, как они будут к нему обращаться. Где гарантия, что Вася не запихнет в поле что-то непраивльное и твой класс начнет выдавать некорректные значения и не упадет с ошибкой? Модификаторы private/protected как раз дают гарантию, что это не произойдет.

Вообще, полезно писать код в стиле "защиты от дурака". Это не только в ООП возможно.

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

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

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

Это еще называют "инкапсуляцией".

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

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

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

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

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

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

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

Вот пример класса с использованием инкапсуляции:

// Объект представляет собой ломаную линию из нескольких сегментов
// Показаны только публичные методы, остальное скрыто
class PolyLine
{
public function __construct(float $x, float $y) { ... }

// Добавляет еще одну точку к ломаной
public function addPoint(float $x, float $y): void { ... }

// Посчитать общую длину линии
public function calculateLength(): float { ... }
...
}

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

- создать ломаную, указав начальную точку
- добавить к ломаной еще одну точку
- посчитать длину ломаной

Вот пример использования этого класса:

$line = new PolyLine(1, 1);
$line->addPoint(2, 2);
$line->addPoint(4, 7);
echo $line->calculateLength();

При этом код может проверять передаваемые значения, например, не разрешать 2 раза добавлять одну и ту же точку. Здесь не приведен код методов и мы не видим приватные поля и методы, но нам это и не требуется - и так понятно, как использовать класс.
198 1566024
>>562598

С помощью их ты определяешь правила использования поля или метода:

- только внутри данного класса (private)
- только внутри класса или в наследниках (protected)
- отовсюду (public)

Это нужно для таких целей:

- гарантия корректности кода. Если поле имеет тип private, то ты (автор класса) можешь осмотреть свой класс и гарантировать, что в него всегда пишутся только правильные значения. Ты определяешь правила работы с объектом. Если же поле имеет тип public, то как ты гарантируешь, что в нем всегда будут правильные значения? Ведь ты не знаешь, как другие люди будут использовать твой класс, как они будут к нему обращаться. Где гарантия, что Вася не запихнет в поле что-то непраивльное и твой класс начнет выдавать некорректные значения и не упадет с ошибкой? Модификаторы private/protected как раз дают гарантию, что это не произойдет.

Вообще, полезно писать код в стиле "защиты от дурака". Это не только в ООП возможно.

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

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

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

Это еще называют "инкапсуляцией".

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

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

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

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

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

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

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

Вот пример класса с использованием инкапсуляции:

// Объект представляет собой ломаную линию из нескольких сегментов
// Показаны только публичные методы, остальное скрыто
class PolyLine
{
public function __construct(float $x, float $y) { ... }

// Добавляет еще одну точку к ломаной
public function addPoint(float $x, float $y): void { ... }

// Посчитать общую длину линии
public function calculateLength(): float { ... }
...
}

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

- создать ломаную, указав начальную точку
- добавить к ломаной еще одну точку
- посчитать длину ломаной

Вот пример использования этого класса:

$line = new PolyLine(1, 1);
$line->addPoint(2, 2);
$line->addPoint(4, 7);
echo $line->calculateLength();

При этом код может проверять передаваемые значения, например, не разрешать 2 раза добавлять одну и ту же точку. Здесь не приведен код методов и мы не видим приватные поля и методы, но нам это и не требуется - и так понятно, как использовать класс.
199 1566026
>>562736

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

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

А то из-за таких примеров люди начинают писать пародии вроде EnterprizeFizzBuzz, хотя это лишь пародия.
201 1566081
>>562598
Кароч нудную хуйню про определение, как оно там работает и шарады типа "смогу ли я вызвать метод" почитаешь в гугле.

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

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

Вот джентельменский набор запретов от сеньора помидора:
1. Запрет на наследование. Везде final. Серьезно, оно тебя сожрет. Наследуемся только от абстрактных классов и то по праздникам, используем интерфейсы и кайфуем.
2. Запрет на публичность. По умолчанию все приватное. Возможно добавить пару публичных геттеров, но только если очень надо. Лапшичка типа $god->getHolySpirit()->getSon()->getFather()->ask('Бать, те нормально?') сразу пропадет.
3. Запрет на трейты. Тому, кто добавил в пхп этот ебаный костыль для множественного наследования, желаю рака пизды. Контролировать код или делать ревью если активно используются трейты невозможно. Ты можешь с умным видом заапрувить реквест, в котором вызывается демон ебущий тебя в жопу по ночам, и несколько месяцев не понимать хули с утра так очковина чешется.
4. Запрет на статические методы. Можно использовать для создания объектов или чего-нибудь типа ассертов, но статических методов, которые что-то делают с данными быть не должно.
5. Запрет на нестрогую типизацию. Только strict types, только хардкор. Никаких нахуй двойных равно или восклицательных знаков. Приведения типов явные (int) или intval. Сравнения только явные $myVal === false, а не !$myVal. И никаких empty, только isset. Ну и с возвращаемыми значениями тоже шоб четко было, если строка, то только строка и никаких блядь false.
6. Запрет на new. new должен использоваться только когда создаешь реально новую сущность, типа new HarkachPost. Инициализация объектов/сервисов из базы/конфига должна быть в DI контейнере или фабрике.
7. Запрет на конкретные методы типа eval, extract, exec, рефлексию, глобальные переменные и прочую залупу, зависит от уровня паранойи.

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

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

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

Вот джентельменский набор запретов от сеньора помидора:
1. Запрет на наследование. Везде final. Серьезно, оно тебя сожрет. Наследуемся только от абстрактных классов и то по праздникам, используем интерфейсы и кайфуем.
2. Запрет на публичность. По умолчанию все приватное. Возможно добавить пару публичных геттеров, но только если очень надо. Лапшичка типа $god->getHolySpirit()->getSon()->getFather()->ask('Бать, те нормально?') сразу пропадет.
3. Запрет на трейты. Тому, кто добавил в пхп этот ебаный костыль для множественного наследования, желаю рака пизды. Контролировать код или делать ревью если активно используются трейты невозможно. Ты можешь с умным видом заапрувить реквест, в котором вызывается демон ебущий тебя в жопу по ночам, и несколько месяцев не понимать хули с утра так очковина чешется.
4. Запрет на статические методы. Можно использовать для создания объектов или чего-нибудь типа ассертов, но статических методов, которые что-то делают с данными быть не должно.
5. Запрет на нестрогую типизацию. Только strict types, только хардкор. Никаких нахуй двойных равно или восклицательных знаков. Приведения типов явные (int) или intval. Сравнения только явные $myVal === false, а не !$myVal. И никаких empty, только isset. Ну и с возвращаемыми значениями тоже шоб четко было, если строка, то только строка и никаких блядь false.
6. Запрет на new. new должен использоваться только когда создаешь реально новую сущность, типа new HarkachPost. Инициализация объектов/сервисов из базы/конфига должна быть в DI контейнере или фабрике.
7. Запрет на конкретные методы типа eval, extract, exec, рефлексию, глобальные переменные и прочую залупу, зависит от уровня паранойи.

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

>Есть еще такая же гора приколов с базами, фреймворками и самим ооп.


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

> 2. Запрет на публичность.


> Лапшичка типа $god->getHolySpirit()->getSon()->getFather()


А что насчет QuaryBuilder доктрины и т.п.? Или это относится только к "нашему" коду?
203 1566167
>>566081
Ебать ты поехавший или несчастный.
Просто нужно уметь работать с наследованием/трейтами/статическими методами и прочей хуйней.
Нужно это уметь готовить, а не запрещать.
204 1566187
Здравствуйте, аноны!
Застрял на последней задаче по массивам в ОП-посте. Вот все задачи делал нормально, всё получалось - а тут раз, и пиздец. Уже всевозможные варианты пробую, как эту задачу можно решить?
Подскажите пожалуйста, анончики, ибо я уже на пределе, от этой задачи кипят мозги. Но не могу же я её так бросить и уйти! Смысл тогда от учёбы? Препятствия нужно преодолевать всё-таки..
205 1566278
>>566187
Вот, к примеру. Это не полноценное выполнение задачи, я просто пытаюсь вывести несколько элементов массива с помощью функции array_rand.
Что я делаю не так, почему это говно не работает? Скобки правильно расставил, всё верно. В чём тогда прикол?
Один элемент - могу вывести, в прошлой задаче это уже было.
Два - не могу и баста. Что здесь не так?
206 1566304
>>566278
1. Парсер не понимает твоих бесконечных массивов в строке.
2. Массивы нумеруются с 0. $t[2] у тебя не существует пока.
https://ideone.com/xbJaiV
В будущем пости ссылку на код, а не скрины.
207 1566309
>>566304

> 1. Парсер не понимает твоих бесконечных массивов в строке.


Ничего не понял, у меня же идёт правильная нумерация?

> 2. Массивы нумеруются с 0. $t[2] у тебя не существует пока.


Так я для того и изменил нулевой индекс ключа на единицу

> https://ideone.com/xbJaiV


что есть «.» после функции "echo", и что за «PHP_EOL»? В уроках ОП-а ни слова об этом до массивов сказано не было, в мануале в описании функции «array_rand» - то же самое..

и у тебя идёт так же нумерация, те же скобки, то же оформление как и у меня, только с точкой после «echo», и с «PHP_EOL», ничего не понятно как это работает
208 1566361
>>566081

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



Так ведь они для этого создавались
209 1566382
>>566167
А я плюсану. Я видел туеву хучу проектов, где всё пошло по пизде. С этими простыми правилами они были бы хоть немного лучше.
К сожалению, как правило не ты пишешь говнокод, а ты подключаешься на проект и хватаешься за голову.
А спросить "хули вы понаписали говнокод, пидорасы?!" не можешь, потому что во-первых тебя пидорнут за токсичность, во-вторых ты и сам знаешь, что тебе ответят одной из вечных отмазок:
1 - Если можешь - сделай лучше;
2 - Оно и так работает;
3 - Оно приносит деньги, из которых тебе платят зарплату, так что не тявкай;
4 - Это всё не нужно, я 20 лет так программирую и всегда всё нормально было;
5 - Не демотивируй команду критикой;
И так далее.

Я серьёзно мечтаю о возможности подойти к любому говнокодеру и сказать ему в лицо, что в самом его существовании кроется серьёзная ошибка и что даже если он всю жизнь будет теперь пытаться исправить то, что сотворил, то кармический баланс всё равно будет отрицательным, поэтому в принципе лучшее, что он может сделать - это стерилизовать себя.
Больше мечтаю только дизлайках на гитхабе и вымирании экосистемы js, как таковой.
Screenshot from 2020-01-06 19-05-39.png138 Кб, 945x1050
210 1566383
>>566309
Учебник ОПа написан давно и слегка ухабист. Не стесняйся гуглить и спрашивать.
Пояснил на пикче как смог.
211 1566389
>>566167
Или просто нужен человек (системный архитектор или как там его ещё могут назвать), который бы контролировал использование классов и интерфейсов.
212 1566398
>>566383
Теперь всё понятно стало и на свои места)
Ибо в который раз удивлялся тому, что у меня с трудом выходит решать задачки ОП-овские; было два варианта - или в уроках написано не всё, что нужно для решения заданий, либо я проёбываюсь и не вижу нужных и важных вещей. В последнем я уже начал сильно сомневаться.
Вот почему застрял на последнем задании, несколько дней убил на то, чтоб её попытаться решить(лол).
Теперь ты объяснил всё и я начал понимать, как это работает.
Спасибо большое, анончик! Добра тебе
213 1566402
>>566167
В моей простыне нет нихуя личного. Ну кроме пункта про трейты, отдам деньги хорошему человеку шоб ему сука в мозгу въебал пулю.

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

1. Один из них придумывает охуительную идею использовать охуительный трейт и охуительное наследование от класса охуительного фремворка.
2. Ты с похмела или с недосыпа проскроллил это говно на код ревью, смерджил и пошел в отпуск.
3. Через два месяца эта залупа как рак распространяется по всему проекту.
4. Кто-то дописывает в трейт новый функционал и использует его в новых местах, кто-то вытаскивает охуительный класс из вендора и правит его, ломая пол проекта. А у фреймворка тем временем выходит новая версия, в которой охуительный класс выпилен с пометкой cancer aware.
5. Ты внезапно понимаешь что ты теперь с этим кодом навсегда. Переписать его = написать все заново. Не переписать = страдать и поскорее срулить на другой проект или даже в другую контору.

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

По поводу билдера можешь почитать статью https://ocramius.github.io/blog/fluent-interfaces-are-evil/ между прочим от самого автора доктрины.
Если в краце:
1. Да инкапсуляция в QueryBuilder'е сломана.
2. Нет это не страшно в данном конкретном случае.
3. Это сделано только для красоты, сам решай стоит ли оно того не стоит.
215 1566433
>>566383
Спасибо тебе ещё раз, анон!
Благодаря тебе я наконец завершил задание, над которым бился несколько дней, хотя и несколько нестандартным способом. ну откуда я мог понять, что во всём виноват интерпретатор «ideone», через который я не могу нормальным путём решить эту задачу, написав хороший код?
Вот оно:
https://ideone.com/oA7vhN

Правда, после такого.. кхм, выполнения задачи я впервые почувствовал себя говнокодером.
Как говорил один друг: «работает - и хуй с ним, главное чтоб работало». Подход плохой, но в особенных моментах можно и допустить такое.
Но другого пути у меня нет, если я хочу решить эту задачу я без ноутбука пока, делаю всё на телефон, и потому могу кодить только через «ideone»
Всё, спасибо тебе ещё раз:З
216 1566436
>>566402
Вот что бы такой хуйни и не было, умные люди и придумали ООП.
217 1566438
>>566167

>Нужно это уметь готовить, а не запрещать.


Двачую.
218 1566453
>>566436
Чтобы не делать хуево, умные люди придумали делать заебись.
219 1566454
>>566453
Ну вот ООП - это заебись, который многие не понимают.
220 1566456
>>566454
А чего заебатого? Ты похоже ооп понял. Расскажи как сделать чтобы хотя бы мидлы писали более менее консистентный код без постоянного присмотра?
221 1566460
>>566456

>А чего заебатого?


Сведены к минимуму вся та херня, про которую писали выше.

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


ООП - не про косяки в коде, а про архитектору кода.
222 1566464
>>566456

>как сделать чтобы хотя бы мидлы писали более менее консистентный код без постоянного присмотра?


Не брать джунов на позиции мидлов.
223 1566484
>>566417

>Если интересно


Конечно интересно.

>>566433

>потому могу кодить только через «ideone»


есть и другие тулзы ищи "php online interpreter"
например
http://sandbox.onlinephpfunctions.com/code/b9268815ec195992376194515238b5ab8b04f71c
224 1566488
>>566464
Ты хоть раз программиста нанимал или собеседовал? Позиции на хедхантере, где тебе в уши ссут hrы.
На проекте есть работа и бесконечное количество способов её сделать. Люди все разные, и пишут все тоже по разному. Я не просто так иронизировал над познавшим ооп. Все познают. И все по своему. Из десяти человек одну и ту же задачу хорошо если двое сделают похоже. Нет объективно лучшего способа выполнения задачи, а если бы и был всех макак уже давно бы заменили кодогенерацией.

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

Чтобы хоть как-то держать программистов на одной волне разные изъебства применяются. Типа парного программирования, кросс ревью, на воркшопы всякие их слать. Просто надо всегда держать в голове что девяноста процентам на качество кода, на архитектуру и на ваш проект похуй. ВООБЩЕ ПОХУЮ. И их можно понять, они делают то что скажут, в залупу не лезут и тихо мирно пилят свои задачи. А если че, то соберут свои кружки, кубики рубики со стола и съебут. Таким всегда рады - просят немного, в залупу не лезут.

В итоге за более активной частью нужно следить потому что там постоянно генерится какая-то хуйня: это у нас не так, надо делать так, а фаулер сказал, а фаулер хуйлан, дейкстра вообще говорит ооп - говно. А за менее активной нужно следить потому что они будут повторять любую хуйню, раз услышав, до посинения.
225 1566522
>>566488
Вот тут абсолютно согласен, человек может иметь 3 года опыта и писать при этом каким угодно способом, потому что сильно зависит от конторы и задач человека на месте, может он там делал и поддерживал какую-то срм на пхп 4 версии два года из трех будучи единственным программистом в штате. А на собеседовании вполне нормален, сам по себе нормальный человек, бабл сорт напишет, тестовое типа тудулиста напишет, стандартную библиотеку знает
226 1566645
>>552970 (OP)
А куда вы прогондонили книгу ОПахуя? Охуенная книжка с аниме была, не могу найти.
227 1566646
>>566645
>>552970 (OP)

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

228 1566663
>>566646
у вас оп-шапка говнище просто, там одна ненужная хуета, уберите эту парашу и нормально выделите эту ссылку чтобы нарот мог найти
229 1566904
Пачаны, есть у кого на примете библиотеки для анализа изображений графиков?
Гугл ничего внятного не выдал.
230 1567122
Может кто-то посоветовать нормальных плагинов для PHP к VSCode? Наверняка же тут не все сидят на платном PHPStorm-е.

Я поставил Саблайм 3, накатил один единственный плагин ПХП Компаньён и он сразу же мне в моём Hello World-е на Laravel подсветил в файле где посмотреть определение класса.

А в VSCode с кучей плагинов он не может просто пройти по файлам и посмотреть в каких файлах есть класс с таким названием. Ну камон, серьёзно?

Может какой-то другой нужен плагин для VSCode?

Подскажите, а то нет денег на PHPStorm.
231 1567201
>>567122

>нет денег на PHPStorm


Как хорошо, что торренты заблочены и никто не может спиратить пыхошторм!
232 1567222
>>567201

>спиратить пыхошторм


Возиться с кряками-мокрописьками не все любят, знаешь ли. Некоторые даже это всё покупают - не всем дано быть пидорахами совковыми.
233 1567233
>>567222
А устанавливать официальную бесплатную версию раз в 30 дней тоже я так понимаю не станешь.
234 1567313
>>567233

А че типа они такие глупые что можно просто удалить бесплатный триал, попросить новый с другого емейла и пользоваться еще 30 дней?
235 1567366
>>567222
Там все крайне просто устанавливается, пердолинга нет. Если принципиально любитель покупать софт, то кажется там есть версия на год для студентоты, попробуй ее использовать.
236 1567523
>>567122

PHP Intellisense нужен наверно.
237 1567525
>>567523

Он стоит, в том-то и дело. Слева список установленных плагинов.
238 1567528
>>566433

На ideone не работают mb-функции (вроде mb_substr), но все остальное (вроде как) работает.

Вместо попытки вставить сложное выражение в строку можно просто поместить его значение в переменную:

$word = $syllable[$t[0]];
echo "Слово: $word\n";

Но можно и прямо в строке писать, в фигурных скобках. Подробнее про вставку переменных в строку написано тут: https://www.php.net/manual/ru/language.types.string.php#language.types.string.parsing
239 1567542
>>566382

Это хорошо, что ты видишь косяки в коде. Но ты делаешь неправильные выводы.

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

Смысл не в том, чтобы самоутвердиться, а чтобы заставить^W помочь им писать так, как надо, а самых необучаемых вычислить и выгнать на мороз. Вводить гайдлайны, правила, разъяснять косяки, итд.

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

Ну и не стоит переживать. Если проект будет жить долго, ты все успеешь постепенно исправить. Если проект закроется - то и исправлять уже ничего не надо будет.
240 1567801
>>567542
Я делаю нормальные выводы.
Во-первых, действительно, я сам всё один не напишу, да и в принципе тех, кто старается делать качественно довольно мало и они очень быстро вырастают до лидов, так что мне приходится мириться с тем, что в команде обычно те ещё говношлёпы сидят. В лучшем случае они реагируют на правила и их можно заставить делать +- нормально, но это будет не их инициативой а того, кто бьёт их палкой. И начинать это делать надо как можно раньше, в идеале на старте проекта. Но такого не происходит, потому что даже об архитектуре зачастую задумываются не в начале, просто лепят фичи как попало пока не станет слишком поздно.

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

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

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

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

И ничего я с этим сделать не могу, приходится ныть на двачике.
240 1567801
>>567542
Я делаю нормальные выводы.
Во-первых, действительно, я сам всё один не напишу, да и в принципе тех, кто старается делать качественно довольно мало и они очень быстро вырастают до лидов, так что мне приходится мириться с тем, что в команде обычно те ещё говношлёпы сидят. В лучшем случае они реагируют на правила и их можно заставить делать +- нормально, но это будет не их инициативой а того, кто бьёт их палкой. И начинать это делать надо как можно раньше, в идеале на старте проекта. Но такого не происходит, потому что даже об архитектуре зачастую задумываются не в начале, просто лепят фичи как попало пока не станет слишком поздно.

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

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

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

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

И ничего я с этим сделать не могу, приходится ныть на двачике.
241 1567904
>>567801

>И ничего я с этим сделать не могу


А ничего и не надо делать. Переделывать людей - незрелое желание.
Самим программистам не надо сильно заморачиваться на архитектуре и бизнесу это тоже не надо. А вот тебе надо.
Не думал что с тобой может быть не так? заведи себе уже петы и вылизывай их сколько влезет
242 1567957
>>567801

Я для себя делаю примерно такой вывод.

Может он неправильный. Скорей всего неправильный. Но кто его знает, может и правильный.

Суть в зарабатывании денег. Деньги зарабатывают не программисты (речь не о фрилансе сейчас), а менеджеры и всякие директора, которые заключают договора, короче, те кто непосредственно выбивают деньги, находят заказчиков. Задача программистов просто сделать так, чтобы не подвести всех этих замечательных людей, которые договорились с заказчиком сделать программу N за 100 квадрилиардов бачинских. А что ты там напишешь почти никого не колышит, главное чтобы не было как у Била Гейтса на презентации Windows 98, потому что добавление каждой новой фичи всё равно будет оплачиваться отдельно, а это поток денег.
243 1567982
>>567313

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



Они даже мейла не просят.
244 1568022
Аноны, подскажите. Хочу на сервер отправить аякс запрос с телом собранным из данных разного формата. В теле и JSON и бинарный фаайл(картинка).
Какие заголовки использовать в запросе?
И как принять такие данные на сервере?
245 1568023
>>568022

Закодировать картинку в BASE64 и отправить в виде строки в JSON объекте.

> Алло, у меня картинка 50 мегабайт RAW фотография



Ну дак шли тогда ссылку на неё, а картинку выложи куда-то для отдельного скачивания.
246 1568025
>>567982

Кончился Триал, а дальше что? Взломать?
Я бы купил весь их ебучий набор за 250$, но не с моей зарплатой.
Это для 300к/сек москвичей не деньги, а у нас в провинции на это два месяца люди живут.
247 1568087
>>568025
Сука, ну не тормози. Ты же программируешь, решения должен принимать учиться, выбирать варианты, выбирать прости Господи "архитектуру" проекта, от которой вообще дохуя чего зависит.
А ты блядь сам скачать и посмотреть что из этого будет не омжешь?
Нахуй ты вообще такой беспомощный нужен кому?
Конкуренция среди вкатывальщиков растет. И с детскими болезнями ты нахуй никому не усрался.
А пхпшторм каждый месяц можно качать совершенно свободно новую триальную версию. Так у них и задумано.
248 1568109
>>568023
Не, так не пойдет. Именно одним ajax запросом текст/json и картинка. Если существует <form> - то JS собирает данные с помощью FormData. Этот объект тело запроса в с заголовком Content-Type: form/multipart.
Но у меня данные не из формы точнее из нескольких разных не связанных форм, и... тут я понял что собрать тело запроса в моем случае кажется можно объекта FormData, так как этот объект имеет методы для добавления новых полей в него, и это не зависти от реального html формы
249 1568123
>>564327
Надо понимать одну простую истину - если компания использует PHP, то она, конечно, не обязательно плохая (в смысле зп, получения опыта, интересных задач, скиллов сотрудников и т.д.), но все плохие компании скорее всего будут использовать PHP, потому что на нем проще сделать "хуяк-хуяк и в продакшен", потому что спецы на нем стоят дешевле, их полно, и компания _всегда_ сможет найти замену. Несмотря на всю эволюцию языка и экосистемы в целом за последние 2-3 года, он все еще является лакмусовой бумажкой "плохой" компании.
Я перекатился с PHP 2 года назад на python/go/c++, мой коллега - на java/kotlin, никто из нас ни разу не пожалел об этом.
250 1568125
>>568123
Поэтому данный тред с такой приветливой шапкой я бы назвал скорее вредным. Да, вы найдете себе работу гораздо быстрее, чем на другом стеке, но через 3 года вы только и будете думать, куда бы с него сбежать.
251 1568127
>>568087

Мне сложно принять решение, потому что я не знаю во что лучше вложить время прямо сейчас: прокачать vs code и sublime, которыми я точно смогу пользоваться всегда. Или вложить время в триал phpstorm с непонятным исходом. Пока что я склоняюсь к первому варианту. Мне нравится vscode сам по себе, но блэт почему он не может нати где у меня в папке определён класс, это не серьёзно. Полюбому может нужно какой-то плагин поставить. Собственно за этим я сюда и вкатился.

> сам скачай и посмотри



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

>>568125

Я не думаю что у PHP программиста будут какие-то проблемы в освоении современных веб решений. А развиваться профессионально надо всегда. Годик-другой посидел в ВоВ вместо курсов и статей - отстал от индустрии.
252 1568132
>>568127

>Я не думаю что у PHP программиста будут какие-то проблемы в освоении современных веб решений.


Или лучше сразу вкатываться в нормальный стек и не тратить потом время и нервы на перекат.
253 1568176
Где можно зарегить бесплатный домен?
freenom.com не регистрирует, dot.tk перенаправляет на фрином. В принципе, мне сейчас достаточно даже домена третьего уровня.
254 1568184
>>568127

>>потому что я не знаю во что лучше вложить время прямо сейчас


строчит посты о какой то хуите на дваче

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



Тебе еще много открытий предстоит
255 1568188
>>568184

Если я пишу на дваче, это не значит что я ничего не делаю. Поделал сегодня кое-какие дела по работе по-мелочи.
А в данный момент пытаюсь нагуглить что может заставить VS Code найти класс.
И кажется я нашел решение.
https://github.com/bmewburn/vscode-intelephense/issues/780
256 1568189
>>567957

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


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


Я вот тоже на фрилансе с людьми договариваюсь и обсуждаю задачу, но вот деньги мне платят именно за решение задачи, а не её обсуждение.
Деньги зарабатывают именно программисты.
257 1568197
>>568132
Перекат сильно тяжко дался?
Я полувкатился. Пхп выбрал тупо потому что документация лучше и для понимания проще. Изначально вкатывался через Node.js. Вот там была боль-чере-боль. Для нуба нода сама по себе со всей этой асинхронщинойз нот френдли, дока не простая - требует понимания наследования в JS, так и решения больше чем "собери сам из солянки свой фрейм" отсутствуют. А ты на этом уровне куку от кодировки не отличаешь. Короче боль. Но на данный момент дрочка с пхп меня продвинула вперед и в ноде.

Питон юзал, Лутца ебанул, не сложную консольную поебень мог запилить. Но чето год назад посмотрел рыночек - питон либо крупные конторы, куда меня нуба не пустят, либо не вэб. Джанга/фласк гораздо реже используются. Хотя возможно за питоном будущее в бек-вэбе. А возможно пхп отобьет свое. Щас из него выкатываются, а значит криворукого школия станет меньше. И среднее качество кода возрастет.
Но и питон похоже растет, так что стоит немного его изучать начинать.
Какой есть на питоне микрофреймвор, аля Slim, что бы с роутерои и DI?

Я может ошибаюсь, но на мой взгляд когда есть опыт в другом стеке но в той же области - перекатиться не пиздец сложно. Я думаю что простой CRUD-сайтик на питоне я за тройку дней смогу зарядить, если упорно поебаться. Синтаксис я помню, ООП тоже +/-.
Но это все же с потолка мнение.
258 1568198
>>568189

>>Деньги зарабатывают именно программисты.


Но таки не себе
259 1568199
>>568087

>А ты блядь сам скачать и посмотреть что из этого будет не омжешь?


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

Поставь хотя бы триал-ресет, или сам напиши, мартышка.
260 1568202
>>568198
И себе в том числе.
Selection049.jpg122 Кб, 1129x777
261 1568219
Для тех кто пилит на Ларавеле в VS Code вот решение.
Во-первых, чтобы не сломалось слежение за файлами нужно выключить слежение в vendor, там тоже слишком много файлов как и в node_modules.
Если нужно за какой-то директорией из vendor следить, то добавляйте символическую ссылку на эту директорию ls -n ...
По-умолчанию текущая версия PHP Intelephanse не находит определение фасадов и прочих хелперов.
Чтобы находила, нужно поставить этот пакет
https://github.com/barryvdh/laravel-ide-helper
и сгенерить файлик, тогда через этот файл можно будет находить нужные классы
262 1568233
>>568199

>>Я пиздец экономлю время, тайм-менеджемнет


>>эффективно трачу время на дваче


>>Поставь хотя бы триал-ресет, или сам напиши, мартышка.


>>Провоцирование на срач


>>нее, это мне не мешает в эффективной работе. Я время берегу

263 1568244
>>568199
Хуй пойми когда поставил кряк и ноль проблем. Отваливается раз в полгода, за 5 секунд ищется новый.
264 1568264
>>568176
Сам нашёл. На noip.com домены третьего уровня.
265 1568280
>>568233

>срать зеленью в 2к20


Это кто ещё тут срач разводит.

>>568244

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


Ещё мокрописек мне на ПК не хватало.
266 1568291
>>568233

>>эффективно трачу время на дваче


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

Ты пойми, макака, что не всем в кайф копаться на торрент-помойках, а потом накатывать сверху кряки и антивирусы. И это только потому, что тебе где-то такая же мартышка ерунды насоветовала.
Это вопрос чистоплотности. Как рабочей так и моральной.
267 1568322
>>568291
опять пиздаболие. Да угомонись уже.
268 1568344
>>568280
Как же я ору с тебя, дауна.
Кряк для жаба-приложений - это один jar-файл, который лежит себе мирно в папочке и запускается через java agent.
269 1568350
>>568344

От рута на рабочем компе с сорцами фирмы? :3
270 1568400
>>568344

>который лежит себе мирно в папочке


И запускается практически ежедневно с разрешением к сети и файлам проекта.
Дауна в зеркале ищи.
271 1568413
>>568350
На рабочем компе надо начальство просить купить лицензию на пхпсторм, либо сидеть на вскоде, валить с этой говенной конторы, которая жопится на нормальные инструменты для разработки.
272 1568419
>>568400
>>568350
Сколько же тут поехавших.
273 1568440
>>568350
Рут - это типа корневой доступ? А сорц - это исходник, верно понимаю? А код в жар-файле не посмотреть никак, чтобы понять, сливает он куда-то данные или нет?
За вопросы не бейте, я вкатывающися мимокрокодил.
274 1568442
>>568197

>Перекат сильно тяжко дался?


50/50
Питон я уже плюс-минус знал до переката, оставалось подтянуть, в го довольно быстро вкатился.

>итон либо крупные конторы, куда меня нуба не пустят, либо не вэб


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

>Какой есть на питоне микрофреймвор, аля Slim, что бы с роутерои и DI?


Flask.

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


В целом да, плюс если удастся хорошо показать себя на собесах, то проседание по ЗП будет минимальным.
275 1568443
>>568440

>код в жар-файле не посмотреть


А оно надо - чужой код разбирать, когда своего хоть жопой ешь?

>чтобы понять, сливает он куда-то данные или нет?


Суть вопроса не в том - сливает он или нет, а в возможности этого слива. А она есть и даже не теоретическая, а вполне реальная.
Поэтому не стоит привыкать к этим крякам изначально, если ты не тупая пидораха конечно.
276 1568449
>>568440
Да.

PHPStorm работает из-под прав пользователя, не слушай того шизика про рут. Для работы, вообще говоря, крэк не нужен, достаточно нагуглить актуальный активейшн код, если хочется лицензии, их постоянно сливают. Но как уже неоднократно писали выше, можно юзать триальную версию либо бетку.
277 1568454
>>568443

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


Как по мне, это будет реализовано типа "отправить юзердата на %сервернейм%", найти строку с сервером наверно весьма просто.
278 1568459
>>568454
Это, скорее всего, будет реализовано как делают сегодня все остальные крякероделы - скачивается нужный модуль с нужным функционалом под видом какого-нить обновления, в фоновом режиме естественно, и метаданные по твоему проекту улетают в неизвестную сторону.
Пойми, что коммунизма ещё не наступило и крякероделы этим не ради дружбы и поней занимаются, а для собственного профита. И если те же разрабы оригинального софта имеют прямой и честный профит с тебя в виде прямых и честных денег, то взломщики имеют непрямой профит, который идиоты обычно не видят.
279 1568463
>>568459

>скачивается нужный модуль с нужным функционалом


Так же никто не мешает подменить адреса серверов ЖетБрайнс на свои и выкачивать под видом тех же обновлений вообще чего угодно.
image.png75 Кб, 604x340
280 1568469
281 1568473
>>568442
Понял, спасибо. Вторым потоком буду с питоном понемногу разбираться.
282 1568568
>>568469
>>568419
Поехавший серун-шаромыжник, ты?
1578599181484.jpg63 Кб, 525x688
sage 283 1568734
>>568123

> Я перекатился с PHP 2 года назад на python/go/c++


Мне вот хочется начать что нить из этого учить. Есть свой проектик на котором всякие вундервафли тестирую. И вот думаю парочку йоба демонов совсем мелких написать не на пхп. Дабы пощупать какой нить другой язык.
На крестах писал давно, но в принципе помню совсем базовые вещи. конечно понимаю что он более низкоуровневый и там за большим кол-вом вещей следить нужно
Сколько про го не читал, всегда натыкался на то что жава быстрее, выше, сильнее. Но подкупает что го молодой и перспективный.
Про пытон знаю только что он "пхп на максималках для илиты".
Я в пэхэ щя на уровне мидамб и выше, но сравнивать в своей конторе особо не с кем. И чот как то дальше не двигаюсь. Думаю нужно немного очко кругозор расширить.
Если не трудно напиши пожалуйста как перекатывался. Почему именно их выбрал? Какие фреймворки и для каких проектов веб или не веб? с какого начал и прочее. с меня как обычно нихуя вечная благодарность
IMG20200110131034.png106 Кб, 720x782
284 1569054
Сап, аноны.
Нихуя не понял суть задачи, объясните тугому.
Суть задачи в том, чтоб написать строку, в массиве установить ключи первыми десятью буквами из алфавита, а элементами выставить цифры типо для шифровки и функцией поменять текст на своего вида код шифрования.
Но вот косяк, о котором пишет ОП-хуй - не весь текст будет зашифрован.
Ещё и подсказку дал типо для глупеньких, что поможет функция array_flip.
Да вот только я нихуя не понял, нихуя. Ну что с того, что напишу я текст из задачи, заменю символы и ебану функцию array_flip?
Функция заменит мой шифр на первоначальный текст, и строка выведется в первоначальном виде, не зашифрованной.
В чём суть задачи, нихуя не понял?
Если нужно сделать так, чтоб весь код был зашифрован, то я сделаю так:
1. Пишу переменную, придаю ей значение в виде нужного текста(текст пишу через пробел, пример: «м ы с р а ж а л и с ь к а к м о г л и.»
2. Пишу ещё одну переменную, в неё добавляю функцию explode(а в неё я добавляю первую переменную), в результате чего у меня появляется массив с буквами из текста
3. Пишу переменную, в неё добавляю функцию array_flip, добавляю в неё массив
4. Вывожу переменную с функцией array_flip с помощью эха

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

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

Ну я так это понял. Что там ОП-хуй в задаче хотел - я сделал, но правда по-ебанутому. В чём прикол подобных дегенеративных задачек? Почему ОП не может нормально объяснить что к чему? В рот драл это говно, блядь.
285 1569137
>>569054
Кек.
А как ты работать собираешься, если элементарную школьную задачку осмыслить не способен? Посмотри типовое ТЗ на сайтах фриланса - там ещё хуже пишут.
Выкатывайся.
286 1569145
>>569137
Я двачер и школу прогуливал
Не выкачусь и всё равно буду решать эту хуйню
ХУЙ ТЕБЕ, ХОДЯЧИЙ ДЕМОТИВАТОР
287 1569148
>>569137
И имхо, цель задачи:
1. Доделай шифрование до нормального уровня
-
Берёшь, и вписываешь все буквы алфавита, придаёшь им нужную нумерацию. Шифр готов.
2. Доделай расшифровку зашифрованного текста
-
Это элементарно и понятно даже без подсказки ОП-а, функция проходилась в уроке по массивам

Чё, всё? Выкусил? Программа работает как надо, всё расписано правильно. Но ОП - ебучий дэбил, который не может нормально расписать задачу и что конкретно требуется. В итоге ребята пилят говнокод вместо того, чтоб сделать всё лучше и быстрее.
Жалуюсь на это не только я, почти в каждом треде ОП-а поносят за его умение расписывать задачи.
288 1569183
>>569054
Вбиваешь условие в поисковик, находишь решение, разбираешь что и как. Далее закрываешь вкладку с решением и его воспроизводишь. Эффект наверно не такой, как при решении с нуля, но по образцу тоже неплохо.
289 1569191
>>569148
Ну молодец ты у мамы значит - решил детскую задачку на 10 минут. Только вот пиздежа несоизмеримо много не по делу.
290 1569239
>>568109
...... тут я понял что собрать тело запроса в моем случае кажется можно объекта FormData

В таком ключе у меня все получилось одним AJAX запросом я отправляю как JSON так и несколько бинарных файлов(картинок).
Но вот вопрос к знатокам: как мне тот же набор файлов отправить на сервер но уже не эмулируя с помощью FormData отправку из формы?
Как сформировать такой пакет?
И как его потом распарсить уже на сервере? Получать такие данные я как понимаю нужно с помощью - file_get_contents('php://input');
291 1569249
>>569239

> но уже не эмулируя с помощью FormData отправку из формы


Никак. У JS же нет доступа к файловой системе. Ты можешь только попросить браузер отправить файлы, с помощью FormData или через сабмит формы. Там может можно нахуячить какой-то костыль через медиа возможности - типа начать стримить локальный файл, но это хуйня.
292 1569303
>>569249

>>У JS же нет доступа к файловой системе


А зачем мне доступ к файловой системе?

Файл загружается через форму, и сохраняется в js-объекте. JSON данные собираю отдельно.
Потом все это в кучу, и с помощью FormData эмулирую отправку формы.

По идее ничего не мешает файл+json отправить аяксом на сервер. Считать эти данные file_get_contents('php://input').

Проблема у меня в том что когда мы отправляем форму - мы кодируем в multipart/form-data. И по стандарту тело запроса для каждого поля должно иметь разделитель и собственный заголовок.

В конце концов мы же можем содрать со стороннего сервера разметку или картинки, и уже разбирать это не сервере. Хотя в парсерах я нихуя не шарю, может это и не так
293 1569307
>>569303
p.s.

>>Проблема у меня в том что когда мы отправляем форму


В принципе все можно собрать в ручную, и без FormData , и отправить на сервер, но тогда сервак воспримет это как запрос от формы, и разберет его соответственно. данные text в $_POST, файлы в $_FILES

А как на стороне сервера разобрать просто кучу данных?
294 1569327
>>552970 (OP)
Ребят, кто решал усложненную задачу про банкомат https://phpbooktest2.ga/l1/mou-ikkai.html?
В подсказке https://informatics.mccme.ru/mod/book/view.php?id=815 пишут код программы:

const int INF=1000000000; // Значение константы }бесконечность}
int F[n+1];
F[0]=0;
int m, i;
for(m=1; m<=n; ++m) // заполняем массив F
{ // m - сумма, которую нужно выдать
F[m]=INF; // помечаем, что сумму m выдать нельзя
for(i=0; i<k; ++i) // перебираем все номиналы банкнот
{
if(m>=a && F[m-a]+1<F[m])
F[m] = F[m-a]+1; // изменяем значение F[m], если нашли
} // лучший способ выдать сумму m
}

Так вот, я не понял, если

>Пусть F(n) -- минимальное количество банкнот, которым можно заплатить сумму в n рублей.


>Теперь заведем массив F[n+1], который будем последовательно заполнять значениями выписанного рекуррентного соотношения.



Получается, в строчке int F[n+1]; я вместо n, должен написать int F[6601]; так как нужно выдать 6600 рублей?

Что вообще обозначает массив F? Я не понял из-за рекуррентного соотношения
295 1569338
>>569327
Это говнокод.
Лучше сам напиши с нуля.
296 1569372
>>569327

> должен написать int F[6601]; так как нужно выдать 6600 рублей


Да.

> из-за рекуррентного соотношения


В данном случае это F(n) = min(F(n - a1), F(n - a2),..., F(n - ak)) + 1.
В коде это F[m] = F[m-a]+1; плюс условие if, плюс цикл в котором это все крутится
Важная для понимания алгоритма строка это

> Выведем рекуррентную формулу для F(n), считая, что значения F(0), F(1), ..., F(n - 1) уже вычислены. Как можно выдать сумму n? Мы можем выдать сумму n - a1, а потом добавить одну банкноту номиналом a1. Тогда нам понадобится F(n - a1) + 1 банкнота. Можем выдать сумму n - a2 и добавить одну банкноту номиналом a2, для такого способа понадобится F(n - a2) + 1 банкнота и т. д.

297 1569381
Идите в жопу из-за вас опять до 2 часов ночи просидел.
Нельзя же просто так взять и пройти мимо задачи в интернете.

https://pastebin.com/6vnawu3x
298 1569383
>>569327

За такие алгоритмы убивать нахуй надо. Ниче непонятно.
tumblrm05ebgohW61rpl487o1400.jpg21 Кб, 400x226
299 1569388
Кароч я так себе мыслю.

Вот типа есть у нас сумма.
Берём кароч самую большую купюру.
Сморим, делится эта сумма на цело на номинал купюры.
Нихуя?
Ок. Тогда берём остаток от деления и он становится новой суммой.
А допустим делится.
Ок. Сморим тогда сколько можем таких купюр дать.
И кароч вся эта херня повторяется пока сумма не кончится или купюры.
Ну пару-тройку ифов там накинул и нормально. Любой даун разберётся.
А в этом матане я ебал. Какие-то реккурентные функции. Сука ты бы ещё на побитовых операциях написал. Как блядь создатели квейка быстрый квадратный корень. Шоб после тебя код кто-то открыл и ахуел.

Да даже не обязательно рекурсию хуячить, просто цикл сделал какой-нибудь да и всё. Просто я хз я почему-то захотел рекурсию. И чё блядь? Стек не взорвётся, купюр же не миллиард.
300 1569421
>>569388

>Сморим, делится эта сумма на цело на номинал купюры.


А если делится? Ну вот так экономические системы совпали.
И теперь у тебя народ за российские рубли берёт баксы в банкоматах по цене белорусских.
301 1570049
Интересует вот какая тема - а как правильно запросом вставлять данные в базу, если одним запросом сразу несколько таблиц обновляются?
База в момент вставки новых строк не блокируется же?
Допустим, нужно вставить данные в две таблицы последовательно двумя запросами. И во втором запросе нужно получить id строки вставленной в первом запросе из tab1 , допустим с помощью LAST_INSERT_ID().
Но если в промежуток между моим первым и вторым запросом еще кто то вставит строку в tab1, то я получу уже id не из мною вставленной строки, и соответственно моим вторым запросом я не верно вставлю данные
Как избежать такой проблемы?
302 1570056
>>570049
Гугли "транзакции" (transaction).
303 1570069
>>570056
Про транзакции знаю.
Это единственный вариант?
А как решается конфликт?
Допустим моя транзакция запущена. Делается 5 сек. ID строки будет 9.Сразу за моей через 1 сек кто то другой запустил вторую транзакцию,он тоже добавляет строки, но длится его запрос секунду. Какой ID будет у его строки как его транзакция выполнится? Тоже 9?
Таких вариантов конфликтов приходит в голову и не один
304 1570104
>>570069
Почитай про ACID и isolation levels.
Вкратце: при максимальном установленном уровне изоляции транзакций, БД гарантирует что данные изменяются так если бы транзакции исполнялись одна за одной. На самом деле они отрабатывают параллельно, но БД выкручивается с помощью снэпшотов и прочих хитростей.
305 1570128
>>552970 (OP)
Сделал свою днищенскую штуку на твиге без синфони. Отдельный скрипт отвечает за подгрузку и обработку каждого шаблона, открывается прямо через ЮРЛ. И мне кажется, что это как-то неправильно, ведь я видел как это выглядит в laravel. Как сделать нормальную систему роутинга чтоб один скрипт всё процессировал, обрабатывал URL с параметрами и передавал уже скрипту. Нигде не могу найти пример нормальной приложухи на твиге с роутингом.
306 1570220
>>570128
Если я правильно понял что ты спрашиваешь то нужно что-то типа вебсервер должен быть настроен так чтобы все запросы к несуществующим файлам отправлялись к index.php а в индексе ты изучаешь $_SERVER и все остальное и вызываешь что нужно.
307 1570238
>>570220
Так, ок, ща объясню, у меня есть шаблоны в папке, есть контроллеры. Я хочу сделать такую фабрику, которая обрабатывает URL и отдаёт её контроллеру, сейчас у меня тупо идёт обращение к контроллеру напрямую, в общем вообще нет роутинга. Проблема в том, что htaccess не хочет никак перенаправлять на индекс, ну ни в какую, я и в httpdconf, и в httpduserdir всё сделал нормально, но перенаправление просто не работает и жопа горит с этого. Я думаю, это как-то связано с тем, что я юзаю пользовательскую директорию. В /srv/http получше ситуация была
308 1570249
>>570238

> htaccess не хочет никак перенаправлять


404 пишет?
309 1570251
Пхпшники воняют и выглядят как пиздец, общаться не умеют, пишут говнокод, хорошо что сменил стек, не понимаю че тут ловить
310 1570255
>>570249
Ничего не пишет. Просто не перенаправляет на index.php, а загружает вместо этого запрошенную страницу. Скрипты перенаправления из интернетика беру. Первая теория у меня пока что, что дело в RewriteBase
311 1570259
>>570255
Так у тебя не должно быть файлов с запрашиваемыми именами. Убери контролеры и теймплейты из папки в которую смотрит вебсервер. Там должен быть только индекс и ресурсы (картинки, стили, js, htaccess и т.п.)
Посмотри на структуру папок в laravel если он под боком. Там все гавно раскидано по своим папкам, а в web (которая доступна вебсерверу) необходимый минимум (то что должно быть доступно по прямому запросу, без роутинга).
312 1570262
313 1570263
>>570259
Вот, спасибо! Структуру проекта брал у каких-то индусов и только сейчас понял свою ошибку.
Selection401.jpg10 Кб, 266x243
315 1570270
>>570259

Разве там не public доступна веб-серверу?
316 1570288
>>570270
Наверное, я с ним не работаю. Делал только пару раз несколько мелких правок в уже готовых проектах. Анон его просто упоминал, потому и на него сослался.
317 1570289
Странно
В приложухе в методе дочернего класса вызываю метод родительского - в который передаю функцию коллбеком.
Что то типа такого
https://ideone.com/imrudj

Но в моей приложухе работает только вариант с анонимной функцией. А с обычное - не рабоатет.
Версия пхп > 7
Че за херня?
318 1570291
п.с. в приложении исключение - вызов неопределенной функции
319 1570300
>>570291
п.п.с

Все таки современный пхп перегружен деталями. Вот почему в function()use( $this){} - нельзя сразу $this передать для привязки контекста.
Нет нужно $t = $this городить.
320 1570306
Пачаны, а в ПХП ресурсы изображений как объекты работают что-ли? Пытался копировать объекты клонированием и методом return new self($this->resource), но все изменения сливались в одно. А вот когда вручную прописал создание нового ресурса, копирование туда всей области и стандартный return new self($newResource), то всё заработало.
Как-то мало инфы по этому ресурсу изображения у них на сайте.
321 1570328
>>570289

$ php kek.php
Анонимная функция!Обычная функция!

Не знаю, у меня всё работает. Значит твой код не такой как ты пастнул в идеоне.
322 1570344
>>570328

>>Не знаю, у меня всё работает.


Короче у меня такая хуита в slim 3.9. По маршруту роута я создаю объект класса контроллера, и вызываю соответствующий метод. В нем - соответствующую модель, а в одном из методов модели я хочу пусть в естествоэспытательном контексте в метод родительского класса этой модели пробросить колбек - и происходит то что я описал. Анонимная функция нормально в колбек передается. А классическая - вызывает ошибку "вызов не определенной функции".
Если просто скрипт написать - без слима - все работает
323 1570349
>>570300

>Вот почему в function()use( $this){} - нельзя сразу $this передать для привязки контекста


Потому, что это не стрелочная функция, очевидно.

Сперва матчасть подтяни перед детской оценкой языков программирования.
324 1570358
>>570344

>А классическая - вызывает ошибку "вызов не определенной функции".


А ты ей неймспейс прописал?
Selection403.jpg138 Кб, 1106x675
325 1570413
Автор документации пхп могут в юмор
326 1570523
Попытался тут зачем-то накатить веб сервер с пхп и БД как по гайду вместо сборки. Пхп и Апач работали, а как к этому прикрутить БД я не очень понял, потом подумал, нахера я вообще это делаю, всё и без этого работало, удалил Апач (просто удалил папку и из сервисов), попытался удалить MySQL, но он не удалялся (через панель управления, нажимал удалить, запускается установщик, кекает-пукает и закрывается без каких-либо сообщений или результатов), скачал назад опен сервер и он не запускается. Попытался назад накатить отдельный Апач, он теперь тоже не запускается, лел.
Можете посоветовать что-нибудь? Просто даже не представляю, куда посмотреть можно, чтоб что-нибудь понять.
327 1570536
>>570349
Типичный коммент - бесполезное пиздаболие.

Я просто сравнивал с привязкой контекста в JS через bind. В который напрямую передается this. В пхп - с какой то версии, по каким то причинам уверен в которых ты не разбираешься ровно так же как и я напрямую $this передать в use() нельзя. Только посредством копированния в переменную.
И причем ту стрелки.
Короче хуита.
Ответ можешь не писать, я тебе не буду отвечать. Жаль время тратить
328 1570635
>>570523
Накатил другую сборочку, вроде работает.
329 1570763
>>570358
Бля, а ты прав. При передачи функции в функцию - ей нужно нэймспэйс прописывать.
Спасибо.
330 1570799
>>570536
Ты нуб не только для пхп, но и для js даже.
331 1570852
Анон здравствуй. Решил для себя изучить что то новое, чтобы мозг не простаивал без дела, выбрал пыху, учусь по учебнику спасибо.

Посмотри пожалуйста мой код, задача на рандом-нэйм генератор

https://ideone.com/EFh0nC

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

добра тебе анон
333 1570863
>>570852
https://ideone.com/IjkXN2
Поправил твой вариант.
334 1570872
335 1570874
>>570857
>>570863
Спасибо вам, разобрался
336 1570882
>>570874
А вот ещё способ - в одну строку.
https://ideone.com/mEXuqZ
337 1570890
>>570259
Ещё вопрос возник небольшой, у меня есть одменка и сам вебсайт, как лучше раскидать контроллеры и шаблоны для админки туда же, где и самого вебсайта, или отдельно всё это сделать с отдельными папками для шаблонов и контроллеров, только админовскими?
338 1570931
>>570890
Удобнекй ьудет когда админка отдельно, но вообще похуй. Если у тебя 3.5 контроллера то можно и вместе все закинуть.
image.png240 Кб, 1280x994
339 1571115
Собираю похапню, чтобы писать всякие говноскриптики на древнем говноноуте. Чисто для тренировки мозгов.
А у вас как проходит вечер воскресенья?
340 1571148
>>571115
В чём прекол пыхи для тренировки мозгов? Возьми хаскель, что ли, или лисп какой-нибудь.
341 1571157
>>571148

>тренировать мозги хуетой уровня эрланга или брейнфака


Я сказал тренировать, а не выебать и высушить
342 1571180
>>571157
Лисп самый простой язык.
343 1571184
>>571180
Самый простой - ассемблер, за ним си.
А функциональная параша никогда простой не была и не будет.
344 1571189
>>571184
Ты хуйню несёшь какую-то. Попробовал бы написать что-то на ассемблере, даже в простейших штуках с регистрами заебался бы. Это самая мозгоебля, я молчу про си. Ты, наверно, путаешь простой язык и его высоко/низкоуровневость.
345 1571193
>>571189
На сях я прямо вот сегодня допиливал модуль жопача, можешь сходить в ситред и посмотреть, туда высрал.
Он в разы проще всей этой эрлангопараши.
346 1571195
>>571193
Ты просто не дошёл до подводных Си, для этого нужно что-то более-менее сложное делать, проявляется непредсказуемое поведение и проблемки с памятью, буферами и так далее. Функциональные языки сложнее понять, но там когда понимаешь всё идёт как по маслу.
347 1571197
>>571195

>проблемы с памятью


В апаче написали свой аллокатор, ебаться с malloc/free напрямую тебя никто не заставляет.

>с буферами


Ну да, если ты не осилил ничего кроме gets и не проверяешь границы буфера - у тебя будут типичные даунопроблемы.
348 1571414
>>570069
Еще одна причина не использовать Mysql. В нормальных базах есть возможность вернуть значения при вставке. Типа INSERT ... RETURNING или INSERT ... OUTPUT. Транзакции тут помочь могут, но все-таки они не для того придуманы, чтобы поддерживать твои автоинкременты.
Решение получше - знать идентификаторы перед вставкой. А самое лучшее - использовать uuid.
349 1571419
>>568123
С одной стороны, я аплодирую тебе стоя и украду твой пост в свой
цитатник, действительно хорошо сказано.
С другой, мой личный опыт показывает немного другое, что именно пехапешники, натренировавшись на симфони, пытаются делать хорошо и правильно, думают об архитектуре, предметной области и так далее и тому подобное. А вот какие-нибудь nodejs'еры, сишники, рубисты и питонисты зачастую просто пишут то, что взбредёт в голову, не думая особо над правильностью. Были +- знакомые джависты с охренительными зарплатами, которые писали бекенд для параллельного проекта и у них он периодически выдавал ответ на предыдущий запрос вместо текущего (ну и прочие нёхи).

Применительно к беседе, я бы сказал, что во-первых, говнокодеров настолько много и джуниору настолько сложно отличать их от нормальных людей (да и не находится джун в выгодной позиции, скорее "куда возьмут - туда пойду", так что единственный вариант - это стараться попасть в компанию, где хотя бы выделены роли тимлидов, архитекторов и хотя бы говорят об архитектуре).
А во-вторых, мне кажется, джуну было бы сложно сразу вкатываться в джаву или что-то такое, потому что рынок устоявшийся и сеньористый. Проще вкатиться в php в хорошую компанию, вырасти до +- сеньора на этом стеке, а уже потом выбирать себе новый стек по душе. Пыха в этом смысле особо не ограничивает, есть и компании с очень хорошим техническим бекграундом, и даже те, где неплохо платят.
sage 350 1571445
>>571414

>илитарный посгресодолбоёб опять несёт хуйню


Лишний раз убеждаюсь, что они просто не осилили даже mysql и уже лезут дрочить на постгрес/оракл/дб2/небо/аллаха.
Иди SQLite ковыряй, идиот.
>>570049

>For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It is not changed by another client.


Из официальной документации. Откуда вы нахуй блять такие лезете?
351 1571454
>>570799
Хех, может быть.
Но в отличии от тебяя целеустремленный и дичциплинированный. Мне не лень поебаться и поискать инфы. Так что я вырасту. А ты - нет.
А ты просто обычный пиздабол, коих в "войтивайти-биосфере" каждый второй.
352 1571459
>>569388
Ок, разменяй 11 рублей купюрами в 5 и 2 рубля. Пусть кассета с 1 рублём закончилась.
353 1571474
>>571445
Ебать ты гений. Вот тебе пример из реальной жизни. Я инсерчу по 1к записей в три потока в мульти мастер. Хз, че там у mysql огрызков популярно, какой-нить галера кластер.

Можно поступить как истинный mysql гений: использовать авто инкременты, добавить второй запрос на выборку last_insert_id(), завернуть эту хуйню в транзакцию, и как долбоебу сидеть ждать репликации ну или не ждать, мы же Mysql гении.
А можно генерить uuid'ы и ебошить без изоляции вообще.

Пиздец я уже насмотрелся на таких 200 IQ осиливших Mysql. Потом еще начинают ебенить процедуры для "удобного" получения идентификаторов. Триггеров навешивают, каскадной хуйни, малафьи. И удивляются, а хули так медленно у них приложение работает, наверное дело в пхп ебучем.
sage 354 1571494
>>571474

>в 3 потока


>php


Дебил, ты?
355 1571567
>>571454
У тебя спеси больше чем нужно для твоего статуса войтишника.
Тебе пока надо закрыть варежку и слушать что старшие говорят, а не писать посты дескать - вот этот %языкнейм% плохой потому, что тут не так работает, а вот тут иначе делать надо было.
Это не у %языкнейм% проблемы, а ты через жопу делаешь.
Потом такие мартышки наслушаются друг-друга на таком самоподдуве и даже статьи на хабр пытаются писать, где их массово минусуют.

Ещё раз - учи матчасть.
356 1571587
>>571494
Ебать ты. Пусть будет не потоки, а три клиента одновременно делающих тяжелую хуйню
357 1571626
>>571474
Ты странный.
Во-первых, не у всех есть мульти-мастеры и галеры и не всем, у кого они есть, они реально нужны.
Во-вторых, с uuid'ами зачастую сложнее работать (особенно джуниору), потому что это строки. Более того, uuid'ы лучше генерировать на уровне базы данных, а не кода, потому что в случае генерации "кодом" ты рискуешь огрести проблем, связанных с подвисшими запросами, ретраями и прочим, что могла бы решить сама база (и вернуть тебе 100% нормальный uuid).

>>570056
Здесь даже транзакции не нужны (точнее, транзакция неявно будет создана автоматически, если выставлен innodb_autoinc_lock_mode), mysql гарантирует, что автоинкрементные айдишники у строк, вставляемых одним запросом, будут последовательны. Так что все айдишники можно получить через LAST_INSERT_ID и ROW_COUNT.
358 1571629
>>571419

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


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

Нынче самая трешатина в js творится. Все те быдлокодеры, за кого вчера пхп пинали, сегодня там обитают - у js порог входа сегодня ниже чем у пхп.
359 1571734
>>571626
Нихуя сложного тут нет. Ты либо знаешь как оно работает, либо не знаешь. Если уж речь зашла про джунов, то эти рекомендации в первую очередь для них:
1. Не используйте Mysql. Mysql это устаревший, вернее намеренно состаренный софт. Ну а хули ждать если Oracle покупает самую популярную бесплатную дб? Правильно нехуя тут ждать. На самый крайний случай MariaDb или Percona, и то если проект изначально жестко на них завязан. Как правило проект на Mysql это легаси, которое даже на версию 8.0.18 перевести невозможно.

Специально для новичков ремарка: что вообще означают эти ебанутые циферки версий? Эти циферки = возможности языка запросов. Спросите человека как быстро накидать в mysql таблицу 100К+ строк тестовых данных и посмотрите на его кислое ебало. Помимо этого есть еще куча приколов типа того что utf8 в mysql это на самом деле не utf8.

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

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

Почему псевдо уникальны? Они уникальны только в рамках одной "последовательности". Соответственно если серверов с нашей базой несколько нужно следить чтобы наши "последовательности" на них совпадали. Это к вопросу о репликации.

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

Но и это еще не все. Если мы пишем RESTful API, то у нас возникает еще несколько проблем. Операция создания нового ресурса должна быть идемпотентной т.е. при нескольких вызовах с одними и теми же данными должна создаваться только одна запись. Но есть проблемка: у нас нет идентификатора - он создается в базе. Это конечно можно решить, но с бОльшим гемором, чем используя uuid'ы. Плюс нам нужно возвращать данные в ответе, т.к. на клиенте еще нет идентификатора.

Бля, но ведь и это еще не все. Тут на сцену выходит наш код. Нам приходится писать наши модели таким образом что идентификатор в них не обязателен, хотя он обязателен, и во многих местах используется. Грубо говоря у объектов появляется состояние "не совсем готов к использованию". Например мы, скорее всего, не сможем отобразить коммент без идентификатора в листинге комментариев со ссылками на них. Ну и соответственно нужно написать, а главное вписать в модель наш код получения идентификаторов.
359 1571734
>>571626
Нихуя сложного тут нет. Ты либо знаешь как оно работает, либо не знаешь. Если уж речь зашла про джунов, то эти рекомендации в первую очередь для них:
1. Не используйте Mysql. Mysql это устаревший, вернее намеренно состаренный софт. Ну а хули ждать если Oracle покупает самую популярную бесплатную дб? Правильно нехуя тут ждать. На самый крайний случай MariaDb или Percona, и то если проект изначально жестко на них завязан. Как правило проект на Mysql это легаси, которое даже на версию 8.0.18 перевести невозможно.

Специально для новичков ремарка: что вообще означают эти ебанутые циферки версий? Эти циферки = возможности языка запросов. Спросите человека как быстро накидать в mysql таблицу 100К+ строк тестовых данных и посмотрите на его кислое ебало. Помимо этого есть еще куча приколов типа того что utf8 в mysql это на самом деле не utf8.

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

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

Почему псевдо уникальны? Они уникальны только в рамках одной "последовательности". Соответственно если серверов с нашей базой несколько нужно следить чтобы наши "последовательности" на них совпадали. Это к вопросу о репликации.

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

Но и это еще не все. Если мы пишем RESTful API, то у нас возникает еще несколько проблем. Операция создания нового ресурса должна быть идемпотентной т.е. при нескольких вызовах с одними и теми же данными должна создаваться только одна запись. Но есть проблемка: у нас нет идентификатора - он создается в базе. Это конечно можно решить, но с бОльшим гемором, чем используя uuid'ы. Плюс нам нужно возвращать данные в ответе, т.к. на клиенте еще нет идентификатора.

Бля, но ведь и это еще не все. Тут на сцену выходит наш код. Нам приходится писать наши модели таким образом что идентификатор в них не обязателен, хотя он обязателен, и во многих местах используется. Грубо говоря у объектов появляется состояние "не совсем готов к использованию". Например мы, скорее всего, не сможем отобразить коммент без идентификатора в листинге комментариев со ссылками на них. Ну и соответственно нужно написать, а главное вписать в модель наш код получения идентификаторов.
360 1571802
аноны, есть вопрос по опенкарту: где искать title страницы? в контроллере или вьюхах?
27bc813f3b96bea8da2ac09ae0caed86.jpg84 Кб, 772x842
361 1571808
>>571734
Не путай людей.

> Чего такого хуевого в циферках? Числовые идентификатры псевдо уникальны и псевдо последовательны.


А ещё они намного проще для работы с ними. Если у тебя не пиздец какой хайлоад с блокировками или репликациями (а у 99.99% проектов так и есть), то uuid'ы тебе не особенно помогут.

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


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

> Но и это еще не все. Если мы пишем RESTful API, то у нас возникает еще несколько проблем. Операция создания нового ресурса должна быть идемпотентной т.е. при нескольких вызовах с одними и теми же данными должна создаваться только одна запись


Ты очень сильно ошибаешься. Идемпотентными должны быть PUT-запросы. Сущности же как правило создаются POST'ами, которые как раз по определению не идемпотентны (и на самом деле проще для написания, потому что нет необходимости заранее генерировать уникальные ключи, а потом решать проблемы с дубликатами, обрывами соединения и так далее).

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


Тут ты втираешь нам какую-то дичь. Какое нахрен состояние "неготовности" к использованию? Ты сначала открываешь транзакцию, потом поочерёдно создаешь цепочку сущностей, если тебе нужно атомарно создать их несколько", потом коммитишь или откатываешь в случае ошибки. Всё, никакие велосипеды со вписыванием в код идентификаторов не нужны.
27bc813f3b96bea8da2ac09ae0caed86.jpg84 Кб, 772x842
361 1571808
>>571734
Не путай людей.

> Чего такого хуевого в циферках? Числовые идентификатры псевдо уникальны и псевдо последовательны.


А ещё они намного проще для работы с ними. Если у тебя не пиздец какой хайлоад с блокировками или репликациями (а у 99.99% проектов так и есть), то uuid'ы тебе не особенно помогут.

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


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

> Но и это еще не все. Если мы пишем RESTful API, то у нас возникает еще несколько проблем. Операция создания нового ресурса должна быть идемпотентной т.е. при нескольких вызовах с одними и теми же данными должна создаваться только одна запись


Ты очень сильно ошибаешься. Идемпотентными должны быть PUT-запросы. Сущности же как правило создаются POST'ами, которые как раз по определению не идемпотентны (и на самом деле проще для написания, потому что нет необходимости заранее генерировать уникальные ключи, а потом решать проблемы с дубликатами, обрывами соединения и так далее).

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


Тут ты втираешь нам какую-то дичь. Какое нахрен состояние "неготовности" к использованию? Ты сначала открываешь транзакцию, потом поочерёдно создаешь цепочку сущностей, если тебе нужно атомарно создать их несколько", потом коммитишь или откатываешь в случае ошибки. Всё, никакие велосипеды со вписыванием в код идентификаторов не нужны.
362 1571812
>>571629

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


Неистово плюсую, не могу не страдать от того ада, с которым приходится работать. Воистину, "миллионы мух не могут ошибаться". Желаю всей джаваскриптовой экосистеме скорейшей смерти, разложения и забвения (но я знаю, что такого не случится и это монопольное говно будет отравлять мне жизнь годами).
363 1571851
>>571808

>А ещё они намного проще для работы с ними


Чем проще? Я целую простыню написал о сложностях с числовыми идентификаторами. Uuid'ы не сильно медленнее и этого достаточно. "Помощь" от них именно в их глобальной уникальности и независимости от базы.

>если у тебя есть несколько источников, то в каждом из источников у тебя будет локальный идентификатор и внешний, условно, id и 1c_id


Забыл еще logistic_id. А еще забыл рассказать нахуя мне несколько идентификаторов одного и того же.

>Идемпотентными должны быть PUT-запросы


Я специально не писал тип запроса, потому что он не важен. Похуй PUT у тебя или POST, нужно избежать дублей.

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


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

>Какое нахрен состояние "неготовности" к использованию?


Поскольку у тебя нет идентификатора при создании придется писать конструктор без него:
new Comment(user_id, text, create_stamp). Поскольку поле id не задано getId() вернет null. Это и будет наше состояние неготовности. А должно быть так:
new Comment(id, user_id, text, create_stamp) и объект будет всегда работать одинаково.
Дураку понятно что нужно как-то засунуть идентификатор внутрь после сохранения. Это может сделать за нас orm, но только после запроса в базу. В доктрине например будет как-то так:
$comment = new Comment(user_id, text, create_stamp);
$entityManager->beginTransaction();
$entityManager->persist($comment);
$entityManager->flush();
// Здесь в сущности появляется идентификатор
$entityManager->commit();

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

Аноны, кто шарит в node.js - у меня возник такой вопрос - вот допустим я со стороннего сайта собираю всю его разметку и файлы.
К примеру с помощью модуля http.request(options[, callback]) или
http.get(url[, options][, callback]).
Тоесть я получаю из этих методов объект типа stream, который потоком льет мне разные данные.
И текст, и бинарные данные(картинки и прочее). Где почитать - а как парсить этот поток? как определить тип данны? Как определить допустим начало и конец бинарного файла в потоке?
Прошу инфы и сурс по этому вопросу.

В принципе и для пхп тема актуальна для меня.
365 1571924
>>571567
Объясню почему ты ебанько.
1.Ты домысливаешь то, чего я не говорил. Я не говорил что пхп плох.
2. Ты ебанько потому что не аргументируешь свою позицию. Ты ведь не сказал почему в пхп this напрямую в use нельзя передавать. Ты этого не знаешь. Но естественно тебе это не важно, тебе только бы спиздануть.Потому что тебе хочется создать маня мирок где нубы, и ты на опыте.
3.Ты апелируешь ко всякой не нужной хуите - какая то спесь, старшие говорят, хабра-статьи блядь с минусами, ты что вообще несешь?
Да адекватному челу похуй вообще на все это говно. Нужно писать код, читать документацию. А все "сообщество" состоящее из хуй пойми кого - это в смузи-треды наверное.

Хотя понятно что то для того что бы себе веса поддуть. Ну и опиздеть.
Как и я - отвечаю тебе тупо по фану. Потому что нихуя этот диалог не значит.
366 1571929
>>571812
>>571629
Ну, JS на фронте не умрет видимо никогда. Так что будет бурлить и бурлить. И бабло там будет - вэб морда, это то что завлекает клиента. А нода - вполне интересная вещь.
Вот только вкатываться в ноду средний вкатывальщик - охуеет от низкоуровневости, асинхронности и документации уровня "ну тип этот класс наследует от этого, ебись сам короче". А на экспрессе собирать банальный сайт на шаблонах - нахуя?
367 1571957
Не твой прошлый собеседник, однако попробую ответить.
>>571924

>Ты ведь не сказал почему в пхп this напрямую в use нельзя передавать.


На какой версии пилишь? По докам начиная с 5.4 $this неявно биндится. А версия эта ппц древняя. Собственно зачем после этого тебе надо передавать зис напрямую?
Если че use нужен для указания замыкаемых значений из родительского скопа, которые иным путем не могут попасть в замыкание.
Невозможность передать $this заключается в ошибке использования существующего имени. То есть $this у тебя в анонимной функции уже есть (само биндится), и ты дополнительно пихаешь еще через use. На этом моменте происходит ошибка.
И эта ошибка касается не только юзинга $this. Например function ($message) use ($message) {} выдаст абсолютно ту же самую ошибку, потому что имя $message уже занято.
Если есть острое желание перебиндить $this на лету, то это можно сделать через метод bind. Гуглить на раз по запросу анонимных функций, замыканий или Closure класса в пхп.
368 1571972
>>571957
Да я все понимаю. Я продолжаю эту не конструктивную беседу тупо по фану.

>>. То есть $this у тебя в анонимной функции уже есть (само биндится)


Однаок из документации :
"Замыкания могут также наследовать переменные из родительской области видимости. Любая подобная переменная должна быть объявлена в конструкции use. Начиная с PHP 7.1, эти переменные не должны включать superglobals, $this и переменные с теми же именами, что и параметры функции."

Без всякого сомнения разработчики пхп знают почему - "Начиная с PHP 7.1, эти переменные не должны включать superglobals, $this", однако я уверен что тот тип не знает причины этого так же как и я.

И как работает область видимости в JS и соответсвенно контекст this я тоже знаю.
369 1572006
Делаю задачу на файлообменник. А как лучше сделать базу юзеров? Одну таблицу для зарегистрированных и другую для анонов или всех в одной таблице, но тогда получается, что поля типа имя, имейл и т.д будут nullable?
370 1572038
>>572006
Зависит от того насколько сильно тебе надо проработать задачу.
В идеале должен быть User, с которым мы можем ассоциировать клиента. У него есть id, пароль, какой-нить хеш безопасти, все что нужно чтобы его идентифицировать. User есть всегда, если не найден, то создается новый.
Также есть Identity, которое представляет нашего User'а миру. Имя, мыло, любимый цвет, вся хуйня.
Ну и напоследок есть Role, которая определяет что наш User делать может, а что нет.

Важно что все эти части могут храниться хоть в одной таблице, но в коде разделены на разные объекты.
371 1572158
>>571851
Ты гарантированно неправ в том, что исключительный по сложности случай возносишь в постоянный и учишь, по сути, оверинжинирингу. Люди без тебя разберутся где им и что использовать.
372 1572176
>>572006

>Одну таблицу для зарегистрированных и другую для анонов


Зачем для анонов таблицу делать? Если в базе нет его хеша, то это просто гость. Гостю надо порезать права - это деморежим твоего сервиса фактически.
373 1572210

>Где почитать - а как парсить этот поток? как определить тип данны? Как определить допустим начало и конец бинарного файла в потоке?


У гугла и в документации. Где же ещё?
374 1572211
375 1572290
ребят вкатиться с ноды или Пайтона в пхп за день реально?В одну пиздатую компанию в своей мухосрани хочу,а там вакансии только на пхп джуна
376 1572302
>>572290
Нет лол.
377 1572303
>>572302
да я вроде пару туториалов симфони посмотрел,такой же нодовский экспресс
378 1572304
>>572303
На подводных камнях завалишься сразу.

PHP отличается и от JS, и от Питона.
379 1572305
>>572303
Ну и да - Симфони на Экспресс вообще не похожа.
380 1572306
>>572304
а что конкретного стоит почитать посмотреть не посоветуешь?может какие-нибудь отличия всякие что можно на симфони где нельзя на джанге
381 1572307
>>572305
да я путаюсь сонный,хотел сказать Джанго, mvc ормки
382 1572311
>>568022

Используй multipart/form или как-то так, и положи JSON туда как текстовое поле.
383 1572313
>>571851

Ты немного страдаешь фанатизмом. Инженер должен понимать, что есть подходы X, Y, Z, у них есть такие-то недостатки и преимущества. А ты просто говоришь, что X - это единственно верный подход.

Идентификаторы (имхо) очень полезны при необходимости иметь распределенные копии БД и синхронизировать их (например: SPA или мобильное приложение, которое может работать какое-то время в офлайне с локальной копией базы). Очевидно, что в отсутствие соединения с БД не можешь выделять последовательные идентификаторы.

С другой стороны, плюс числовых идентификаторов в том, что они меньше весят, читабельнее для человека и дают более короткие URL.
384 1572374
>>572313
А ты страдаешь наивностью. Инженер тебе нихуя не должен, он будет сидеть чесать жопу, а потом скажет что все нужно переписать с нуля.

Мой изначальный пост был предназначен для джунов и вкатывальщиков. И я больше чем уверен большинство из них ни на секунду не задумывалось о недостатках авто инкрементных праймари ключей. А откуда им о них узнать? В документации не написано, что при использовании serial primary key ты превращаешь мульти мастер репликацию в ад, а свое апи в очень специфичную штуку, далекую от стандартов.

Я больше скажу. Мне приходилось видеть как более умные люди, с проектами ценой миллионы далларов попадали в эту ловушку. И исходя из их и своего опыта я могу со всей уверенностью и фанатизмом утверждать что в 2020 году в коммерческой разработке нужно уметь пользоваться, в первую очередь, глобально уникальными идентификаторами. Потому что все что можно сделать с авто инкрементом можно сделать на uuid'ах, но не наоборот.

Про читабельный короткий url кстати полная хуйня. Те кто хочет читабельные ссылки делает их читабельными:
https://www.mvideo.ru/products/smartfon-apple-iphone-11-pro-max-512gb-gold-mwhq2ru-a-30045457
https://www.clever-cloud.com/blog/engineering/2015/05/20/why-auto-increment-is-a-terrible-idea/
https://www.youtuba.com/watch?v=FU1yjkCqBB4
385 1572461
>>571851

> Чем проще? Я целую простыню написал о сложностях с числовыми идентификаторами.


Тем, что это строки. Что их нужно генерировать на клиенте заранее. Что их нужно правильно хранить на уровне бд и правильно сравнивать (в pg это означает ещё и кастинг типов). Что могут быть коллизии. Что тебе придётся или валидировать айдишники, прилетающие от клиентов, или смириться с тем, что там могут быть "00000000-0000-0000-0000-000000000000", "000000000000000000000", "", "15", "я покакал". Что в случае подвисшего соединения на уровне бд ты словишь ошибку вида duplicate key, если не используешь upsert. И так далее.
Это всё решаемо (я сам использую uuid'ы), но нахуя ты здесь орёшь, что их нужно использовать ПРЯМ ЩАС ВЕЗДЕ ТОЛЬКО ИХ? Тут сидят джуниоры, для которых просто запустить веб-сервер или просто законнектиться к бд - уже достижение. Ты понимаешь, что у них мозги лопнут ещё и с uuid'ами разбираться? Все ORMки поддерживают автоинкремент, ну и славно, пусть так и будет.

> Забыл еще logistic_id. А еще забыл рассказать нахуя мне несколько идентификаторов одного и того же.


Потому что у тебя потом появятся внешние системы (условно, google oauth provider и так далее), в которых айдишники будут свои. Единый сквозной id по всей системе - штука не всегда достижимая.

> Я специально не писал тип запроса, потому что он не важен. Похуй PUT у тебя или POST, нужно избежать дублей.
Ты пиздец странный. Никто избегать дублей не должен, в общем случае. PUT (или, кстати, PATCH) должен гарантировать идемпотентность, POST - нет.

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


И это уже будет update, а не create. Не путай защиту от дубликатов и операции создания/обновления.

> В доктрине например будет как-то так


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

> Чем проще? Я целую простыню написал о сложностях с числовыми идентификаторами.


Тем, что это строки. Что их нужно генерировать на клиенте заранее. Что их нужно правильно хранить на уровне бд и правильно сравнивать (в pg это означает ещё и кастинг типов). Что могут быть коллизии. Что тебе придётся или валидировать айдишники, прилетающие от клиентов, или смириться с тем, что там могут быть "00000000-0000-0000-0000-000000000000", "000000000000000000000", "", "15", "я покакал". Что в случае подвисшего соединения на уровне бд ты словишь ошибку вида duplicate key, если не используешь upsert. И так далее.
Это всё решаемо (я сам использую uuid'ы), но нахуя ты здесь орёшь, что их нужно использовать ПРЯМ ЩАС ВЕЗДЕ ТОЛЬКО ИХ? Тут сидят джуниоры, для которых просто запустить веб-сервер или просто законнектиться к бд - уже достижение. Ты понимаешь, что у них мозги лопнут ещё и с uuid'ами разбираться? Все ORMки поддерживают автоинкремент, ну и славно, пусть так и будет.

> Забыл еще logistic_id. А еще забыл рассказать нахуя мне несколько идентификаторов одного и того же.


Потому что у тебя потом появятся внешние системы (условно, google oauth provider и так далее), в которых айдишники будут свои. Единый сквозной id по всей системе - штука не всегда достижимая.

> Я специально не писал тип запроса, потому что он не важен. Похуй PUT у тебя или POST, нужно избежать дублей.
Ты пиздец странный. Никто избегать дублей не должен, в общем случае. PUT (или, кстати, PATCH) должен гарантировать идемпотентность, POST - нет.

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


И это уже будет update, а не create. Не путай защиту от дубликатов и операции создания/обновления.

> В доктрине например будет как-то так


По-хорошему следовало бы разделять набор полей, требуемый для создания сущности и набор полей самой сущности (там автозаполняемых полей может быть так-то дохрена). И то, что в доктрине для удобства предлагают оперировать полуинициализированными сущностями не означает, что это хорошо или что так везде.
386 1572595
Анончики, не могу придумать, как должна выглядеть структура БД под мои требования, помогите плиз.

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


Как сохранить в БД все эти связи?
387 1572601
>>572595
Набор предметов и связей между ними - это по сути граф, так что смотри методы представления графа в реляционных бд.
Я бы хранил отдельно таблицу с предметами и отдельно со связами:
items (id, name, description, level, cost, icon)
item_dependencies (source_id, target_id)
Ну и кури работу с графами типа алгоритма Дейкстры, оно тебе потребуется, когда захочешь найти расстояние между двумя точками в графе, циклы и так далее.
388 1572641
>>572461

>Что тебе придётся или валидировать айдишники


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

>PUT (или, кстати, PATCH) должен гарантировать идемпотентность, POST - нет


Ты доебался со своим POST'ом. Вот тебе кароч статья "Идемпотентность апи для дошкольников" https://habr.com/ru/company/yandex/blog/442762/. Если и после нее не дойдет, то плиз не траль больше.

>По-хорошему следовало бы разделять набор полей, требуемый для создания сущности


Exactly. И идентификатор должен быть среди этих полей.

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


Давай ты просто напишешь сниппет, в котором у тебя будет сразу полностью инициализированная сущность.
Или можешь поправить мой https://3v4l.org/B1PQL чтобы работало так как ты считаешь правильным.
389 1572668
>>572641

> А числовые идентификаторы ты не валидируешь что-ли?


Это разные вещи, их не надо валидировать на этапе создания сущности.

> Если и после нее не дойдет, то плиз не траль больше.


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

> Exactly. И идентификатор должен быть среди этих полей.


В случае uuid'ов - да. В случае инкрементальных айдишников - нет.

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


Пожалуйста: https://3v4l.org/k7CDM
Обрати внимание, всё статически проверяемо, если айдишник есть - то его можно получить, а если его нет - то нельзя, никакой неопределённости. Ситуация, когда ты полагаешься, что внутри function logEntity(Entity $e) { echo $entity->getId() . ' ' . serialize($entity) . PHP_EOL;} не произойдёт ошибки потому что это никто никогда не передаст туда недоделанную сущность - невозможна by design.
390 1572677
>>572668
>>572641
Или ещё можно вот так: https://3v4l.org/FX4Ms
Что тоже статически гарантирует валидность кода.
391 1572703
>>572677
А зачем ты сеттер для text сделал, а а АААА? По феншую нужно новый коммент с новым id
мимо
392 1572704
>>572595
А обязательно использовать реляционные БД?
393 1572708
>>572703
Во-первыз, было лень много писать. Во-вторыз, не хотел ударяться в излишнюю иммутабельность, местным пехапешникам хотя бы с типизацией разобраться нормально для начала.
394 1572756
>>572708

>местным пехапешникам


>вы говно, а я в красивом платье красном


>хоть и написал банальную хуйню

395 1572768
>>572756

>хоть и написал банальную хуйню


>@


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


Вся суть хейтеров.
396 1572783
>>572668

>Это разные вещи


Схуяли разные? Какая разница пришел с клиента числовой id или uuid, все равно надо валидировать.

>В случае uuid'ов - да. В случае инкрементальных айдишников - нет.


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

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

>А должно быть так: new Comment(id, user_id, text, create_stamp)



Теперь для полноты картины представь насколько был бы проще твой код с uuid'ом. Сразу минус наследование, минус запрос при создании объекта и минус фабричный метод.
397 1572801
Сосисыч, нужна помощь.

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

Суть работы: поддержка сайтов на неткате, баг фиксов и фикс багов.

Подскажи книг, где сразу же произходит инъекция связки php + sql в мозг (книга на пикриле подойдет?).

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

Но всерьез это не воспринимаю, скорее просто как небольшой спойлер того, что есть и что можно делать с пхп.
398 1572895
>>572783
Если тебя так сильно задел фабричный метод, то смотри мой первый сниппет.

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


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

> Превратив свой репозиторий в фабрику ты создал неприятное ограничение: невозможно создать объект без запроса в базу.


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

Более того, твой "объект", как ты его предлагаешь использовать, по своей природе сомнителен. Представь, что у него кроме айдишника есть целая куча автогенерённых (во время сохранения) полей типа даты создания и прочего. Тебя самого не пугает, что в твоей системе бродят объекты, неотличимые от настоящих, но при этом пустые? Как может существовать заказ без даты создания, к примеру? У тебя полюбому куча логики будет на неё завяано. И в теории стоит кому-то перепутать и прокинуть в систему $order = new Order() вместо $order = $order = new Order(); $db->persist($order) - как внутри системы в рантайме поплывут трудновоспроизводимые ошибки.
Я тебе уже второй или третий пост пытаюсь объяснить, что код должен быть статически корректен. Не должно быть возможности засунуть в гипотетический process несуществующую недоинициализированную сущность и получить от внешне валидного объекта NULL вместо значения там, где ты этого не ждёшь.
Всякие active record'ы. которые это позволяют, забивают на логику предметной области для ускорения написания шлёп-шлёп-кода.

> Теперь для полноты картины представь насколько был бы проще твой код с uuid'ом. Сразу минус наследование, минус запрос при создании объекта и минус фабричный метод.


Он был бы в точности таким-же, только GenerateId создавал бы uuid.
398 1572895
>>572783
Если тебя так сильно задел фабричный метод, то смотри мой первый сниппет.

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


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

> Превратив свой репозиторий в фабрику ты создал неприятное ограничение: невозможно создать объект без запроса в базу.


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

Более того, твой "объект", как ты его предлагаешь использовать, по своей природе сомнителен. Представь, что у него кроме айдишника есть целая куча автогенерённых (во время сохранения) полей типа даты создания и прочего. Тебя самого не пугает, что в твоей системе бродят объекты, неотличимые от настоящих, но при этом пустые? Как может существовать заказ без даты создания, к примеру? У тебя полюбому куча логики будет на неё завяано. И в теории стоит кому-то перепутать и прокинуть в систему $order = new Order() вместо $order = $order = new Order(); $db->persist($order) - как внутри системы в рантайме поплывут трудновоспроизводимые ошибки.
Я тебе уже второй или третий пост пытаюсь объяснить, что код должен быть статически корректен. Не должно быть возможности засунуть в гипотетический process несуществующую недоинициализированную сущность и получить от внешне валидного объекта NULL вместо значения там, где ты этого не ждёшь.
Всякие active record'ы. которые это позволяют, забивают на логику предметной области для ускорения написания шлёп-шлёп-кода.

> Теперь для полноты картины представь насколько был бы проще твой код с uuid'ом. Сразу минус наследование, минус запрос при создании объекта и минус фабричный метод.


Он был бы в точности таким-же, только GenerateId создавал бы uuid.
399 1572940
>>572895

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


Он меня не задел. Фабричные методы и фабрики норм тема. Только у тебя фабрика слилась с репозиторием. И это не случайно - это результат зависимости от базы. Структура базы влияет на твой код, а он про неё вообще знать не должен.

>Именно так, это DTO, он для того и нужен, чтобы формализовать структуру данных, необходимую для созания сущности


Проблема здесь в том что у тебя dto превращается в сущность. Это отличный пример некорректного использования наследования. CommentBase и Comment не равноценны и не взаимозаменяемы. Полиморфизм убит. Помянем.

>Представь, что у него кроме айдишника есть целая куча автогенерённых (во время сохранения) полей типа даты создания и прочего


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

>Или можешь поправить мой


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


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

>А должно быть так: new Comment(id, user_id, text, create_stamp)



Вообще самое важное здесь сохранение до формирования объекта. Вообще смысл существования модели в поддержании корректности состояния.
получаем данные -->
меняем модель -->
модель в непротиворечивом состоянии -->
сохраняем состояние в базу

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

Такого странного нагромождения как у тебя я еще не видел, обычно просто делают возможность использовать метод generateId() в нужном месте кода.
new Comment($db->generateId(), $userId, 'Test comment')
С uuid'ом было бы так
new Comment(new Uuid, $userId, 'Test comment')
399 1572940
>>572895

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


Он меня не задел. Фабричные методы и фабрики норм тема. Только у тебя фабрика слилась с репозиторием. И это не случайно - это результат зависимости от базы. Структура базы влияет на твой код, а он про неё вообще знать не должен.

>Именно так, это DTO, он для того и нужен, чтобы формализовать структуру данных, необходимую для созания сущности


Проблема здесь в том что у тебя dto превращается в сущность. Это отличный пример некорректного использования наследования. CommentBase и Comment не равноценны и не взаимозаменяемы. Полиморфизм убит. Помянем.

>Представь, что у него кроме айдишника есть целая куча автогенерённых (во время сохранения) полей типа даты создания и прочего


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

>Или можешь поправить мой


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


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

>А должно быть так: new Comment(id, user_id, text, create_stamp)



Вообще самое важное здесь сохранение до формирования объекта. Вообще смысл существования модели в поддержании корректности состояния.
получаем данные -->
меняем модель -->
модель в непротиворечивом состоянии -->
сохраняем состояние в базу

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

Такого странного нагромождения как у тебя я еще не видел, обычно просто делают возможность использовать метод generateId() в нужном месте кода.
new Comment($db->generateId(), $userId, 'Test comment')
С uuid'ом было бы так
new Comment(new Uuid, $userId, 'Test comment')
400 1573016
>>572940
Мне повторять, что у того, что ты называешь моделью (что, кстати, не совсем корректно), может быть дохера полей, определяемых во время создания/сохранения?
Соответственно, ты не можешь получить полноценную модель, просто имея данные. Всё, твоя схема

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


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

> получили данные --> провалидировали --> записали


Если сущность обновляется, то

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


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

> Структура базы влияет на твой код, а он про неё вообще знать не должен.


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

> Проблема здесь в том что у тебя dto превращается в сущность


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

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

С моей точки зрения, ты пытаешься использовать сущности до их создания (сохранения), что сразу порождает возможные некорректные состояния (да и в принципе состояния). Соответственно, так как единственный способ получить весь необходимые набор данных - это сделать запрос в базу, то и сущность у тебя в коде должна появляться после insert'а, а не до. И даже uuid'ы эту проблему не решат, потому что таких полей бывает вагон, created_at, updated_at, calculated_total, calculated_hash и тд и тп.
Как это делать, через отдельную структуру (наследовать здесь чуть проще, чтобы код не дублировать лишний раз), фабричный метод в репозитории (ничего страшного, объект ты и так создать можешь сам, через конструктор - этот фабричный метод отвечает за его создания через взаимодействие с бд) или как-то по-другому - не так важно, важно формализовать то, что ты используешь для создания и то, что ты используешь для, к примеру, апдейта.

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

А, и да, хватит называть сущности моделями! Мы здесь моделируем бизнес-процессы, в коде. И моделью является, сюрприз, модель бизнеса, всякие функции/сервисы calculatePrice, calculateDiscount + сущности, то есть Entity Object'ы.
400 1573016
>>572940
Мне повторять, что у того, что ты называешь моделью (что, кстати, не совсем корректно), может быть дохера полей, определяемых во время создания/сохранения?
Соответственно, ты не можешь получить полноценную модель, просто имея данные. Всё, твоя схема

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


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

> получили данные --> провалидировали --> записали


Если сущность обновляется, то

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


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

> Структура базы влияет на твой код, а он про неё вообще знать не должен.


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

> Проблема здесь в том что у тебя dto превращается в сущность


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

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

С моей точки зрения, ты пытаешься использовать сущности до их создания (сохранения), что сразу порождает возможные некорректные состояния (да и в принципе состояния). Соответственно, так как единственный способ получить весь необходимые набор данных - это сделать запрос в базу, то и сущность у тебя в коде должна появляться после insert'а, а не до. И даже uuid'ы эту проблему не решат, потому что таких полей бывает вагон, created_at, updated_at, calculated_total, calculated_hash и тд и тп.
Как это делать, через отдельную структуру (наследовать здесь чуть проще, чтобы код не дублировать лишний раз), фабричный метод в репозитории (ничего страшного, объект ты и так создать можешь сам, через конструктор - этот фабричный метод отвечает за его создания через взаимодействие с бд) или как-то по-другому - не так важно, важно формализовать то, что ты используешь для создания и то, что ты используешь для, к примеру, апдейта.

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

А, и да, хватит называть сущности моделями! Мы здесь моделируем бизнес-процессы, в коде. И моделью является, сюрприз, модель бизнеса, всякие функции/сервисы calculatePrice, calculateDiscount + сущности, то есть Entity Object'ы.
401 1573020
Всем привет.
Не очень понимаю, как работает шаблонизация. Вот я делаю задачку про студентов, там надо сделать так, чтобы можно было отредактировать запись из той же формы, поэтому, как я понимаю, неплохо бы чтобы после отправки загружалась форма, заполненная данными. Я беру из кук пароль, ищу по нему данные в бд, помещаю их в массив, делаю инклюд шаблона формы. В шаблоне пишу типа:
<form>
<?php if(!empty($result)):?>
<input value="<?=$result['name']?>">
<input>
<input>
...
<?php endif;?>
</form>
Но, если скрипт запускается в первый раз и кук ещё нет, то пхп ругается, что я пытаюсь вывести незаданную переменную. Я думал, что раз if не сработал, то вставки в инпутах тоже не должны работать и там будет просто пустое вэлью.
402 1573045
>>573020
Скорее всего у тебя есть $result, но в нём нет 'name'
403 1573048
У меня какая-то фигня со шрифтами. Есть сайт, который использует нужные шрифты. Я их копирую к себе, подключаю, использую. И - внезапно! - шрифты другие. Причём, зараза, на первом сайте все шрифты выглядят нормально, а на моё почему-то русские с засечками (хотя засечек быть не должно).
Подключение:
@font-face {
font-family: OpenSansRegular;
src: url('./components/fonts/OpenSansRegular.eot');
src: url('./components/fonts/OpenSansRegular.woff2') format('woff2'),
url('./components/fonts/OpenSansRegular.woff') format('woff'),
url('./components/fonts/OpenSansRegular.ttf') format('truetype'),
url('./components/fonts/OpenSansRegular.svg#OpenSans-Regular') format('svg'),
url('./components/fonts/OpenSansRegular.eot?#iefix') format('embedded-opentype');
font-weight: normal;
font-style: normal;
}

Использование:
body {
font-family: OpenSansRegular;
}

В консоле хрома шрифт выводится правильно: font-family:OpenSansRegular;
Я не понимаю, как так вообще?
404 1573060
>>572801
Блэт, бамп.
405 1573209
>>573016

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


Ну охуеть теперь. Сам выдумал соломенно чучело, сам его победил. Я об этом и говорю уже сколько постов. У тебя единственный способ избежать противоречивого состояния - создавать Comment в репозитории. Это само по себе ограничение. Если ты просто напишешь new Comment(334, 'Коммент шредингера') ты не можешь знать сохранится он или нет.

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


Ты реально жопочтец. Мой поинт в том что uuid'ы позволяют создавать сразу корректные объекты, легко и непринужденно, а авто инкременты накладывают ограничения, при которых ты не можешь создать объект до создания записи в бд.
Вот так выглядит code first подход https://3v4l.org/c81Oi. Поскольку ты жопочтец препреждаю: этот код очень похож на продакшен код, но он специально упрощен, чтобы места меньше занимать. Как видишь он полностью непротиворечив, и в принципе не может попасть в некорректное состояние. Тут есть пример корректного наследования с соблюдением полиморфизма. А самое важное то, что здесь даже не воняет персистом - код полностью независим от базы.

>что ты называешь моделью (что, кстати, не совсем корректно)


>А, и да, хватит называть сущности моделями!


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

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


Не корректная аналогия. Тут правильней сравнить сварку и резьбовое соединение. Нужно сверлить дырки, нарезать резьбу, с циркулем ебаться, но результат получается более гибкий. А в целом есть такое понятие как best practices.
406 1573260
Почему из PHP сейчас модно выкатываться, когда есть 7.4 (скоро 8 с JIT), есть Laravel/Symfony, есть composer, есть богоподобный PHPStorm. Короче, есть все для удобной, быстрой и качественной веб-разработки. Но люди продолжают валить. Почему?
407 1573281
>>573260
Это не язык микросервисов, это сейчас и не язык для MVP, так что ниша рыночная получилась жквери пхп мускл битрикс для мелкого бизнеса или клепание обычных крудов на том самом ларавел для компаний среднего пошиба.
408 1573312
>>573260
Всё нормально, пхп переходит из ниши для говнокодеров (не полностью, CMSки остаются) в нормальное программирование, при этом балласт сваливается и идёт говнокодить в мир js.
Серьёзные чуваки, которые писали на пыхе, остаются писать на пыхе.
409 1573323
>>573281
Вот кстати, часто вижу в вакансиях связку PHP+Go. Т.е. получается, что основной бэк пишется на PHP из-за удобных веб-фреймворков, а какие-то части выносятся в Go. Ведь писать весь бэк на Go сильно больно.
410 1573339
>>573312

>при этом балласт сваливается и идёт говнокодить в мир js.


Балласт ли.
411 1573349
>>572801
Бэмп.
412 1573505
>>573312
С языка снял.

>>573339

>Балласт ли.


Да обычные мартышки. JS сам по себе гораздо проще чем нынешний ПХП с его ООП в стиле Java-энтерпрайза.
413 1573518
>>573505

>чем нынешний ПХП с его ООП в стиле Java-энтерпрайза


Зачем тогда ПХП, если есть Java?
414 1573520
>>573312

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


Серьезные чуваки никогда не писали на пыхе.
415 1573531
>>573312
Удел PHP - мелкий и средний бизнес разной степени говнистости. Ну будет крупные фирмы с большими деньгами его использовать (те крупные, что используют щас, это легаси, выросшее из стартапа).
416 1573532
Что в 2020 спрашивают на собесах по пыхе?
417 1573534
>>573520
Весь веб - это нихуя не серьезные чуваки.
418 1573536
>>573531

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


Не будут*
419 1573538
>>573312

>>при этом балласт сваливается и идёт говнокодить в мир js.


Извини, но "сваливать говнокодить" в node.js для нуба - это не взлетит.
Для хеловорда порог вхождения совсем разный. На пхп - просто index.php вы корне апача. А нода уже большего требует.
А если в ноде уйти дальше чем "мам, смотри я на экспрессе статику отдаю" - боюсь такой вкатывальщик говна поест.
А вот во фронт они конечно ломанутся табуном.
420 1573539
>>573534
Ну хз. Безопасность и какие-нибудь супернагруженные сервера банков это жёска. Это на джаве всё.
421 1573540
422 1573548
>>573518
Такие вопросы бессмысленны - он занял свою нишу на рынке и так стало.
423 1573555
>>573534
Проснись, маня, и глянь зарплаты.
424 1573556
>>573531
Серьёзно, я не понимаю, почему кого-то там должно парить, какой у него удел? Почти весь веб один хуй такая же бесполезная работа, как и андройд-разработка, почти никакие разработчики ни на что на самом деле не влияют, важно лишь то, чтоб платили. Это только у романтиков программисты изменят мир, на деле же дай бог, чтоб в твоей работе была хоть одна миллионная процента уникальности. Даже нейросеточники ничего кроме обработки картинок не делают, что уж тут говорить про веб. Каждого можно заменить.
425 1573561
>>573538
Ну хз. Много пхпшников ноду знают неплохо. Просто потому, что голый пхп мало кому нужен и нужно подтягивать жавускрипт, а нода - суть тот же бекенд и понимается легко.

А так да - макаки сейчас все во фронтенде копошатся, а в ноду только самые смелые лезут и зачастую обламываются.
426 1573565
>>573556

>Серьёзно, я не понимаю, почему кого-то там должно парить, какой у него удел?


С точки зрения карьеры должны парить.
427 1573570
>>573565
Карьера программиста дальше только в менеджеры ведёт. Хоть ты яву дрочи, хоть пхп, хоть жс.
Поэтому и правда похрен.
428 1573575
>>573570
Java тимлид и PHP тимлид - это дичайше разные вещи и не только по ЗП.
429 1573579
>>573575

>Java тимлид


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

А вообще примерно одинаково они получают.
430 1573583
>>573579
Тимлид в Сбере и тимлид в Сайенге одинаково получают?
431 1573586
>>573583
Давай без манёвров - я про среднюю зарплату говорил.
432 1573592
>>573586
Никаких маневров, это просто говорит о потенциальных возможностях языка. И да, это вполне средне.
433 1573595
>>573592

>возможностях языка


карьерных
434 1573597
>>573592

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


Тимлид в Сбере говорит? Или в Сайенге? И причём тут сам язык?
435 1573598
>>573592

>это вполне средне


Средняя зарплата тимлида - везде примерно одинаковая в силу одних и тех же обязанностей. Язык тут вообще не причём.
Иди и посмотри на ХХ сам.
И не пиши этой детской ерунды тут больше.
437 1573616
>>572801
Бамп.
Неужто пост настолько тупой?
438 1573617
>>573610
И где здесь дичайше разные вещи? Как ты разрыв в зарплате назвал.
Короче, ясно с тобой всё - маняврировать до последнего будешь.
image.png231 Кб, 500x500
439 1573624
>>573616
Сам перечитывал то, что написал?
Пишешь, что хочешь учить, спрашиваешь что тебе учить. Потом говоришь, что не серьёзно.
Может нам тебя ещё уговаривать начать?

Жаль пикрелейтед с нулевой программача убрали - хорошая ссылка была.
440 1573716
>>573561

>> ноду знают неплохо


Скорее хорошо знают предметную область. Разобрался с асинхронностью, событийно-ориентированностью - и вперед, ебашь круды. Промисы завезли. Асинк/авейт завезут, и прости Будда вообще ничем отличаться по написанию кода от пхп не будет. Когда знаешь что делать, понимание как делать приходит на ходу в обнимку с документацией которая у ноды - говно.

Есть конечно детали, и по настоящему сложное что то писать - нужно хорошо платформу знать.

Бля, когда же я отучусь трепать языком на ненужные темы блядь. Пиздец просто.
441 1573724
>>573716

>Скорее хорошо знают предметную область.


Ну так
Технологии > язык программирования
442 1573795
>>573045
Блин, вот если у меня нет $result, то всё, что между if и endif вообще не появляется, включая html код. То есть идет <form> и потом сразу </form> Так и задумано? Я думал это должно влиять только на пхп код во вставках.
443 1573964
>>573531

> те крупные, что используют щас, это легаси, выросшее из стартапа


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

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

>>573538

> Для хеловорда порог вхождения совсем разный.


Ну да, да, подловил. Начальный уровень на пыхе действительно проще, всякие вордпрессы, шаблончики, плеск и тд
Но с повышением уровня у пыхи есть симфони-like фреймворки и паттерны, архитектура и базы данных, что как-то сложна, многие идут сосать смузи на фронтенд или "фуллстеками".
444 1573986
А что такое tpl файлы?
445 1573998
>>573986
Как правило, это шаблоны с html-ем и phpшными вставками.
В серьёзном(ТМ) программировании обычно разделяют файлы с логикой (кодом) и файлы с шаблонизацией/рендером html.

>>573795
Я тыщу лет не использовал пехапешный шаблонизатор, но насколько помню, if'ы ограничивают вообще всё. Условно, представь, что перед каждой строчкой без php-кода, написан echo.
446 1574059
>>573998
Блин, ну хреново тогда. Ладно, спасибо.
447 1574081
>>573795
Пиши так:
<input value="<?=$result['name'] ?? 'аноним'?>">
и ничего отваливаться не будет.
if тоже убери.
448 1574095
>>574081
О, крутой оператор, чет не знал про него, спасибо.
449 1574121
>>573048

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

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

Вроде как моя мысль логичная и правильная, но везде их используют. Что у верстальщиков в голове, я понять никогда не мог, хотя сам верстал.
450 1574131
>>573209

Ты переживаешь по поводу необходимости простановки id, но зачем он тебе нужен? В той же Доктрине объекты прекрасно (кхм) связываются в графы, не имея id.

По коду тут: https://3v4l.org/c81Oi

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

Наличие 2 разных сущностей для комментария очень все осложняет.

Далее, длинные id тяжелее воспринимать при отладке, чем короткие числа.

Использовать __toString плохо, так как это не позволяет обнаруживать ошибки, когда ты вместо строки передал объект. ты усложняешь обнаружение и отладку багов. Вместо неявного вызова __toString() лучше сделать явный метод asString() и использовать его.

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

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

В PHP есть Симфони и Доктрина, и код пишется последовательно, а что в Ноде? Там есть DataMapper, или лишь ActiveRecord?
452 1574138
>>573964

>В итоге они или умирают, или раскручиваются и взлетают, становясь ещё одним "легаси проектом на php". Из совсем недавнего, в последний год взлетел Ситимобил. Угадай, на чём он написан с одной попытки?



Да, поэтому нет смысла долгосрочно инвестировать себя в PHP. Если уж очень сильно хочется энтерпрайза, то учить надо не пых с Symfony, а жабу со Spring'ом. Надоест клепать круды и делать очередную абстракцию над абстракцией, можно перекатиться в бигдату, там тоже все на жабе. Надоест бигдата, можно катнуться в скалку с акторами и т.д. И все это делается в рамках одной экосистемы - опыт аккумулируется (а не обнуляется), зарплата растет, общий лвл в профессии монотонно прокачивается без нервов, срывов и кризисов выгорания. Так?
453 1574139
>>574133
Sequelize, TypeORM
Но хз, насколько они близки по функциональности к доктрине.
454 1574154
Не видел ни одной нормальной ОРМ на пхп, все дико тормозит
455 1574156
>>574154
ОРМ это для джавы. Там все четко по спецификации JPA.
456 1574166
>>574131

>Использовать __toString плохо, так как это не позволяет обнаруживать ошибки, когда ты вместо строки передал объект. ты усложняешь обнаружение и отладку багов. Вместо неявного вызова __toString() лучше сделать явный метод asString() и использовать его.


Вот это сомнительное утверждение.
Вместо специально предназначенного метода предлагаешь всё вручную прописывать. Мартышкин труд какой-то.
457 1574175
>>574138
Ну мы сами разберёмся куда нам себя инвестировать, ок? Без твоих советов.
458 1574183
>>574175
Стало быть, ответ "да".
459 1574190
>>574183
Да как хочешь.

Только съеби со своими советами куда-нибудь в туман.
460 1574196
>>574190
Ты ебанутый? Я сам пыхарь, кидаю тему для обсуждения. Так что сам съеби, если нечего по делу сказать.
461 1574206
>>574196
Ты недоразвитый, скорее всего, какой-то. Только идиоту может придти в голову завалиться в пхп-тред и начать раздавать советы кому куда себя инвестировать.
Инвестируй себя нахуй.
462 1574213
>>574138
Если ты хочешь прямо сейчас пойти работать в крупную корпорацию - да, конечно, учи джаву.
У меня, например, есть знакомые сеньоры, которые на дух не переносят корпорации. Работают в стартапах и небольших денежних компаниях, на той же пыхе.
463 1574279
>>574196
Ну если пхп это "форк" джавы, то потенциально значит что и перекат будет сильно проще.
А вообще, мне кажется что сильно уверенному в себе мидллу+ любой перекат дасться легко.
Ну а если ты пять лет на пхп для битрикса писал - ну хуле тут скажешь. Тоже ниша.
464 1574328
Как лучше сделать соединение с базой данных в bootstrap файле? Подключение идёт в переменную, и брать в классах как $GLOBALS['connection'], или передавать переменной? Или я совсем не правильно это понял?
465 1574487
>>574328
Глобальные переменные - зло.
Я хз, какое конкретно задание ты выполняешь (так что могу сейчас всё для тебя усложнить), но по-правильному нужно класть коннект в DI-контейнер и потом инжектить его во все сервисы, где тебе нужна работа с базой.
466 1574492
>>574487
Я делаю студентов (из ОП поста). В общем подумал так - сделаю общий DataGateway, где создается подключение через __construct и удаляется через __destruct, и наследоваться от него, например в StudentDataGateway
467 1574504
>>574487
Не путай человека. DI - это не категорическое требование. Это вариант.
Пусть сначала с PDO подрочится, с моделями.

>>574328
Сделай отдельный класс DB. В нем создай подключение pdo, и сделай пару методов. Типа просто поиск по sql, с возвращением значения, без возвращения. Дефолтный поиск всех строк. DB можно сделать синглтоном, тупо для опыта. Так называемые "антипаттерны" тоже нужно поиспользовать, что бы понять где они нужны а где нет.
И уже от этого класса наследуй класс какой нибудь модели.
Я что то типа такого делал.
468 1574515
>>574504

>Не путай человека.


Но вообще он прав насчёт глобальных переменных, а DI-контейнер тупо удобен и пишется за 2 метода в 5 строк.
469 1574522
>>574515
Я и не спорю с тем что он прав. Но настоящее понимание придет ток когда сам дорастешь. Для этого придется и покосячить, когда поймешь чем плохо одно - гораздо лучше понимаешь чем хороша альтернатива.
470 1574528
>>574522
Помню когда своих студентов писал, то 3 раза переписывал пока не пришёл к чему-то похожему на слим. Перепробовал всякое на нём - фабрики, роутинг в yii стиле, синглтон, реестр, чёрта лысого. Месяца 4 игрался по вечерам.
Потом забавно было встречать это у других разработчиков на известных проектах.
471 1574543
>>574131

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


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

>Делать какие-то сложные функции прямо в сущностях вроде moderate() - плохо


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


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

>Вместо неявного вызова __toString() лучше сделать явный метод asString()


Ну вообще я согласен, использовать __toString() плохо. Использовать рефлексию еще хуже, но DI контейнер без неё не напишешь. Код, в котором я использую __toString() очень низкоуровневый. Он пишется один раз на проект и никогда не рефакторится. Класс Id вообще должен быть абстрактным. В идеале в такие же примитивы оборачиваются все значения, которые используются в домене.

>Также, я не очень понял, предлагаешь ли ты запретить невалидные сущности


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


Ты валишь все в кучу. Есть форма для пользовательских данных, и есть валидаторы этих данных. Если что-то там не валидно мы возвращаем пользователю ошибки. Лезут ли эти валидаторы в БД в общем-то до пизды.

А есть наша модель доменная охуенная. Не модель в смысле объект Comment, а модель в смысле совокупность объектов. Каждый объект или метод в ней - это набор правил. И если вот эти правила нарушаются, то это уже Exception. Мы формулируем уравнение, как ты писал "статически корректное", которое потом проверяем подставляя в него значения.
Если модель после всех манипуляций с ней не ебанулась с ошибкой, то мы получаем из модели состояние опять рефлексия. И сохраняем его. Или не сохраняем, а генерим события. Или сохраняем и генерим события. Это уже не важно, потому что мы абстрагировались от хранилища данных и можем себе позволить любую хуйню.
471 1574543
>>574131

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


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

>Делать какие-то сложные функции прямо в сущностях вроде moderate() - плохо


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


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

>Вместо неявного вызова __toString() лучше сделать явный метод asString()


Ну вообще я согласен, использовать __toString() плохо. Использовать рефлексию еще хуже, но DI контейнер без неё не напишешь. Код, в котором я использую __toString() очень низкоуровневый. Он пишется один раз на проект и никогда не рефакторится. Класс Id вообще должен быть абстрактным. В идеале в такие же примитивы оборачиваются все значения, которые используются в домене.

>Также, я не очень понял, предлагаешь ли ты запретить невалидные сущности


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


Ты валишь все в кучу. Есть форма для пользовательских данных, и есть валидаторы этих данных. Если что-то там не валидно мы возвращаем пользователю ошибки. Лезут ли эти валидаторы в БД в общем-то до пизды.

А есть наша модель доменная охуенная. Не модель в смысле объект Comment, а модель в смысле совокупность объектов. Каждый объект или метод в ней - это набор правил. И если вот эти правила нарушаются, то это уже Exception. Мы формулируем уравнение, как ты писал "статически корректное", которое потом проверяем подставляя в него значения.
Если модель после всех манипуляций с ней не ебанулась с ошибкой, то мы получаем из модели состояние опять рефлексия. И сохраняем его. Или не сохраняем, а генерим события. Или сохраняем и генерим события. Это уже не важно, потому что мы абстрагировались от хранилища данных и можем себе позволить любую хуйню.
472 1575112
>>574121

>Что у верстальщиков в голове, я понять никогда не мог, хотя сам верстал.


Заказчик говорит "Сделай ИМЕННО эти шрифты".

И вырезанной кириллицы нет. Это именно те же самые файлы шрифтов. Взятые из одного проекта и добавленные в другой.
473 1575127
Аноны, а можно ли стать фрилансером или удаленщиком сразу, минуя мучительные годы работы в офисе? Я просто хочу стать программистом только для того чтобы не ходить в офис. Готов работать больше и за меньшие деньги, чем получаю сейчас, лишь бы никогда не выходить из дому...
474 1575133
>>574131

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


Ты не совсем прав, смешивая ответственности.
"Валидность" - это результат работы валидатора, а не состояния сущности.
Валидатор же и юзер не должны в принципе иметь никакого состояния.
Напишу быстрым псевдокодом:
$user = $userFactory->load($request->get('id'));
$changedUser = applyRequestToUser($user, $request);
$errors = $userValidator->validate($changedUser);
if count($errors) > 0 {
return new ErrorResponse($errors);
}

>>574166
Нет, чувак мыслит в правильном направлении. Это не мартышкин труд, это конкретизация кода. Более того "asString" - тоже неправильно, потому что у объекта может быть множество строковых представлений. Json/debug output/serialized/xml/тд.
475 1575138
>>575127

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



На фрилансе анальные потогонки требуют бегать еще быстрее + на многих фриланс галерах обязательная анальная слежка через кейлоггер и вебку, учитывай это.
476 1575143
>>575127
В двух словах - можно, но будучи удалёнщиком или (тем более) фрилансером ты обречешь себя на существование на том уровне, на котором ты есть сейчас. Обучение с учителем намного эффективнее, а без учителя в одиночку разбираться в разработке с нуля - это пиздец, как сложно.
Плюс, очень разные задачи. Удалённые джуниоры вынуждены конкурировать с индусами в работе за еду и ничего толкового им не дадут. А сами они выучиться не смогут, потому что смотри предыдущий пункт.
Поэтому самый нормальный выход - поработать хотя бы несколько лет в офисе и уже набравшись опыта, сидеть дома и выгорать, не выходя на улицу.
Сорян, анон, этот мир жесток и полон людей, с которыми приходится взаимодействовать. Хикки никому не нужны.
477 1575311
>>575143
>>575138
А как быть хикарем и не залезать на плечи общества/мамы? Я просто ненавижу офис. Считаю что это самое худшее что может быть.
478 1575328
>>575311
Понять, что один в поле не воин и мир на самом деле устроен так, что добиться чего-то можно только коллективным трудом и ты или умеешь взаимодействовать с этими странными псевдоразумными биороботами, которыми он населён - или нет, но тогда извиняй, для полноценной жизни ты непригоден.
Это нормально с точки зрения популяции, иногда особи рождаются с отклонениями, в том числе и в социальном плане. В животном мире такие обычно живут вне стаи и быстро погибают.
479 1575365
>>575328
Так я не против трудиться коллективным трудом, я против общества ничего не имею. Просто очень устаю в этом офисе ебаном и не из за работы, а из за людей. Я ведь просто хочу работать из дома. Я же не против труда.
480 1575379
>>575365
Ты против коллективного труда. Ну что сказать, тебе не повезло, твоя стартовая позиция значительно сложнее, чем у многих других, бывает.
Можешь попробовать работать из дома, но по моему опыту, джун на удалёнку - это очень сомнительная затея.

Видишь ли, на джуна компания тратит больше, чем он ей приносит. Потому что платить она тебе будет, условно, 50к (зависит от региона), пользы ты будешь приносить на 20к, вреда на 20к (потому что множество багов, недоработок и так далее) и ещё придётся отвлекать тимлидов и прочих сотрудников на помощь, советы, ревью и так далее (а их зарплата в 3 раза больше твоей) - это ещё 50к расходов. В итоге 50+20+50-20=100к расходов несёт компания на среднего джуна, в течение минимум года, а обычно - даже больше. Это означает, что компания вложит в тебя где-то миллион-полтора ещё до того, как ты хотя бы начнёшь отбивать потраченные на себя деньги (а ведь ты можешь заболеть, уйти, заняться диверсиями, оказаться тупым и так далее).
И в случае с удалёнкой эти риски возрастают, так как коммуникация страдает, ты медленнее растёшь, хрен проверишь, что ты там делаешь и прочая и прочая.
Короче, ты и так в невыгодной для себя позиции (вынужден просить компанию инвестировать в себя миллион под честное слово), так ещё и с сомнительными хотелками, которые увеличивают риски компании получить убытки вместо прибыли.
Почти никто так делать не будет короче.

А насчёт фриланса тебе уже выше объяснили, будешь работать за еду и с анальным досмотром, без перспектив.
481 1575381
>>575379

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


Ну наверное тебе виднее против чего я.

Понял тебя, спасибо что разжевал.
По сути, у меня нет амбиций. Работа за еду из дома это же чистый рай на земле.
482 1575401
>>575381

> По сути, у меня нет амбиций. Работа за еду из дома это же чистый рай на земле.


Скорее всего, ты просто ещё молод и не проникся тем, насколько перманентно вокруг нас происходит пиздец. Если ты работаешь за еду, то ты зарабатываешь практически столько же, сколько и потребляешь.
А это означает, к примеру, отсутствие накопления запаса "на чёрный день". Заболят зубы - ты или потратишь на них 20к, или их лишишься (без качественных протезов потому что) или умрешь от боли. Воспалится аппендикс - пролежишь месяц на больничном, никто тебе на фрилансе платить деньги за это не будет, так что будешь работать прямо с больничной койки или умрешь с голоду. И так далее.
483 1575469
Подскажите что тут не так? Мне нужно что-бы выводилась таблица умножения чисел на самих себя до 9. https://ideone.com/7cqfq2
484 1575513
>>575469
Очевидно, проблема где-то в днк. Вероятнее всего образовалась лишняя хромосома, но, может, просто что-то с кодированием белков.
У тебя $number не меняется нигде
485 1575606
https://ideone.com/Le7uIL
Да что блядь не так, почему ПК не выигрывает?
486 1575614
>>575606
Пользуйтесь блять нормальной IDEшкой, она вам подсветит всё.
У тебя опечатка, comDice1 vs compDice1
15012463671730.jpg54 Кб, 500x379
487 1575647
Что-то у меня не работает. Анонче, помоги плис.
https://ideone.com/gQZeoe
488 1575650
>>575647
Ты выводишь строкой то же число, а не результат операции. Попробуй использовать конкатенацию.
3a81fa177d1aa397d1959997ab31c776bf585199hq.jpg88 Кб, 680x1020
489 1575738
>>575647
Дайте мне уже ответ готовый, я тупой дегенерат и ни слова не понял попробуй использовать конкатенацию из того, что сказал этот - >>575650 анон.
491 1575802
>>575647
У меня вообще не открывает по ссылке код. Кинь другим сайтом плз
492 1575805
>>575469
>>575513
А еще скобочек нет у for () {
}
sage 493 1576000
>>575127
фриланс лучше использовать максимум для подработок. Аноны выше правильно расписали все минусы
494 1576505
>>575513
Исправил, работает теперь. До сих пор не понимаю как я мог такое написать!
495 1576978
>>575401
Да, ты прав.
Хоспади, что же делать то? Как мне жить эту жизнь?
496 1577007
>>576978
Если ты захотел съязвить, то засчитано.
А если хочешь честного ответа, то на 100% правильного прохождения этого квеста пока не опубликовали, но есть более или менее общепризнанные пути. Ищи хорошую работу, заботься о своём здоровье, заводи друзей (помогут) и спутницу (вдвоём иногда легче), трать время на хобби и так далее. Срабатывает не всегда, но что поделать.
497 1577078
>>575401
Двачую
498 1577173
Рад что этот тред до сих пор живет.
5 лет назад меня тут поддержали и помогли сделать пет проджекты для того чтобы я устроился на работу. Я тогда ушел с техникума строителей где надо мной смеялись и никто со мной не разговаривал в офис на 16к в месяц (и я был рад). Потом ушел на фриланс на деньги получше. Спасибо ОП и все кто поддерживает тред.
499 1577187
>>577173
А я вот еще не нашел гроботу ахах, может посоветуешь че?)
Тоже хочу поблагодарить опа, за треды. И того чувака, который написал гайды на гитхабе
500 1577193
>>577187
Особо советовать нечего. Пиши/звони на вакансии. Если опыта нет, будет неплохо так или иначе какой-то набрать и просто перестать сидеть без дела.
501 1577232
>>577007
Да нет же, почему сразу съязвить?
Были у меня и друзья и бабы и вот это всё. Это всё чушь. Не может быть дружбы и любви в обществе, где все стремятся к наживе. От людей бежать надо, вот что я понял за 20 с небольшим лет. А как? Хуй знает.
Сори за офтоп, аноны. Просто сил моих больше нет.
Будьте здоровы.
502 1577258
>>577232

Вкатывайся в православие, раз несчастлив в мире. Если интересно как, пиши.
503 1577270
>>577232
Может ты еще не нашел тех самых людей?
504 1577299
>>577258
Можно будет не ходить в офис?

>>577270
Не знаю. Искать больше не буду. Устаю очень я от людей.
505 1577731
Пилю тестхаб и заодно учу ларавель. Вот допустим у теста есть вопросы - отношение hasMany и определяю его через метод questions(). А как сделать так чтобы, если через этот метод вдруг не нашлось никаких вопросов, то выкидывалось исключение? Делать свое собственное или использовать те исключения, которые уже во фреймворке есть типа ModelNotFoundException?
506 1577867
Как лучше отправлять массив , который имеет внутри ассоциативный массив, и просто значения?
Т.е какой самый лучший метод? Знаю, что в CURL надо его переделывать в строку, или в одноуровневый массив.
507 1577966
>>577867
Что значит, отправлять? С фронта на бекенд? Можно делать конвертировать в json, а затем слать его в body на бекенд с заголовком content-type: json.
508 1578152
>>577966
Curl просто не умеет слать многоуровневые ассоциатив массивы
509 1578205
Книгу какую-нибудь можете посоветовать по пыхе? В шараге изучаю с++, но в моей мухосрани рынок заполнен именно php, в дсы не хочу, да там таких и не ждут.
С бумажной как-то лучше идет, не отвлекаешься на браузер и т.д.
510 1578389
>>577731
Не знаком с Laravel, но твой вопрос предельно прост.

Если Laravel в отношении hasMany возврощает массив элементов, то, если не нашлось никаих записей, возвращать пустой массив.

Если возвращает Коллекцию, то пустую коллекцию.

В Доктрине, например, используется коллекция.

https://www.doctrine-project.org/projects/doctrine-collections/en/1.6/index.html
511 1578392
>>575647
По ссылке пустой код..
512 1578755
Аноны, делаю задачу опа про тесты. Дошел до пунктов

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



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



Вы же понимаете, что это не сделать без джава скрипта? Я говорю это к тому, что ниже написано типа "а вот если у пользователя не будет джавы, то тоже надо предусмотреть добавление".
А не проще сразу делать добавление без джавы?
Вот прямо сейчас у меня есть код, который на одной странице позволяет добавлять вопросы, там же ниже добавлять ответы с учетом айдишников каждого элемента, чтобы можно было на лету удалять и не перепутаться - это огромное полотно джавы. ОГРОМНОЕ. Редактировать его сложно. Добавлять что-то туда в будущем - тоже сложно. Не проще ли будет сделать кнопку "добавить вопрос", и добавлять вопросы по-одному? А там уже внутри этой формы "добавить вопрос" добавляем ответы.
Все каталоги других движков/кмс, которые мне доводилось видеть, от джумлы до битрикса, тоже не давали при создании корневой категории сразу на той же странице добавлять под-категории, там же к ним товары, у товаров свойства и загружать картинки. Зачем это усложнение?
Повторяю, я уже сделал это усложнение, то-есть вопрос стоит не "ленивый дулбаеб не хочет делать", а "ленивый дулбаеб не видит целесообразности в излишнем усложнении". Что посо ветуете
513 1578766
>>578755
Во-первых, никогда не называй джаваскрипт джавой, только всех путаешь.
Во-вторых, я так и не понял, что тебя смущает. Наличие динамических элементов на странице? Это вполне нормально.
514 1578783
>>578766

>Во-вторых, я так и не понял, что тебя смущает


Меня смущает, что все это работает на джава скрипте. Без него это работать не будет. И если у пользователя отключен джава скрипт, то надо предусматривать альтернативные способы добавления. То-есть в штатном режиме эти способы будут просто простаивать.
Еще меня смущает излишнее усложнение. Зачем добавлять все на одной странице? Ты вообще представляешь, как этот объем информации будет выглядеть в мобильной версии какого-нибудь айфона 5 где 320х560? Бесконечное полотно.
Я бы при редактировании/добавлении теста просто показывал пользователю вопросы. Хочешь добавить новый вопрос - жми кнопку. А хочешь добавить ответы? Иди в конкретный вопрос на другую форму, работай там. Если я на страницу сразу выведу пятьдесят вопросов с пятью вариантами ответов у каждого и позволю все это перемешивать/редактировать/крутить - пользователь мобильного устройства радости не почувствует. И все это при условии что у него есть двава скрипт. Без джавы надо новый вариант придумывать.
515 1578838
>>578205
Создание динамических веб-страниц
516 1578842
>>578838
Cоздаем*
517 1578845
>>578783
Ну да это и есть главная жопность всего web-программирования. Муторно пилить это все. А прикинь еще пилить css , тоже муторное гомноо. Вообщем я к чему это, я щитаю что веб-программистам мало платят за эту рутинную работу. Но люди сами виноваты конечно что идут на поводу у работодателей ,которые диктуют сами цены на рынке
1019775280.jpg173 Кб, 855x1200
518 1578850
>>578842
>>578838
Вот эта что ли?
Авторизация 519 1578877
Поясните в двух словах как происходит авторизация в мобильных приложениях?

Надо написать апи для приложения, а потом левый разраб уже под него само приложение делать будет. Там же не куки? Че там вобще как оно работает?
520 1578903
>>578877
Вот отличная статья про аутентификацию и авторизацию через апи. https://nordicapis.com/3-common-methods-api-authentication-explained/
Если коротко, то используй OAuth.
521 1578909
522 1578910
>>578845
анон, мне кажется ты тот самый желчный дулбаеб, который за напускным лицемерием и сарказмом скрывает свою некомпетентность и приходит сюда посмеяться над новичками чтобы самоутвердиться.
Я тебе привел две конкретные проблемы текущего ТЗ урока про тесты:
1.Без джава-скрипта ничего работать не будет.
2.Интерфейс добавления реализован в одном месте - на одной странице.
Я ни в одной cms не видел, чтобы категории, товары, свойства товаров и фото товаров добавлялись кучей на одной форме за один заход. Если бы у тебя был опыт создания приложений, хотя бы простого каталога, то ты бы эту проблему видел и понимал. Ну ладно ты кое-как сохранил свои данные и не запутался, а теперь представь, что тебе нужно отредактировать первый ответ на первый вопрос. Будешь все дерево обратно подгружать, все сто вопросов с ответами? Что мешает разделись функционал? Это я у опа спрашиваю, ты можешь не отвечать
523 1578920
>>578910
Я вообще не тот анон, и не смотрел вообще все эти задания. Проходил мимо и высказал свое мнение
524 1579232
аноны, есть такая хуйня в опенкарте https://ideone.com/DaD4GZ
здесь в $content в итоге прилетает огромный блок футера (80% его части где то) который мне надо пофиксить. вопрос: где его вообще искать и как он формируется то? в контроллерах нет нихуя.
в контроллере висит вот эта хуета https://ideone.com/xVgKBA
525 1579247
>>577232

>> Не может быть дружбы и любви в обществе


>>вот что я понял за 20 с небольшим лет


Ой, нахрен иди. Детский сад, самый натуральный. Нормальных людей большая часть, просто нужно себя самому порядочно вести, и отсеивать наглухо ебанатов сразу.
мимо-33-лвл
526 1579353
>>579247
А какие критерии у порядочных людей?
527 1579380
В psr-2 написано что null, true и false должны быть в нижнем регистре, но этот psr помечен как устаревший. Так как же писать, чтобы было расово?
528 1579409
Как запускать скрипты у себя на пеке, не через онлайн интерпретатор?
Вроде в open server есть все необходимое?
529 1579433
>>579409
Либо index.html / index.php открывать браузером, а внутри файла так:
<html>
<body>
<?php
echo 'hellow world';
?>
</body>
</html>
Либо просто скачать php и запускать скрипты через консоль так:
php myscript.php
530 1579434
>>579409

Windows - ОС для пользователей, а не для разработки.
Ставь Linux на виртуалку и работай в ней.

Если у тебя много свободного времени и ты пока просто учишься, то привыкай сразу работать в докере. Гемороя с разными версиями будет меньше.
531 1579439
>>579434
Поддвачну этого просветлённого
532 1579443
>>579434

>Windows - ОС для пользователей, а не для разработки.


>Ставь Linux на виртуалку и работай в ней.


В чем же отличие, код одинаково и там и там запускается.
533 1579451
>>579443

Отличие в удобстве.
534 1579487
535 1579512
>>561156
Есть же кнопка в винде на иконку\прогу правая->показать место хранение файлов
536 1579526
>>579512

Классно, но только будущее не за этим вот всем.

Будущее: контейнеры, ostree, облачные сервисы, вот это всё. И оно уже наступило. Через 10 лет все программы будут запускаться в "браузере", а компьютер с ОС будет просто терминалом для подключения к облаку. От чего ушли в 90-е к тому и пришли обратно. Это удобно пользователям, это удобно корпорациям, это удобно правительству, это удобно в мире, где люди продают массово свою свободу в обмен на комфорт.
537 1579577
>>579526

>контейнеры


Че за контейнеры
538 1579589
>>579577

Докер и компания.
539 1579590
>>579589
Это всего лишь инструмент. Не понимаю к чему вы намекаете
540 1579701
Ананас, поясни, почему когда я использую return все выдается ровно, а когда использую print то получаю говняк?

третий пик - объект из класса, он не изменялся
541 1579717
>>579701
Ну это же не одно и то же, когда return, то "woof woof" просто подставляется вместо "$dog->speak", а когда принт, то она сразу при вызове "$dog->speak" печатает в браузер "woof woof", не дожидаясь, пока принт, в котором он вызван закончит работать.
542 1579722
>>579717
Понял. Спасибо.
543 1579734
>>579717
Нихуя се, а где такие подробности узнать можно
544 1579738
>>579701
Анон, а зачем тебе Хедер и Мета?
image.png1020 Кб, 1280x992
545 1579796
Анончик, вот есть чей-то дизайн макет.
Мне интересно, а как его самым быстрым способом переводят в код?
Просто берут и эти кнопочки реально пишут на css и js? Или есть способ как-то быстро одной прогой\фреймворком превратить в код?
546 1579818
>>579701
на 2 пикче у тебя sharset, вместо charset =)
мимо
547 1579821
>>579734
Ну а что тут не понятно?
print "Dogs say:" . $dog->speak() . "<br>"; в случае, если ретерн преобразуется в:
print "Dogs say:" . "Woof woof!" . "<br>"; а если принт, то:
print "Dogs say:" . print "Woof woof!" . "<br>";
Логично, что когда интерпретатор видит принт, то он сначала делает все преобразования в том, что надо напечатать, а там ещё один принт, поэтому он сначала его сделает.
548 1579844
>>579821
Понял. логично
549 1580196
КАК ВЫ БЛЯТЬ КОДИТЕ НА ЭТОМ ГОВНИЩЕ?

Ковыряю ваше говно Laravel и ловлю такую ошибку:
"View [rest.departments.index] not found."

Это говно хостится локально на OpenServer.

1. То что в файле web.php.
2. Физическое расположение файла с вьюхой на диске.
3. То как пытаюсь вернуть вьюху из контроллера.
4. То как генерится ссылка в layout.

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

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

auth как и контроллеры генерил через artisan.

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

Гуглил, очень НЕОЖИДАННО что я по всей видимости первый кто столкнулся с этим и решил гуглить проблему, потому-что складывается впечатление что на этом говне пишут только ебанутые-самобичеватели в психушке, которые одной рукой дрочат, другой бьют себя по яйцам, а кодят ногами, а в психушках обычно нет интернета. Перепробовал 2 десятка разных вариантов - нихуя.
550 1580202
>>579796
Берут и пишут код, иначе верстальщики бы вымерли давно. Они то конечно и так вымирают, но по другим причинам.

Можешь ещё ручками в дизайнере попробовать замутить, но если можешь в код то нахуя мучаться?
551 1580213
>>580202

>Они то конечно и так вымирают, но по другим причинам.


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

>Можешь ещё ручками в дизайнере попробовать


Где где?
552 1580226
>>580196
Че за редактор кода?
553 1580233
>>580226
VS code
554 1580258
>>580213

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



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

Сферический верстальщик в вакууме это макака умеющая только в html/css с бутсрапом, возможно знает минимум js, которая превратит макет .psd в html разметку, за копейки.

Know the difference.

> Где где?


Ну в любой хуйне где есть визуальный редактор, на ум приходит например wix.com.
555 1580431
>>579353
Не творить хуйню и не мешать другим жить.
556 1580443
Бамп вопросу >>579380
557 1580476
>>580443
также и писать, то что он помечен как устаревший (ему на смену пришел расширенный psr-12) не означает, что меняются правила, которые там описаны
558 1580481
>>580233
А ты настраивал подсветку?
Если да, можно конфиги плиз
559 1580495
>>580258
Верстальщики не вымирают, они остаются там, где и были - где нужно строгое разделение труда. На аутсорсе, например, где отдельные люди специализируются на верстке, а отдельные - на формошлёпстве.
А где не нужно - там ищут мене квалифицированных специалистов "широкого профиля", да.
Фуллстеки нынешние - это вообще сюр, все, которых я видел, были пиздец какими говнокодерами.
560 1580501
>>580476

Пасиб. Просто в psr-12 ничего не сказано про это.
561 1580549
>>580501
Воспринимай это вот так:
$rules = array_merge(['rule1'=>'a', 'rule2'=>'b',],['rule1'=>'c','rule3'=>'d''],...);
То есть, более новые правила при конфликте перетирают более старые, но, если что-то не перетёрто - то оно всё ещё актуально.
562 1580608
>>580495
В целом я с тобой согласен, но мода на фреймверки создаёт спрос на тех кто может в js.
563 1580669
>>580608
Может в js != фуллстек. js достаточно прост, чтобы в него мог почти любой достаточно небрезгливый человек, хотя бы на базовом уровне.
Проблемы начинаются уже после базового уровня, на фронтенде перед человеком стоит один комплекс проблем, решений, подходов и тд - а на бекенде другой и развиваться становится очень сложно. В итоге ты или выбираешь что-то одно и становишься условно senior-бекендщиком и middle-фронтендером, или пытаешься сесть на два стула и так и остаешься junior-middle всеми.
564 1580762
Хорошо ли использовать нативные запросы в Доктрине?

Не всегда удаётся получить то что нужно встроенными в Доктрину функциями и приходятся выполнять запрос в ручную. Зачастую, это происходит когда нужно объяденить несколько запросов в один с использованием нескольких JOIN'ов. Не плохо ли это? Если использовать и встроенные, и нативные запросы то портится последовательность (consistency) кода.

Нужно придерживаться одного стиля написания кода. Зачем тогда нужна Доктрина если гибче использовать нативные запросы? Или шаблон Репозиторий для этого и создан, чтобы изолировать способ и источник получения данных?
565 1580764
Хорошо ли использовать нативные запросы в Доктрине?

Не всегда удаётся получить то что нужно встроенными в Доктрину функциями и приходятся выполнять запрос в ручную. Зачастую, это происходит когда нужно объяденить несколько запросов в один с использованием нескольких JOIN'ов. Не плохо ли это? Если использовать и встроенные, и нативные запросы то портится последовательность (consistency) кода.

Нужно придерживаться одного стиля написания кода. Зачем тогда нужна Доктрина если гибче использовать нативные запросы? Или шаблон Репозиторий для этого и создан, чтобы изолировать способ и источник получения данных?
566 1580804
>>580196
Кто-нибудь может подсказать хотя бы направление в какую сторону смотреть? Я уже с ума схожу потихоньку.
567 1580811
>>580764
Это нормально, ORMки никогда не дадут тебе такой гибкости. Придерживайся здравого смысла, это универсальный совет.
95% запросов как правило просты и запросто пишутся через orm, а что-то сложное или особо нагруженное всегда можно написать руками.
Далее вопрос будет в правильной организации всего этого барахла, но тут ты уже сам задал правильный вопрос:

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


Да, для этого (только не изолировать, а абстрагировать метод от реализации).
568 1580818
>>580764

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


Не проще сделать view с нужными параметрами и делать запрос с него?
table5-2.png59 Кб, 788x480
569 1580820
>>580196
Попробуй создать папку с названием ресурса в resources/view, и в него добавить нужные файлы. К примеру должно получиться так - views/departments/index (и что за balde.php у тебя на 2 пикче? Когда blade). Но сначала попробуй правильно назвать
570 1580988
>>580818
Я бы лучше голый запрос написал. Вьюхи надо создавать/обновлять, а это миграции, их требуется как-то мапить в код и это ещё одна модель в orm и всё такое.. Если там всё не очень нагружено, зачастую проще достать то, что тебе нужно, двумя запросами. Первый будет тот самый сложный запрос с джоинами, он вытащит айдишники - а второй будет простым селектом с id in (...). Просто пишется, легко поддерживается, вполне быстро работает даже на больших нагрузках (второй запрос будет строго по индексам, проблем минимум).
571 1581025
>>580481
Не настраивал, просто поставил расширение "PHP IntelliSense"
572 1581027
>>580988

>Вьюхи надо создавать/обновлять, а это миграции, их требуется как-то мапить в код и это ещё одна модель в orm и всё такое..



Смотри, создаём нужную View из нужных таблиц, а потом простым запросом из PHP забираем данные уже из view.
573 1581034
>>580820
Та же ошибка:
"View [departments.index] not found."

Файлы с расширением .blade.php - это файлики с которыми работает шаблонизатор Blade, они врядли как-то влияют на эту ошибку.

Я думаю что каким-то хуем наебнулся роутинг, но как его фиксить не пересоздавая проект, можно его как-то заново пересоздать или хз.
574 1581036
Блять
575 1581040
БЛЯТЬ

Я осознал свою ошибку, сука.

BALDE блять, а должно быть BLADE, ебануться.

Спасибо всем за внимание.
576 1581043
>>581040
Да ты же БАЛДА.
577 1581044
>>581043
Бля, с подливой проиграл
578 1581045
>>581027
Как только у тебя появятся дополнительные инстансы, дев, стейдж, прод, вся хуйня - то это резко станет усложением деплоя, тут тебе не просто кусок кода спулить.
579 1581057
>>581040
>>580196 >Гуглил, очень НЕОЖИДАННО что я по всей видимости первый кто столкнулся с этим и решил гуглить проблему
=)
580 1581070
>>581057
Ну справедливости ради, в любом другом языке такой ситуации возникнуть не могло. По крайней мере могу с уверенностью говорить о тех которыми сам пользуюсь.
2020-01-22-19:46:331920x1080-screenshot.png209 Кб, 1920x1080
581 1581089
>>580811

>не изолировать, а абстрагировать метод от реализации


Какой ёмкий ответ. Спасибо большое.
582 1581506
>>581045

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



А примеры?
583 1581516
А где брать дизайн для своих сайтов? Мы ж вроде бекендеры и в красивый диз не очень умеем - только хтмл натянуть\заверстать несложно с нескучной картинки. Из того, что я делал получалось максимум что-то неотличимое от нативного ведроид-приложения. Для какого-то сервиса норм, но мимокроков не впечатляет.
584 1581518
>>581516
Bootstrap
585 1581523
>>581516
Можешь за основу взять какой нибудь халявный макет из интернета.
586 1581535
>>581506
Примеры чего, дева-стейджа-прода? Смотри, если у тебя есть кусок кода, то он сравнительно легко деплоится (git pull / docker pull), легко версионируется (git), легко дебажится (xdebug), легко логируется и так далее.
Далее, вьюхи. Просто так их не создать, нужно сделать запрос. Чтобы сделать запрос, нужно вызвать команду. Это означает, что нужна миграция при деплое, какой-то кусок кода, который автоматизированно вызовется после этого (ручную конфигурацию базы даже рассматривать не буду, так никто сейчас уже не делает, из нормальных ребят). Этот кусок кода может упасть, если база будет недоступна, нужно будет перенакатить. Далее, вьюха изменилась - опять нужно писать миграцию. Далее, обнаружился какой-то баг. Как дебажить, что делать? Как понять, какая вьюха сейчас в базе, уже обновлённая или ещё нет? А что, если её прямо сейчас вызывает 100500 клиентов, а тебе нужно её перестроить, как накатывать миграцию? И так далее.
Естественно, вьюхи - это хороший инструмент для своих задач, его просто не нужно пихать везде, где он мог бы подойти. Оптимизировать сложный запрос, нагрузку на таблицы - да, конечно. А вот чтобы избежать ванильного sql-синтаксиса на уровне php - довольно сомнительно.
Это относится не только к вьюхам, но и к хранимым процедурам, триггерам и прочим вещам. Это всё заебись, но по умолчанию данные (база) и поведение (код) надо разделять.
587 1581539
>>581535
Стоп. Разве view не автоматически обновляется?
588 1581543
>>581539
Нет, конечно. Создаётся через create view, обновляется через replace или alter view и так далее.
589 1581546
>>581543

>Нет, конечно. Создаётся через create view, обновляется через replace или alter view и так далее.



Я про сами данные, а не колонки и прочее.
590 1581663
>>581518
Речь про дизайн, а не фреймворк для вёрстки.

>>581523
Не поимеют потом за халяву?
591 1581667
>>581546
Ну строится-то оно конечно самостоятельно, в этом весь смысл. Но вот то, какие проблемы ты с этим огребешь очень зависят от типа вьюхи (materialized или simple), используемой бд и её версии. Если не путаю, ещё относительно недавно постгресовцы были вынуждены использовать самописные вьюхи на триггерах, лол, потому что постгря не поддерживала materialized views.
245c9f77e2adf34d4b1b25a2c9fcf37b.jpg59 Кб, 530x472
592 1581812
Почему если вводить на хэд хантере в разделе резюме пхп, то вылезет тыща программистов, а если любой фреймфорк типа Synfony то их кол-во волшебным образом сократиться до пары десятков?
593 1581829
>>581812
Из тысячи проектов на php где-то треть будет на ужасном самописном легаси, треть на каком-нибудь говне типа codeigniter, yii или cms-ках, и только оставшаяся часть пишет на чём-нибудь более или менее нормальном. При этом ещё есть % тех, кто не указывает фреймворки и тех, у кого есть проекты сразу на всём.
594 1581841
Аноны, кто писал на реакте, решил я ознакомиться с этой библиотекой. В принципе не так сложно, и с помощью react create app я создал свою первую тудуху.
Но вот херня - я не понимю как состыковать реакт-клиент с бэкендом моим. Я изначально думал что это все типа в классическом стиле - клиенту отдал одну главную страничку, а в ней root элемент и ссылки на бандл реакта и собственно саму библиотеку. И уже клиент классически отправляет запросы на сервер, ну и обратно.
Поглядел интернеты - а там зачем то реакт-клиент отдают с одного сервера, а запросы с клиента отправляют уже на бэкенд.
Нахуя такая логика и где почитать про это подробно?
595 1581857
>>581829
А что не так с cms?
596 1581879
>>581857
Cms-ки - это вполне конкретная ниша, ориентирующаяся на тех, кто не умеет программировать и настраивает свой веб-сайт визуально. Отсюда и всех их проблемы в первую очередь, люди ещё не придумали более выразительного, гибкого и однозначного средства выражения логики, чем программный код. В итоге на CMS у тебя будет огромный пласт логики, которая превращает накликанное во что-то конкретное и огромный абстрактный комбайн, который работает очень универсально и соответственно одинаково плохо со всеми сценариями.
Короче, накликать себе бложег или простенький интернет-магазинчик - CMS-ки это норм. А если тебе нужно хорошее рабочее решение, которое можно развивать, затачивать под нужды бизнеса и так далее, то с CMSками ты умоешься кровью, они хуёво расширяются и в принципе для такого не предназначены.
597 1581911
>>581829
А что именно более менее нормально?
15787715031330.jpg40 Кб, 604x453
598 1581983
>>581879
Уровень абстракции твоего высера ещё выше чем уровень абстракции кода придуманных тобой cms-ok.
Куча воды и нихуя конкретики.
>>581857
На них делают обычные информационные порталы / инет магазины. Работа не тяжёлая в 60% но очень нудная. И платят не особо много. Программирования там не так много. Только настройка и вызов компонентов новости, меню, галереи, формы обратной связи, комментарии и тд в том или ином месте шаблона. Писать что то свое там не так часто нужно.
Единственная cms за которую нормально платят в рашке - битрих. Но это ебаное говно. Заебешься ее всратое апи учить и выгрузку в 1с настраивать.
CMS это самая первая ступень. С которой нужно переходить как можно быстрее. А лучше переступить при возможности. Php особо не выучишь а вот с html/js поебешься знатно.
599 1582039
>>581911
Более-менее нормально - это в первую очередь современные фреймворки типа симфони, ларавел и так далее, а также микрофреймворки вида slim/silex/lumen/* (но только если ты шаришь достаточно, чтобы выстроить правильное приложение самостоятельно).

>>581983
Ну уж нет, я плотно работал с cms-ками одно время и знаю, о чём говорю. Более того, ты сам подтверждаешь мои слова, вместо программирования необходимой бизнес-логики ты пытаешься настроить какой-то комбайн для того, чтобы он начал действовать так, как тебе нужно. При этом в отличие от кастомного кода у тебя есть ограниченное количество мест, где ты можешь что-то подкрутить/написать код.
А, ну и да, зачем школу прогуливаешь? А ну иди на урок, у тебя математика сейчас, будете дроби проходить
600 1582127
>>580764

Абсолютно нормальная вещь.

Типичный пример: надо выбрать все уникальные значения какого-то поля. Как я помню, если ты будешь выбирать сущности, а потом в PHP собирать уникальные значения, то это неэффективно: ты загружаешь большой объем данных из БД в приложение только ради того, чтобы потом большую часть выбросить. Запрос SELECT DISTINCT ... сработает гораздо эффективнее.

Вообще, ORM упрощает работу с БД, но большие объемы данных выгоднее будет получать и обрабатывать через SQL запросы.

Я сам их часто использую.

> Зачем тогда нужна Доктрина если гибче использовать нативные запросы?



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

Также, она позволяет не писать примитивные запросы вроде SELECT ... WHERE id = ?. Она позволяет не писать вручную запросы на обновление/вставку данных, она сама ищет изменения в графе объектов. Она позволяет для сущности легко получить связанные с ней сущности. Это все экономит время.

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

Но есть и минусы: производительность Доктрины ниже, чем у нативных запросов (сделай микробенчмарк, чтобы узнать, во сколько раз), большие объемы данных ей обрабатывать неэффективно. Потому вполне логично использовать и Доктрину, и нативные запросы, и выбирать подход в зависимости от конкретной ситуации.

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



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

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

>>580818

Звучит как усложнение. В примере выше, где нам нужны уникальные поля, проще сделать SQL запрос, чем добавлять целую сущность и вью в БД только ради этого.
600 1582127
>>580764

Абсолютно нормальная вещь.

Типичный пример: надо выбрать все уникальные значения какого-то поля. Как я помню, если ты будешь выбирать сущности, а потом в PHP собирать уникальные значения, то это неэффективно: ты загружаешь большой объем данных из БД в приложение только ради того, чтобы потом большую часть выбросить. Запрос SELECT DISTINCT ... сработает гораздо эффективнее.

Вообще, ORM упрощает работу с БД, но большие объемы данных выгоднее будет получать и обрабатывать через SQL запросы.

Я сам их часто использую.

> Зачем тогда нужна Доктрина если гибче использовать нативные запросы?



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

Также, она позволяет не писать примитивные запросы вроде SELECT ... WHERE id = ?. Она позволяет не писать вручную запросы на обновление/вставку данных, она сама ищет изменения в графе объектов. Она позволяет для сущности легко получить связанные с ней сущности. Это все экономит время.

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

Но есть и минусы: производительность Доктрины ниже, чем у нативных запросов (сделай микробенчмарк, чтобы узнать, во сколько раз), большие объемы данных ей обрабатывать неэффективно. Потому вполне логично использовать и Доктрину, и нативные запросы, и выбирать подход в зависимости от конкретной ситуации.

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



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

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

>>580818

Звучит как усложнение. В примере выше, где нам нужны уникальные поля, проще сделать SQL запрос, чем добавлять целую сущность и вью в БД только ради этого.
601 1582130
>>581663

Если ты не будешь копировать картинки (защищенные авторским правом), и не будешь копировать все один-в-один, то вообще претензий никаких не будет.
602 1582138
>>579796

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

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

В этом нет ничего сложного, если выучить все способы позиционирования в CSS. Тогда ты, глядя на картинку, сможешь мысленно разбивать ее на блоки и пишешь их в HTML/CSS. Я пытался тут описать все эти способы, но урок не дописан: https://github.com/codedokode/pasta/blob/master/html/positioning.md

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

Также есть (были) визуальные редакторы вроде FrontPage, где ты пишешь код и сразу видишь результат.

Если ты хочешь минимум усилий, то проси дизайнера экспортировать макет в SVG и сделай страницу из одной этой SVG. По качеству и удобству пользования это будет примерно как сгенерированный программой код.
603 1582141
>>579734

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

some_fn(arg_fn1(), arg_fn2());

То PHP сначала вызывает все "внутренние" функции (arg_fn1, arg_fn2), сохраняет их результат во временные переменные, а только потом вызывает "основную" функцию some_fn. То есть код выше эквивалентен:

$t1 = arg_fn1();
$t2 = arg_fn2();
some_fn($t1, $t2);

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

У тебя в коде стоит выражение, где строки объединены через точку:

print "..." . fn1() . "...";

Тут, прежде чем выполнить print, надо вычислить значение выражения, а для этого надо сначала вызывать fn1(), потом склеить строки и только потом вызвать print, и код выполняется примерно в такой последовательности:

$t1 = fn1();
$t2 = " ... " . $t1 . " ... ";
print $t2;

Потому у тебя сначала срабатывает print в функции say(), а только потом - внешний.
604 1582145
>>579409

Можно через консоль (полезно для развития):

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

Это работает в любой ОС, хотя в Линуксе консоль продвинутее.

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

Веб-сервер вроде openserver нужен, чтобы запускать скрипт и просматривать результат из браузера. Для простых задач проще использовать консоль.
605 1582167
>>578755

Давай смотреть на ситуацию как инженеры: какие плюсы и минусы нам даст использование JS.

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

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

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

Кстати, для численной оценки эффективности интерфейса есть метод, описанный в книге Джеффа Раскина "Интерфейс: новые направления в проектировании компьютерных систем". Там считается число "жестов" (нажатий клавиш, движений мышью), нужных для выполнения задачи и оцениваются затраты времени на их выполнение. Вот ссылка (осторожно, там реклама и пиратство, сам я купил бумажную книгу, и всем ее рекомендую, кто интересуется интерфейсами): http://raskin-interface.narod.ru/interface/chapter4.htm

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

Хочешь заморочиться - можешь подключить JS по принципу progressive enhancement, то есть страница работает и без JS, но с JS интерфейс получается более удобный и отзывчивый. Этот вариант решает проблемы выше, но усложняет код, тестирование (надо тестировать все сценарии с и без JS) и повышает трудозатраты и стоимость разработки.

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

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

Не хочешь заморачиваться - можешь сделать наличие JS требованием для использования сайта.

> Я ни в одной cms не видел, чтобы категории, товары, свойства товаров и фото товаров добавлялись кучей на одной форме за один заход.



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

Мне кажется, как раз удобно создавать тест, не уходя со страницы, как будто ты пишешь текст в редакторе вроде Word, добавляя абзац за абзацем. Или я ошибаюсь?

> Зачем добавлять все на одной странице? Ты вообще представляешь, как этот объем информации будет выглядеть в мобильной версии какого-нибудь айфона 5 где 320х560? Бесконечное полотно.



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

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

> Будешь все дерево обратно подгружать, все сто вопросов с ответами? Что мешает разделись функционал?



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

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

> Я бы при редактировании/добавлении теста просто показывал пользователю вопросы. Хочешь добавить новый вопрос - жми кнопку. А хочешь добавить ответы? Иди в конкретный вопрос на другую форму, работай там.



Ну вот тут хорошо бы было, если бы ты посчитал эффективность такого интерфейса и сравнил с эффективностью интерфейса на JS.
605 1582167
>>578755

Давай смотреть на ситуацию как инженеры: какие плюсы и минусы нам даст использование JS.

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

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

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

Кстати, для численной оценки эффективности интерфейса есть метод, описанный в книге Джеффа Раскина "Интерфейс: новые направления в проектировании компьютерных систем". Там считается число "жестов" (нажатий клавиш, движений мышью), нужных для выполнения задачи и оцениваются затраты времени на их выполнение. Вот ссылка (осторожно, там реклама и пиратство, сам я купил бумажную книгу, и всем ее рекомендую, кто интересуется интерфейсами): http://raskin-interface.narod.ru/interface/chapter4.htm

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

Хочешь заморочиться - можешь подключить JS по принципу progressive enhancement, то есть страница работает и без JS, но с JS интерфейс получается более удобный и отзывчивый. Этот вариант решает проблемы выше, но усложняет код, тестирование (надо тестировать все сценарии с и без JS) и повышает трудозатраты и стоимость разработки.

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

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

Не хочешь заморачиваться - можешь сделать наличие JS требованием для использования сайта.

> Я ни в одной cms не видел, чтобы категории, товары, свойства товаров и фото товаров добавлялись кучей на одной форме за один заход.



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

Мне кажется, как раз удобно создавать тест, не уходя со страницы, как будто ты пишешь текст в редакторе вроде Word, добавляя абзац за абзацем. Или я ошибаюсь?

> Зачем добавлять все на одной странице? Ты вообще представляешь, как этот объем информации будет выглядеть в мобильной версии какого-нибудь айфона 5 где 320х560? Бесконечное полотно.



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

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

> Будешь все дерево обратно подгружать, все сто вопросов с ответами? Что мешает разделись функционал?



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

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

> Я бы при редактировании/добавлении теста просто показывал пользователю вопросы. Хочешь добавить новый вопрос - жми кнопку. А хочешь добавить ответы? Иди в конкретный вопрос на другую форму, работай там.



Ну вот тут хорошо бы было, если бы ты посчитал эффективность такого интерфейса и сравнил с эффективностью интерфейса на JS.
606 1582175
>>578755

>Вот прямо сейчас у меня есть код, который на одной странице позволяет добавлять вопросы, там же ниже добавлять ответы с учетом айдишников каждого элемента, чтобы можно было на лету удалять и не перепутаться - это огромное полотно джавы. ОГРОМНОЕ. Редактировать его сложно. Добавлять что-то туда в будущем - тоже сложно



Ну так давай учиться организовывать JS код и писать его правильно. Я писал JS-приложение, в котором было не полотно, а десятки классов и ничего, было вполне читабельно по моему сильно субъективному мнению (при том, что это было до того, как появился ES6 и синтаксис классов и я их писал на прототипах. Кстати, я пробовал и несколько других вариантов, популярных тогда, в том числе на замыканиях, и они были еще неудобнее прототипов).
607 1582178
>>577867

Не знаю, лучший ли это способ, но PHP охотно принимает данные в таком виде:

people[Ivan]=5&people[Petr]=4

Получается в $_GET

'people' => ['Ivan' => 5, 'Petr' => 4]

Мануал https://www.php.net/manual/ru/language.variables.external.php

Также, JSON тоже подойдет.
608 1582183
Вопрос няшкам, когда я отправляю запрос на чужой сайт (например с помошью curl) отправляется ли мой ip адрес или другие личные данные кроме юзер агента в хедере или еще где-то. Если да, то как его заменить?
609 1582184
>>575112

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

Тут https://fonts.google.com/specimen/Open+Sans кирилица отображается корректно.

> Заказчик говорит "Сделай ИМЕННО эти шрифты".



Ок, ясно.
610 1582188
>>582183

Отправляется (скорее не твой адрес, а адрес твоего провайдера, если у тебя NAT) в заголовке IP-пакета (не на уровне протокола HTTP).

Почитать:

- протокол IP: https://ru.wikipedia.org/wiki/IP (там есть структура пакета)
- NAT https://ru.wikipedia.org/wiki/NAT
611 1582254
>>582188
А то есть tcp/ip как обертка над моим http?
Т.е я шлю http он оборачивается tcp/ip и отправяляется?
612 1582306
>>582188

>- протокол IP: https://ru.wikipedia.org/wiki/IP (там есть структура пакета)


Прочел, спасибо.

>- NAT https://ru.wikipedia.org/wiki/NAT



Тоже прочел, но не понял, как на практике быстро реализовать это
613 1582466
Все анончики, которые решили задачи до уровня студентов, вы молодцы! Спасибо ОПу и этому треду, уже почти год работаю пыхером.
614 1582468
>>582466
Нормас хоть плотют?
Чому студентов не дела?
Что на работе делаешь?
Бочка?
Хуйцы?
615 1582482
>>582468

> Чому студентов не дела?


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

> Нормас хоть плотют?


Да, хорошо платят.

> Что на работе делаешь?


Страховая компания, CRM на yii2, mysql, jquery.
616 1582492
>>582482
сколько времени потребовалось чтобы доучиться до уровня достаточного для устройства на работу?

че-нибудь ещё делал кроме этого треда?

какие изначальные данные? образование? уровень познаний в физ-мат и ит науках??
617 1582712
>>582482

>Да, хорошо платят.


Мог бы сразу цыфры привести
618 1582719
Этого заголовка достаточно, что бы поменять ip?
curl --header "X-Forwarded-For: 192.168.0.2" http://example.com

Внутри X-Forwarded-For вставлять только прокси сервер?
619 1582722
Я блин не понимаю как заменить ip , и при этом получить ответ(response)
620 1582749
>>581841
на Хекслете.
изображение.png49 Кб, 144x131
621 1582800
>>582039

>Ну уж нет, я плотно работал с вордпрессом на деневере


Пофиксил

>вместо программирования необходимой бизнес-логики


Любишь усложнять? Далеко не для любого сайта нужен сложный йоба круд /база данных на овер 50 таблиц и фрейворк с раздутой папкой вендор

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


походу я угадал с денвером и вордпрессом лол

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


Тыж понимаешь что ты поехавший?

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


Если ты кринж троль, то браво, аплодирую стоя
622 1582844
>>582800

>плотно работал с вордпрессом на деневере


Вордпресс это не CMS уже? Всё правильно он сказал - на CMS можно максимум подкрутить уже имеющийся функционал и только. В противном случае закопаешься.
624 1582913
Анон, когда я пытаюсь вызвать переменную $props[0] в коде ниже, то безошибочно именно его заворачивать в $user-> {$props[0] }
Чем это объясняется? Просто впервые вижу

$user = new User('Иванов', 'Иван', 'Иванович');

$props = ['surname', 'name', 'patronymic'];
echo $user->{$props[0]}; // выведет 'Иванов'
625 1582989
>>582913
Ну смари вот такой пример.
https://3v4l.org/e7mAH
Тут дело в порядке интерпретации. Если поставишь в сниппете галочку eol versions, сможешь увидеть что до седьмой версии пхп нельзя было получить доступ к константе объекта внутри свойства. Здесь подробнее об изменениях https://www.php.net/manual/en/migration70.incompatible.php

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

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

В общем если у тебя возникла нужда в таком, то возможно ты не разобрался в ооп замутах. Пиши, мы тебе подсобим советом или примером.
626 1583054
TDD норм тема?
627 1583076
Копаюсь с 6 ларавелем и получается, что с ним без вариантов надо ещё и ноду юзать. Не то, чтобы это было проблемой, но не дохуя ли? Может проще одну ноду тогда использовать - она ларавель не просит для себя.
Почему они в артисан конпелятор scss не догадались вставить? Это так сложно?
628 1583078
>>582989
Спасибо оргромное, видно у тебя много опыта.

Вот ты сказал про метапрограммирование и я понял, что много уделяю ему внимания ,хотя сам новичок. Но теперь понимаю.
Можешь рассказать, если не сложно. А чем занимаются рядовые программисты в средних и больших компаниях? Мне вот что интересно, какие задания дают обычно программисты их тимлиды?
Что то например "Напиши класс такой -то такой"?
629 1583110
>>583078
Ну тут от компании сильно зависит. От проекта или даже проектов.
Я могу рассказать как это было у меня. Я работаю с ритейлом, крупные интернет магазины и сервисы их обслуживающие. Тут особенность в том, что это собственные проекты и эти сервисы никому не продают. Соответственно заказчики и "пользователи" это менеджмент разных отделов корпорации. Есть конечно и покупатели товаров, но их мнение все равно сначала проходит через менеджмент.

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

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

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

Итоговая задача такая: необходимо импортировать данные о наличии, необходимо импортировать описание, необходимо раз в час делать товары в наличии и с описанием доступными к покупке, а без недоступными. Тимлид декомпозирует эту задачу на четыре:
1. Задача на экспорт наличия на стороне склада раз в час.
2. Задача на импорт наличия на стороне сайта раз в час.
3. Задача на ускорение частоты импорта описания до раза в час.
4. Задача на изменение доступности товаров раз в час.

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

Ну и напоследок задача на внимательность: через сколько часов мы можем быть уверены что данные о доступности товара обновились?
629 1583110
>>583078
Ну тут от компании сильно зависит. От проекта или даже проектов.
Я могу рассказать как это было у меня. Я работаю с ритейлом, крупные интернет магазины и сервисы их обслуживающие. Тут особенность в том, что это собственные проекты и эти сервисы никому не продают. Соответственно заказчики и "пользователи" это менеджмент разных отделов корпорации. Есть конечно и покупатели товаров, но их мнение все равно сначала проходит через менеджмент.

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

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

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

Итоговая задача такая: необходимо импортировать данные о наличии, необходимо импортировать описание, необходимо раз в час делать товары в наличии и с описанием доступными к покупке, а без недоступными. Тимлид декомпозирует эту задачу на четыре:
1. Задача на экспорт наличия на стороне склада раз в час.
2. Задача на импорт наличия на стороне сайта раз в час.
3. Задача на ускорение частоты импорта описания до раза в час.
4. Задача на изменение доступности товаров раз в час.

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

Ну и напоследок задача на внимательность: через сколько часов мы можем быть уверены что данные о доступности товара обновились?
image.png84 Кб, 1300x385
630 1583127
Как это возможно? Что это за мистика? Куда девается первая буква? При чём это не единственный use, который утверждает, что не используется. Как это вообще произошло?
631 1583188
>>583110

>Задача


Раз в час)

Спасибо за то, что поделился.
632 1583190
>>583127
Бля, у меня было что-то такое, не помню точно как исправлял.
То ли регулярки в роутах не правильные, либо какие-то пропущеные.
Либо htaccess не правильный и сьедает буковку
633 1583192
>>583190
Какое-то подобие регулярки только одно.
image.png45 Кб, 846x555
634 1583251
>>583192
Ладно, хуй с этой проблемой. Я её решил. Теперь другая. Использую я NetBeans и встроенный XDebugger. Но он наотрез отказывается видеть созданную переменную. При чём даже пустое значение не выдаёт, он просто её не выдаёт.
635 1583315
121
easy-bug.png19 Кб, 2021x935
636 1583467
>>583188

>Раз в час)


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

Как правило менеджмент в такой херне не шарит совсем, а с вопросом хули мой утюг еще не на сайте, ведь на складе он уже есть, приходят к разработчику регулярно.
637 1583487
>>583467
Ааа, то есть из-за того что сайт огромный итерация по нему происходит час?
638 1583496
>>583487

>то есть из-за того что сайт огромный итерация по нему происходит час?


Она может происходить и за секунду, но не непрерывно, а с определенным периодом. Час тут просто для примера.
639 1583707
>>552970 (OP)
Аноны, можете по человечески объяснит как решается Задача про банкомат (усложненная версия) https://phpbooktest2.ga/l1/mou-ikkai.html?
В подсказке алгоритм, который, по моему, работает без ограничений по количеству номинала.
При том там почти готовый код, который здесь обосрали
640 1583900
>>583110
А как там по алгоритмам? Нужно знать? Тебе пригодились знания математики/алгоритмов/динамического программирования?
641 1583910
Господа, будте добры подскажите. Я с нодой ковыряюсь, но это не суть - мне нужна скорее теоретическая инфа.
Я отправил на сервер запрос с заголовком: "Content-Type: form/multipart" через FormData эмулируется обычный запрос из формы. В пхп в общем случае это все попадает в массив $_POST. Нода без подобных удобств из коробки, и поэтому принимат этот запрос в виде буфера по идее в пхп так же можно получить данные из потока запроса клиента.
Короче - мне в ноде приходят данные. Если вывести в консоль - то выведет следующее:
------WebKitFormBoundary\тут разделитель\
Content-Disposition: form-data; name='data'
'тут строка из формы'
------WebKitFormBoundary\тут разделитель\
Content-Disposition: form-data; name='file'
тут файл(картинка) - [object FileList]

Как это дело распарсить вручную? [object FileList] - это буфер шестнадцатиричных данных. Как его вытащить? Регулярками по разделителю вытаскивать, а потом сохранять в каталог?

Где вообще можно что то типа инфографики самых частоупотребляемых заголовков, кодировок и прочего почитать по теме вопроса?
У файла с клиента должен быть MIME тип же, его как то нужно определить?
А то я путаюсь блин.
642 1584030
>>583910
Для ноды либа какая-то специальная была для разбора этих данных. Не надо вручную этого делать.
16BA36CD-D7D3-4ECB-8096-2B4D27D910AB.jpeg137 Кб, 1141x717
643 1584326
Я вас категорически приветствую.
Расскажи, почему тут ошибка.

В файле list-posts.php конец кода точно такой же, как тут 15 строка, но он ни в какую, сука, не хочет работать. Я ебу алибабу.
ЧЯДН?

Все делал по учебнику, до сего момента коды работали как надо.
799BB81B-8619-45D6-8312-53674A6F8B74.jpeg128 Кб, 1280x578
644 1584338
>>584326
Важное для меня обновление.

Осознал и исправился. В 5 строчке конец был с двоеточием, а я ебанул точку с запятой, от чего код считал, будто перебор элементов массива кончился не начавшись (я так думаю).

Теперь у меня два вопроса:

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

2. Как фиксить пикрил?
645 1584389
>>584338

В настройках подключения к базе utf-8 стоит?
646 1584391
>>584338

>Какой логический смысл в коде несет двоеточие? Тот же, что и фигурные скобки, но используется символ ":" при разбиении кода на блоки?


Альтернативный синтаксис просто

>Как фиксить пикрил?


Ты случайно не HTML5 включил?
647 1584400
>>584389
В базе sql?
У меня в поле с текстом стоит utf8_general_ci
Это оно?

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

> HTML 5


Честно, я не знаю. Как проверить?
648 1584413
>>584030
Либа есть, но мне интересно глубже копнуть, для себя.
Я уже разобрался, по итогу строка в запросе '[object FileList]' - это последствия моей ошибки. Я в поле fail передал не сам объект файлы загруженный в браузере, а родителя (тот самый [object FileList]), который отобразился в виде строки.
Вот это - this.fileInput.current.files[0] - уже позволило передать в запросе буфер с бинарными данными. Тут я так понимаю дело уже простое, пакет идет как текст. Разобрать его регуляркой, вычленить бинарные данные, и направить их в файл. Так картинка и сохранится.
649 1584414
Привет. Не так давно получил работу, звали как-бы на yii2.
Не бог весть что конечно - но дома сидеть было уже не в моготу.
Но. По итогу работаю с битрикс. Это ужасно. Это бесполезно.
Что делать. Бегать по собесам со спамных офферов?
650 1584451
>>584413

>дело уже простое, пакет идет как текст


Ну так тут дело делает HTTP, а это текстовый протокол.
651 1584452
>>584414
А что сам изучал? Нахер вообще идти работать с тем стеком, который тебе не нравится?
652 1584465
>>584400

Нет, там где ты подключаешься к базе из скрипта.
653 1584468
Сап, аноны! Я новичок, хотел бы узнать: какой лучше редактор скачать, чтоб было всё понятно, доступно и не нужно было в нём больно много копаться и что-то скачивать? Желательно ссылочку ещё скиньте на скачивание, с меня два чая и +rep.
654 1584476
>>584468
Нотепад++
655 1584495
>>584465
В каком именно фрагменте и что именно писать писать?

Подключение у меня происходит таким образом:

$this -> db = new ПДО ("скл:хост= путь/к бд; бд_имя =имя", "логин", "пароль");

$this-> db -> сетАттрибут (ПДО::аттр_еррмод, ПДО::еррмод_эксепшн);
657 1584557
>>584495

$this -> db = new ПДО ("скл:хост=путь/кбд;бд_имя=имя;charset=utf8", "логин", "пароль");
moder.png51 Кб, 185x355
658 1584568
привет, аношеньки. Меня зовут Кирилл хочу чтобы вы зделали игру суть токова

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

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

Так вот, какой из популярных бесплатных форумных движков, на твой взгляд, лучше всего подойдёт для такой модификации?
659 1584577
>>584557
Благодарю. Попробую.

>>584513
Хех. У меня просто пхп-файлы с тегами хтмл, когда надо. Но стоит, наверное, обозначать и версию хтмл. Спасибо.
660 1584708
>>579409
Какогож говна тебе насоветовали местные аутисты.
Открывай консоль ConEmu через меню опен сервера. Пиши в ней:
php(пробел)(путь к скрипту)

PROFIT!!!
661 1584710
>>584708
Ты тоже говно посоветовал, хоть и меньшее.
Тут вообще учат, как делать по инструкции, понимания ни у кого вообще нет, на выходе дебилы, уверенные в своей ценности. Грустно это.
662 1584723
>>584710
Нет. Я ответил на его вопрос. А не начал плести хуйню про линуксы и блядь докер нахуй.
663 1584730
>>584476
Хорошо, вот я например скачал опен сервер, запустил его, теперь всё что нужно - вывести нотепад на страницу моего сайта, и работать?
А как работать с php/html/css? Нужно создать все три папки с индексами этих языков, или в нотепад можно работать и так, свободно впихивая html и css в сам php? И нужно ли мне работать с базами данных MySQL, или на начальном этапе лучше этого не делать? Заранее спасибо, и прости за глупый вопрос.
А, и нужно ли скачивать сам php/html/css на комп?
664 1584743
>>584730
1. Пишешь в адресной строке браузера: https://youtube.com/
2. Вбиваешь в поиск "php уроки"
3. Выбираешь наиболее новые
4. Смотришь
5. ...
6. PROFIT!!!
665 1584810
>>583467

> параллельным вычислениям


Это тяжело реализуется на php?
Selection071.png71 Кб, 720x805
666 1584966
>>583467
Ну это если делать топорно на планировщике. Как правило, потом это оптимизируется до схемы очередей задач с воркерами.
К примеру:
1 - раз в минуту стартует скрипт, который идёт на сайт поставщика, получает все новые товары и на каждый новый товар создаёт задачу на импорт, добавляя её в очередь задач на импорт (queue_import_product);
2 - существует N воркеров, которые последовательно достают и обрабатывают задачи из queue_import_product, и исполняют их (если исполнение задачи упало с ошибкой - перекладывают задачу в конец очереди и увеличивают счётчик попыток для этой задачи);
3 - на каждый созданный в системе товар срабатывает событие, по которому модуль, отвечающий за экспорт, создаёт задачу на экспорт продукта на сайт и кладёт её в queue_export_product;
4 - существует M воркеров, которые последовательно достают и обрабатывают задачи из queue_export_product, и исполняют их, загружая продукты на сайт;

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

Отвечая на вопрос >>584810
нет, довольно просто, черед промежуточное хранилище задачи и набор воркеров, каждый из которых в один момент времени решает конкретную задачу (обработки конкретного продукта, например). Для примера можно глянуть gearman, это такая php-шная очередь задач.
667 1584990
>>584966
Ну принципиально ничего не поменялось. Ты просто уменьшил время с часа до минуты + время пока воркер обработает нужные данные. Принципиально ничего не поменялось. Час из примера время условное, просто нагляднее видно, как суммируются времязатраты.

Даже если ты напишешь это все на C++ задержка будет суммироваться точно так же, только в наносекундах. И чисто теоретически, в этот промежуток можно вернуть старые данные, запихать их в кэш и потом несколько часов искать несуществующий "баг".
668 1585003
>>583900
Мне приходилось задумываться об алгоритмах всего пару раз. И оба раза в итоге было решено писать код не на пхп. Видишь ли, если имеет значение используемый алгоритм, то важна скорость, а если важна скорость, то пхп в пролете. Например, какой бы алгоритм сортировки ты не написал на пхп он будет медленнее встроенного quicksort'а или сортировки в базе.

В общем, если есть достаточно мозгов чтобы изучать такие темы, еще и самостоятельно, то точно нужно менять язык.
669 1585007
>>584990
Ты не прав. Принципиальное отличие схемы с очередями от "тупых" скриптов из планировщика в том, что в случае очередей нагрузка легко масштабируется увеличением количества воркеров.
К примеру, на складе появляются и изменяются десятки тысяч товаров (в случае крупняка - изи), при этом для каждого есть не только текст, но история, информация от производителя, набор фотографий и тд и тп (то есть, нужно выкачать несколько мегабайт данных ради одного товара).
Соответственно, один несчастный скрипт-импортёр будет у тебя работать во-первых десятки часов, во-вторых, если он запускается раз в час - то ты запросто словишь ситуацию, когда один запущенный (в 22:00) планировщиком скрипт не успел отработать, а у тебя (в 23:00) уже запустился следующий. В итоге ловишь либо конфликты, либо дублирование данных после импорта.
В случае с воркерами это, во-первых, невозможно (условный exactly once обеспечивается самим транспортом, то есть, очередью), так что в случае воркеров ты просто увеличишь их количество с одного до десяти (к примеру), обрабатывая по 10 задач в секунду, они запросто будут справляться с нагрузкой.
Именно так оно и работает у крупняка, я как-то таким настраивал импорт сотни тысяч товаров (крайне часто корректировались цены на товар) со "склада" в интернет-магазин, а из интернет-магазина в dwh.
670 1585077
>>584966

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


Я про многопоточность (pthreads), а не многозадачность
671 1585090
>>584730
Шапку для кого писали? Никто не будет новичкам элементарщину пережёвывать.
672 1585120
>>585077
В теории можно что-то с этим сделать, но на практике все используют либо схему с воркерами, либо ассинхронщину через reactphp/amphp/swoole.
673 1585214
>>585120

>схему с воркерами


А на чем именно это реализуется?

Вот что еще есть https://www.php.net/manual/ru/book.parallel.php
674 1585327
>>585214
Библиотеки типа gearman, очереди сообщений типа rabbitmq (сейчас вроде самое популярное) либо кастомные решения поверх sql.
675 1585337
>>585007
Какое нахуй масштабирование, какой нахуй крупняк. В этом треде традиция жопой читать.
Если так трудно прочитать написанное, можешь в слух проговорить: ускорение обработки не избавит тебя от задержки. Это блядь природа асинхронных вычислений. Если задача А выполняется за фемтосекунду, но зависит от задачи Б, которая выполняется еще за фемтосекунду, то задача А выполнится за две фемтосекунды.
Об этом и была моя задача НА ВНИМАТЕЛЬНОСТЬ блядь. А не о том что демоны с очередями быстрее крон заданий.
676 1585441
>>585337
Глупенький, перечитай мой пост ещё раз. Никто не спорит, что последовательные задачи исполняются - сюрприз - последовательно.
Я же писал, что выполнять их нужно не в пакетном режиме, а по отдельности и по готовности.
2D33A78A-32DB-441A-9DCB-4A49D0AAF2E0.png1,3 Мб, 607x1080
677 1585626
Анон, прошу, дай книг по php+sql, которые содержат подробные пояснения за каждый символ кода.

Сейчас читаю Хопкинса Каллума и понимаю, что нихуя не понимаю. Сука, или я тупой, или еще что.
Пример его подачи:
"
некоторый код

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

другой некоторый код"

Блять. В коде идет махинация с массивами (array_slice, к прммеру), какие-то дефолдные функции (fetch и подобные), так же try и catch.

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

Короче. Подскажи адекватных книг, а не это.

А эта книга будто написана не для новичков, а для повтора, чтоб быстро пробежаться и вспомнить.
678 1585650
>>585626
Ну так может и начать с изучения SQL и PHP по отдельности?
679 1585657
>>585650
Проблема в том, что за код пхп в книге нет никаких объяснений. Хоть отдельно, хоть совместно, я не пойму, если объяснения будут поверхностными и очень размытыми.

Изучая php+sql единовременно, хотел сразу понять, как они работают в тандеме, ну и сэкономить времени.

Если и учить отдельно, какие книги можешь посоветовать?
image.png146 Кб, 370x370
680 1585662
>>585650
Тогда может быть не понятно как они друг с другом связываются.
НУ вот эту книгу я советую всегда. Книга во многом фигня. Но именно базовую суть связи php sql она передает причем уже на первой половине книги. Из минусов , что в инете нашел только 4 издание ,а там mysqli вместо pdo, но я все равно именно по ней научился кодить, а уже потом сам перешол на pdo
681 1585667
>>585662
Благодарю.

> в инете нашел только 4 издание



На канале в тг /progbook есть 2е издание за 16й год. Оно лучше?
682 1585674
>>585667

>На канале в тг /progbook есть 2е издание за 16й год. Оно лучше?


5 самое новое, там по возрастанию. Я читал 4
683 1585675
>>585667
4 есть на рутрекере
684 1585676
>>585667

> 2е издание за 16й год


Хотя странно что 16 год. Если 4 издание в 14 году вышло вроде. Ща чекну короче
685 1585679
>>585667
Лол, так у них 4 издание. Как и на рутрекере. Хотя написано 2
686 1585705
>>585657
Дядь, ты думаешь я, который уже семь лет в этой помойке, знаю все эти функции? Есть php.net где полное описание с примерами. Есть гугл, у которого всегда можно спросить любую хуйню типа: как разбить массив на части, переиндексировать или отфильтровать.

В пхпшторме, например, есть встроенная справка со ссылкой на php.net и даже встроенный поиск в гугле.
687 1585706
>>585441
Ебать ты ферзь. Ну давай, расскажи как ты охуенно кафку настраиваешь. Интересно пиздец, особенно человеку, который спрашивал как на реальной работе задачи ставят.
688 1585708
Не могу совладать с фетчем pdo в объекты.
Мне кажется, что конструктор запускается после колдунства pdo. Это так?
689 1585727
>>585705
Несомненно, ты прав, пробелы в знаниях есть и будут у любого.
Однако, у тебя есть опыт и понимание, хотя бы на интуитивном уровне.

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

Смысл тогда писать книгу, если все, что автор может - оставлять ссылки на чужие сайты с пояснениями?
690 1585736
>>585727
Ну вообще весь код к книге должен идти в электронном виде. С бумажки читать совсем пиздец.
691 1585747
>>585708

Хз, ни разу не пробовал.
Я всегда юзал либо mysqli либо, сейчас, осваиваю eloquent.
692 1585751
>>585736
Почему это пиздец?
Почему при чтении обучающего материала я должен бегать по другим сайтам, чтоб понять, что мне в учебнике пишут?
693 1585764
>>579380
Писать дальше в нижнем регистре.
Этот psr лишь дополняется psr-12 (он его расширяет)
694 1585765
>>585708

>что конструктор запускается после колдунства pdo. Это так?


Там в опциях переключать можно.
А делать в случае отложенной инициализации объекта надо так: заводишь нужные публичные переменные под те, которые прилетят из базы - PDO их заполняет и вызывает конструктор, где ты с ними поимённо уже можешь работать и выполнять всякие манипуляции.
695 1585775
Сейчас делаю тестхаб на ларавеле. Есть модель Test и через метод questions() я получаю вопросы. Сам метод questions() возвращает объект Eloquent\Relations\HasMany, но если обращаться к questions как к атрибуту, то через магический метод вернется коллекция с вопросами. Как сделать так, чтобы если вопросы не нашлись в базе, то при обращении к questions как к методу или как к атрибуту, то выкидывалось исключение, ведь тест без вопросов невозможен? Это наверное надо где-то в самом классе прописать, не каждый же раз в контроллере чекать, нашлись вопросы или нет.
696 1585793
Хех. Тоже изучаю ларавел.

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

В чем вопрос? Да хз. Если кто-то делал подобное, покажите ваш artisan route:list как у вас это примерно реализовано.
697 1585803
>>585793

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

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

Вот не знаю как правильно и в какую сторону идти.
698 1585827
>>585706

> Ебать ты ферзь.


О, вот и гопники подъехали. Как там жизнь блатная, всё ли ништяк?
По существу, я критиковал конкретную схему, нарисованную аноном выше, дискуссия от изначального вопроса уже отдалилась.
699 1585861
>>585827

>вот и гопники подъехали


Ну а хули бы и нет? Чё ты как не родной?
negjcnm.jpg7 Кб, 258x195
700 1585868
>>585827
Фарту масти. Завязывай с боярой и переходи на чифирь, а то совсем хуево со зрением. Я и есть тот анон, с которым ты "дискутировал".
Охуенная дискуссия, я ему про асинхронность, а он про то что пакетный импорт хуйня.
14459074066400.png430 Кб, 598x448
701 1585943
Вечер в галеру, пацаны. Есть у меня непонятка одна - поясните по закону правильному - кодерскому.
Вот есть одна либа у вендора, по беспределу писаная - ни инъекций, ни конфигураций не передать извне. Так я сделал нужного потомка, чтобы по понятиям всё, и хочу перегрузить исходный класс. Но не ебу как это делать, а на все мои попытки интерпретатор ржёт и посылает пастись у туалета - типа есть такой класс уже.
Что делать надо?
702 1585954
>>583127

Автозагрузчик не должен бросать исключение при отсутствии файла. Читай https://github.com/codedokode/pasta/blob/master/php/autoload.md
сука вне закона.mp4235 Кб, mp4,
480x360, 0:05
703 1585955
>>585943
По всем понятиям воровскому коду западло от вендор пакетов зависить. Нужен блатной класс, через который все терки с вендором зашкваренным проходить будут. Тогда ровный код не законтачится, че там у петухов происходит блатным похую.
704 1585956
>>584338

Ты прав. Точка с запятой завершает конструкцию foreach (при этом PHP не смущает, что тела у цикла нету) и endforeach тут непонятно к чему относится.

Это типичная ошибка начинающих: они пишут лишнюю точку с запятой

foreach (...) ; {
...
}

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

Двоеточие нужно, чтобы отличать эти конструкции:

foreach (...) { .... }
foreach (...): .... endforeach;

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

Мануал https://www.php.net/manual/ru/control-structures.alternative-syntax.php
705 1585957
>>584338

Также, почитай-ка про XSS: https://github.com/codedokode/pasta/blob/master/security/xss.md

И в нагрузку еще урок про шаблоны: https://github.com/codedokode/pasta/blob/master/php/templates.md
706 1585958
>>584730

Нет ли тут ответов на твой вопрос? https://github.com/codedokode/pasta/blob/master/soft/web-server.md
707 1585959
>>585708

Да, это косяк от людей, которые в ООП не разбираются. Погугли, там есть какая-то опция, которая возвращает все с ног на голову и делает присваивание после конструктора. Ну либо пиши свой присваиватель на основе библиотеки PropertyAccess из Симфони.
708 1585960
>>585775

Ты можешь сделать свой метод questions() (или getQuestionsWithCheck()) и в нем делать проверку. Но это запретит использовать модели теста без вопросов в коде.
709 1586023
>>585957
>>585956

Спасибо за мануалы и за объяснение.

Прости в книге меня смутила этот случай с двоеточием. Автор никак не намекал, не упоминал про альтернативное (можно так назвать подобный синтаксис?) написание цикла, и та на нах, двоеточие.
710 1586299
Пушить локальные ветки на сервер нормально?
Какая есть практика нормальной доставки кода на ревью? У нас тут внезапно решили смотреть код до того как он попадет на сервак, нужно понять как удобнее всего все это дело оформлять.

Обычно у нас хуярится поток коммитов по разным веткам, которые бранчатся от мастера, потом опять же вливаются в него. Как это дело можно структурировать? Что бы например на каком-то этапе все смогли получить весь код по фиче Х, и при этом не бегать по 10-20 коммитам которые были сделанны в разное время и теперь размазанны равномерным слоем по таймлайну мастер-ветки в перемешку с другими коммитами?
711 1586327
>>586299
Если по классике, то git flow https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
Если по легкому, с ментолом, то github flow https://guides.github.com/introduction/flow/
15804356470490.png3 Кб, 677x257
712 1586716
Анон помоги. SQL

Слева таблица с данными. Надо выбрать записи так чтобы в столбце Час был самый ранний час и только одна запись с ним.
ну как справа.

Например на 8 месяц, 10 число в таблице есть две записи на 1 и 3 часов. Мне надо взять только одну надпись (при этом не важно на 1 или 3, но вообще таблица уже отсортирована, поэтому взять первую запись на 1 час).
713 1586744
>>586716
Подзапрос и агрегатные функции.
714 1586801
>>586744
я не шарю
715 1586820
и хуле вы не перекатываете?
анон как работать с ебучим modx? ниче не понятно
716 1586906
>>586801
Погугли эти темы и поймёшь.
717 1586925
Вопрос про организацию БД,

Допустим, есть каталог товаров, у каждого из которых есть некие метки-характеристики (деревянный/красный/мелкий). Товары можно добавлять/убирать/менять им список характеристик. Харктеристики тоже можно добавлять и убирать. Получается, нужны две таблицы: таблица товаров и таблица характеристик, так? Но как организовать связь каждого товара со своим списком характеристик? Это что-то простое и я вроде как это знал и умел, но забыл.
718 1586942
>>586925
Вспомнил. Связь многие ко многим. Делается через третью таблицу.
image.png5 Кб, 467x71
719 1587029
Пишу:
use BlaClass as BlaVendor\BlaNS\BlaClass;

И мне выдаёт ошибку. Хотя на php.net написано такое.
Меня документация обманывает или что?

Так и не понимаю как перегрузить класс. Вся проблема в том, что там не какая-то библиотека, а говнофреймворк написанный говнокодером.
720 1587094
>>586925
Чисто теоретически: а почему бы не использовать какую-нибудь MangoDB?
Завязывай с этой хуйней!!!.mp4526 Кб, mp4,
1280x720, 0:02
721 1587750
>>587029
Ты занимаешься хуйней. Не нужно ничего перегружать и устраивать чехарду с неймспейсами. Нужно просто абстрагироваться от вендорского пакета.

Вот пара примеров того как это делается:
https://3v4l.org/NlQOO
https://3v4l.org/otfZI
14088981088260.webm5,6 Мб, webm,
968x720, 1:32
722 1587762
>>587750
Там не пакет, а фреймворк и сам нужный объект где-то в его глубокой жопе создаётся и проживает трудовую жизнь. Мне пол фреймворка отнаследовать предлагаешь или в папку вендора залезать и править? Я не могу напрямую туда ни класс поместить, никак иначе на него повлиять.
Единственный вменяемый вариант - перегрузить своим потомком по нужному неймспейсу. И никак чёто не выходит.

Вообще, я уже нашёл другой вариант библиотеки - где всё работает, хоть и не так пафосно. Но я теоретически недогоняю.
723 1588078
Есть какая-то лёгкая и простая библиотека для баз данных? Лёгкая именно по ресурсам, ну и чтоб доки были нормальные к ней.
724 1588177
>>588078
Поищи orm (или что там тебе надо) на packagist
725 1588318
>>587762

>Но я теоретически недогоняю


Братан. ну а хули непонятного. Я тебе показал как ты можешь "повлиять" на объект в вендоре. Сама идея брать какой-то объект из вендор пакета уебищна и бессмысленна. Если прям невмоготу, то переноси код к себе и правь.

>Мне пол фреймворка отнаследовать предлагаешь


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

>Единственный вменяемый вариант - перегрузить своим потомком по нужному неймспейсу


Этот вариант полная дичь. Ты пойми: своими хитрожопыми манипуляциями ты убиваешь саму идею вендорского пакета. А идея такова что автор дает тебе открытый интерфес и оставляет себе возможность менять то что внутри, ничего не ломая для тебя. Как только ты лезешь внутрь ты эту схему ломаешь. Нахуя тогда держать этот код в вендоре, если нет гарантий работоспособности после обновлений?
726 1588322
>>552970 (OP)
Кто нибудь знает как полностью клонировать объект, если у него в свойствах находится массив объектов?
Пример:
class Department {
public $name;
public $employees; //Это массив с объектами

// А этот код выдает ошибку
public function __clone () {
$this->employees = clone $this->employees;
}
727 1588337
>>588322
Либо клонировать все руками, либо пользоваться готовой либой https://github.com/myclabs/DeepCopy
ZsQG8j1z.jpg26 Кб, 336x448
728 1588348
Поправил вектор, посмотри плиз, ОП
https://ideone.com/eU2beI
- Прошлые заметки вставлять не буду т.к. давно это было, в прошлом варианте у меня Класс коллекция предоставлял кучку методов для сортировки, выбора, исключения и взятия процента, ты предложил сделать методы на колбеках, я так и сделал.
- Еще я выбрасывал исключения, если метод в цепочке давал пустой результат, теперь сделал так что пустой результат это не ошибка.
- Еще ты советовал глянуть пхп док, я посмотрел, но только не вкурил как же правильнее комментить константы.
729 1588424
>>588318

>Я тебе показал как ты можешь "повлиять" на объект в вендоре


Нет, не показал. Ты написал элементарый пример наследования и композиции при полном доступе к объекту. У меня этого доступа нет.
Вот пример ситуации в коде: https://3v4l.org/NRkN8

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


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

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


Ради одной правки весь проект форкать? Там тупо метод переписать один приватный. И наверняка ещё куча говна всплывёт, в процессе дальнейшей работы. Вообще не вариант - мне проект работать, а не чужой код исправлять надо.

И вот что интересно - автор этого кода знает про тот же Ларавель, т.е. должен хотя бы слышать про тот же солид и бестпрактики, но лепит хуйню у себя в коде. Как говорится, смотрю в книгу - вижу фигу.
730 1588457
>>588424

>У меня этого доступа нет.


Бля, ну туго доходит. То что у тебя доступа туда нет это ПРАВИЛЬНО. Я вроде попытался тебе объяснить что происходит. Попробую в последний раз.

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

То что ты пытаешься сделать в своем коде это изменение вендор пакета. И тут тебя ждет компромисс: или ты отказываешься от автоматического обновления, а ради этого блядь система пакетов и придумана, либо делаешь как я показал. Я искренне не понимаю хули такого сложного вырезать код из папки с вендором и вставить в свой проект (ну кроме брезгливости), убрать либу нахуй из композера, а потом поменять нужную строчку.
731 1588486
>>588457

>туго доходит


Я тебе пример кода выше дал. Что до тебя туго доходит?

>То что у тебя доступа туда нет это ПРАВИЛЬНО


Там сраный курл. Какой смысл его прятать в веб-приложении? Я ни прокси туда поставить не могу, ни прочее говно.
ПРАВИЛЬНО тут, это когда инъекция.

>либо делаешь как я показал


Ещё раз: ты не показал ничего кроме копипасты из детских учебников. На моём коде покажи как ты там объекты подменять будешь или проходи - на задерживайся.
732 1588510
Вопрос по тестхабу: как лучше хранить ответы пользователя, чтобы он потом мог смореть свои ошибки в тесте? Сделал так - сохраняю json с айди вопроса и айди ответа с ошибкой в таблице с результатами теста. Но может быть лучше сделать отдельную таблицу с ошибками? Или в куках хранить их вообще?
733 1588532
>>588486

>На моём коде покажи как ты там объекты подменять будешь


Слушай, я не хочу на оскорбления переходить. По моему это достаточно просто: ты меняешь свой код и не меняешь чужой, об этом и написано в моем примере.
Чтобы поменять чужой и не нарваться на проблемы в будущем, нужно сделать его своим, об этом и написано в моем предыдущем посте.
Ты уперся в перегрузку класса, которая у тебя блядь даже не работает, а в итоге вообще отказался от либы. Я тебе пытаюсь объяснить что это изначально проигрышная ситуация, даже если бы у тебя все получилось как задумал.
734 1588564
>>588532

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


Только вот твой пример про расширение классов, а не подстановку.

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


>а в итоге вообще отказался от либы


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

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

>сохраняю json с айди вопроса и айди ответа с ошибкой


Вообще хранить идентификаторы в результатах может быть плохой идеей. Ты продумал что будет если тест поменяется после прохождения?

>может быть лучше сделать отдельную таблицу с ошибками?


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

> Или в куках хранить их вообще?


Куки ненадежное хранилище, если нужно ошибки один раз показать, то сойдет. Но если ошибки еще понадобятся, то точно никаких кук.
736 1588593
>>588564

>Только вот твой пример про расширение классов, а не подстановку


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

>а выполнить перегрузку нужной библиотеки в тех же целях это нельзя?


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

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


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

Если невмоготу:

- форкаешь проект в свой гитхаб
- делаешь там правки
- меняешь ссылку в композере на свой гитхаб
- документируешь это в документации проекта
- делаешь пулл-реквест автору исходного проекта с объяснениями, где он не прав и что надо поменять
- если/когда автор внемлет твоим мольбам, меняешь ссылку со своего форка на исходный
- если не внемлет, то тебе придется теперь пожизненно самому обновлять свой приватный форк при изменениях в апстриме (исходном проекте)
1477517180792.webm490 Кб, webm,
854x480, 0:03
738 1588615
>>588593
>>588597
Ну в общем я разобрал по частям написанное, проанализировал и сделал выводы для себя. Спасибо за инфу пойду к весне оттаивать.
739 1589048
>>587094
А зачем (чисто теоретически)?
740 1589115
>>589048
Что бы хранить в одном поле свойства в виде массива:

{
id: 1,
name: {"Перделка деревянная" },
properties: [ "Пердит", "Дерево", "Для лохов" ]
}

А потом, нужный товар искать по нужным свойствам, например "Дерево".
741 1589515
>>552970 (OP)
Почему в Оп посте до сих пор висит апач? Почему не Опен сервер?
743 1589607
>>589515
Шо то хуйня, шо это. Ещё бы денвер посоветовали.
744 1589683
>>588177
У меня небольшой проект - не хочу туда ORM-комбайны пихать со старта.
TwoMenContemplatingtheMoon-CasparDavidFriedrich.jpg3,5 Мб, 3809x3057
745 1589686
Битриксоиды есть в этом ИТТ чате? Что расскажете о экзаменах 1 и 2 их?
746 1589692
>>554886
Комплексный компонент делай. Скорее всего надо делать на основе bitrix:news. Комплексный компонент это по-факту роутер, который направляет параметры во вложенные простые компоненты и формирует ссылки через ЧПУ(ну или без него).
В том же bitrix:news есть разные страницы:
- news.php (главная страница компонента, на котором вызывается news.list)
- detail.php (детальная страница элемента)
И другие.
Соответственно создав страницу "pidrahui.php" и прописав соответствующий рут и условия в component.php, ты сможешь перейти на на страницу и разместить там такой компонент, который тебе нужен.
747 1589697
>>584452

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


Разные жизненные ситуации бывают.

>>584414
А ты пробовал их прямо спросить "где мой юи2?"?
748 1589786
>>589697
На нём было пару маленьких проектов и я с ними быстро закончил. Хотя там был тот еще трешь.
Но тут получилась интересная ситуация. Основная сфера деятельности компании после 2020 приверащается в тыкву, т.к. является сетью удостоверяющих центров - а этим теперь будет иметь право заниматься только определенная государственная организация...
749 1589888
>>589786
А ты экзамены Битриксовые сдавал?
750 1589939
>>589888
Нет. Брали как-бы изначально на уии. На битриксе потом сразу пошли задачи - времени на "обучение" и тем более какие-то экзамены нет. Лучшие практики и методики работы с этой "системой" пришлось изучать экстерном по статьям ведущих интеграторов и коду. Отчасти повезло с тем что ВНЕДРЕНИЕ идет не единомоментное скопом, а по частям - начали с работы продажников в crm...
С какой целью ты интересуешься?
751 1590127
антуаны, кто нибудь имел опыт работы с modx revolution?
очень нужна помощь. в инете как обычно нихуя нет
752 1590135
>>589939
Пизда твоей карьере. От битрикс-параши прост так не отмоешься.
Ищи удаленку на yii, благо, такой много.
753 1590153
>>590135
а хуле на этой битриксойдной параше то так много работы? просто прямо блять огроменное количество. что такого раз все это говно покупают ?
Снимок экрана от 2020-02-02 04-13-55.png51 Кб, 520x571
dfsdf 754 1590255
привет госопда

такое дело: задумал я википедию скачать
dompdf https://github.com/dompdf/dompdf
php7 apache2

не вставляет картинки! вот сука.
кто может помочь?
dfsdf 755 1590266
>>590255
коды с гитхаба моего дам
кому не лень - может скачать и запустить, mysql
.
756 1590309
Аноны, тут кто то как то писал о том как совместно использовать nodejs и приложение на пхп.
Нода вроде должна проксировать тыщи асинхронных запросов на пхп, а пхп их отрабатывать и возвращать ноде. Кажется так тот анон писал, я хотел бы точнее инфу услышать.
И еще как это все разместить на одном сервере? Как вообще ноду разместить допустьм за апачем, или нгиниксом?
Просто паралленльно с пхп нодой увлекся сгоняв между делом в одну контору, и написав тестовое на ноде, которое кажется приняли
757 1590345
Как в Ларавеле делать редактирование статей с прикреплёнными файлами?

Есть статьи, для которых в админке есть ресурсный контроллер. В нём можно добавлять новые статьи и редактировать существующие. При добавлении новой всё хорошо: в текстовые поля вводится текст, а в type="file" файл картинки. Файл загружается на сервер, а путь к нему прописывается в таблицу статьи, вместе с остальными данными.

Проблема с редактированием. При вызове edit() появляется форма с правильно заполненными текстовыми полями, но без заполнения поля файла. У него стоит "Файл не выбран". Программно заменять value этого инпута нельзя, это не работает (по соображениям безопасности). И как быть? Я хочу, чтобы при появлении формы редактирования показывался текущий файл и при сохранении (если его никто не трогал) путь к нему сохранялся. Как это сделать?

Больше того, у меня сейчас при редактировании вообще файл не копируется и вставляется только его имя. И если вставить в update(Request $request, Portfolio $portfolio) тот же кусок кода, что и в store(Request $request), то ругается на то, что файла нет.

Может быть кто-то может показать пример, как это делается? Я в тупике.
758 1590350
>>590153

>а хуле на этой битриксойдной параше то так много работы?


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

>что такого раз все это говно покупают ?


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

Как итог имеем кучу вакансий битрикса, на которые никто не хочет идти
759 1590375
>>590350

>Как итог имеем кучу вакансий битрикса, на которые никто не хочет идти


логично что при деффиците кадров при огромном количестве работы у них должна быть конская зп. так чому не так то ?
просто сам сейчас джун на которого вещают всякое битрикс/опенкарт говнище и хочется соскочить на че нить нормальное. в идеале на ларку само собой
>>590127 - кун
760 1590384
>>590375

>опенкарт говнище


А чем плох опенкарт? Как по мне, это один из немногих движков, реализующих MVC. Правда, добавление модулей и любых дополнений у него совершенно форшмачное: никакой возможности их безболезненно удалить и всё через жопу. Но сама кодовая база довольно внятная, в отличие от того же Вордпресса.
761 1590420
>>590384

> Как по мне, это один из немногих движков, реализующих MVC


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

>А чем плох опенкарт?


>добавление модулей и любых дополнений у него совершенно форшмачное


этим то и плох.
762 1590423
>>590375

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


Потому что кроме снг это говно никому не нужно
763 1590430
>>590375

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



Сразу ищи другую работу. От навешнивания на тебя этого говна, ты не вырастешь как разраб.
Был в аналогичной ситуации - учили меня Modx и давали править баги на prestashop. Хотя я шел на yii2. В итоге дропнул ту галеру, чему рад.
764 1590444
Анон, я ленивая жопа и люблю продавать свои знания, чем работать. Можно ли в вебе этим заниматься?
765 1590451
>>590444
Какие знания?
766 1590456
>>590451
Да любые знания. Мне нравится идея, что можно сидеть дома, занимаясь своими делами, а потом отправлять технического директора делать твою работу, но получать за это денюжки.
767 1590460
>>552970 (OP)

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


Аноны, есть какие нибудь ссылки для облегчения изучения
768 1590490
>>590430

>В итоге дропнул ту галеру, чему рад.


и через сколько ты решил ее дропать? я думаю посидеть тут до 6 месяцев работки и дать по газам отсюдава если не поднимут зп и не дадут норм проектики
769 1590495
>>590490
Думал дропать после пары месяцев возни с престашопом.
По факту дропнул спустя пол года, т.к. временами завозили задачи на yii
770 1590757
>>590460
https://www.php.net/manual/en/
Каждый день ты будешь облегчать изучение для себя завтрашнего.
771 1591017
>>590384
Да он не то чтобы совсем плох. Просто нафиг надо изучать платформу, на которой только одни магазины делать вместо универсальных решений на которых что угодно писать можно? Да и код там внутри не самых лучших практик.
772 1591027
>>590375
Хорошая ЗП у Битриксоидов начинается с миддлов, потому что, как сам догадываешься, очень много соскакивает с него. Поэтому джунам могут даже недоплачивать по сравнению с другими фреймворками.
773 1591028
>>589939
Да сейчас на завершающих этапах обучения Битриксу в компании и необходимо сдать официальный экзамен.
774 1591036
>>591028

>в компании и необходимо сдать официальный экзамен


Ещё меньше кодеров будет на эту платформу. Их понять легко - хотят сертификатами ещё барыжить, помимо самой платформы. Только вот соснут они с таким подходом обязательно.
775 1591042
>>591036
1С Битрикс, просто напомню
776 1591044
>>591036
Битрикс - это, в первую очередь CRM, не CMS.
777 1591060
>>591042
>>591044
И что? Нет кодеров - нет поддержки. Хоть CRM, хоть CMS.
Сама по себе платформа ничего не значит, без людей, которые её обслуживают. И чем их больше - тем лучше.
778 1591085
>>591036

>Только вот соснут они с таким подходом обязательно.


Ну хз. Этот процесс может затянуться на годы. Запаса прочности, учитывая сколько сервисов в СНГ работает на Битриксе, ещё лет на 10 как минимум.
А лично я согласился на Битрикс только потому, что работа близко к дому, хороший коллектив, и, самое главное, мы внедряем Битрикс 24, в том числе в странах запада(в основном испаноязычные страны). Только для Б24 нужно знание фреймворка Битрикс.
И, как я понял, внедрять Б24 не такая залупа, как делать сайты на битриксе.
779 1591106
>>591085

>И, как я понял, внедрять Б24 не такая залупа, как делать сайты на битриксе.


Т.е. ты ориентируешься не на свой рост по спеке, а на типичное местное зашквар\не зашквар. Ну и какой смысл слушать июня?
780 1591118
>>591106
Не такая залупа в техническом плане, в плане работы как таковой и обстановке в компании. Клиенты не такие ебанутые.
Никто о зашкваре не говорит.
781 1591244
Почему так много вакансий по PHP, а по C нет вообще? Стоит ли учить его для работы на пару лет, а потом на C++ перейти? Образования может будет.
782 1591249
>>591060

>И что? Нет кодеров - нет поддержки. Хоть CRM, хоть CMS.


Ещё раз, Битрикс - это не фреймворк, не язык программирования, а CRM-система. Ты ещё удивись, зачем нужны сертификаты для 1С или SAP.
783 1591252
>>591244
Всякие С, кресты и решетки используются крупными компаниями или их филиалами в больших городах. У меня к примеру лишь 1 работодатель в городе шарп использует, крестов вообще не найти нигде. А с пыхой вакансий 10 есть.
784 1591270
>>583110
Ох, блять. Словил вьетнамский вертолет, пока читал. Как же хорошо, что я съебал в другой стек, чтобы не видеть больше никогда этот сраный пхп-ритейл и все, что с ним хотя бы отдаленно связано.
785 1591470
в общем аноны послалл эту битрикс залупу и решил идти в ларку. благо денег есть побичевать и поизучать чего нового есть пару месяцев. так вот: где лучше и по чему ее учить?
786 1591521
>>591470
laracasts .com - часть бесплатно можно смотреть, часть на рутрекере лежит
Д. Елисеев - Мастер класс по Laravel - курсхантерс/рутрекер
787 1591523
>>552970 (OP)

>тред перезвонивших


Так там только 400ккк господа с опытом в 16 лет, живут в гейропе, сингапуре и сша
788 1591689
>>591470
codecourse, laracasts. Всё подробно объясняют. Если нет денех то качай с потоков. потом не забудь отблагодарить людей которые старались ради тебя любимого покупкой подписки на год.
789 1591701
>>591244
Отвечу как человек который изучил Си как свой первый язык и вышедший с этим языком в настоящую индустрию.

Когда я весь такой гений изучивший Си до поинтеров и до недоклассов решил покодить на площадках типа CodeWars или HackerRank, я обнаружил, что в то время когда в других языках достаточно использовать одну функцию для того, чтобы соединить две строки, мне нужно составить алгоритм и воплотить его в моем языке с нуля, то есть написать кучу кода, даже если использовать стандартную библиотеку строк и .т.д
В итоге я просто остановился в развитий Си и ушел в PHP. Тот же PHP, но для того чтобы создать простой класс мне нужно лишь написать пару строчек, вместо объявления миллиардов переменных и перенапралений структур через указатели и т.д
Этот язык уже сделал своё дело, обычным кодерам он не нужен, а если и да то только тогда когда речь заходит о железе. Сейчас всё можно делать намного проще, не тратя кучу времени, не мучать себя. Сам Си особо не нужен если ты не заинтересован в разрабатываний десктопного ПО или написаний драйверов например, приложений для Линукса каких нибудь.
Сейчас есть языки намноооооого проще но которые не уступают Си ни в чём, типа Rust, Go. Я бы выбрал эти языки, если прям совсем хотел бы я понял почему эти языки мне не подходят, я бы уже перешел на C и C++.
Сам хотел пойти в геймдев, сначала пошел с Си, потом хотел перекатываться на С++, но мой интерес перехватила веб-разработка. В конечном итоге это всё одно и то же если говорить про работу.
А Си это мучение. Но жаловаться не буду, это мой первый и самый любимый язык, говорю конечно не я, а стокгольмский синдром. Хотя многому он меня научил.
790 1591703
>>591244
А да забыл на твой вопрос ответить. Учи плюсы сразу. Определись с языком который ты будешь использовать на ежедневной основе и мастерить его. Нельзя просто так взять и как в видеоигре обнулить ветку талантов.
791 1591872
>>591521
>>591689
Зачем это все, когда есть замечательная официальная документация?
792 1591877
>>591872
Документацию пишут часто программисты.
793 1591902
>>591703
Вообще хочется программировать микроконтроллеры и приложения для Linux/Windows писать, сетевое программирование интересно. Но одновременно и хотелось бы что-нибудь и в вебе создавать. Вакансии преимущественно по PHР в моем городе.
794 1591941
>>591872
Документация не покажет как написать типовой crud
795 1592111
>>591902
Поработай с пыхой тогда, если хочешь в микроконтроллеры то придется потом учиться по новой, программирование конечно будешь знать и как суетиться и .т.д но придется менять мышление и изучать ветку Си конкретно. Если хочешь чего-то добиться до годиков 5 придется позаниматься Сишкой и микроконтроллерами чтобы что-то серьезное делать. Я не парюсь ибо вебу в бекенде готов отдать от 10 лет например.
796 1592118
>>591872
Для того чтобы что-то изучить нужно практическое применение для успешного закрепления материала. Ключевое слово, кстати, документация, а не учебное пособие. Там описаны лишь ключевые особенности языка, то есть в каком то смысле мануал. Курсы и книги, а так же ОП демонстрируют тебе на практике зачем что-то нужно и почему, при этом направляют тебя в нужное русло, чтобы ты не потерял время в пустую. Документацию можно как раз таки использовать получив знания и закрепляя их с помощью написания кода.
Вот что лучше, идти по неизвестной тропинке сверяясь с картой, или со спутником который знает пути и можешь рассказать тебе про окресности и как лучше и эффективней пройти перевал чтобы не потеряться и сдохнуть?
797 1592120
>>592118

>можешь


может

самофикс
798 1592122
Честно, когда учишься выбирать между учебными материалами не стоит. Лучше хватать всё и сразу, и курсы, и мануалы, и книги и так далее.
799 1592293
Аноны, у меня трабла.
По событию на киенте я AJAX-ом отправляю запрос на сервер. Сервер в ответ должен отдать файл для тотго что бы клиент выдал окошко для загрузки файла.
Но не получается почему то. Файл от сервера приходит, но окошко предлагающее загрузить файл не выводится.
ЗАголовки стандартные:

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
800 1592330
>>592293
П.С. трабла у меня именно в аяксе.
Если запрос на загрузку файла делать не из ajax, а допустим сылкой типа:
<a fref='/get-file' >получить файл<a/>
То все отлично работает.
Как заставить браузер при получении файла через аякс показать меню загрузки странички ?
801 1592354
>>592111
>>591902
Неправильный подход к обучению.
802 1592356
>>592354
Как тогда правильно?
803 1592358
>>592356
Не изучать язык программирования, изучать сами микроконтроллеы, а выбирать язык программирования уже в зависимости от необходимости.
804 1592400
блять неужто на весь тред нет ни одного человека который бы работал с этим говнищем ?

>>590127 - кун
805 1592474
>>592400
Не лезь, блядь, оно тебя сожрет
806 1592478
>>592358
Бред несешь. Одно выходит из другого.
807 1592504
ОП всегда говорит топовые вещи. Но в туторе по Пыхе я заметил что он пишет использовать надо md_strlen, а не обычный strlen. На Codecourse говорят противоположное, а ОП как раз подметил что американцы не знают других языков якобы, но этот чел (Алекс) Британец.
808 1592507
>>592478
Суть ведь не в том, что одно из выходит из другого, а в том что в идеале, надо изучать нужные технологии самодостаточно.
809 1592570
Приветик.
Подскажите, как сделать вызов строки из таблицы по ID?
К примеру, из вар дампа видно, что ID у лука, меча и молота различны (совпадают с ID в SQL-таблице, конечно же).
Так вот, что написать в коде с хтмл-формой, чтоб по номеру ID, которое будет введено в хтмл-форму, из таблицы вызывалось нужное оружие с характеристиками?

Собственно пикрилы:
1 - корректное подключение и вывод из БД.
2 - код подключения (его же так же надо менять, чтоб передавал те значения, что придут из пикрила_3 или нет?)
3 - код самой хтмл-формы.

Алсо, доп вопрос.
Хочу позже добавить сравнение по урону/весу.
Это будет удачно, если у меня все поля в SQL-таблице имеют тип LONGTEXT (кроме ID) или я еблан (да)? Просто когда я ставил тип поля с плавающей точкой FLOAT, то у меня вес все равно вес округлялся до целых.
810 1592574
>>592570
SELECT * From Weapons WHERE id = _id_из_post_который_надо_заменить_type_на_number_вместо_text.
811 1592694
>>591877
А надо, чтобы писали выпускники филологических факультетов? Суть в том, что у Ларки отличная дока, а всякие best practice легко гуглятся под конкретные задачи, если опыта не хватает самому все сделать.
812 1592699
>>592118
Ну это какой-то детский сад.
813 1592835
Подскажите в чем ошибка

<?php
for ($money=10000; $years=0; $age=16; $money+1000; $age++; $years++) {
echo "{$age} {$money}";
}
814 1592836
Запилил в тестахабе прохождение тестов, пока что без создания и без личного кабинета, но смотрю на код и не понимаю, как его тестировать. У меня две основные очень большие функции startTest и submitAnswers. Первая устанавливает дедлайн(если он есть) и редиректит на страницу с вопросами. Вторая валидирует данные юзера, проверяет дедлайн, считает оценку, записывает ее в базу, и ридеректит на страницу с результатами. Такое только для интеграционного тестирования подходит. Может я что-то не так делаю, и лучше все разбить на маленькие функции, чтобы юнит тестированием все покрыть?
815 1592839
>>592835
забыл условие $money<100000; добавить, но все равно ошибка
816 1592851
>>592835
В документации все же написано.
В for цикле есть три выражения:
1. Предустановка. Выполняется один раз в начале.
2. Условие выхода. Проверяется перед каждой итерацией.
3. Вычисление. Выполняется после каждой итерации.
Выражений всего три, и они отделяются точкой с запятой. Но действий в каждом выражении может быть несколько, и действия отделяются друг от друга запятой. К тому же ты неправильно делаешь изменение переменной $money и забыл перевод строки. Фигурные скобки тут лишние, но лучше возьми за правило использовать явную конкатенацию.

Корректный код будет:
for (
$money = 10000, $years = 0, $age = 16;
$money < 100000;
$money += 1000, $age++, $years++
) {
echo "$age $money" . PHP_EOL;
}

Но несмотря на его корректность так никто не пишет. Просто потому что разбираться в этом говне та еще морока.

Нужно четко обозначить начальный параметры. И так же четко обозначить что меняется в цикле:
$money = 10000;
$years = 0;
$age = 16;

while ($money < 100000) {
echo $age . ' ' . $money . PHP_EOL;

$money += 1000;
$years++;
$age++;
}
816 1592851
>>592835
В документации все же написано.
В for цикле есть три выражения:
1. Предустановка. Выполняется один раз в начале.
2. Условие выхода. Проверяется перед каждой итерацией.
3. Вычисление. Выполняется после каждой итерации.
Выражений всего три, и они отделяются точкой с запятой. Но действий в каждом выражении может быть несколько, и действия отделяются друг от друга запятой. К тому же ты неправильно делаешь изменение переменной $money и забыл перевод строки. Фигурные скобки тут лишние, но лучше возьми за правило использовать явную конкатенацию.

Корректный код будет:
for (
$money = 10000, $years = 0, $age = 16;
$money < 100000;
$money += 1000, $age++, $years++
) {
echo "$age $money" . PHP_EOL;
}

Но несмотря на его корректность так никто не пишет. Просто потому что разбираться в этом говне та еще морока.

Нужно четко обозначить начальный параметры. И так же четко обозначить что меняется в цикле:
$money = 10000;
$years = 0;
$age = 16;

while ($money < 100000) {
echo $age . ' ' . $money . PHP_EOL;

$money += 1000;
$years++;
$age++;
}
817 1592857
>>592851
Оу, спасибо большое чел
818 1592866
>>592836
Есть несколько подходов к тестированию.
Первый: тестировать все подряд, от контроллеров до кошачьей залупы, чтобы получить "покрытие". Пример: тестирование геттеров и сеттеров, тестирование контроллеров.
Второй: тестировать поведение, те случаи когда ты хочешь чтобы всегда происходило что-то конкретное, а что-то не происходило. Пример: тест, который проверяет, что пользователю нельзя отвечать после дедлайна, тест который проверяет что нельзя посчитать оценку во время решения.

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

По поводу переписывания кода. Из того что ты написал похоже что архитектуру нужно привести в порядок. Но не исходя из тестов. Сначала тебе самому нужно понять почему, а главное как, стоит разбить большие функции. Практики типа TDD подразумевают что ты можешь все отлично спроектировать еще до написания кода, и они явно не для новичков.
819 1592895
>>592574
$id_it = $_POST ["id"];
print $id_it;

так надо дописать после подключения к пдо?

А в форме сменить тип с текста, на номер.
image.png384 Кб, 512x512
820 1592939
Студентота 4 курса хир.
Пилю диплом.
На пыхе и ларавел.
СИСТЕМА ДОКУМЕНТООБОРОТА ДЛЯ УНИВЕРСКОЙ БИБЛИОТЕКИ
МОЖНО ОБОССЫВАТЬ
На самом деле наверное даже все нравится.
Ничего сложного - ларавел красивый и удобный.
Планирую потом сразу искать работу, но смущают перспективы.
Ну то есть да, я всегда смогу сменить одну работу на другую - вакансий полно, пыхь никогда не умрет.
Да, я всегда смогу вырасти до охуенного не факт и дорогого хуй знает сениора/тимлида/систем аркитекта на симфони и хуярить всех SOLID-ом с фабриками фабрик.
Особенно, если к знанию пыхи докину какой-нибудь гоу, чтобы покрыть нужды хайлоада.
НО.
Я правильно понимаю, что ни одна крупная контора меня с пыхой за пазухой даже дворником на задний двор к себе не возьмет?
Кто вообще блин сейчас в рашке помимо мелкого/среднего бизьнесса и его обсосов-аутсорсеров использует пыхь?
Просто пишу диплом, наслаждаюсь ларавелью, в голове маячит мысль о симфони, но в то же время атакует депрессуха от понимания, что на самый высокий уровень в крутые продуктовые конторы мне путь закрыт изначально и что лучше бы я давил удава на джанге?
821 1592957
>>592836

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

При этом мы можем проводить тестирование на разных уровнях:

- юнит-тесты: тестирование отдельных функций или классов без обращения к другим классам.
- интеграционные тесты: тестируем часть кода в сборке, вызывая функции напрямую, при это часть вызовов может подменяться "заглушками": например, обращения к сторонним API или к БД.
- тестирование контроллеров, когда мы подсовываем им фейковый объект Request, как будто к ним пришел запрос
- тестирование из HTML-эмулятора браузера без поддержки CSS/JS
- тестирование из полноценного эмулятора браузера

При этом нельзя сказать, что нужны только тесты одного уровня - все они по-своему полезны. Считается, что более простых тестов должно быть больше, чем тестов высокого уровня, это называется "пирамида тестов", описана, например, тут: https://habr.com/ru/post/358950/ Также, в этой статье написано еще много другой интересной информации.

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

> assertThat(greeting, is("Who is this 'Pan' you're talking about?"));



В твоем случае, можно начать с формулирования требований:

Операция startTest:

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

Операция submitAnswers:

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

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

Гораздо больше тебе подойдут интеграционные тесты. При этом нужно обеспечить их правильную изоляцию. Если код работает со сторонними API, их желательно заменить на загрушки. Если код работает с БД - желательно, чтобы она была в предсказуемом состоянии. Например, с минимальным набором данных, а все внесенные изменения бы откатывались после теста (писать заглушки для БД непрактично, если ты используешь SQL-запросы в коде. Если ты используешь репозитории и ORM без запросов, то их можно мокать).

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

Специально разбивать его на какие-то функции только ради тестов, думаю, неправильно.

Избегай "знания об устройстве кода" в тестах. То есть не тестируй, что метод A вызывает метод B, тестируй, что он выдает нужный результат, а как он это делает - это не важно. Не тестируй приватные/защищенные методы, которые нельзя вызвать извне.

Сценарии тестов должны быть простыми, короткими, легко читаемыми. В них не должно делаться много действий. Удобно, когда один тест проверяет ровно одно требование. Идеально, если он занимает 4-6 строчек. Если у тебя идет сложная настройка перед тестом, или сложная проверка, или много действий, или куча функций-помощников - это плохой признак, с такими тестами будет трудно работать.

Также, тебе по идее надо тестировать и создание/редактирование тестов, а не только прохождение. В идеале вообще весь функционал приложения.

Также, можешь скинуть ссылку на свои тесты, может я или кто-то еще сможет дать советы.
821 1592957
>>592836

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

При этом мы можем проводить тестирование на разных уровнях:

- юнит-тесты: тестирование отдельных функций или классов без обращения к другим классам.
- интеграционные тесты: тестируем часть кода в сборке, вызывая функции напрямую, при это часть вызовов может подменяться "заглушками": например, обращения к сторонним API или к БД.
- тестирование контроллеров, когда мы подсовываем им фейковый объект Request, как будто к ним пришел запрос
- тестирование из HTML-эмулятора браузера без поддержки CSS/JS
- тестирование из полноценного эмулятора браузера

При этом нельзя сказать, что нужны только тесты одного уровня - все они по-своему полезны. Считается, что более простых тестов должно быть больше, чем тестов высокого уровня, это называется "пирамида тестов", описана, например, тут: https://habr.com/ru/post/358950/ Также, в этой статье написано еще много другой интересной информации.

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

> assertThat(greeting, is("Who is this 'Pan' you're talking about?"));



В твоем случае, можно начать с формулирования требований:

Операция startTest:

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

Операция submitAnswers:

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

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

Гораздо больше тебе подойдут интеграционные тесты. При этом нужно обеспечить их правильную изоляцию. Если код работает со сторонними API, их желательно заменить на загрушки. Если код работает с БД - желательно, чтобы она была в предсказуемом состоянии. Например, с минимальным набором данных, а все внесенные изменения бы откатывались после теста (писать заглушки для БД непрактично, если ты используешь SQL-запросы в коде. Если ты используешь репозитории и ORM без запросов, то их можно мокать).

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

Специально разбивать его на какие-то функции только ради тестов, думаю, неправильно.

Избегай "знания об устройстве кода" в тестах. То есть не тестируй, что метод A вызывает метод B, тестируй, что он выдает нужный результат, а как он это делает - это не важно. Не тестируй приватные/защищенные методы, которые нельзя вызвать извне.

Сценарии тестов должны быть простыми, короткими, легко читаемыми. В них не должно делаться много действий. Удобно, когда один тест проверяет ровно одно требование. Идеально, если он занимает 4-6 строчек. Если у тебя идет сложная настройка перед тестом, или сложная проверка, или много действий, или куча функций-помощников - это плохой признак, с такими тестами будет трудно работать.

Также, тебе по идее надо тестировать и создание/редактирование тестов, а не только прохождение. В идеале вообще весь функционал приложения.

Также, можешь скинуть ссылку на свои тесты, может я или кто-то еще сможет дать советы.
822 1592964
>>592570

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

Число могло округляться, если ты передавал его в неправильном формате. Например, через запятую вместо точки. Выведи SQL-запрос, которым ты вставлял числа и проверь, все ли там корректно.

Также, может быть тебе больше подойдет DECIMAL, это точный тип, в отличие от FLOAT.

Перед тем, как подставлять параметры в запросы, прочти про SQL-инъекции и научись их избегать: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
823 1592975
>>592570

Также, неправильно вставлять диапазоны в таблицу в одно поле, если ты их собрался потом парсить. Лучше сделать 2 колонки - minDamage и maxDamage.

Вот тебе еще статья про нормализацию (как правильно проектировать таблицы): https://github.com/codedokode/pasta/blob/master/db/normalization.md

Хотя может тебе пока сложновато будет ее понять.

>>592504

Значит, автор того курса знает только про работу со строками из латинских букв, а не любых символов. Вот здесь у меня подробно (хотя, может, немного сумбурно) разобрано, что надо учитывать при работе со строками: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

Использовать надо mb_strlen как минимум, а иногда даже grapheme_strlen().

>>592293

Аякс отдает ответ для JS скрипта. Браузер этот ответ не обрабатывает и потому не показывает диалог. Надо именно делать переход на URL (например с помощью location.href = ...), либо как хак, можно сделать маленький ифрейм и делать переход по ссылке в нем (чтобы не перезагружалась страница в случае какой-то ошибки).

Также, в новых браузерах поддерживается атрибут download у ссылок.

Также, у тебя может быть ошибка в коде, так как в заголовках нельзя использовать символы не из ASCII, а в имени файла могут быть, например, русские буквы. Тебе надо либо правильно кодировать эти символы по стандарту, либо гарантировать отсутствие не-латинницы.
824 1592976
>>592964
Спасибо.
Прочту и попробую другие типы проверить.
825 1592981
>>592975

> неправильно вставлять диапазоны в таблицу в одно поле, если ты их собрался потом парсить. Лучше сделать 2 колонки - minDamage и maxDamage.



На твоем прошлом посте тоже задумался о разделении в таблице и выводу $minDMG . "-" . $maxDMG
Отсюда же и проще сделать сортировку по среднему урону.

Благодарю еще раз.
826 1593000
>>591701

Ты отчасти прав насчет неудобства Си. Но ты неправ в том, что Си изучать нет смысла. Так как языки вроде Си++, D, Rust, Go основаны на Си и без его знания тебе их сложно было бы понять.

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

Вообще, не понимаю этих переживаний, как будто кто-то полжизни (а не 2-3 недели) зря отдал на изучение языка. Это все равно какую-то пользу, думаю, принесет.

>>590460

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

>>590345

Тебе надо найти или написать виджет, который будет показывать, что файл уже загружен и позволять заменить или удалить его. Наверняка что-то готовое есть. Не знаю, как это делается в Ларавеле, но можно погуглить "file upload laravel"

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

>>590309

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

>>590255

Может, картинки должны быть сохранены где-то локально? Я бы начал с гугления, изучения документации или кода при ее отсутствии.
827 1593006
>>592981

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

Числа:

1
2
12

Строки:

1
12
2
828 1593017
>>593000

>Ты отчасти прав насчет неудобства Си. Но ты неправ в том, что Си изучать нет смысла. Так как языки вроде Си++, D, Rust, Go основаны на Си и без его знания тебе их сложно было бы понять.


>


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


>


>Вообще, не понимаю этих переживаний, как будто кто-то полжизни (а не 2-3 недели) зря отдал на изучение языка. Это все равно какую-то пользу, думаю, принесет.


Я обдумал это как раз таки за день. Писал уставший тогда, но ты прав. Си хорошо развивает понимание программирования, расширяет кругозор. Я даже вернулся его изучать.
e07aba2ec6a2eb8b770ecc7ea285583e.jpg78 Кб, 556x484
829 1593073
>>592851
Все равно не работает кста, такие ошибки выдает
830 1593119
>>592939
Не в тот тред пишешь. Тут васяны-вкатывальщики сидят в основном сам такой же гыгы. Собсно я благодаря этому треду и вкотился год назад в YII - с третьего собеса нашел работу на 40к, после испытательного 50к стали платить, иногда премии небольшие дают (за сдачу проекта там). В моей мухосрани такая ЗП прилично выше среднего, так что с php я не планирую никуда уходить, потому что ничего другого тут вообще нет ну и я 34 лвл, помирать скоро.
831 1593128
>>593073
А все, заработало
brian.jpeg16 Кб, 474x325
832 1593189
>>593119

>помирать скоро

833 1593320
>>592939

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


Vk, Skyeng, Avito - и это только на вскидку вспомнил

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


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

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


Бери симфу, пробивайся в условный скаенг, будешь свои 2.5к бачей иметь года через 2-3
834 1593388
>>593320

>Vk


В ВК берут не за знание PHP.

>Skyeng


Болото.

>Avito


Болото.

Еще есть Badoo, но про них ничего не знаю.

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


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

>Бери симфу, пробивайся в условный скаенг, будешь свои 2.5к бачей иметь года через 2-3


Без трудового договора с плохим workflow и ебанутым менеджментом.
835 1593393
>>593320

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



Тоже так думал в 2015 году - вот вкачусь в PHP, поднаберу опыта, а потом и в Java и 300кк. В итоге за 5 лет проганья на пыхе какое-либо желание работать в ИТ вообще пропало.
836 1593402
>>593189
Ну я щас где-то так и выгляжу, только волосы еще не такие седые.
837 1593486
>>593320

>Vk, Skyeng, Avito - и это только на вскидку вспомнил


Авито щас активно переходит на другие стеки, достаточно глянуть их вакансии. Ну и в целом у всех трех контор PHP остался в качестве легаси, так что пример не очень.
838 1593540
>>593486
Буквально вчера мне кидали ваку с авито PHP/Go
839 1593547
>>593393
Не думал про джаву, когда шел в пыху.
Из выборов были либо пыха, либо верстка.

Что мешает после апа до мидла срыгнуть на условный нет кор?
840 1593551
>>593388

>Без трудового договора с плохим workflow и ебанутым менеджментом


99% СНГ айти описал
image.png98 Кб, 1016x808
841 1593567
Пацаны, я сделал. Доволен. Держу в курсе.
842 1593570
>>593567
И в чём проблема?
843 1593575
>>593570
Не могу тея постоянно в курсе держать, в этом проблема.
844 1593584
>>593547

>Что мешает после апа до мидла срыгнуть на условный нет кор?


Что мешает сразу писать на нет коре?
845 1593594
>>593486
>>593388

И че, в пхп вообще не стоит вкатываться?
846 1593635
>>593594
Если бы я вернулся в прошлое на 5 лет назад, я бы сделал выбор в пользу другого языка без раздумий.

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

847 1593660
>>593635
Расскажи, в чем заключается сложность.
Вроде бы опыта набираешься, разучить что-то новое проще, чем с ноля закатываться.
Может ПХПшников шугаются как прокаженных?
848 1593669
>>593635
Уговорил, пойду учить мерзкий шарп.
849 1593688
>>593660

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


Я не совсем понимаю, зачем вкатываться в ИТ через PHP, чтобы потом когда-нибудь перейти на другой более лучший стек? Зачем тратить время? 3 года опыта на той же Java сейчас оплачиваются в среднем в 150к, 5 лет опыта - это уже за 200к. Плюс сейчас есть Kotlin, который активно внедряется в Java-проекты. Так зачем PHP?
850 1593701
>>593688

>Зачем тратить время?


Сложность вкатывания в пыху ниже, как все говорят.
851 1593726
>>593701
А сложность выкатывания выше. И вообще это устаревшая инфа. Сложность Symfony вполне сопоставима со Spring. Laravel, конечно, проще, но не настолько, чтобы прям с нуля быстро в него вкатиться. Добавь сюда динамическую слабую типизацию, неконсистентную стандартную библиотеку, вагон не совсем очевидных вещей и всякие премудрости настройки окружения (nginx, php-fpm, xdebug, etc.), которые вообще не относятся к программированию.
Больше того - у Java плавная кривая обучения, куча классических книжек, где показывают best practice и просто дают хорошую базу программирования. Это строгий статически типизированный язык, у которого PHP пиздит идеи. То, что будет внедрено в PHP8 через год, в Java было лет 10-15 назад. Все книжки по паттернам и ООП дизайну даются через Java, а тебе придется их читать в любом случае.
852 1593917
анон кинь ссылку на чей-нибудь личный минимальный фреймворк

Очень важно чтобы это был именно личный, а не коммерческий. Чтобы в нем можно было поковыряться.

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

Но в третий раз повторю - это должен быть велосипед, а не какой-нибудь CodeIgniter или Laravel. Нужно для обучения и личного дзена, я не работаю в вебе
IMG20200203073143147.jpg39 Кб, 600x571
853 1593961
Знаю основы пыхи и sql - что дальше? Учить ООП и фреймворки? И куда потом с этим набором выкатываться - на фриланс, настраивать магазины всяким Ашотам?

Знаю ещё про биржи, типа codecanyon - у кого есть опыт? Помню, один челик говорил что "йопта, учишь вордпресс, делаешь свои темы и выкладываешь, потом гребешь деньги лопатой", но я чет сомневаюсь..
854 1593966
почаму блядь эта строчка не работает?
<meta http-equiv="Cache-Control" content="no-cache">

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

Так не пойдет - как сделать чтобы страница ВСЕГДА перезагружалась без всяких там хешов-хуешов?
855 1594016
ОП мы не заслуживаем тебя.
856 1594051
>>592851
Где можно почитать про вот эти вот точки и кавычки при выводе переменных? Просто не знаю как гуглить:
echo $age . ' ' . $money . ;
857 1594068
>>593594
Если есть доступные альтернативы scala, .net core, то лучше туда пойти
858 1594071
>>594051
Что тут гуглить? Обычная конкатенация строк
точка в конце лишняя
859 1594270
>>594071
Запилите плез решение этой задачи:

Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?
изображение.png29 Кб, 653x528
860 1594316
>>594270
Поиском воспользоваться изволь
861 1594404
>>594270
В чем твоя проблема? Что не получается?

Могу тебе запилить решения плез вплоть до регулярок. Но научишься ли ты сам думать и искать решение (просить, чтоб тебе выкатили ответы - так себе решение)? Нет.
798343B7-3D5C-49D7-924F-9569E5330EC0.jpeg34 Кб, 460x323
862 1594409
>>594316
Блин, вот я тупой. Вместо решения задачек можно было бы просто загуглить их.

У меня очне плохо с математикой, я жестко обсерался при умножении на проценты, так как вместо 1.03 умножал сумму на 0.03.
863 1594411
>>594409
Ты главное после гуглинга пробуй хоть разобраться что в нем и как, затем закрывай решение и воспроизводи его без подглядывания. Если не получится, то конспектируй, хоть запомнишь
864 1594422
>>594404
Да я уже погуглил решение, никак не мог допереть как сделать чтобы он платил только сколько должен и не уходил в минус, вроде бы правильно делал, но не работало корректно
865 1594488
ОП, прошу помощи. Есть пхп фуллстак джун, мой стэк: php, laravel(другие ковырял, но из всех больше нравится лара), vuejs(vuex, vue-router), nginx, bootstrap(bootstrap-vue, думаю поковыряться в vuetify), git, composer, docker. Считаю себя джуном потому что мало опыта работы, на галере сам пилю проект для заказчика. Но все что я делаю это пишу rest апи и формочки на вью для них (такой уж проект). Хочу расти, посоветуй, пожалуйста, с чего начать? Шаблоны проектирования даже если и выучу, то понятия не имею где их применять.
866 1594497
>>594488

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


Очевидно, искать другую работу. В веб-студиях твои знания шаблонов мало кому нужны.
867 1594505
>>594497
Я не найду такую работу на удаленке?
868 1594519
>>594505
PHP - это в принципе больше про удаленку, чем офис, так что найти можно.
869 1594522
>>594519
В чем отличие php от питона в этом плане? Или от руби, ноды?
870 1594550
>>594522
Нода - это асинхронщина, а значит немного для другого.

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

У руби крайне туманное будущее в целом - все веб-проекты на руби - это по сути проекты на RoR, а он очень медленный, поэтому сейчас есть тенденция переписывать все на elixir/phoenix, который синтаксически близок к руби.

Веб на питоне вполне себе жив, хоть масштабы и не такие, как у пхп. Работа есть, в том числе удаленная, и чисто субъективно компании, которые используют питон, в среднем не настолько говенные, как у пхп. Плюс пистон в том или ином виде используют все топовые конторы в РФ, без работы сложно остаться, и эта работа будет поинтереснее, чем с пхп.
871 1594567
>>594550
В чем преимущество питона над пхп в вебе?
872 1594573
>>594567
Берёщь питонщиков и говоришь, что завтра они будут кодить на джанго.
873 1594577
>>594573
А с пхп не проще так сделать? Да и пыха быстрее питона, насколько мне известно. Так в чем собственно преимущество кроме как "не пехапе же" и прикольного названия питон типа член, поняли?гыг
874 1594581
>>594577
У питона низкий порог входа.
875 1594588
>>594581
А у пхп? Не думайте что я троллю, но реально считал что самый низки порог входа у пхп.
876 1594605
>>594588
Питон сегодня это замена Турбо Паскалю - на нём школьников в пиндостане учат. Поэтому он так популярен.
ПХП сегодня это форк Java для веба. Дальше сам прикинешь.
877 1594635
>>594605
Что означает выражение "форк %штука_нейм%"?
То есть, от этой %штука_нейм% идет пляска во все стороны и пути разные можно выбрать? Или что, я не понимаю.

другой анон
878 1594646
>>594635
В этом контексте имеется ввиду похожесть. Касательно джавы и пхп сходство сильное проявилось в последние 4-5 лет. Пхп, конечно, никакой ее не форк, а по началу вообще печальная поделка с действительно наверно самым низким порогом входа. За годы это изменилось и имеем то, что имеем.
В остальном когда говорят форк имеется ввиду ответвление. Допустим берешь какую-то либу, форкаешь ее (на гитхабе например), вносишь свои изменения - и вот у тебя форк этой либы.
В случае с питоном - может в ближайшие годы ситуация с ним все к тому же сходству с джавой придет. Зависит от того, насколько плотно разрабы питона будут делать упор именно на бек.
879 1594647
>>594635

>Что означает выражение "форк %штука_нейм%"?


Это значит, что когда ты выучишь пхп нормально с ООП, паттернами и фреймворками и пойдёшь попробовать джаву, то охуеешь насколько там всё похоже.
880 1594649
>>594635
fork - ответвление. Анон имел ввиду, что питон распространенный язык, который изучают в школе. А у пыхи много вещей заимствованных из джавы. соответственно вчерашнему школьнику легче и быстрее доучить джанго и идти плясать на дядю
881 1594654
Тут анон выше писал, что изучать технологии раздельно - это бред. Вот тут другой анон не понимает "технологии" алгоритмов >>594270 отчего и страдает, пытаясь взять задачу только за счёт знания пхп.
882 1594696
>>594588
У пхп ниже, чем у питона.
Ниже только У ЖС.

Поставить пыху легче, чем питон. Она везде есть.
ЖС работает вообще в браузере, ничего ставить не надо.
В блокноте херачишь и сразу выполняешь код.
883 1594697
>>594696
Ты под порогом входа понимаешь написание хелловорда?

>Поставить пыху легче, чем питон.


Чем? У питона есть хуета с 2.х версиями, но и только. Кстати в дефолтной убунте стоит питон из коробки, правда помоему второй. Пхп, помоему, по дефолту не стоит.

>ЖС работает вообще в браузере


Если рассматривать серверный, то нода самая сложная будет для первого использования, чем пхп или питон.
Один хер это не описывает порог входа.
884 1594805
>>594696

>Ниже только У ЖС.


ЖС не простой язык, у ЖС ограниченная область применения.
885 1594807
>>594805

>у ЖС ограниченная область применения


На этом говне даже дрова пишут
886 1594808
>>594654
Каких алгоритмов?
Там задачка для 5го класса
-cqSG3u3mEM.jpg30 Кб, 604x604
887 1594951
>>585662
Эх, помню пытался дальше развить так называемую соцсеть, указанную в этой книге в качестве примера... Но ничего особо и не вышло. Хотя там вполне много что можно было допилить и положить в портфолио хотя бы.
888 1595006
анон кинь ссылку на чей-нибудь личный минимальный фреймворк

Очень важно чтобы это был именно личный, а не коммерческий. Чтобы в нем можно было поковыряться.

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

Но в третий раз повторю - это должен быть велосипед, а не какой-нибудь CodeIgniter или Laravel. Нужно для обучения и личного дзена, я не работаю в вебе
889 1595054
>>594808
Вообще алгоритмов. У человека нету знания основ информатики, но он лезет программировать.
890 1595056
>>594567
На нем реально меньше говноконтор в рашке. Это единственное преимущество.
891 1595057
>>585662

Я сколько-то лет назад разбирал косяки в этой книге от О'Рейли 2012 года выпуска (на картинке). Может, конечно, они их исправили в новых изданиях.

Это ведь та же книга?

По-хорошему, стоило бы написать автору или в редакцию, чтобы они их исправили, но мне лень.
892 1595063
>>595057
Придирки уровня "Почему в учебники за 3 класс не даются интегралы?"
893 1595102
>>595054 >>594270

По алгоритмам есть хорошая книга
В. Л. Бусько, А. Г. Корбит Основы алгоритмизации и программирования - сборник лекций по факту, все разжевывается с нуля
894 1595213
>>595063

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

>>595006

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

Адаптивная верстка (и верстка вообще) обычно не часть фреймворка.

Что касается bootstrap, то виноват не он, а скорее кривые руки разработчиков.

По шаблонам могу дать статью, вдруг пригодится: https://github.com/codedokode/pasta/blob/master/php/templates.md

По оберткам над БД (если тебе интересно что-то посложнее PDO) тоже есть статья: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md

Для отправки почты есть библиотека Swiftmailer.

Я бы мог посоветовать брать за основу компоненты Симфони (Symfony Console, Symfony Routing, Symfony Validation, Symfony Forms, Symfony Container). Не путай их с фреймворком Симфони, они независимы от него. Из них нетрудно собрать свой микрофреймворк.
895 1595217
>>594270

У меня нет решения, но есть подсказка:

Попробуй переписать код внутри цикла примерно так:

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

«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.

>>594654

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

>>595054

Каких именно "знаний информатики" тут не хватает? Закона де Моргана, что ли?
896 1595222
>>594696

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

В Питоне (и JS) очень урезанный ООП, нет банально private/protected, нет интерфейсов. Такое ощущение, что то ли авторы боялись ООП и им везде виделся Enterprise FizzBuzz, то ли язык максимально упрощали. Но как писать большие проекты без нормального ООП? Тяжело.

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

Что касается JS, я понимаю, это не вина языка, но какой же на нем нечитабельный код пишут фронтендщики. В PHP хотя бы есть Симфони и люди приучаются к какому-то порядку, а в JS используется принцип "пишу как хочу" и лапша на выходе.
897 1595228
>>594696

Раз уж пошел тред жалоб на ЯП.

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

То есть криворукий JS-кодер не обрабатывает реджет промиса, и ошибки по умолчанию просто съедаются. Гениальный дизайн.

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

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

Кстати, это касается и браузеров. Мне не нравится, что по умолчанию ошибки никак не показываются в интерфейсе. То есть если JS код упал, то пользователь этого даже не знает, если только разработчики не написали обработчик ошибки (я такое кстати делал, большинство не делают. Я еще часто JS ошибки на сервер логгирую, пользователь ведь в консоль не полезет их читать).
898 1595232
>>595222

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


Уже есть давно.
Выглядит примерно так:
def something(a: str, b: int, c: SomeObject = None) -> bool
Так же есть из коробки typing модуль, который позволяет указывать например такие типы: List[SomeObject], Tuple[int, str, bool], Optional[int].
В общем с этим более менее норм сейчас.

>Нет в Питоне абстрактных методов


Поидее есть abc модуль, но я не пользовался.
Впринципе можно просто делать pass, это не очень сильно мешает.

>нет банально private/protected


Есть костыль с _ и __. Работает через нейминг.

Но в целом я согласен, что в питоне не хватает выразительных средств для комфортного написание большого кода. Плюс python way провоцирует скорее к обратному - писать прям в лоб.
899 1595233
js
900 1595254
>>594488

Если ты хочешь работать на бекенде: Симфони, ООП, SQL, нормализация БД, оптимизация БД. Алгоритмы и структуры данных (на собеседованиях пригодится). После этого можно будет посмотреть и шаблоны проектирования. Можешь выучить основы Питона, если вдруг переживаешь за будущее PHP. Можешь попробовать поизучать низкоуровневые языки вроде Си, чтобы перейти к Го/Раст/Си++ и писать какие-то хайлоад сервисы на них.

Также, если ты изучаешь все "прыгая по верхам" (то есть глубоко не разбираясь), то можешь попробовать разобраться получше. Ну например, изучать не bootstrap, а CSS вообще, не vue, а JS вообще. Разобраться в особенностях Laravel.

>>594409

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

>>594051

Про кавычки: https://www.php.net/manual/ru/language.types.string.php
Про точку: https://www.php.net/manual/ru/language.operators.string.php
901 1595264
>>594051

Этот код:

echo $age . $money ;

работает так. Синтаксис оператора echo такой:

echo выражение ;

Соответственно, $age . $money - это "выражение" для PHP. В данном случае это выражение состоит из операции склеивания строк (знак точка), хранящихся в переменных $age и $money. PHP вычисляет значение выражения и передает результат (строку) команде echo, которая выводит ее на экран.

>>593966

Тебе надо посмотреть на заголовки запроса, которым загружается страница, в инструментах разработчика в браузере (F12). Возможно, хостинг добавляет принудительные заголовки для кеширвоания в браузере или сам принудительно кеширует страницы. Ты должен с помощью средств разработчика найти причину и, если дело в хостинге, перейти на нормальный хостинг.
902 1595289
>>593961

Думаю, количество денег зависит от количества и качества создаваемых тем.

>>593567

Ты не прочитал статью про SQL-инъекции и твой скрипт уязвим. Прочитай ее и исправь ошибку.

>>593594

Если почитать статью "ваш язык - отстой", то тебе вообще лучше забыть про программирование и идти в более перспективную отрасль: https://habr.com/ru/post/315152/

>>593073

Это ошибки в JS-коде (название файла написано в правом углу). Скорее всего, это предупреждения для JS-файлов, которые расширения твоего браузера вставляют в страницу.

То есть, это не для тебя написано.
903 1595384
>>588348

> @var string $profession профессия



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

> Конструктор класса Сотрудник


Это очевидно из названия метода, можно не писать.

Кстати, обрати внимание, в PHP7.4 можно ставить тип у свойств класса: https://wiki.php.net/rfc/typed_properties_v2

> for($i = 0, $key = --$from; $i < $num; $i++, $key++){


> $numEmployees[] = $this->employees[$key];



Есть функция array_slice()

В takeNumItems() нелогично, что нельзя взять 10 сотрудников из коллекции из 1 человека, но можно из пустой.

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

Было бы хорошо вместо нее использовать встроенную константу Inf (бесконечность), но она имеет тип float, а не int.

> public function createEmployee(int $number, string $employeeClassName, string $profession, int $rate, int $litresOfCoffee, int $pgsOfDocs, int $rank, bool $boss = false){



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

foreach ($this->employees as $employee) {
if ($newEmployee === $employee) {
continue 2;
}
$this->employees[] = $newEmployee;
}

Тут один и тот же сотрудник добавляется в цикле, несколько раз?

> throw new CreateCollectionErrorException("В департаменте нет сотрудников! Коллекция не может быть создана!\n");



Вообще, можно создать пустую коллекцию.

> foreach ($this->employees as $key => $employee) {


> if ($employee === $firedEmployee) {


Можно же использовать функцию https://www.php.net/manual/ru/function.array-search.php вместо цикла?

> public function changeEmployees(Collection $collection, callable $changeFunction){


Эта функция должна быть в классе Collection. Какое она имеет отношение к департаменту?

> foreach ($department->getCollection()->getEmployees() as $employee) {


> $clonedEmployees[] = clone $employee;


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

> $department->getCollection()->filter(function($e){return $e->getProfession() == ENGINEER;})->sort(function($e1,$e2){return ($e1->getRank() <=> $e2->getRank());});



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

$coll->sortByRank();
$coll->filterByProfession(MARKETER);

Для замены босса было бы проще всего сделать метод в Департаменте replaceBoss($newBoss) (а также getBoss()), а не руками искать старого и менять на нового. Код замены босса явно должен быть в Департаменте, а не снаружи. Это же логично, что у объекта Департамент будет готовый метод поменятьБосса, а не кто-то будет брать список работников и вручную переключать статусы.

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

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

Вот тут неочевидный момент в коде:

$oneAndTwoRankManagers = $department->getCollection()-> ....
....
$department->changeEmployees($raisedManagers, function($e){$e->setRank($e->getRank() + 1);});

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

Так, в общем, сделано хорошо. Если захочется еще помучать ООП, то можешь взять либо ООП-гостиницу ( https://phpclub.tech/pr/res/1082507.html#1097078 ) или сделать ООП-представление для математических выражений и функции, которые их упрощают, раскладывают на множители, точно вычисляют без округлений, решают уравнения, берут производную и тд. (интересно и полезно, как мне кажется).
903 1595384
>>588348

> @var string $profession профессия



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

> Конструктор класса Сотрудник


Это очевидно из названия метода, можно не писать.

Кстати, обрати внимание, в PHP7.4 можно ставить тип у свойств класса: https://wiki.php.net/rfc/typed_properties_v2

> for($i = 0, $key = --$from; $i < $num; $i++, $key++){


> $numEmployees[] = $this->employees[$key];



Есть функция array_slice()

В takeNumItems() нелогично, что нельзя взять 10 сотрудников из коллекции из 1 человека, но можно из пустой.

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

Было бы хорошо вместо нее использовать встроенную константу Inf (бесконечность), но она имеет тип float, а не int.

> public function createEmployee(int $number, string $employeeClassName, string $profession, int $rate, int $litresOfCoffee, int $pgsOfDocs, int $rank, bool $boss = false){



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

foreach ($this->employees as $employee) {
if ($newEmployee === $employee) {
continue 2;
}
$this->employees[] = $newEmployee;
}

Тут один и тот же сотрудник добавляется в цикле, несколько раз?

> throw new CreateCollectionErrorException("В департаменте нет сотрудников! Коллекция не может быть создана!\n");



Вообще, можно создать пустую коллекцию.

> foreach ($this->employees as $key => $employee) {


> if ($employee === $firedEmployee) {


Можно же использовать функцию https://www.php.net/manual/ru/function.array-search.php вместо цикла?

> public function changeEmployees(Collection $collection, callable $changeFunction){


Эта функция должна быть в классе Collection. Какое она имеет отношение к департаменту?

> foreach ($department->getCollection()->getEmployees() as $employee) {


> $clonedEmployees[] = clone $employee;


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

> $department->getCollection()->filter(function($e){return $e->getProfession() == ENGINEER;})->sort(function($e1,$e2){return ($e1->getRank() <=> $e2->getRank());});



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

$coll->sortByRank();
$coll->filterByProfession(MARKETER);

Для замены босса было бы проще всего сделать метод в Департаменте replaceBoss($newBoss) (а также getBoss()), а не руками искать старого и менять на нового. Код замены босса явно должен быть в Департаменте, а не снаружи. Это же логично, что у объекта Департамент будет готовый метод поменятьБосса, а не кто-то будет брать список работников и вручную переключать статусы.

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

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

Вот тут неочевидный момент в коде:

$oneAndTwoRankManagers = $department->getCollection()-> ....
....
$department->changeEmployees($raisedManagers, function($e){$e->setRank($e->getRank() + 1);});

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

Так, в общем, сделано хорошо. Если захочется еще помучать ООП, то можешь взять либо ООП-гостиницу ( https://phpclub.tech/pr/res/1082507.html#1097078 ) или сделать ООП-представление для математических выражений и функции, которые их упрощают, раскладывают на множители, точно вычисляют без округлений, решают уравнения, берут производную и тд. (интересно и полезно, как мне кажется).
904 1595386
>>586925

Погугли Entity-Attribute-Value.

>>589115

А если понадобится добавить к свойствам дополнительные поля (например: описание, список допустимых значений). К примеру:

свойство: объем RAM
описание: От объема RAM зависит, сколько программ сможет одновременно запустить ваш компьютер.
допустимые значения: числа
единица измерения: Гб
905 1595393
>>587094

И, кстати, хранить свойства в виде массива можно и в Postgres, и в MySQL (как JSON).
906 1595406
>>595254
Работа вынуждает прыгать по верхам. Чисто бекенд позицию мне не найти, наверное. Если только на удаленке. А на удаленке джуны не нужны. Спасибо за совет
907 1595425
>>594071

>точка в конце лишняя



Вообще-то нет, без неё ошибка будет
908 1595504
>>595393
Postgress, да, знаю, а вот в MySQL хранить данные в JSON - это то ещё извращение.
909 1595506
>>595504
Ну и почему же?
910 1595557
>>594808
Это если на бумажке решать для 5-го класса, а чтобы на пыхе реализовать оплату только суммы долга из месячной можно неделю голову ломать, потому что это самое очевидное решение которое приходит в голову если бы ты делал это по законам математики в тетрадке. А по законам программирования надо подойти к переменным и приравнять последний долг к нулю а к оплате всего прибавить последнюю сумму долга которая меньше месячной оплаты.
911 1595628
>>595557

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


Джун за час такое делает. С тремя перекурами.
Какая неделя? За неделю ты несложное приложение поднять должен уметь на фреймворке.
912 1595793
>>595628
Джун да, но я только вчера начал
913 1595860
>>595793
Тогда первые задачки нужно делать за один присест, не дольше.
И не забывай просто читать всякое по теме, что понимаешь. Но не зубри специально - для общего развития по теме.

Для начала достаточно знать школьный курс информатики. Просто легче изучать станет.
914 1595940
Где сохронять ключи для Symfony Console?

Скажем, я пишу консольную комманду, которая заполняет базу данных пользователями. И у каждого пользователя есть свой приватный ключ, который хранится в файле. Как всё правильно сконфигурировать чтобы Symfony читала этот ключ из файла? Уточню, что ключ должен приходить не через STDIN, а храниться как конфигурация для Symfony.

Проблема заключается в том, что, допустим, мне нужно создать 3-ёх пользователей и у каждого пользователя есть свой ключ, который я сгенерировал с помощью gpg.
Вставлять этот ключ в переменную как простой текст было бы не правильно и раздуло код, потому что он занимает более 50 строк.
password.png207 Кб, 610x343
915 1595983
>>595940
Гугли .env и переменные окружения.
https://phpprofi.ru/blogs/post/72
916 1595998
>>595425
Ты рофлишь?
С чем ты конкатинируешь выражение в конце?
917 1596003
>>595998
Точно, просто я с пхп_еол делал
918 1596108
ОП в гайде по веб-серверу пишет, что есть и другие языки кроме PHP для создания динамических веб-сайтов типа C#. А почему тогда нужно изучать PHP? Он проще в этом плане? В чем недостаток других языков, они сложнее?
919 1596121
Сап пэхэпач!
Можете сказать насколько ущербным является выполненное задание по палиндрому?
Наверное, надо было юзать mb_substr, но я про эту функцию узнал, когда начал искать инфу в тредах, поэтому решил все же попытаться сделать так как задумал изначально.
Заранее спасибо

https://ideone.com/pDL2PW
920 1596124
>>596121
Сейчас выявил проблему - у меня почему-то с русскими символами не работает программа, а вот с английскими все ок
Что я делаю не так?
921 1596129
>>596108
ASP и прочие JSP - это энтерпрайз-технологии программирования.
И тут две проблемы:
Первая: на них мало кто пишет, например в моем мухосранске, это например ЦОБ (КАМАЗовская дочка) в ИТ-парке, которым нужен сразу а)фулстэк, б)с опытом работы 3 года. То есть нужен опыт работы, которого негде получить.
Вторая проблема: конечным покупателям, энтерпрайз просто не нужен, так как переплачивать за это никто не будет, поэтому проще сделать и продать сайт на пхп. Вот сколько ты знаешь русскоязычных сайтов на том же ASP, кроме мелкомягких? Я вот вспомню Директум и Кристалы только.
922 1596136
>>596124

>Что я делаю не так?


Живешь. Ты хитрый жук, решил подстроить тесты под задачу, что бы упростить работу.

Алгоритм у тебя правильный, но ты сравниваешь отдельные байты (строка это последовательность байт), а не символы. Русские буквы не влазят в первый 256 символов в кодировке. Для их представления нужно два байта. Соответственно все летит в пизду. Поэтому используются mb_ (MultiByte) функции.
Совмести строки 16 и 18. Перепиши задачу с использованием mb_substr и почитай в гугле про utf-8.
923 1596153
>>596108
Java/C# - это технологии для крупных компаний, готовых вкладывать много денег в большие системы, которые живут годами-десятилетиями. Попасть в такие компании можно либо с большим опытом, либо через всякие стажировки для студентов-джунов-трейни, если компания их вообще проводит. Если у тебя в городе есть такое, то, конечно, лучше идти туда.
PHP в основном покрывает нужны не-энтерпрайзного веба: относительно небольшие интернет-магазины, новостные сайты, блоги, лэндинг-странички и прочее. Тут много работы и много удаленки - часто на работу (даже удаленку) берут новичков с доучиванием, если покажешь себя promising на собесе. Но так же очень высок риск нарваться на говноконтору, при этом ты можешь и не понять, что это говноконтора, потому что опыта не имеешь. Плюс в целом PHP может быть хорошим стартом для будущего переката в Java, если сейчас по каким-то причинам у тебя нет возможности сразу работать на Java. Лично я не вижу смысла засиживаться в PHP больше 3-х лет, если только ты не собираешься работать в Skyeng, Badoo или Avito.

Если хочешь максимально обезопасить себя от говноконтор, то остерегайся, как минимум, таких баззвордов в вакансиях: Битрикс, WordPress, CMS типа OpenCart, Drupal, Magento, Joomla, jQuery, Yii/Yii2, отсутствие в вакансии какого-либо упоминания вида трудоустройства (это на 99% означает, что платить будут в черную и как попало), почасовая оплата.

Yii - в прошлом хороший фреймворк, на данный момент во многом устарел, но продолжает иногда использоваться даже в новых проектах. Если хочешь писать на современном PHP, то надо брать Symfony/Laravel.
924 1596175
>>596153
спасибо за инфу
925 1596183
>>596136
Спасибо за ответ. А можешь пояснить в чем заключается мое упрощение в виде подстройки тестов? Я сначала пытался с розой Азора сделать программу, но как ты и сказал, все летело в пизду, поэтому загуглил палиндром на английском, чтобы проверить работу алгоритма, так как понял, что дело в кириллице. С символами тоже все работает.
926 1596186
>>596153
Спасибо.
927 1596278
>>596153

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



Enterprise тоже бывает, но не такого масштаба, как джавовский.
928 1596422
>>595222

>удобно и быстро писать, но неудобно читать


Лол. Так читать - это то, что ты будешь делать 80% времени, если только пишешь не хеллоуворд в 2 строки.

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

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

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

>pook kek


При этом В САМОМ ЯЗЫКЕ уже сто лет как встроены типы - но только всем на них похуй, никто их не расставляет.
В итоге у меня возникло стойкое чувство, что фреймворк писали дети-дауны.
Хотя это вроде популярный фреймворк, с первых ссылок в гугле, с красивым сайтом.

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

А на питоне всегда максимально конченое говно, которое вообще хуй поймешь как работает.
Крайне низкое качество кодовой базы, сразу видно, что люди вообще не запаривались, что кто-то их высеры потом читать будет.
929 1596438
>>596278
Суть ведь не в том, что можно или нельзя, а вопрос в банальной удобности.
930 1596459
>>596153
А что не так с jQuery?
931 1596463
>>596459
Использует императивный стиль разработки, который является хуевым сам по себе.
Современные фронт-фреймворки типа реакта используют декларативный стиль.
932 1596500
>>596459
Это значит, что скорее всего будешь работать со старым кодом, чем создавать новый.
933 1596503
>>596422

>Я не знаю по какой причине, но питоно-дауны вообще не пишут комменты. Там нет хуйни типа phpdoc или javadoc.


pydoc оно называется
https://docs.python.org/3/library/pydoc.html
934 1596541
В тестхабе запилил сервис TestCalculator, который вычисляет результат пройденного теста. Пока он просто выглядит как несколько функций, но я подумал может лучше тут использовать паттерн Strategy?
935 1596965
>>595222

>какой же на нем нечитабельный код пишут фронтендщики


Лол. Тоже всегда палю код, который писал чувак, умеющий в бэк.
936 1597028
Может есть у кого , кто прорешивал уроки по php(который в шапке треда) элегантное решение усложненного варианта этой задачки, которое не решается жадным алгоритмом, https://phpbooktest2.ga/l1/mou-ikkai.html , она сразу же сверху, первая, я нашел какие-то решение , но разобраться в них просто ад, тем более я не уверен , что решения , которые я нашел не идеальны
937 1597041
>>596503
Питон - так-то вообще пых на максималках.
Только вот его мощь используется на 20%.

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

В итоге код на питоне выглядит как код на пхп4
Screenshot from 2020-02-10 10-01-37.png24 Кб, 593x164
938 1597043
Если требуется добавить один тип вопросов (для ввода числа), то зачем создавать несколько классов? Помогите разобраться с формулировкой задания, а то я никак не могу понять.
939 1597067
>>597041

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


Щас бы путать строгую типизацию со статической.
940 1597080
>>597043
Это про полиморфизм.
У тебя есть абстрактный класс вопроса и метод проверки ответа.
Вопросы можно условно поделить на вопросы с тектовым ответом и с числовым ответом. Каждый из двух этих классов реализует метод проверки ответа по своему.

p.s. Так то да, пример высосан из пальца. Разделять в данном случае на два класса нет смысла.
941 1597311
анончики, нужна ваша помощь.
нужно при помощи jquery или же select2 поменять структуру с обычного селекта как бы это странно не звучало на вот такое чудо-юдо https://codepen.io/elmahdim/pen/hlmri
как блять это сделать? в доках по select2 просто ничего не нашел
942 1597314
>>597311
Во-первых, причем тут php?
Во-вторых, пили кастомное решение, если select2 этого не умеет. По возможности взять реакт, но и ванилька сойдет
943 1597317
>>596153

>Если хочешь максимально обезопасить себя от говноконтор, то остерегайся, как минимум, таких баззвордов в вакансиях: Битрикс, WordPress, CMS типа OpenCart, Drupal, Magento, Joomla, jQuery, Yii/Yii2, отсутствие в вакансии какого-либо упоминания вида трудоустройства (это на 99% означает, что платить будут в черную и как попало), почасовая оплата.



https://yandex.ru/jobs/vacancies/yamoney/php_yamoney/

>опыт разработки под CMS (Bitrix, Wordpress, Opencart и др);

944 1597323
>>597317
тоже дристанул на всю свою галеру
>>597314
потому что когда я подменяю через replaceWith() то у меня просто не работает GET - запрос это раз, а во вторых в жс треде сидят одни чухоны которые нихуя ответить никогда не могут.
945 1597328
>>597314
алсо, нахуй мне подрубать реакт или ванильку ради одного этого меню для фильтра? раз я нигде кроме этого его в проекте использовать не буду
>>597323 - кун
946 1597332
>>597317
Яндекс и есть говноконтора, лел. Зарплаты ниже рыночных при требованиях выше.
947 1597334
>>597323

>в жс треде сидят одни чухоны которые нихуя ответить никогда не могут


Жиза.
948 1597340
>>597332
согласен. дохуя сторей слышалкак оттуда люди толковые рабзежались кто куда. кто в галеры поменьше, кто ко всяким авито/яндексам/озонам/касперским. аж душу греет. кроме последнего само собой
949 1597362
>>597317
Разгадка сего странного требования там же:

>создавать и дорабатывать платежные модули под CMS и фреймворки.

950 1597442
Существует ли в природе информация как вывести не индекс элемента массива а его строковое значение, и которая не представляет подобный вырвиглазный пиздец:
<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>
951 1597443
>>597442
Просто я в душе не ебу почему нельзя просто и без задней мысли показать как вывести одно значение а не два инпута с двумя эхо
952 1597479
ананасы, на шинде юзал опенсервер, сейчас перекатился на линь. так вот есть сейчас под нее что то аналогичное чтобы я из каробки прямо установил и все работало?
953 1597481
>>597442
https://ideone.com/AEL9yu

>>597443

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


Чё? Берешь и выводишь сколько надо.
954 1597485
>>597479
Нет, лол. Ставишь LAMP, настраиваешь конфиги и понеслась.
Нехрен на опенсервере долго сидеть.
955 1597586
>>597481
А как вывести в echo? Например: echo "Вопрос:$answers[$rand_keys]<br/>";
956 1597632
>>597586
Все, не надо
957 1597638
>>597328
ванилька - обычный жс, куда ты его подрубать собрался, он уже подрублен.
>>597323
причем тут replaceWith() и гет запрос?
958 1597642
Очень много работы на фрилансе на Wordpress. Я уже шарю в php, ооп, mvc, laravel. А вот как вкатиться в ебаный Wordpress?
959 1597643
>>597642
По этому пути лучше не начинать идти. Раз можешь в ларку, то ищи на ларку, вакансий много попадется.
960 1597647
>>597643
Это да, понятно. Но очень уж много мелких заданий на уровне подправить модуль или шаблон, хочется копеечку иметь с этого.
961 1597654
>>597642

>как вкатиться в ебаный Wordpress?


Очень странный вопрос для того, кто шарит в пхп, ооп, мвц и ларавель.
962 1597684
>>597654
Ну то есть все стандартно? Посмотреть исходники, глянуть документацию и вперёд - пилить модули для васянов?
963 1597768
>>595860

Что именно из школьного курса информатики поможет решить эту задачу? Сдается мне, ты просто троллишь тут и пытаешься сбить людей с толку.
964 1597772
Кто-нибудь пытался с бэкендом на фрилансе себя пробовать?
965 1597837
>>597768
Основы управляющих конструкций: условия, циклы.
И основы алгебры.
966 1597869
>>595860

>Для начала достаточно знать школьный курс информатики. Просто легче изучать станет.


а кто-то жил в то время когда в школе не было никакой информатики, компьютеров и вообще иди синусы с косинусами складывай
967 1598085
двач помоги. в общем необходимо пофиксить ajax-пагинацию. проблема в том что когда в каталоге ее юзаешь то она работает, а если юзаешь поиск то уже используется другой шаблон где пагинация не работает. ну я переписал чтобы при клике использовался нужный шаблон, но он какого то хуя мне теперь пишет шо таких переменных тут не найдено ))))) как пофиксить такую хуйню?
968 1598257
>>597837
Бинарную логику там тоже проходят.
969 1598351
Стоит учить пхп?
970 1598353
971 1598356
>>598353
хорошо, просто щас вот доделываю тудушку, и вдруг задумался и стоит ли учить пхп.
972 1598358
как не правильно разделять логику и представление?
973 1598359
>>598358

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


*правильно
974 1598403
>>598356
Не стоит.
975 1598408
>>598403
Почему?
976 1598412
>>598408
А зачем? Всё то же самое может делать и питон, и ява, и на ноде можно. Только ява с питоном ещё и в десктоп умеют, а пых только в веб.
977 1598415
>>598412
Норм язык. Вообще если ты взял разворот в ту сторону то лучше уже тогда просто Go взять который умеет всё.
978 1598417
>>598412
У меня вакансии в мухосрани только на пыху..
7D858FD0-51A4-42AA-B2A8-1C3C1510AEC4.jpeg102 Кб, 884x754
979 1598467
Пацаны, а параметр size не работает, если до этого указать type="number", что ли, блять? При type="text" все норм.

Ну и как мне тогда инпуты красивенько сделать?
980 1598477
аноны, подтолкните к нужному алгоритму решения проблемы. есть магазин. и когда я юзаю строку поиска то он выводит ссылки на товары в виде /catalogs/dildo/big-dragon/?search=big и вот последнюю часть он генерит для того чтобы не ломалась пагинация. соответсственно когда я перехожу по ссылке данной то у меня остается этот фильтр ?search=big при этом страница с товаром норм выводится, но в фильтре сохранияется вот это "big" но мне нужно чтобы при переходе по ссылке эта залупа убиралась и фильтр из за эттого очищался. так вот: как фиксить данный трабл?
981 1598480
>>598477
Надо "big" заменить на "bad"
982 1598508
>>598480
Ну это $_GET запрос, меняй его если надо
983 1598509
Так. Анчоусы. Я столкнулся с некоторой проблемой (пока что в теории).

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

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

Кун >>598467
984 1598516
>>598477

>как фиксить данный трабл?


Лезешь в код генератора ссылок и исправляешь его работу. Иначе никак.
985 1598524
>>598509
Inset into huita(тут просто не указыешь idgovno,pizda) values('idihuy', 'pidor');
986 1598525
>>598509

>При добавлении в таблицу sql мне обязательно потребуется писать id


Знач пиши так, чтобы не потребовалось это костылестроение. За свои id должна отвечать бд, а не прикладной код.
51EF302F-BA9F-4D7F-A99A-8C18805CA199.jpeg54 Кб, 700x491
987 1598532
>>598524
>>598525
От всего сердца благодарю вас. Спасибо, что вы есть.
988 1598544
>>598509
Предлагаю такой говновариант
1)Получаешь значение из последнего id через SELECT id FROM table_with_id ORDER BY id DESC LIMIT 1
2)Добавляешь к полученной переменной 1
3)Добавляешь нужную переменную в INSERT как ID
989 1598550
>>598544
Тащемта просто берёшь и скармливаешь базе новую запись, а в ответ она тебе её свежий айдишник присылает.
Все нормальные люди так делают.
990 1598558
>>598550
Ну он же пишет

>При добавлении в таблицу sql мне обязательно потребуется писать id (хотя у нее стоит авто_инкримент).

991 1598561
>>598558
Он хлебушек просто
992 1598569
>>598558
Два чую этого анона -> >>598561
Я еще совсем нуфаг, но сделать свою собственную хуйню хочется.

Дописал код, сейчас буду тестить. Держу в курсе. Хотя через минуту я сюда обязательно прибегу, так как есть высокий шанс нерабочего куска говна.
image.png115 Кб, 1567x936
993 1598580
Пацаны, блять.
Как я обкакунькался и что делать, чтоб было хорошо?
image.png7 Кб, 346x155
994 1598582
>>598580
Или такие символы нах не нужны, если я из переменных передаю данные?
995 1598583
>>598580
php видимость переменных гугли.
Рано тебе ещё код кодировать - азы подтяни.
996 1598587
>>598580
Где db_item? В функцию передай её.
Ебаный в рот азы же ну че ты пчел
997 1598590
>>598587
Она так AddWeap($db_item); ничего не добавляет в таблицу, но пишет, что успешно добавлено (без $name), лол.
998 1598595
>>598590
В объявлении функции укажи ее
7B6A46BE-6A0F-4834-93AC-037A772A1363.jpeg108 Кб, 894x720
999 1598600
>>598595
Я уже ничего не понимаю. Можно максимально упрощенно?
1001 1598611
ОПчик, посмотри пожалуйста вариант решения твоей задачки по палиндрому. В чем подводные камни?

https://ideone.com/HSpHbh
1002 1598630
>>598580
>>598583
>>598595
>>598600
>>598604
Ой проорал, прости мою душу грешную.
1003 1598642
Чуваки поделюсь ресурсом который дает задачки, тесты и теорию. Советуется тем кто уже прошел туториал ОПа и сделал задачу про список студентов.

https://www.geeksforgeeks.org/php/

Ищите то что интересует, там есть всё, PHP, SQL, алгоритмы. Мне очень помогает.
sample-a6c434dcc57b17b0bd46c1ec99666229.jpg255 Кб, 850x1203
1004 1598644
>>598630
Помидор 300к/сек ты?
39B98AE1-88FD-4089-B068-2EB1F184D892.jpeg59 Кб, 598x432
1005 1598646
Так ничего и не понял.
Ткните, блять, на ошибку и скажите, как написать, чтоб работало, чтоб я запомнил, как обосрался, и с чувством позора писал уже корректный код.
1006 1598647
>>598644
Нет. Смеюсь понимая.
1007 1598649
>>598646
Господи что ты творишь с моими легкими.
1008 1598652
>>598646
Попробуй питон лучше он полегче будет
1010 1598656
>>598652
Хочу пхп.
Ну, что у меня не так написано?

>>598649
Извини.
1011 1598663
>>598646
В общем у тебя ошибка, $db_item не объявлена.

Попробуй в начале функций написать $db_item = null;
1012 1598664
>>598656

> Ну, что у меня не так написано?


Пых не видит переменную потому что ты не передал её в функцию.
1013 1598668
Хотя если она глобальная у тебя, тогда хз чё ты там наворотил
Но это крайне хуева так писать
1014 1598670
>>598664
А точно, там типа

AddWeap(Переменная которую передаем);

Потом

AddWeap($db_item) {
$db_item-> ...
}

Да?
Kroos.full.2647584.jpg664 Кб, 2133x2133
1015 1598677
1016 1598682
>>598580
С запросом ты тоже обосрался
>>598646
Вот так должно быть https://dbfiddle.uk/?rdbms=postgres_12&fiddle=8947c469fd4eef91c091939e2028819a
1017 1598686
>>598677
Если что я мимокрок, сам пытаюсь разобраться с языком.
1018 1598692
>>598516
да, только если я его уберу то пагинация перестанет работать
1019 1598697
>>598692
Тебе его не убрать, а исправить надо. Если сам не умеешь - нанимай хрелансера.
image.png202 Кб, 1837x654
1020 1598704
Я уже не понимаю, ЧЯДНТ.

Я уже сперва функцию оюъявил, потом ее вызвал, в запрос в переменную перенес. А у меня ошибка на db_item в 37 строке до сих пор, блять.
У меня вообще в db_item находится new PDO и по запросу предоставить работает нормально.

>>598682
Поправил. Спасибо.
1021 1598712
>>598704
Всё хуйня переписывай нормально
1022 1598714
>>598704
function AddWeap($db_item)
{
$db_item->query ... итд итп
}
1023 1598717
Тред тонет..
external-content.duckduckgo.com.jpeg13 Кб, 474x266
1024 1598721
>>598704

>Въебать

1025 1598749
Да с хуя ли он ругается на $db_item, если это $db_item = new PDO ('mysql:host=

Я же запрос уже в отдельную переменную сделал, он все равно ебет мне мозг.

В пизду, короче. Завтра еще раз приду в тред. Добрых снов всем.
1026 1598752
>>598749
>>598704
Каждая функция это как маленькая и чистая песочница без переменных и прочей лабуды, которая вся остаётся снаружи. Чтобы в функции использовать внешние переменные их надо добавить в объявление функции и при вызове уже передать конкретные переменные.
После того как функция отработает вся её песочница аннигилирует в обливион.

По мне так если ты не понимаешь элементарных вещей, то рано тебе ещё сайты делать с пушками и колотушками. Так же рановато тебе в треде вопросы задавать - такие вещи люди изучают самостоятельно, а тут тебе не симпозиум "поможем хлебушку всем тредом написать приблуду". У нас самообразование тут в ходу.
1027 1598753
>>598544
Или сделать проще и использовать COUNT.
tenorgif1548792881.gif31 Кб, 220x220
1028 1598759
>>598752
Помидор ты?
1029 1598763
>>598759
Нифига не помидор.
Прост начнётся старая песня - на каждый пук от хлебушка будет лететь 100 вопросов как и почему не работает? На это всё гугл есть.
1030 1598767
>>598759
Как минимум человек должен понимать, что ему говорят аноны, иначе они с ним просто время теряют.
1031 1598768
Как правильно разделять логику и представление? А?
1032 1598772
>>598768
Без задней мысли.
1033 1598783
>>598772
Как? Пример мне покажите....
1034 1598784
>>598697
так я и говорю что уже залезал в код контроллера вот этого поиска. при удалении ненужного куска у меня пропадала пагинация
1035 1598792
>>598783

>покажите...


А гугл не показывает что ли?
Я там научился и в разделение, и в шаблонизацию.
php-string-4.png97 Кб, 752x690
1036 1598875
>>552970 (OP)
Почему в задании про массивы где нужно сгенерировать стих, пишут про циклы и т.д. когда можно просто вывести все в эхо:
echo "{$word1[array_rand($word1)]} {$word2[array_rand($word2)]} {$word3[array_rand($word3)]}<br>";
echo "{$word1[array_rand($word1)]} {$word2[array_rand($word2)]} {$word3[array_rand($word3)]}<br>";
echo "Я {$word4[array_rand($word4)]} {$word5[array_rand($word5)]} <br>";
1037 1598881
>>598580
Что за IDE ?
1038 1598914
>>598875
Вдруг тебе нужно будет вывести не 2 строки, а 10?
1039 1598939
>>598881
Notepad++ же.
1040 1598951
чу, я тут нубик, php не мой профильный яп.

поэтому, помохите люди добрые. Задача, из html страницы приходит текст с названием месяца. в php надо получить число (для января 1, для февраля 2 и т.д.)

Делаю через свитч:
$month_id = 0;
switch ($month_name) {
case "Январь":
$month_id = 1;
break;
}

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

Как переписать?
1041 1598960
>>598939
Просто там внизу выводится результат, подумал может йоба какая-то
1042 1598963
1043 1598967
Здравствуй ОП, можешь глянуть задачку по списку студентов? Каюсь, иногда подсматривал как у других сделано. Подскажи где ошибок наделал, где по рукам надавать. Заранее большое спасибо. https://github.com/Vladrigos/StudentList/
1044 1598977
Дайте книжек по архитектуре пожалуйста
Как там всё разделять правильно
Чё куда каво когда
242C06CD-9F13-4951-BABB-A575F6A31B88.jpeg104 Кб, 1280x420
1045 1598984
>>598682
На форумах 2011 года пишут, что названия столбцов при запросе надо брать в обратные кавычки `так`. Сработает ли это спустя 9 лет?
Может переменные в запросе вообще не стоит лишний раз обмазывать кавычками?

Алсо. Ко всем обращаюсь, с кем вчера лампово попиздели за область видимости.
Вы все тут дауны, блять, дегенеративные. Вместо одного слова из шести букавок - GLOBAL, вы ебали мне мозги весь вечер, хотя я прямо спросил "что не так, ткните и скажите, что дописать".
Долбоебики, вам не понятно, что ваши жаргонные слова и фразы нуфагу ни о чем не говорят? "Объявить" блять. Объявил свой хуй у тебя за щекой, обмудок.
Но так же я благодарен вам, пидорасам, за это, так как точно запомню эти выражения и точно буду знать и понимать их смысл. Ебал ваших матерей, всю вашу породу топтал, мрази. И спасибо за нестандартный урок.
D8A0LqjWkAMdJjN.jpg88 Кб, 782x960
1046 1598986
>>598984
Иди нахуй долбоеб
7C8F8800-834F-4A88-8977-58B7A91E4501.jpeg20 Кб, 252x137
1047 1599006
>>598986
Нет, ты.
1048 1599056
>>598544

>говновариант


Именно, что говно.
Еще мы id не менеджерили, которые бд сама автоинкрементом тебе даст
1049 1599060
>>598783
Берешь шаблонизатор (условный твиг) и пробрасываешь туда данные. В шаблоне у тебя только вывод данных, максимум пробег циклом по массиву данных дабы их вывести и условные операторы.
Вся логика подготовки данных к выводу где-то в другом месте лежит
1050 1599061
>>598984
В продакшене тебя выебут за глобал
1051 1599066
>>599061
Можно попросить, чтоб руки заломали? Мне так больше нравится.
1052 1599072
>>598984
И все равно неправильно написал. Глобал не надо было использовать.
1053 1599074
>>599072
>>599061
Ок. Понял, что переменные надо сразу писать в функцию, чтоб было:
$a = $_POST["b"];
Енто может отразиться на безопастности?

А что на счет самого заброса в sql?
Что там не то?
1054 1599078
Мне сегодня приснилось, что запрос нужно писать не POST, а POISON. Уже снится Пыха.
1055 1599185
>>595940

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

>>596124

Взятие символа строки через квадратные скобки ($text[$i]) не работает с кирилицей, и не надо им пользоваться. Если кто-то так делает, то это неправильный код. Урок по теме: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

>>596463



Да, но "современные веб-фреймворки" требуют сборщика, который делает неудобной работу с кодом и отладчиком (нужно запускать его, перегенерировать файлы, возиться с map-файлами, в части случаев они все равно не помогают и пишется адрес из склеенного скрипта), они утяжеляют сайт (часто реакт-приложение весит по несколько мегабайт JS, от парсинга которого дохлые смартфоны просто подвисают и тормозят). Не все так радужно. Реакт - это упрощение разработки, повышение производительности разработки ценой снижения производительности кода.

>>596541

Не видя кода, трудно сказать. Практически все реальные случаи использования этого паттерна только ухудшали читабельность кода и я бы с удовольствием выкинул их и заменил на switch. Потому что разработчик открыл книгу про паттерны и начал их бездумно применять. Но кто знает, может у тебя другая ситуация. Попробуй оценить плюсы/минусы его использования в твоем коде. И понять, зачем ты его хочешь использовать ("потому что он есть в книге" - это не аргумент).
1056 1599186
>>596463

Да, но "современные веб-фреймворки" требуют сборщика, который делает неудобной работу с кодом и отладчиком (нужно запускать его, перегенерировать файлы, возиться с map-файлами, в части случаев они все равно не помогают и пишется адрес из склеенного скрипта), они утяжеляют сайт (часто реакт-приложение весит по несколько мегабайт JS, от парсинга которого дохлые смартфоны просто подвисают и тормозят). Не все так радужно. Реакт - это упрощение разработки, повышение производительности разработки ценой снижения производительности кода.

>>597028

Готового решения, наверно, нету.

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

Например: у нас есть 1x5000 и 3x2000, нам надо выдать 6000. "Жадный" алгоритм выдаст 1x5000 и застопорится. Он тут не применим, так как мы не можем заменить 5000-ю купюру несколькими 2000-ми.

Там, где неприменим "жадный" алгоритм, мы вынуждены перейти к полному перебору всех возможных комбинаций купюр. В общем виде алгоритм выглядит так. Обозначим S - сумма, которую надо выдать, k - количество номиналов купюр, N[1] ... N[k] - количество купюры каждого номинала, A[1] .. A[k] - запас купюр каждого номинала:

- берем все возможные комбинации N[1] .. N[k], где N может быть от 0 до A (то есть, учитываем имеющийся запас купюр и не пытаемся брать больше, чем есть)
- для каждой комбинации проверяем:
- если она в сумме дает S, то сумму можно выдать этой комбинацией

Например, если у нас есть 1x5000 и 3x2000, то мы должны перебрать такие комбинации:

- 0x5000 + 0x2000 (я буду писать эту комбинацию сокращенно как (0, 0))
- 0x5000 + 1x2000 (или (0, 1))
- (0, 2)
- (0, 3)
- (1, 0)
- (1, 1)
- (1, 2)
- (1, 3)

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

Генерацию комбинаций можно реализовать с помощью рекурсии (функции, вызывающей саму себя). Сделаем функцию такого вида:

generateCombinations(array $A, array $N): array

Где $A - массив запасов купюр (A[1] .. A[k]), например, [1 => 1, 2 => 3] для 1x5000, 3x5000, $N - зафиксированные количества старших купюр. Функция вернет массив всех возможных комбинаций, которые начинаются с комбинации в $N.

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

Количество таких возможных комбинаций легко посчитать: оно равно произведению запасов купюр, то есть (1 + A[1]) x (1 + A[2]) x ... x (1 + A[k]). Я добавил 1, чтобы учесть вариант, когда мы берем 0 купюр данного номинала.

Такие комбинации похожи на "размещения" из комбинаторики ( https://ru.wikipedia.org/wiki/Размещение ). Есть готовые "алгоритмы для генерации размещений". У нас не совсем размещение, но очень близкая к нему вещь, можно погуглить эти алгоритмы.

Дальше алгоритм можно оптимизировать. Например, не перебирать комбинации, которые заведомо превышают искомую сумму (вроде комбинации 2x5000, когда надо выдать 6000). Перебирать комбинации не от (0, 0) к (1, 3), а начиная с наиболее близких к искомой сумме.

В любом случае, тут нужна рекурсивная функция. Либо стек.

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

Да, но "современные веб-фреймворки" требуют сборщика, который делает неудобной работу с кодом и отладчиком (нужно запускать его, перегенерировать файлы, возиться с map-файлами, в части случаев они все равно не помогают и пишется адрес из склеенного скрипта), они утяжеляют сайт (часто реакт-приложение весит по несколько мегабайт JS, от парсинга которого дохлые смартфоны просто подвисают и тормозят). Не все так радужно. Реакт - это упрощение разработки, повышение производительности разработки ценой снижения производительности кода.

>>597028

Готового решения, наверно, нету.

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

Например: у нас есть 1x5000 и 3x2000, нам надо выдать 6000. "Жадный" алгоритм выдаст 1x5000 и застопорится. Он тут не применим, так как мы не можем заменить 5000-ю купюру несколькими 2000-ми.

Там, где неприменим "жадный" алгоритм, мы вынуждены перейти к полному перебору всех возможных комбинаций купюр. В общем виде алгоритм выглядит так. Обозначим S - сумма, которую надо выдать, k - количество номиналов купюр, N[1] ... N[k] - количество купюры каждого номинала, A[1] .. A[k] - запас купюр каждого номинала:

- берем все возможные комбинации N[1] .. N[k], где N может быть от 0 до A (то есть, учитываем имеющийся запас купюр и не пытаемся брать больше, чем есть)
- для каждой комбинации проверяем:
- если она в сумме дает S, то сумму можно выдать этой комбинацией

Например, если у нас есть 1x5000 и 3x2000, то мы должны перебрать такие комбинации:

- 0x5000 + 0x2000 (я буду писать эту комбинацию сокращенно как (0, 0))
- 0x5000 + 1x2000 (или (0, 1))
- (0, 2)
- (0, 3)
- (1, 0)
- (1, 1)
- (1, 2)
- (1, 3)

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

Генерацию комбинаций можно реализовать с помощью рекурсии (функции, вызывающей саму себя). Сделаем функцию такого вида:

generateCombinations(array $A, array $N): array

Где $A - массив запасов купюр (A[1] .. A[k]), например, [1 => 1, 2 => 3] для 1x5000, 3x5000, $N - зафиксированные количества старших купюр. Функция вернет массив всех возможных комбинаций, которые начинаются с комбинации в $N.

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

Количество таких возможных комбинаций легко посчитать: оно равно произведению запасов купюр, то есть (1 + A[1]) x (1 + A[2]) x ... x (1 + A[k]). Я добавил 1, чтобы учесть вариант, когда мы берем 0 купюр данного номинала.

Такие комбинации похожи на "размещения" из комбинаторики ( https://ru.wikipedia.org/wiki/Размещение ). Есть готовые "алгоритмы для генерации размещений". У нас не совсем размещение, но очень близкая к нему вещь, можно погуглить эти алгоритмы.

Дальше алгоритм можно оптимизировать. Например, не перебирать комбинации, которые заведомо превышают искомую сумму (вроде комбинации 2x5000, когда надо выдать 6000). Перебирать комбинации не от (0, 0) к (1, 3), а начиная с наиболее близких к искомой сумме.

В любом случае, тут нужна рекурсивная функция. Либо стек.

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

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

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

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

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

>>597080

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

>>597311

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

>>597442

Декомпозиция массивов в PHP7 (в PHP5 - используется конструкция list())

[$k1, $k2] = array_rand($input, 2);
echo $input[$k1];

Также, можно написать свою функцию, которая будет возвращать не ключ, а сразу значение элемента.
1058 1599188
>>597642

Ставишь себе его на локалхост, изучаешь устройство админки, возможности, постишь что-нибудь в блог. Читаешь Wordpress Codex и изучаешь, как делать свои темы и свои плагины, изучаешь внутреннее API. Из любопытства бегло изучаешь код и основные функции/классы. Читаешь статьи вида "50 лучших тем для WP", "50 лучших плагинов для WP", чтобы знать, что уже существует готовое, чтобы не изобретать велосипед (как дурак). С этими знаниями идешь к любому работодателю.

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

>>597837

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

>>598085

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

>>598358
>>598768

Есть уроки, косвенно относящиеся к этой теме:

- шаблоны https://github.com/codedokode/pasta/blob/master/php/templates.md
- MVC https://github.com/codedokode/pasta/blob/master/arch/mvc.md
1059 1599190
>>598412

Сомневаюсь, что на асинхронной ноде писать бизнес-логику удобнее, чем на синхронном PHP с типизацией и фреймворками. Ты просто в PHP одни недостатки видишь, а в других языках их не замечаешь. Вот статья в помощь: https://habr.com/ru/post/315152/

>>598467

Для number есть min/max/step, а тебе стоит проверить документацию, поддерживается ли size для type=number.

>>598509

Не надо писать id, пусть его база генерирует.

>>598544

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

>>598580

В 10-й раз повторяю, прочитай про SQL-инъекции и пиши код безопасно: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
1060 1599191
>>598590

Потому, что надо включить PDO::ERRMODE_EXCEPTION: https://www.php.net/manual/ru/pdo.error-handling.php иначе оно молчит об ошибках, а ты тут потом будешь ныть, что ничего не работает.

>>598611

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

Пример: https://ideone.com/L8kUFd

Учись тестировать свой же код перед публикацией.

>>598704

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

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

>>598753

COUNT будет работать медленнее, чем выборка 1 последнего значения по индексу. Можешь проверить с помощью EXPLAIN или тестом.
1061 1599193
>>598875

Можно и так. Но там первые 2 строки генерируются одинаково и можно чуть упростить код циклом.

>>598984

У тебя на скриншоте не обратные кавычки (backtick), а одиночные (single quote). Обратные вроде как находятся на кнопке с буквой Ё и тильдой.

Global использовать тут плохая идея, он снижает читаемость и надежность кода. Откажись от него.
1062 1599208
Переходите в новый тред >>1599201 (OP)

Если я вдруг вам не ответил или вы хотели что-то добавить - пишите, пожалуйста, в новый тред. Тут ваши сообщения никто не прочтет.
1063 1599385
>>598984
Вот такое случается, когда человек пренебрегает теорией и не хочет учится, но хочет сразу писать код. В результате, как видим, он элементарные вещи сделать не способен и ебёт мозг несколько часов там, где нормальный человек за 10 минут сделает.
Не берите пример с него.
1064 1600315
>>599191
Исправил, как тебе такое решение?

https://ideone.com/2Z7dTu
1065 1601883
Как блять с PDO like-query сделать?
В prepare такая строка получается, например:
SELECT * FROM user WHERE username LIKE ?
В execute - массив:
Array ( [0] => 'smth' )
Суть в том, что пробую с одинарными кавычками, без кавычек, fetch возвращает false, типо нихуя не нашел. В CLI пишу запрос (строка в кавычках) - все хорошо.
Пробовал убрать кавычки из строки в параметрах, убрать кавычки из строки в параметрах и окржить ими знак вопроса. Я вообще дохуя всего попробовал.
ЧЯДН? Скиньте пример рабочего запроса, потому что то что в интернетах https://stackoverflow.com/questions/583336/how-do-i-create-a-pdo-parameterized-query-with-a-like-statementу меня не работает)
1066 1601960
>>595628

>Джун за час такое делает. С тремя перекурами.



бля, я эту хуйню за 20 мин сделал на онлайн-интерпретаторе.

джаст фо фан.

при том что закончил только 9 классов. а по факту образование почти полностью отсутствует.

по программированию только 1 книжу в детстве прочитал ( пролистал ) по си.

мимо 30лвл-грузчик.

неужели настолько низкий уровень в айти?

вкатиться штоле...
1067 1602078
>>601960

Ты, блять, писю лимонишь, что ли, там, чмо бухое?
Батька (я) просто елду свою 20 сантиметровую достал, по клаве ебнул, и вот уже подобие первой проги на ПХП готово нах, а я, на минуточку, на тот момент даже документации и туториалов не открывал, епта. Дальше - больше: ебал я двух шкур на столе и параллельно запиливал свой пятый веб-проект, а это было всего-то на третий день изучения этого "языка", бля. Так что не пизди тут, чертила, пока Большой Дядя у руля.
1068 1602235
Почему код корректно не работает?

http://sandbox.onlinephpfunctions.com/code/581fe664902d169c148467cf47f8b5bca4c80c07
1069 1602334
>>601883
Бля, ты документацию по LIKE читал? Где проценты вокруг выражения блядь? ['%smth%']
1070 1602335
>>602235
Потому что mb_internal_encoding('utf-8'); влияет только на содержимое строк. А strrev как не могла с юникодом работать так и не может. Ты же догадался mb_strtolower использовать.
Если строка в юникоде, то для работы с ней используются Multibyte String Functions. Вот только аналога strrev там нету. Как это сделать самому гуглится легко.
1071 1602985
>>602334
Ты хуйню написал.
Эта регулярка для %jopa% найдет 'jopa', 'jopa228', 'huijopa228', etc.
А моя проблема была в том, что в таких случаях надо в массив параметров передавать строку. Не понимаю чому так: тупа string-переменная (точно строковый тип) в массиве не дает эффекта, но эта же переменная с интерполяцией, любой, блять, работает: "$var" или ''. $var . '';
1072 1603312
>>602985
Ебать, а тебе не приходило в голову что без процентов это один хуй что просто сравнить user = 'smth'?
1073 1605815
Пожалуйста, переходите в новый тред >>1599201 (OP)

Здесь вам уже не ответят.

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

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски