«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP #104 /php/ Аноним 2018/09/23 09:41:26  №1268753 1
php-noob-2.png (33, 500x500)
500x500
cats.jpg (157, 1024x683)
683x1024
cat2.jpg (194, 1024x768)
768x1024
пхпкурсыкошкодевочка.jpg (289, 700x840)
840x700
Добро пожаловать в клуб востребованных и незаменимых людей.
Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки, печем печенье и даже делаем простые сайты! Зачем? Кто-то хочет изменить мир, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

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

Предыдущий тред был тут: >>1232710 (OP) (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? — Да, однозначно. Посмотри любую вакансию.
Аноним 2018/09/23 09:43:32  №1268755 2
15322355820600.jpg (156, 787x830)
830x787
15322355820621.png (56, 500x644)
644x500
В прошлом треде >>1232710 (OP) (OP) все проверено - зайдите и найдите свой пост и скорее всего на него есть ответ. Если я кого-то пропустил, напомните о себе тут.

---

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

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

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

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

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

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

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
Аноним 2018/09/23 09:50:32  №1268762 3
Ребзя, а чому вы не юзаете форматированный вывод строк при помощи printf? Глаз упал на

> I am $age years old

Чому переменную не обрамляете фигурными скобками? Раньше это было чуть ли не стандартом: ${var} или {$var} в строке.
Аноним 2018/09/23 09:52:35  №1268763 4
ДЛЯ СЛЕДУЮЩЕГО ПЕРЕКАТА
Аноним 2018/09/23 09:55:25  №1268765 5
>>1268762
>printf
Актуально для консольных утилит.
ECHO проще, у него даже злоебучих круглых скобок нет.

>>1268762
>${var}
Лишние знаки, нахуй они нужны?
Ответы: >>1268782
Аноним 2018/09/23 10:00:55  №1268773 6
>>1268762
Пишу переменные в фигурных скобках в тексте. Учился по какой то олдовой книге, с тех пор так и пишу.
Ответы: >>1268780 >>1268782
Аноним 2018/09/23 10:02:55  №1268780 7
Аноним 2018/09/23 10:04:19  №1268782 8
>>1268765
Вот этот >>1268773 пишет походу про ту же книгу, которую я когда-то читал. Возможно, это было у котерова в рнр5. Пока писал на рнр, уже 8 лет ни строчки не написал, считалось хорошим тоном в строках писать переменную в curly braces.
Аноним 2018/09/23 10:54:14  №1268857 9
bapkong.jpg (248, 1372x1952)
1952x1372
Bapkong has entered the arena.
И начал очень медленно писать студентов.
Ответы: >>1268922
Аноним 2018/09/23 10:57:44  №1268861 10
oshibka.png (4, 836x70)
70x836
kod.png (11, 469x174)
174x469
Анон, пытаюсь сделать задачку на палиндром, пока на этапе удаления пробелов и перевода строки в нижний регистр. Командная строка говорит, что в строчке перевода что-то не так, но я не понимаю...подскажите пожалуйста! И если не сложно посмотрите на следующую где я хочу удалить пробелы, пойдет ли такой вариант?
Ответы: >>1268864
Аноним 2018/09/23 11:02:02  №1268864 11
>>1268861
ideone не работает с mb функциями. Если тебе принципиально решение на идеоне, сделай проверку тождества через регексп с флагом игноркейсом.
Аноним 2018/09/23 11:47:42  №1268917 12
26.jpg (271, 960x1280)
1280x960
>- дан список слов в массиве, например: $words = ['кошка', 'кит', 'собака']. Список слов может быть любым, не только как в примере.
>- надо сгруппировать эти слова по первой букве и вывести (в первой строчке все слова на одну букву, во второй на другую, итд). Сортировать по алфавиту не требуется, выводить можно в любом порядке. Например, для слов выше программа должна вывести:

>К: кошка, кит
>С: собака

Код: jdoodle.com/a/G3e

Тащемта для всего алфавита нужен один if, 32 else if и else если в массиве первая буква не кириллический символ, а что-то другое.
Ответы: >>1268923 >>1276194
Аноним 2018/09/23 11:51:30  №1268922 13
>>1268857
Буду болеть за тебя, аниме-ребенок!
Ответы: >>1268927
Аноним 2018/09/23 11:52:10  №1268923 14
Аноним 2018/09/23 11:55:58  №1268926 15
Спасибо. Может, сегодня успею всю основную структуру фронт контроллера написать.
Ответы: >>1268927
Аноним 2018/09/23 11:56:25  №1268927 16
Аноним 2018/09/23 12:17:45  №1268947 17
image.png (476, 714x644)
644x714
>>1268890
>> Откуда такая любовь к laravel?
> Компонент-бейзед

Это на словах, а по факту ты получаешь сильно связанные компоненты, которые в отрыве от фреймворка работать не будут. Компоненты Symfony гораздо более независимые и реюзабельные. Например Symfony Validator требует только общий пакет для интерфейсов (symfony/contracts) и опциональные полифиллы для PHP расширений mbstring и ctype (если в 2018-м у тебя по какой-то причине нет возможности установить их в PHP): https://github.com/symfony/validator/blob/master/composer.json

А вот валидатор Laravel: https://github.com/laravel/framework/blob/5.6/src/Illuminate/Validation/composer.json
Он требует наличия DI-контейнера Laravel (!), пакет переводов Laravel, непонятно зачем слой для работы с HTTP запросами/ответами (symfony/http-foundation), illuminate/support (ненужный мусорник: http://mattallan.org/posts/dont-use-illuminate-support/)

> современные паттерны

Monkey-patch, магические и статические методы повсюду + трейты это паттерны фанбоев, бросающихся на цветные фантики: https://blog.ircmaxell.com/2011/07/are-traits-new-eval.html
Всё это делает исходники фреймворка месивом из переплетающихся трейтов и магических методов, где IDE без костылей не может статически понимать код: https://github.com/barryvdh/laravel-ide-helper
Я даже боюсь статические анализаторы кода вроде Psalm и Phan подрубать к Laravel, они ведь обезумеют от увиденного.

> адекватный порог вхождения

Адекватный для кого, для совсем нулячих в PHP? Потом они из-за отсутствия фундаметальных знаний лезут на форумы / в чаты с тупыми вопросами, которые относятся не к фреймворку, а как базовым знаниям PHP и БД.
Ответы: >>1268949
Аноним 2018/09/23 12:25:11  №1268949 18
>>1268947
Я не тот анон, но спасибо что ответил.
Аноним 2018/09/23 12:51:41  №1268958 19
https://ideone.com/yC58nJ
Как в задаче про банкомат проверить, достаточно ли купюр для выдачи?
Ответы: >>1269046
Аноним 2018/09/23 13:44:46  №1268987 20
maxresd.jpg (156, 1280x720)
720x1280
Дублирую из предыдущего треда.
Сделал граммар нази и опечаточники. Итак.
1) Граммар нази. Тут у меня есть ощущение, что я как-то не аутентично использую функции для работы с регулярками + там же надо делать исправление больших букв и я его добавил отдельным правилом т.е. не оче умно. Но т.к. я уже долго в этом вожусь - оставил как есть.
Задача: https://ideone.com/OW5uJV
2) Опечаточники. Тут ты, ОП, в спойлере у задачки оставил примеры текстов - которые добавляют дополнительные условия, т.е. в слове может быть несколько опечаток, или англ.символы могут идти подряд, что заставляет переписывать регулярки и код. Кароче пока тоже оставил как есть.
Задача: https://ideone.com/KmRlPx
P.S. В общем мне нужен пример решения, хочется двигаться дальше. ОП'чик скинь мне на мыло vovchenkoal@yandex.ru или телегу @y0urbe3tfr1end
Ответы: >>1268996
Аноним 2018/09/23 14:14:30  №1268996 21
>>1268987
Скинул, тебе за щеку.
ОП-треда, который проверяет задачки, потерялся.
Просто загугли задачки и посмотри как у других.
Аноним 2018/09/23 15:27:49  №1269041 22
Помогите, не могу подключиться к mysql
Warning: mysqli_connect(): PHP was built without openssl extension, can't send password encrypted in C:\Apache24\htdocs\lab4.php on line 2
Ответы: >>1269042 >>1269044
Аноним 2018/09/23 15:29:02  №1269042 23
>>1269041
mysql работает, в php.ini extension=openssl раскомменчено
Ответы: >>1269044
Аноним 2018/09/23 15:32:53  №1269044 24
>>1269041
> PHP was built without openssl extension

>>1269042

То есть тебе эта строчка ни о чем не говорит? РНР собран без поддержки openssl. Собирай ручками, довен.
Ответы: >>1269047
Аноним 2018/09/23 15:36:35  №1269046 25
>>1268958
"Лиличка" - https://3v4l.org/9nNiF
Приступил к следующей задачке, и обосрался еще раз.
Как вывести столбцы рядом друг с другом, а не все в один большой столбец?
Аноним 2018/09/23 15:40:42  №1269047 26
>>1269044
а хуль у них на официальном сайте такое гамно лежит без поддержки openssl?
https://windows.php.net/download/ скачивал VC15 x64 Thread Safe 7.2.10
да я и не умею собирать
Ответы: >>1269066
Аноним 2018/09/23 16:21:47  №1269066 27
>>1269047
Я ебу чому они без опенссл выкладывают сборки? Я на прыщах всегда сам собирал рнр с нужными мне модулями. Вот читай как выйти из твоего положения http://php.net/manual/ru/openssl.installation.php
Аноним 2018/09/23 16:22:38  №1269067 28
Пришлось потратить всего-то 7 часов на то, чтобы заставить фронт контроллер вывести дефолтную страницу для списка студентов.
Аноним 2018/09/23 16:51:16  №1269088 29
>>1268753 (OP)
Привет, анон. Сдавал задание на галеру одну и мне сказали что хуйня, можешь глянуть краем глаза что не так? Они не отвечают
Ответы: >>1269090
Аноним 2018/09/23 16:53:16  №1269090 30
Ответы: >>1269096 >>1269096
Аноним 2018/09/23 17:03:01  №1269096 31
Ответы: >>1269109 >>1269135
Аноним 2018/09/23 17:09:12  №1269109 32
>>1269096
>2002+16
>процедурное программирование
Ответы: >>1269110
Аноним 2018/09/23 17:09:42  №1269110 33
Аноним 2018/09/23 17:43:52  №1269135 34
Ответы: >>1269138
Аноним 2018/09/23 17:49:13  №1269138 35
>>1269135
Бле, скажи че исправить надо?
Ответы: >>1269140
Аноним 2018/09/23 17:54:00  №1269140 36
>>1269138
Для начала залей с вой код на гитхаб или идеон
Ответы: >>1269780
Аноним 2018/09/23 18:43:37  №1269162 37
>>1268762
скобки не нужны ровно до тех пор пока не понадобится вплотную написать текст к значению переменной и подобное

printf следует использовать для _форматированного_ вывода только когда нужен _форматированный_ вывод, как бы нелогично не звучало
Ответы: >>1269212
Аноним 2018/09/23 20:08:39  №1269212 38
>>1269162
Твои слова расходятся с написанным в шапке.

Чем форматированная строка хуже echo? Как по мне, проще самому управлять выводом. Особенно, когда используешь строгую типизацию. Приучает к дисциплине и ещё больше походит на божественный Си.
Ответы: >>1269221 >>1269242
Аноним 2018/09/23 20:18:57  №1269221 39
>>1269212
>строгую типизацию
Сынок, потише в этом треде с умными словами, особенно когда не знаешь значений
У твоей "божественной" Си слабая типизация как и у ПХП
Ответы: >>1269235
Аноним 2018/09/23 20:29:49  №1269235 40
>>1269221
В смысле?

int i = 2; это разве не строгая типизация?! Или когда в аргументах функции пишешь что-то навроде float d = 5.
Ответы: >>1269315 >>1269516
Аноним 2018/09/23 20:43:01  №1269242 41
>>1269212
Она не хуже - она другая. Безопасность типов она между тем не обеспечивает.
Подумой, как говорится.
Ответы: >>1269250
Аноним 2018/09/23 20:50:27  №1269245 42
Аноним 2018/09/23 21:01:56  №1269250 43
>>1269242
declare(strict_type=1)
string $username = “Pinnacle”;
printf(“Hello %s!”, $username);

Разве это не максимально безопасный код? Типа в ручную управляешь типом данных, чуть что интерпритатор сразу дропает выполнение кода с ошибкой.
Аноним 2018/09/23 21:06:05  №1269252 44
А есть в среде PHP признанный классик, как Лутц в Python?
Ответы: >>1269282
Аноним 2018/09/23 22:48:50  №1269282 45
>>1269252
Да, Reference Manual скомпиленный в CHM с комментариями.
Аноним 2018/09/24 02:40:16  №1269315 46
Аноним 2018/09/24 08:56:57  №1269393 47
Надеюсь оп скоро выздоровеет.
Аноним 2018/09/24 10:49:49  №1269433 48
Давно я таких анальных ошибок не видел: не могу создать таблицу с колонкой group. Подставляю вместо group абсолютно любое слово - создается.
Ответы: >>1269434 >>1269438 >>1269439
Аноним 2018/09/24 10:50:22  №1269434 49
>>1269433
Речь идет об mysql, если что.
Аноним 2018/09/24 10:58:38  №1269438 50
Ответы: >>1269453
Аноним 2018/09/24 10:58:58  №1269439 51
>>1269433
Да, так бесит эта MySQL, был баг, что одним запросом формы, создавалось 2 записи в таблице, 10 раз перепроверил метод который создаёт запись в таблице, ничего не нашел.
Потом психанул написал запрос на этой же странице, и все стало нормально создавать. Или когда уже уставший пишешь запрос и где-то проебал запятую в SQL запросе, то это пиздец, потом в куче текста эту запятую хуй найдёшь.
Ответы: >>1270396
Аноним 2018/09/24 11:33:44  №1269453 52
>>1269438
Да, в этом проблема была. Начинал ставить одинарные кавычки, оказалось, что надо `.
Аноним 2018/09/24 12:34:08  №1269491 53
Ну что аноны, жив еще php, стоит вкатываться?
Аноним 2018/09/24 12:50:31  №1269500 54
Аноны у меня встал вопрос.
Мне надо вывести определённое количество новостей на странице, я вывожу их таким способом
while($row = $result->fetch_array(MYSQLI_ASSOC)
....код
}
Но как ограничить вывод допустим 3 штуками на страницу?
Ответы: >>1269532
Аноним 2018/09/24 13:11:06  №1269516 55
>>1269235
Строгая это:
int a = 1;
float b = 2;
float c = b + (float)a;
Ответы: >>1269640
Аноним 2018/09/24 13:21:39  №1269522 56
https://ideone.com/97hAvs
В чем дело, почему программа возвращает ложное значение?
10 же больше чем 6.
Ответы: >>1269530
Аноним 2018/09/24 13:33:45  №1269530 57
Ответы: >>1269533
Аноним 2018/09/24 13:35:01  №1269532 58
1492378203437.gif (1755, 500x281)
281x500
>>1269500
Ограничивай количество запрашиваемых элементов из БД.
Ответы: >>1269548
Аноним 2018/09/24 13:36:37  №1269533 59
>>1269530
Блин так и знал что в галза долблюсь. Я даже не заметил что всегда даблы выпадают.
Аноним 2018/09/24 14:08:35  №1269548 60
>>1269532
Блин, точно. Забыл за LIMIT спасибо.
Аноним 2018/09/24 14:26:44  №1269565 61
13.png (17, 783x539)
539x783
Я не осознаю своих действий. Ебаная депрессия не дает мне нормально соображать
Ответы: >>1269576
Аноним 2018/09/24 14:36:38  №1269576 62
>>1269565
Ничего страшного, годик попревозмогаешь и вкатишься в Питере за 7к в месяц и обеды соленым немытым хуем лошка, вкатившегося годом ранее тебя и носящим лычку миддла.

Через пару лет мб дослужишься до компенсации проезда на маршрутке. А там глядишь и в дойче банк позовут. И все у тебя будет хорошо. Нет, конечно, ты умрешь бомжом в Гатчине на кухне съемной однокомнатной халабуды от передоза героином
Ответы: >>1269581 >>1269584
Аноним 2018/09/24 14:40:40  №1269581 63
>>1269576
Какой ты токсичный, анон. Плохо быть тобою, плохо.
Аноним 2018/09/24 14:41:33  №1269584 64
>>1269576
Тащемта я и так в дойче банке работаю. Мне php для себя нужно.
Ответы: >>1269601 >>1269635
Аноним 2018/09/24 14:56:09  №1269596 65
69331974p0.jpg (508, 860x1200)
1200x860
>Uncaught TypeError: Return value of StudentMapper::searchEmail() must be an instance of boolean, boolean returned
Ответы: >>1269612 >>1269629
Аноним 2018/09/24 14:59:40  №1269601 66
>>1269584
Почему тут все обмазываются дойче банком? Зарплата на пикриле нищенская по немецким меркам.
Ответы: >>1269606 >>1269608
Аноним 2018/09/24 15:02:35  №1269606 67
>>1269601
В Германии столько дворники получают.
Аноним 2018/09/24 15:03:12  №1269608 68
>>1269601
Потому что кое кто живет слухами. Работники дойч банков экономят каждую копейку. У меня каждый месяц получается откладывать всего 100-200 евро. Отдел програмистов в банке не намного лучше живет, зарплата всего 300- 400 евро больше.
Аноним 2018/09/24 15:05:43  №1269612 69
>>1269596
мust be an instance of boolean
мust
be
boolean
Ответы: >>1269639
Аноним 2018/09/24 15:33:44  №1269629 70
>>1269596

В PHP5 нельзя в тайп-хинтах использовать примитивные типы вроде int, он их понимает как имена классов. Советую обновиться до PHP7.
Ответы: >>1269639
Аноним 2018/09/24 15:35:26  №1269635 71
Аноним 2018/09/24 15:37:43  №1269639 72
1535774337789.jpg (492, 966x1300)
1300x966
>>1269612
>>1269629
Вообще-то дело в том, что надо указывать bool, а не boolean.
Аноним 2018/09/24 15:39:32  №1269640 73
>>1269516
Выше говорят, что это статическая типизация. Правда я так особо и не вкурил в чём радикальное отличие статической/слабой типизации от сильной/строгой. Что-то пишут овердохуя про ООП, но я ниасилил. Может в ООП это и есть слабая типизация, а на уровне объявления переменных не является таковой.
Ответы: >>1270396
Аноним 2018/09/24 15:54:08  №1269647 74
Какой же нереальный пиздец этот фулл-текст серч в mysql.
Аноним 2018/09/24 17:43:32  №1269703 75
>>1268753 (OP)
>клуб востребованных и незаменимых людей
А вакансий жуниоров нихуя.
Ответы: >>1269706
Аноним 2018/09/24 17:52:46  №1269706 76
>>1269703
*В твоём Усть-Залупинске
Ответы: >>1269709
Аноним 2018/09/24 17:56:19  №1269709 77
>>1269706
В любом кроме двух ДС.
Аноним 2018/09/24 18:00:14  №1269712 78
error.png (6, 1173x86)
86x1173
Как отправлять сообщения в телегу? Не пойму в чем ошибка.
Допустим я хочу чтобы бот оправил сообщение в конфу.
$send = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}
&parse_mode=html&text={$txt}","r");
Выдает ошибку. Хелпаните ньюфагу.
Ответы: >>1269962
Аноним 2018/09/24 19:22:19  №1269730 79
Где ОП?

Аноним 2018/09/24 19:28:05  №1269731 80
В одном из последних постов опа он писал, что времени у него мало, так что занят скорее всего. Ну или от каждодневной платины выпилился.
Аноним 2018/09/24 19:35:44  №1269735 81
Как же заёбывает постоянно перед каждым вызовом переменной ставить сраный $, почему нельзя было сделать как в C раз объявил int a = 1 int b = 1 a + b и всё , обращайся к ней без ебучих лишний символов.
Аноним 2018/09/24 19:41:02  №1269736 82
15039281774410.jpg (270, 1400x1128)
1128x1400
Похепаны, кто понимает в MySQL, помогите оптимизировать запрос в базотреде позязя
>>1269732
Аноним 2018/09/24 19:52:50  №1269741 83
x80db7aea.png (157, 1861x2008)
2008x1861
ОП (няша которая проверяет задачки), за что ты оставил нас?
Аноним 2018/09/24 21:55:37  №1269777 84
Ответы: >>1269785 >>1270395
Аноним 2018/09/24 21:57:05  №1269778 85
Во имя трипла и прицепившейся сажи!
Аноним 2018/09/24 21:59:39  №1269780 86
>>1269140
Но блин там же много файлов, и не хочется весь этот позор на гит выкладывать
Аноним 2018/09/24 22:04:00  №1269785 87
>>1269777
По какому гайду учишься?
Ответы: >>1269789
Аноним 2018/09/24 22:17:02  №1269789 88
>>1269785
По гуглу и официальным документациям. Что интересно - в то и ныряю. К сожалению, за ручку как ОП никто не водит.
Ответы: >>1269792
Аноним 2018/09/24 22:25:46  №1269792 89
>>1269789
Давно занимаешься?
Ответы: >>1269797
Аноним 2018/09/24 22:32:09  №1269797 90
>>1269792
Урывками оооочень давно, иногда забивается на по полгода. Это интересное хобби. Жаль разделить не с кем.
Ответы: >>1269799 >>1269950
Аноним 2018/09/24 22:36:16  №1269799 91
>>1269797
>Жаль разделить не с кем
Можно попробовать
Ответы: >>1269800 >>1269801 >>1269950
Аноним 2018/09/24 22:41:42  №1269800 92
Аноним 2018/09/24 23:04:21  №1269801 93
Аноним 2018/09/24 23:17:19  №1269803 94
В старом треде проверил посты с 20 сент. по сегодня: >>1269790 - зайдите и посмотрите, наверняка ваша задачка проверена.

Кстати, любопытная ссылка: правила выбора формы слова в зависимости от числа (1 человек, 2 человека, 5 человек) в разных языках: http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html

Анон с TDG, интересная штука, попоробую посмотреть позже.
Аноним 2018/09/25 00:34:30  №1269806 95
ЧИСЛА ПРОПИСЬЮ
https://pastebin.com/bZ8iHwsK

Горжусь тем, что впендюрил рекурсию (никогда не понимал, что это за херь вообще, а после того, как нафармил 4кю на кодеварсах более-менее вкурил, и поди ж ты, уже в задачках использую как щеголь!)

Не горжусь уебищными тернарниками для решения вопросов пола. Надо было на стадии, когда с числами работал внутри рексурсии, как автор советовал, решать, т.к. потом после обработки массива с числительными у меня уже не числа, а строки, пришлось матчить регекспом.
Ответы: >>1270394
Аноним 2018/09/25 00:43:47  №1269808 96
>>1269803

>Плюс, ты делаешь ошибку, $i[0] возвращает первый байт строки, а не первый символ, и многие символы в utf-8 занимают больше одного байта, так что ты можешь получить огрызок вместо символа. Лучше использовать mb_substr().

Да, я пропалил этот момент на примере с кавычкой, почему и сделал каличный подгон ^"?\w вместо просто ^\w, более тщательно можно было бы ^(\W+)?\w чтобы не только кавычки учесть.

А как через сабстр? Все равно же нужно знать порядковый номер, а он у первой буквы может быть рандомным, если там десяток точек или кавычек предшествует?
Ответы: >>1270394
Аноним 2018/09/25 00:48:17  №1269809 97
>>1269803
>Ну или сделать регулярку, ищущую слова из букв разных алфавитов.

Ты имеешь в виду ограничиться флагом /u или делать полноценные [aá] и т.д.?
Ответы: >>1270394
Аноним 2018/09/25 00:51:19  №1269810 98
>>1269803
https://ideone.com/Grtrs6
В который раз переделал задачу с текстовыми/числовыми вопросами. Проверьте, плз.

У меня возникли глупенькие вопросы.

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

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

3. Решаю сейчас ООП-будильник, потом нужно будет решать Вектор или эти задачки взаимозаменяемые?
Ответы: >>1269863 >>1270393
Аноним 2018/09/25 05:56:19  №1269834 99
1462628935735.png (781, 857x746)
746x857
Как же не хочется жаваскрипт учить.
Ответы: >>1269837 >>1269893 >>1269917
Аноним 2018/09/25 06:11:11  №1269837 100
>>1269834
Да уш, тяжело смотреть на него после php. Но он достоин любви.
Аноним 2018/09/25 06:37:37  №1269849 101
А почему пэха сдохла? Норм же язык был.
Ответы: >>1269859
Аноним 2018/09/25 07:29:35  №1269859 102
>>1269849
>104 тред на дваче
>пэха сдохла
Молодой человек, этот тред не для вас написан

Ответы: >>1269872
Аноним 2018/09/25 07:30:17  №1269861 103
>>1269793
>>1269803
>Идея хранить содержимое теста в виде JSON мне не очень нравится, так как не будут работать внешние ключи (например, на выбранный вариант ответа) и не контролируется структура содержимого - а это значит, там быстро начнут накапливаться ошибки
Сами вопросы хранить в отдельной таблице( один(Тест) ко многому) и варианты ответа то же в отдельной таблице(один(Вопрос) ко многому)
Так что ли?
Ответы: >>1269864 >>1270393
Аноним 2018/09/25 07:35:02  №1269863 104
>>1269810
>1. Тайп-хинты на вход и выход, нужно стараться использовать везде где есть функции?
Да.
>2. Как перехватить с помощью try-catch, ошибку возникшую из-за неправильно переданного типа? Заменить тайп-хинт на проверку внутри функции, которая будет выбрасывать исключение?
>проверку внутри функции
Довен, тайпхинты как раз существуют, чтобы эти проверки РУКАМИ не делать?
Сделаешь , ты условие if(!is_bool){ throw new \RuntimeException("Не верный тип");, и чем это будет отличаться от ошибок которые выдает тебе интрепретатор?
Если типы не совпадают, то их нужно как-то приводить к нужному типу перед передачей в функцию.
Еще тайпхинты дают ахуенную подсказку при работе с IDE.


Аноним 2018/09/25 07:38:34  №1269864 105
>>1269861
Можешь и в одной, если количество вариантов ответов везде одинаково. Id вопроса, вопрос, правильный ответ, неправильный ответ №1, неправильный ответ №2, неправильный ответ №3. А при выводе ответы перемешивать.
Аноним 2018/09/25 07:58:33  №1269872 106
Ответы: >>1269878
Аноним 2018/09/25 08:07:25  №1269878 107
тыдебил.jpg (70, 1159x623)
623x1159
тыдебил2.jpg (66, 1213x625)
625x1213
>>1269872
Как блять поисковые связаны с тем что язык жив или нет?
Аноним 2018/09/25 08:34:07  №1269893 108
>>1269834
У него блядский вырвиглазный синтаксис, как на нём вообще можно писать скрипты, код невозможно читать.
Ответы: >>1277977
Аноним 2018/09/25 09:11:46  №1269912 109
1498547394680.jpg (91, 319x436)
436x319
Как же я ненавижу ебаться с CSS. Надо было следовать советам Опа и делать студентов с бутстрапом, но слишком уж хотелось все с нуля писатькроме автолодера.
Ответы: >>1269916
Аноним 2018/09/25 09:18:12  №1269916 110
>>1269912
Ты целыми днями решаешь эту задачу, откуда у тебя столько свободного времени?
Ответы: >>1269922
Аноним 2018/09/25 09:20:30  №1269917 111
>>1269834
Ага, всякие очевидные вещи перечитывать и только потому что синтаксис отличается
Аноним 2018/09/25 09:29:36  №1269922 112
Аноним 2018/09/25 09:39:46  №1269926 113
уныние.jpg (74, 1895x1048)
1048x1895
Мне надо сайты для бюро ритуальнных услуг делать.
Аноним 2018/09/25 10:04:50  №1269940 114
Котаны, помогите разобраться в ошибке применительно к этому сниппету:
https://ideone.com/NhFrF5

Ошибка:
>PHP Fatal error: Constant expression contains invalid operations in /home/Gc2l35/prog.php on line 4
Ответы: >>1269942 >>1270391
Аноним 2018/09/25 10:10:51  №1269942 115
>>1269940
Значение по умолчанию должно быть константой. Вызовы функций не допускаются.
Ответы: >>1269961
Аноним 2018/09/25 10:20:43  №1269950 116
>>1269799
>>1269797
Пробовал, жалко не получалось. Можем втроека
Ответы: >>1269957
Аноним 2018/09/25 10:47:13  №1269957 117
>>1269950
Ну мне трудно представить, как это все выглядит.
Аноним 2018/09/25 10:56:06  №1269961 118
Аноним 2018/09/25 11:08:11  №1269962 119
>>1269712
Из-за ркн мой бот не хочет работать, как сделать так, чтобы бот отправлял сообщения через прокси?
Ответы: >>1270391
Аноним 2018/09/25 11:16:26  №1269968 120
Ответы: >>1270029
Аноним 2018/09/25 12:09:19  №1269987 121
14196229031860.jpg (28, 604x464)
464x604
Есть у кого нормальный халявный PhpStorm?
Заебался уже копаться в этом говне и активаторах, ни один из которых не работает.
Ответы: >>1269999 >>1270137 >>1270178
Аноним 2018/09/25 12:38:40  №1269999 122
>>1269987
Зачем там активатор? Есть куча левых license server. Да и просто код можно найти и добавить их сервер в хостс чтоб он не проверялся и шторм считал что он лицензионный.
Ответы: >>1270026 >>1270049
Аноним 2018/09/25 13:09:08  №1270026 123
>>1269999
Все эти сервера нихуя не работают.
Шторм палит, что они левые
Аноним 2018/09/25 13:14:08  №1270029 124
70805374p0master1200.jpg (380, 850x1200)
1200x850
>>1269968
Вот следующие задание буду с чужими СSS делать, а студентов закончу со своими.
Аноним 2018/09/25 13:46:17  №1270046 125
уныние.jpg (122, 1891x1044)
1044x1891
Постраничную навигацию по таблице было интересно делать. А вот сортировку без жаваскрипа делать не охота.
Ответы: >>1270081 >>1270371
Аноним 2018/09/25 13:47:37  №1270049 126
>>1269999
50 бачей за три года же всего
Ответы: >>1270061 >>1270070
Аноним 2018/09/25 13:53:53  №1270061 127
>>1270049
Не за 3 года а за 3-ий год. За 3 90 + 70 + 50 = 210
Ответы: >>1270069
Аноним 2018/09/25 14:03:21  №1270069 128
>>1270061
тогда не нужно, пусть эти жиды сами им пользуются
Аноним 2018/09/25 14:06:47  №1270070 129
Аноним 2018/09/25 14:27:36  №1270081 130
>>1270046

Сортировка легко делается без JS: делаем заголовки колонок ссылками вида ...&sort=-name
Ответы: >>1270092
Аноним 2018/09/25 14:29:52  №1270085 131
567.png (7, 789x166)
166x789
Ребят, а есть команда в PHP, например что бы в цикле for, в случае отрицательного баланса на счету, пропускалась часть тела ( не выполнялась), а выполнялась другая часть цикла, состоящая из функции if ?
Аноним 2018/09/25 14:34:09  №1270091 132
1537886046910.jpg (223, 960x960)
960x960
Ответы: >>1270093
Аноним 2018/09/25 14:36:35  №1270092 133
>>1270081
Да это понятно, проблемы начинаются, когда при повторных нажатиях надо менять тип сортировки.
Ответы: >>1270133
Аноним 2018/09/25 14:37:57  №1270093 134
>>1270091
Чет с if магия непонятная начинает происходить в проге, а можно цикл в цикле?
Ответы: >>1270096
Аноним 2018/09/25 14:39:44  №1270095 135
>>1270085
Внутри условия поставь условие на отрицательный баланс.
Ответы: >>1270107
Аноним 2018/09/25 14:40:07  №1270096 136
Аноним 2018/09/25 14:42:53  №1270098 137
Аноним 2018/09/25 14:52:52  №1270107 138
цукцук.png (58, 1557x881)
881x1557
>>1270095
Внутри какого условия, условия цикла, или имелось в виду что то другое? Если условие if, то оно уже есть.
Ответы: >>1270126
Аноним 2018/09/25 15:04:05  №1270110 139
>>1270085
Тебе нужно другое условие. Если долг + проценты меньше ежемесячного платежа, то выплатить оставшееся, вывести свое ехо и кинуть break;
Ответы: >>1270132
Аноним 2018/09/25 15:08:55  №1270114 140
Аноним 2018/09/25 15:22:17  №1270126 141
>>1270107
Возможно тебе поможет continue
А вообще ну ты пиздец дупло, конечно
Аноним 2018/09/25 15:31:37  №1270132 142
>>1270110
Ща отдохну и попробую, а то уже 4 часа пытаюсь и голова заболела.
Аноним 2018/09/25 15:32:04  №1270133 143
>>1270092

Нужно выводить ссылку с учетом текущего типа сортировки. То есть если выбрана сортировка -name, то надо выводить в заголовке +name вместо -name.
Ответы: >>1270146
Аноним 2018/09/25 15:32:59  №1270134 144
>>1270085

Для этого есть if

if (условие) {
одни действия;
} else {
другие действия;
}
Аноним 2018/09/25 15:36:18  №1270137 145
>>1269987

Не проще поставить и настроить netbeans for PHP или Eclipse for PHP? Лицензионно и бесплатно.
Ответы: >>1270141
Аноним 2018/09/25 15:38:27  №1270141 146
>>1270137
Я итак на нетбинсе, но шторм вне конкуренции, он слишком охуененн.
Аноним 2018/09/25 15:42:43  №1270146 147
1468592852006.jpg (101, 1280x720)
720x1280
>>1270133
Слишком уж большой костыль выходит для такой мелочи.
Ответы: >>1270225 >>1270391
Аноним 2018/09/25 16:45:37  №1270178 148
>>1269987
DON'T USE A LICENSE SERVER
add 0.0.0.0 account.jetbrains.com to your host file
and get a key from http://idea.lanyus.com/getkey
DISSCONNECT FROM INTERNET
Run jetbrain product, Paste the key into license section
then activate product
Connect to internet Again
Welcome to 2018.2
Аноним 2018/09/25 18:03:15  №1270225 149
Аноним 2018/09/25 20:46:18  №1270324 150
Ответы: >>1270391
Аноним 2018/09/25 23:01:08  №1270371 151
>>1270046
>gender
Non-binary
Rather not to say
Аноним 2018/09/26 01:35:22  №1270391 152
>>1270324

> https://pastebin.com/EsM3d1e8

> return $op==='+'?$result+$number:($op==='-'?$result-$number:$result*$number);

Здесь лучше использовать блок if/elseif, так как длинное выражение трудно читать.

А так, хорошо, что ты вынес вычисление в функцию. Сделано верно.

>>1270146

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

>>1269962

Если ты используешь fopen (довольно странный выбор), то почитай про контексты потоков: http://php.net/manual/ru/stream.contexts.php

>>1269940

Можно указать значение по умолч. null и в функции сделать проверку:

function t($x = null)
{
if ($x === null) {
$x = ....;
}

...
}
Ответы: >>1270422
Аноним 2018/09/26 01:35:54  №1270393 153
>>1269926

Хороший повод получше освоить CSS. Формы можно делать так:

<div class="f-row">
<div class="f-label">...</div>
<div class="f-widget">...</div>
</div>

Выровнять f-label/f-widget горизонтально можно с помощью display: inline-block, float, display: table, flexbox, и наверно как-то еще. Не забудь предусмотреть область для показа ошибок.

>>1269861

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

>>1269810

> https://ideone.com/Grtrs6

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

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

> 2. Как перехватить с помощью try-catch, ошибку возникшую из-за неправильно переданного типа?

Вообще, при неправильном типе поведение зависит от версии PHP. Дело в том, что в PHP, кроме исключений, есть еще "ошибки": notice, warning, fatal error, которые не являются исключениями и не ловятся try/catch (но ловятся при желании специальным обработчиком ошибок). Они по умолчанию пишутся в лог, могут выводиться на экран, и могут завершать или не завершать скрипт (в зависимости от уровня ошибки). Информацию можно поискать тут: http://php.net/manual/ru/book.errorfunc.php

Немного про них написано тут: http://anton.shevchuk.name/php/php-for-beginners-error-handling/

Некоторые фреймворки просто преобразовывают их в исключения, как описано тут: http://php.net/manual/ru/class.errorexception.php

В PHP7 часть фатальных ошибок была заменена на выброс исключения.

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

> 3. Решаю сейчас ООП-будильник, потом нужно будет решать Вектор или эти задачки взаимозаменяемые?

Решай в любом порядке, но лучше решить обе. Вектор посложнее.
Ответы: >>1270422
Аноним 2018/09/26 01:36:21  №1270394 154
>>1269809

Я имею в виду, искать слова, где есть буквы и латинницы, и кириллицы одновременно. Флаг u нужен в любом случае, он лишь говорит о работе с кодировкой utf-8 и нужен по сути всегда.

>>1269808

Я имел в виду вместо $i[0] использовать mb_substr($i, 0, 1) - это корректный код, так как он берет первый символ, а не первый байт. $i[0] это некорректно и описанную тобой проблему (символы в начале строки) никак не решает.

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

>>1269806

> define('AMOUNT','(' . $number . ')');

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

В общем:

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

> if ($opNumber/100>=0) {
В чем смысл этого условия? Оно равносильно $opNumber >= 0.

> $firstDigit=floor($opNumber/100); $opNumber-=$firstDigit100; $firstDigit=$spelling[$firstDigit100];
Не пиши несколько команд в 1 строку, тяжело читать.

> $firstDigit=$spelling[$firstDigit*100];
Не надо использовать одну переменную для 2 разных типов значений (для числа и для строки) - это лишь усиливает путаницу.

> $x=($firstDigit&&$firstDigit!='ноль'?"$firstDigit ":'') . ($secondDigit&&$secondDigit!='ноль'?"$secondDigit ":'') . ($lastDigit&&$lastDigit!='ноль'?"$lastDigit":'');

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

> function numberToText($number,$arr=[]) {
Непонятно, зачем передавать сюда $arr. И название выбрано плохое - arr ничего не значит.

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

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

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

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

> $preString=preg_replace('/два тысячи/u','две тысячи',$preString);
Это кривые костыли, затрудняющие понимание кода. Ну представь, человек начнет разбирать твой код, увидит, что он генерирует строку "два тысячи", подумает, что в нем ошибка. И только потом, может, увидит, что в конце эта ошибка костылем испрвляется. Но почему нельзя сделать, чтобы там сразу бралось правильное слово? Зачем усложнять все и запутывать читателя? Так не годится.

> $preString="" . ($arr[2]?
preg_match('/(два|три|четыре)$/u',$arr[2])?"{$arr[2]} миллиона":(preg_match('/(один)$/u',$arr[2])?"{$arr[2]} миллион":"{$arr[2]} миллионов")

Это невозможно читать. Слишком запутанно. Необходимо переписать.

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

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

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

У каждой функции должна быть своя задача, и логичный, простой набор аргументов и возвращаемых значений.
Ответы: >>1270770
Аноним 2018/09/26 01:36:49  №1270395 155
>>1269777

> https://github.com/wheelafterwheel/TDG/blob/master/sqlite3/transaction.ts

Здесь проблемы с читаемостью. Мне кажется, надо было не создавать объект to внутри функции, а сделать отдельным классом. Так как получилась тяжело читаемая функция-монстр.

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

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

В строке 47 глубина отступов составляет 7 - по моему, это перебор.

Возможно, стоило сделать промисифицированную обертку над db отдельным классом - так как многочисленные if ... reject только ухудшают читаемость. То есть сделать PromisifiedDb и уже с ним тут работать:

await pdb.beginTransaction();
to = new DbExecutor(pdb);
await sequence(to);
await pdb.commit();

Может быть, даже DbExecutor и не нужен будет, можно будет передавать в sequence этот PromisifiedDb.

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

Также, я не думаю, что надо было в классе делать db.open/close(). Логичнее передавать уже открытый объект db. Как я понимаю, при коммите изменения гарантированно сохраняются и без close(). Заодно мы могли бы поставить тайп-хинт в конструкторе TDG, а не принимать тип any.

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

transaction(function (to) {
setTimeout(function () {
to.execute(...);
}, 1000);

await to.execute(...)
});

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

То, что rollback реджектится не очень логично - наверно, все же логично при успехе отката резолвить его в null или true.

Также, транзакции конечно нужны при записи в БД, но при чтении они выглядят немного избыточными.

> if (
> statement.match(/^\s*SELECT/)
Это плохая идея, есть например SHOW и может еще какие-то команды. Лучше не определять их автоматически.

> async slice(limit: number = 30, offset: number = 0):
Это довольно ограниченный метод, он не поддерживает ни условия, ни порядок сортировки.

Не уверен, что нужны методы create/drop. Обычно таблицы создаются и изменяются через миграции.

> export class Staff extends TDG {
> constructor(
> name: string = 'staff'
Непонятно, зачем нужна возможность задать другое имя.

> (\`password_hash\` = ? OR \`password_hash\` IS NULL)
Это немного странно, а не приведет ли это к авторизации с пустым паролем?

> return (result["0"]["0"] !== undefined)
Надо было сделать методы, возвращающие одну строку и одну колонку.

Я вижу, что у тебя есть тест для Staff, а что насчет тестов для остального кода?

В тесте для ожидания исключения есть вроде бы конструкции expect().to.throw(...), а у тебя, если исключение не произойдет, то ошибки не будет.

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

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

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

Это дает такие преимущества:

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

И мне кажется, сама архитектура mocha к этому подталкивает: там есть describe() для описания тестируемого объекта и it() для описания фич. Ты же используешь it() для описания шагов гигантского теста. А должно быть:

describe('Staff', function () {
it('Can insert employee', ...);
it('Can delete employee', ...);
....
});

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

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

Главная проблема - нечитаемость кода в transaction.ts.

Если хочешь поломать голову, не хочешь ли попробовать сделать ORM на основе DataMapper, вроде Доктрины в PHP? То есть сделать так, чтобы не надо было вручную писать методы вроде register(), а они бы как-то сами умели определять структуру объекта и формировать SQL код:

var repo = Repository.getFor(Employee);
var e1 = repo.findOneBy({'tableNumber': 123});
e1.name = 'New name';
repo.flush(); // сохраняет изменения в БД

Далее, реализовать паттерны Identity Map, Unit Of Work. Далее, связи между сущностями и ленивую загрузку. Задача интересная, хоть и сложная.
Ответы: >>1270593
Аноним 2018/09/26 01:37:16  №1270396 156
>>1269640

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

int a = 1;

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

Динамическая - типы не известны до выполнения программы:

$a = calc();

function calc() {
....
}

Сильная/слабая - при слабой типизации язык может преобразовывать типы (например, в выражении "2" + 2 язык может автоматичеки преобразовать строку "2" в число), при сильной это надо делать явно, иначе будет ошибка.

https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B8_%D1%81%D0%BB%D0%B0%D0%B1%D0%B0%D1%8F_%D1%82%D0%B8%D0%BF%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F

>>1269439

Это что-то с твоим кодом. Если что, есть паттерн Post/Redirect/Get для защиты от повторной отправки формы.
Ответы: >>1270404
Аноним 2018/09/26 02:29:49  №1270404 157
>>1270396
>(например, в выражении "2" + 2 язык может автоматичеки преобразовать строку "2" в число)
Нет, это не слабая типизация. Это неявное преобразование типов.

Смотри на Си. ты не можешь там сделать "2" + 2, так чтобы он на лету преобразовал строку "2" в число 2. При этом у Си - слабая типизация.
Ответы: >>1270420
Аноним 2018/09/26 04:53:26  №1270420 158
>>1270404
Ну все правильно он сказал
Ты не можешь "2" + 2 в С сделать, но
void *ptr можешь кастовать хоть во что
или enum с целыми неявно смешивать
именно поэтому слабая
Ответы: >>1270427 >>1270433
Аноним 2018/09/26 04:55:27  №1270422 159
>>1270391
>как это аккуратно сделать
Яваскриптом.
>>1270393
>Не забудь предусмотреть область для показа ошибок
Ошибки во всплывающем окошке выводятся.
Аноним 2018/09/26 05:04:31  №1270427 160
>>1270420
Хотя даже тут ты наврал и меня запутал
>> "2" + 2
для С норм, потому что "2" указатель на константную строку
Ответы: >>1270431
Аноним 2018/09/26 05:28:03  №1270431 161
>>1270427
И сколько у тебя получится?

Читай внимательно
>ты не можешь там сделать "2" + 2, так чтобы он на лету преобразовал строку "2" в число 2
Аноним 2018/09/26 05:29:52  №1270433 162
>>1270420

>язык может автоматичеки преобразовать
>кастовать
Аноним 2018/09/26 07:09:10  №1270453 163
Снимок.PNG (1553, 1620x947)
947x1620
>>1268753 (OP)
Анон, допомоги понять одну хероту.
Есть сает http://dzzb.ru
Запилил там "окна консоли" в некоторых статьях через css. Примеры:
http://dzzb.ru/blog/MScen
http://dzzb.ru/blog/StartGen
http://dzzb.ru/blog/Punch!
И вот в FurryFox и даже в IE эти "окна" отображаются нормально - с заголовком, который берется из картинки, а хром не воспринимает этот параметр CSS ниразу. Допиливал и "webkit" ко всем параметрам и бочку делал - нихуя. Насоветуй как хром полечить.
Ответы: >>1270459
Аноним 2018/09/26 07:45:20  №1270459 164
Аноним 2018/09/26 15:08:57  №1270593 165
>>1270395
Слава слонику, ты тут многие замечания описал, которые мне тоже не нравятся (ура!). Ремарочка, как появился transaction.ts: я замучался с дефолтной реализацией драйвера sqlite3, и решил обыграть все спорные моменты одной функцией (написал и забыл, работает же!). Однако этот франкенштейн не так гибок как хотелось бы (появились ненужные флаги и прочий мусор), ты прав, лучше переписать ее или вообще убрать. (Но повторюсь, от дефолтного апи меня аж трисет, вот оно https://github.com/mapbox/node-sqlite3/wiki/API , если подскажешь, как это превратить в promisified, буду очень благодарен). Вообще у меня идея появилась сейчас абстрагироваться от баз данных вообще ииии да, именно
>сделать так, чтобы не надо было вручную писать методы вроде register(), а они бы как-то сами умели определять структуру объекта и формировать SQL код
На вскидку это довольно сложно, но я попробую, обучение же! (Но в реальном проекте лучше не велосипедить и взять https://github.com/typeorm/typeorm)

По поводу отступов:
>отступы в 4 пробела ухудшают мне читаемость, может конечно я просто к ним не привык, но они же слишком длинные
ну ты понял, алсо https://github.com/basarat/typescript-book/blob/master/docs/styleguide/styleguide.md#spaces
Я думаю, два, четыре пробела или таб не делают программиста.

>глубина отступов составляет 7 - по моему, это перебор
ну да, чет многовато (даже для такой трешовой функции)

Главное:

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

>То, что rollback реджектится не очень логично - наверно, все же логично при успехе отката резолвить его в null или true.
ты имеешь в виду to.rollback() ? это мануальный откат, который мы сами вызовем при определенных условиях в своем коде, указывая причину, которую (та-даа!) можно отловить (потому-что даже мануальный откат это исключительная ситуация). При reject мы выходим из sequence и идем ловить ошибку, а вот при resolve(true) мы как бы уже откатились, но команды далее по коду будут как ниндзи выполняться на уже закрытую транзакцию, как будто все нормально. (Собственно, это проблема архитектуры функции)

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


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

Остальные замечания: все постараюсь исправить. Нужны комментарии на вопросы выше.
Аноним 2018/09/26 23:05:43  №1270770 166
Ответы: >>1270820 >>1271603
0/200 day 1 Аноним 2018/09/27 00:03:10  №1270776 167
Врываюсь в тред со второй попытки. Объявляю сам себе челендж: отучится 200 часов за 60 дней. Ща посплю и понеслась.
Ответы: >>1270833
Аноним 2018/09/27 05:50:02  №1270820 168
>>1270770
Ебать ты англичанин.
Аноним 2018/09/27 06:42:26  №1270833 169
>>1270776
Надеюсь не недоязык пехопе учить будешь, сверхчеловек?
Аноним 2018/09/27 11:23:58  №1270977 170
>>1269926
Или для записи в поликлинику
Аноним 2018/09/27 11:37:50  №1270987 171
>>1269926
А мне нравится дизайн. Чуть чуть выровнять только. А то сейчас что не сайт - битва космических истребителей от лукасфилм.
Аноним 2018/09/27 13:33:03  №1271044 172
Ответы: >>1271238
Аноним 2018/09/28 00:43:48  №1271238 173
>>1271044
>>1266710

Самое главное, что бросается в глаза: не подключен шрифт. У тебя указан шрифт Lato, но если его не установлено на компьютере, то текст отобразится другим шрифтом (sans-serif). Для подключения файла шрифта есть специальное CSS-правило @font-face. Я советую внимательно его изучить. Обрати внимание, что существуют разные форматы шрифтов, и разные браузеры поддерживают разные форматы:

- https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face (в конце есть таблица)
- https://css-tricks.com/snippets/css/using-font-face/ (англ)
- https://caniuse.com/#feat=woff
- https://caniuse.com/#feat=woff2
- https://caniuse.com/#feat=ttf
- https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/webfont-optimization?hl=ru (статья на русском)

Сконвертировать шрифты можно конвертором: https://www.fontsquirrel.com/tools/webfont-generator

Обрати внимание, что пока шрифт не загрузится, браузер не показывает текст. Повлиять на это поведение можно новым свойством font-display: https://css-tricks.com/font-display-masses/

Проверить, как шрифты отображаются в разных браузерах, можно напрмер, тут: https://developer.microsoft.com/en-us/microsoft-edge/tools/screenshots/

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

Скриншоты можно сделать еще на http://browsershots.org/, но там нет ИЕ и мобильных браузеров.

Ты заметишь, что процесс довольно хлопотный: надо конвертировать шрифты, настроить правила font-face итд. Вообще, этого можно избежать, если подключать готовые шрифты с Google Fonts, который все сделает сам, но я бы советовал один раз сделать все вручную, чтобы разобраться. Ну и при желании ты можешь как-то shell-скриптами автоматизировать это.

Телефон хорошо бы сделать кликабельным, ссылкой с префиксом tel: https://css-tricks.com/the-current-state-of-telephone-links/

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

- 320 (или 360), 640, 960

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

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

> body, html {
> box-sizing: border-box;
Непонятно, зачем тут box-sizing, если для html/body ширина или высота все равно не задана.

> .headerBack {
> width: 100%;
> display: inline-block;
Непонятно, зачем тут inline-block

> .logo {
> display: inline-block;
> float: left;
float подразуемвает display: block

В блоке с Consectetur надо настроить line-height в абзацах как на макете.

Вместо тегов b/i сейчас используют strong/em, с немного другим смыслом (они задают не внешний вид текста, а смысловое выделение).

> <div class="serveicesBlock">
> <div class="img"></div>
Можно использовать псевдоэлемент вместо дива .img

> <input type="radio" id="tabLabel2" name="radiobutton"/>
В указании слеша в конце /> в HTML5 нет необходимости. Это из XHTML.

Надо чтобы при выборе категорий (all/graphic/illustration) часть работ скрывалась, а часть оставалась. Присвоить категории можно через data-атрибуты или CSS классы.

> <div></div>
> <div></div>
Непонятно, зачем пустые дивы.

> .serveicesBlock > p {
> font-size: 14px;
Это плохая идея, вешать стили на p, так как текст может быть и в других тегах (например: ul/li, figure). Лучше просто было задать шрифт на servicesBlock.

> .footerLink > a:nth-child(2) {
> background-position: -42px -11px;
Здесь вместо номеров лучше использовать классы (link-fb, link-tw). Так как с номерами неудобно вставлять или убирать элементы: надо менять все номера. Или нельзя просто переставить 2 ссылки местами. Тут лучше явно указать тип ссылки в HTML.
Аноним 2018/09/28 03:03:46  №1271247 174
Аноны, предыдущий тред утонул, но он остается в архивах:

- https://phpclub.tech/pr/res/1232710.html
- https://2ch.hk/pr/arch/2018-09-27/res/1232710.html

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

Как я помню, вопросы с 20 сентября отвечены в старом треде, ответы вопросы с 1 сентября по сегодня - ниже:

>>1270298

Нужно установить интерпретатор PHP, это программа для командной строки: https://github.com/codedokode/pasta/blob/master/soft/php-install.md

Если тебе не нравится командная строка, то можно взять IDE или редактор (Netbeans PHP, Eclipse for PHP, PhpStorm, Sublime Text) и настроить запуск PHP из них. В каждом редакторе это делается по-своему.

>>1270158

У тебя помоему $time на 1 меньше, чем надо. То есть если бы миллион получился после 1 года (например, если начальная сумма равна 999 000), то твоя программа напишет что миллион накопился в 16 лет, а не в 17.

>>1266701

Алсо задачка на поиск емейл в тексте. https://ideone.com/bOB8LV

В именах пользователя и домене могут быть минусы: ivan-petrov@sidor-sidorov.ru

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

Но сама идея решения верная.
Аноним 2018/09/28 03:04:33  №1271248 175
>>1266631

> Мне нужно заменить все значения true, на false.
> А что если просто сериализовать массив в строку, и пройтись регулярко, ну и потом обратно собрать?
Это очень костыльно, и ты взяд ли сможешь сделать это корректно. Формат сериализации не документирован и может в любой момент поменяться. Ну например, может там в строке есть слово true, а ты его заменишь.

Лучше может быть просто в цикле пересоздать массив - это делает код безопаснее.

>>1265236

> Почитал урок про MVC, с моделью и вью все понятно, а вот есть подробные инструкции по написанию контроллеров?

Контроллер анализрует запрос пользователя, берет нужные данные из модели и отображает их с помощью view.

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

Описание паттерна кратко: http://design-pattern.ru/patterns/page-controller.html

В некоторых фреймворках контроллер - это функция, которая принимает на вход объект Request и возвращает объект Response.

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

Также, есть паттерн Front Controller - когда все запросы идут в главный контроллер, он делает какие-то подготовительные действия и вызывает уже отвечающий за данный запрос контроллер. Описание кратко: http://design-pattern.ru/patterns/front-controller.html

>>1265663

> Задача на автозамену скобочек в тел. номерах
> https://ideone.com/7Dd3h8

Не надо экономить строчки. Фигурные скобки ставятся так:

if (условие) {
действия;
}

Варнинги надо исправить:

> PHP Warning: array_push() expects parameter 1 to be array, string given in /home/A2VmLC/prog.php on line 19

> echo "Only these passed negative tests {$mistakes}\n";
Локальная переменная, созданная в функции, не доступна снаружи.
Аноним 2018/09/28 03:05:02  №1271249 176
>>1265163

> Задача на проверку телефонов.
> https://ideone.com/5GYxQY
То же замечание - форматируй код, так как его невозможно читать.

Идея решения правильная, но код нечитаемый.

>>1264529

> Цель: написать клон Героев 3 только лишь на пхп.

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

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

- HTML5 + JS. В браузер загружается страница, на этой странице загружается JS-программа и выполняется в браузере. Она рисует изображение для игры и реагирует на действия пользователя. В теории, будет работать и на планшетах, но медленнее.
- Electron + HTML5 + JS. То же самое, только HTML-страница, JS-код и браузер упакованы в приложение. Пользователь запускает приложение, внутри него запускается встроенный браузер, отображает страницу, но для пользователя это выглядит как "настоящее" приложение.
- Pygame. Приложение-игра на Питоне, в помощь тебе дается библиотека для работы с графикой. Вроде как поддерживает десктопные ОС и Андроид.

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

Если ты не знаешь ни JS, ни Питона, то у меня есть 2 новости. Хорошая: в обоих этих языках есть многое из того, что есть в PHP - массивы, переменные, циклы, классы. Со знанием PHP учить их будет проще. Плохая: у них все же другой синтаксис и есть свои особенности.

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

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

>>1264400

> $arr1=explode('',$text);
Это неразбивает текст на буквы, а разбивает на байты. То есть, в случае кириллицы, на половинки букв.

Замену пробелов проще сделать через str_replace или strtr и без цикла.

> if ($arr1[$i]!=$arr2[$j]){
Та же проблема, ты берешь не буквы, а байты. Прочитай урок https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

> echo "" . $result;
Тут "" не нужно.

В общем, сейчас программа не работает нормально, так как сравнвает байты, а не буквы. Надо это исправить.
Аноним 2018/09/28 03:05:33  №1271250 177
>>1264400

> $arr1=explode('',$text);
Это неразбивает текст на буквы, а разбивает на байты. То есть, в случае кириллицы, на половинки букв.

Замену пробелов проще сделать через str_replace или strtr и без цикла.

> if ($arr1[$i]!=$arr2[$j]){
Та же проблема, ты берешь не буквы, а байты. Прочитай урок https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

> echo "" . $result;
Тут "" не нужно.

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

>>1264380

> Задачка про банкомат - https://ideone.com/SfcMLz

> $bills = array_reverse($bills);
Сортровать по убыванию лучше функцией вроде krsort, смотри мануал http://php.net/manual/ru/array.sorting.php

Функция array_reverse перепроставляет значения ключей (меняет их на 0, 1, 2 ...) и номиналы теряются. Это описано в мануале.

> if($amount >= $nominal and $countBanknote < $value) {
Ты берешь банкноты только если их достаточно. Но можно брать и если их не хватает. Например, сумма 3100, в наличии 5 банкнот по 500 и 7 банкнот по 100. Берем 5x500 + 6x100. Твоя же программа в этом случае не сможет набрать нужную сумму.

Надо исправить эту проблему. У тебя программа вообще пока нерабочая.
Аноним 2018/09/28 03:06:12  №1271251 178
>>1263923

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

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

>>1263752

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

>>1263794

> с функцией array_rand() jdoodle.com/a/ERc
Ок, верно.

> w5.6 с функцией array_rand() и православной конкатенацией jdoodle.com/a/ERf

> if (4 >= 0) {
> $name = "$conc";
Это условие всегда выполняется и строчка внутри тоже всегда выполняется. Ее надо поставить после цикла, чтобы она выполнялась только один раз. Также, кавычки тут не нужны.

> PHP Notice: Undefined variable: conc in /home/jdoodle.php on line 21
Это предупреждение надо исправить.

>>1263444

SPA это усложнение и нужно для специфичных фич: работа в оффлайне, сложные интерфейсы, высокая интерактивность. Если у тебя этого нет, то не надо усложнять приложение без надобности. Плюс оно тормозить наверно сильнее будет в виде SPA.
Аноним 2018/09/28 03:06:40  №1271252 179
>>1263349

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

Почитай для начала урок про нормализацию: https://github.com/codedokode/pasta/blob/master/db/normalization.md

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

>>1262263

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

>>1257990

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

Все зависит от используемого сервиса. Если он будет распознавать команды и выдавать результат - то не так и сложно. Но по факту распознавани голоса не такая простая вещь, особенно если надо распознавать разных людей, в зашумленной обстановке итд. Я бы советовал для начала найти такой сервис распознавания и протестировать его, а потом делать выводы.
Аноним 2018/09/28 03:07:02  №1271253 180
>>1257803

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

Вполне нормальный код. Транзакциии еще можно делать через коллбек:

$db->transactional(function ($db) {
$db->execute(...);
});

Там исключение ловит функция transactional.

>>1257907

> Задачка с айпадом: https://ideone.com/mLzoxa
Решение удалено.

>>1257813

> Проверьте, пожалуйста, задачу с палиндромами.
> http://sandbox.onlinephpfunctions.com/code/75e94cacefd198240501dfac4cc93cdca0ac29a3

> if ($a == $b) {
> $result;
Команда $result; ничего не делает и не нужна.

Также, при первом же несовпадении можно выходить из цикла по break.

А в остальном верно.

>>1256983

> Аноны, почему ошибка в 16 строчке? 30 раз смотрел, вроде нету ошибок. Решение https://ideone.com/8sXAP4

Ошибка в 29 строчке, там иногда генерируется индекс 16, которого нет в массиве.
Аноним 2018/09/28 03:07:25  №1271254 181
>>1256748

> Аноны, чекните задание про рост школьников, все правильно?
> https://ideone.com/ZdgItc

все правильно, только не экономь на строчках и заключай тело if в фигурные скобки.

>>1256224

> ОПушка, проверь функцию для этой задачки: https://ideone.com/bU5gHV

Ок, верно.

>>1256073

> В задачке про массивы с 10ю ключами порядок ключей важен или только их наличие?
Порядок не важен.
Аноним 2018/09/28 03:07:54  №1271255 182
Уф, проверил все с конца до 760 поста. Напомню себе проверить >>1247821

> Оп, глянь студентов: https://github.com/Awesome-Kirill/fukingStudent

Больше месяца прошло, нехорошо.
Аноним 2018/09/28 04:47:34  №1271269 183
ОП, я тоже думал в качестве пет-проекта написать игру небольшую, что-то вроде простого варгейма. Получается, php не пригодится для этого, учить параллельно и js?
Аноним 2018/09/28 05:09:47  №1271276 184
Всем привет!
Недавно начал читать гайд для новичков из ОП. Весьма интересно. Недавно наткнулся на такую фишку как bootstrap, я так понял это библиотека готовых решений. Насколько оправдано пользование этим ресурсом? Или лучше всё писать ручками?
Ответы: >>1271302
Аноним 2018/09/28 06:22:54  №1271302 185
>>1271276
> Насколько оправдано пользование этим ресурсом?
Ни на сколько. Хреньворк - априори хуйня. Тем более этот страпон.
Аноним 2018/09/28 06:31:38  №1271307 186
>>1268753 (OP)
> полезная задача сделать список студентов
Пошёл нахуй со своими студентами. Лучше делать список гей-шлюх, и то приличнее будет.
Аноним 2018/09/28 06:32:23  №1271308 187
https://ideone.com/B177aS
Сделал игру с кубиками, не совсем понял за кусок:
exit()
его ставить в конце всех условий или?
Ответы: >>1271313
Аноним 2018/09/28 06:38:50  №1271313 188
>>1271308
Нет, долбоёб, это точка остановки программы. Плюс лишняя точка с запятой в последнем условии.
Ответы: >>1271317 >>1271319
Аноним 2018/09/28 06:54:08  №1271317 189
>>1271313
Это не тред для самоутверждения людей с комплексами. Это тред для помощи новичкам.
Аноним 2018/09/28 06:58:46  №1271319 190
>>1271313
Ты такой токсичный.
То, что это останавливает программу, я понял. Но где её ставить? По идее если условие выполнено, это повод остановить программу т.е. ставить после каждого условия?
Ответы: >>1271342 >>1271343
Аноним 2018/09/28 07:34:11  №1271327 191
Объясните простым языком разницу между абстрактным классом и интерфейсом, пожалуйста.
Ответы: >>1271333 >>1271342 >>1271346
Аноним 2018/09/28 07:41:39  №1271333 192
>>1271327
Я так понял, в интерфейсе все методы это заготовки без реализации, в абстрактном можно прописать не абстрактный метод с реализацией сразу. Вот на практике я Х
хер знает, когда что лучше брать.
Ответы: >>1271371
Аноним 2018/09/28 07:48:57  №1271342 193
>>1271327
Абстрактный класс имеет как минимум один абстрактный (не определенный) метод. Интерфейс - это тот же абстрактный класс, с той разницей, что в нём не может быть свойств и не определены тела методов. Абстрактный класс наследуется, а интерфейс реализуется: наследовать можно только один класс, а реализовать сколько угодно.

>>1271319
А тебе не приходило в голову, что программа на пыхапе обычно сама останавливается? Рот твой токсичный.
Ответы: >>1271371
Аноним 2018/09/28 07:49:17  №1271343 194
>>1271319

Обычно ставить не надо нигде. Там в задаче оно ставится, чтобы , если условие в первом блоке if сработало, код ниже бы не выполнялся. Можно (так даже лучше) сделать вообще без exit, если перегруппировать блоки if.
Аноним 2018/09/28 07:50:35  №1271346 195
Ответы: >>1271371
Аноним 2018/09/28 08:43:22  №1271371 196
Аноним 2018/09/28 08:45:31  №1271373 197
Сап камрады, есть у кого образ на докер, вагрант(без разницы) со стеком php4?
Аноним 2018/09/28 09:01:44  №1271383 198
Неожиданно.
Аноним 2018/09/28 09:18:39  №1271390 199
Задача про массивы с рандомным именем
https://ideone.com/sIORAY
Не совсем понимаю, что не так. Вроде создал нулевую таблицу, потом она заполняется где каждый элемент берет номер $i, и значение рандомного слога а на выходе - болты.
Ответы: >>1271395
Аноним 2018/09/28 09:26:14  №1271395 200
Ответы: >>1271398
Аноним 2018/09/28 09:29:02  №1271398 201
>>1271395
Благодарю. Всё сошлось
Ответы: >>1271405
Аноним 2018/09/28 09:33:05  №1271405 202
>>1271398
А теперь объясни, почему.
Ответы: >>1271409
Аноним 2018/09/28 09:41:04  №1271409 203
>>1271405
А это в гайде не могу найти ¯\_(ツ)_/¯
Ответы: >>1271440
Аноним 2018/09/28 09:50:38  №1271414 204
За двойные кавычки в php надо в жопу ебать без смазки.
Ответы: >>1271433 >>1271888
Аноним 2018/09/28 10:29:12  №1271433 205
>>1271414
Ты латентный пидор.
Аноним 2018/09/28 10:40:20  №1271440 206
>>1271409
Нет ты объясняй давай, что это ещё за не могу.
Как внутри массива располагаются элементы? Чем ассоциативный массив от простого отличается?
Ответы: >>1271443
Аноним 2018/09/28 10:46:48  №1271443 207
>>1271440
Каждому имени в массиве относится ключ, ну как в задачке с ростом было. Имя - рост. Где ключ это рост.
В простых массивах идет поиск по индексу, в ассоциативных по ассоциациям, вроде так
Ответы: >>1271446
Аноним 2018/09/28 10:53:50  №1271446 208
Ответы: >>1271447
Аноним 2018/09/28 10:59:01  №1271447 209
>>1271446
Я даже не знаю что и ответить.
Ответы: >>1271454
Аноним 2018/09/28 11:19:00  №1271454 210
>>1271447
$assoc = array(
"Index" => "value",
"Index" => "value2",
...
);

$numerable = array(
0 => "value",
1 => "value2",
...
);

Ничего странного не замечаешь?
Ответы: >>1271970
Аноним 2018/09/28 11:35:28  №1271459 211
Поделитесь уютным чатиком где можно будет обсудить что-то или получить помощь/совет
Ответы: >>1271494 >>1271516
Аноним 2018/09/28 12:40:58  №1271494 212
>>1271459
а зачем ты нужен уютному чатику
Ответы: >>1271508
Аноним 2018/09/28 13:29:40  №1271508 213
>>1271494
Если у тебя такой вопрос возникает, значит твой чатик не уютный
Аноним 2018/09/28 14:02:54  №1271516 214
Аноним 2018/09/28 18:06:43  №1271603 215
>>1270770
ОООпчик, ты меня проглядел?((( Смотрю, уже ниже спустился по ответам.
Ответы: >>1271942
Аноним 2018/09/29 12:47:06  №1271888 216
>>1271414
За одинарные может быть? Вроде как доступно больше функций с одинарными кавычками, не? Не срача ради, сугубый интерес.
Аноним 2018/09/29 14:30:18  №1271942 217
>>1271603
Дичайший быдлокод (в плане самого алгоритма), ещё и с английскими комментариями. Фу, бля.
Ответы: >>1272029
Аноним 2018/09/29 15:18:10  №1271970 218
>>1271454
Извиняюсь, не было возможности заходить на двачи.
У нижнего массива цифры вижу в имени
Ответы: >>1271974
Аноним 2018/09/29 15:34:02  №1271974 219
>>1271970
Не то. Посмотри еще раз внимательнее.
Ответы: >>1271975
Аноним 2018/09/29 15:35:06  №1271975 220
>>1271974
"Index" в ковычках двойных, а 0 нет?
Ответы: >>1271980
Аноним 2018/09/29 15:38:37  №1271976 221
Хотя, тут скорее, что Index'у несколько ключей соответствует
Ответы: >>1271986
Аноним 2018/09/29 15:43:40  №1271980 222
>>1271975
Там индекс - целое неотрицательное число, а там - строка. Догнал, кусок долбоёба?
Ответы: >>1271981 >>1271986
Аноним 2018/09/29 15:47:16  №1271981 223
Аноним 2018/09/29 15:51:47  №1271986 224
>>1271980
Не в этом его ошибка.

>>1271976
Тааак! И что произойдет, если под один индекс пихать разные значения? $pieces["$i"]
Ответы: >>1271988 >>1272062
Аноним 2018/09/29 15:56:15  №1271988 225
>>1271986
Он спрашивал, что такое ассоциативный массив. К чему твой пример с повторяющимся индексом - не совсем понятно.
Ответы: >>1271990
Аноним 2018/09/29 16:02:50  №1271990 226
>>1271988
Потому что ты не в теме, проходи, не мешай.
Аноним 2018/09/29 17:02:56  №1272029 227
>>1271942
Ну я и есть нубас. В прошлый раз Оп мне на ошибки указал, я их исправляю потихонечку. Сейчас еще укажет надеюсь, я снова переделаю. Так, глядишь, и научусь чему.
Ответы: >>1272066
Аноним 2018/09/29 17:45:40  №1272062 228
>>1271986

Чёт всёравно не улавливаю суть. Если в ковычках он это считает одним именем, чтоли?
Ответы: >>1272080
Аноним 2018/09/29 17:55:13  №1272066 229
>>1272029
Всё правильно, так и надо. Только не создавай затруднения уже на начальном этапе. Смотри, как этот код примерно должен выглядеть: https://ideone.com/DyCEJU
Ответы: >>1272082 >>1272245 >>1272343
Аноним 2018/09/29 19:01:58  №1272080 230
docs.png (47, 1873x575)
575x1873
>>1272062
Вот этот шкаф представляет собой массив. В нем каждый ящик может хранить только последнее положенное в него (все, что было в ящике перед тем как мы ложим туда - исчезает). Если два ящика назвать одинаково, произойдет коллапс Вселенной (шутка, просто предыдущий исчезнет и шкаф скорее всего развалится).

Посмотри на картинку и ответь на вопросы:

1) Почему некоторые ящики названы в кавычках и все ли из них нужно было в эти кавычки брать. Если не все, то какие и почему?

2) Итак у нас три документа маршируют сохраниться в ящик. Который из них останется в живых если мы откроем ящик после? Который это будет ящик?
Ответы: >>1272088
Аноним 2018/09/29 19:09:34  №1272082 231
>>1272066
Ох, мне аж чуть плохо не стало, подумал 1С.
Аноним 2018/09/29 19:18:18  №1272088 232
>>1272080
1) Без ковычек числа да? 007 - ковычек не надо
2) Смотря какой порядок, если с права на лево, то выживет левый в папке index
Ответы: >>1272100
Аноним 2018/09/29 19:57:51  №1272100 233
>>1272088
1) не все языки простят тебе 007 в качестве ключа.

2) ну теперь то ты понял свою ошибку в $pieces["$i"]?
Ответы: >>1272752
Аноним 2018/09/30 04:51:37  №1272225 234
Ответы: >>1272292
Аноним 2018/09/30 05:26:36  №1272228 235
RVsOIBYqu7g.jpg (122, 1280x720)
720x1280
Ответы: >>1272244 >>1272269 >>1272293
Аноним 2018/09/30 06:44:50  №1272244 236
Аноним 2018/09/30 07:02:10  №1272245 237
>>1272066
Надо на работе как-нибудь захерачить сразу в продакшен такое. Начальника с инфарктом скорая увезет, наверно...
Аноним 2018/09/30 08:44:49  №1272269 238
Ответы: >>1273922
Аноним 2018/09/30 09:15:28  №1272282 239
Дианон есть?
Аноним 2018/09/30 09:42:23  №1272292 240
Ответы: >>1272343
Аноним 2018/09/30 09:45:05  №1272293 241
>>1272228
Фу, блядь, нахуй он ему язык вырвал? И почему он жёлтый?
Аноним 2018/09/30 10:55:39  №1272343 242
Ответы: >>1272361
Аноним 2018/09/30 11:04:53  №1272346 243
Как на курсы записаться, хочу такую кошечку
Аноним 2018/09/30 11:18:06  №1272361 244
Ответы: >>1272475
Аноним 2018/09/30 13:07:22  №1272408 245
сделал криво косо плохо задачку про компанию вектор, мб кто-нибудь почекает да подскажет чего-то https://ideone.com/UiCDNk
Аноним 2018/09/30 15:13:33  №1272454 246
Аноним 2018/09/30 16:18:33  №1272475 247
Capture.JPG (103, 1366x768)
768x1366
>>1272361
Че такой дерзкий? Выпускной сертификат от ОП-а показал быстро
Ответы: >>1272484
Аноним 2018/09/30 16:42:26  №1272484 248
>>1272475
> Выпускной сертификат от ОП-а показал быстро
Твоя опа-хреньворкщица сама сертификат не хочет показать? Или там только справка бакалавра?
Аноним 2018/09/30 17:40:22  №1272522 249
Таки четыре дня - слишком большой отдых от обучения.
Аноним 2018/09/30 23:58:02  №1272630 250
Ответы: >>1272657
Аноним 2018/10/01 05:35:29  №1272657 251
>>1272630
Осталось еще $ у переменных убрать, и будет Java.
Аноним 2018/10/01 09:00:35  №1272752 252
>>1272100
Я так понимаю, что пытался всё воткнуть в $i - т.е. это было не число как я задумывал, а именно имя $i ему уже присваивались значения, и высвечивалось последнее?
Ответы: >>1272761
Аноним 2018/10/01 09:21:37  №1272761 253
>>1272752
Ура! Ты молодец. Да, ты в цикле обновлял значение у текстового ключа "$i", а не добавлял новые числовые ключи $i. Впредь будь внимательнее, или я тебя заебу вопросами ты понял?
Ответы: >>1272763
Аноним 2018/10/01 09:27:24  №1272763 254
>>1272761
Было познавательно, особенно картинка, сам делал?
Ответы: >>1272787
Аноним 2018/10/01 10:36:28  №1272787 255
>>1272763
У Фаулера позаимствовал.
Аноним 2018/10/01 11:58:19  №1272824 256
Туго жаваскрипт идет.
Ответы: >>1272825
Аноним 2018/10/01 12:02:43  №1272825 257
Ответы: >>1272828 >>1272842
Аноним 2018/10/01 12:03:41  №1272828 258
Аноним 2018/10/01 12:41:11  №1272842 259
Аноним 2018/10/01 17:08:11  №1272935 260
Помогите срочно! gd не работает на apache. Проверил вардампом gd_info() в самой консоли php - все показывает. Копирую то же самое в файл на серве - ошибка 500. В чем проблема? В php.ini gd2 раскомментирован.
Ответы: >>1272942
Аноним 2018/10/01 17:19:12  №1272942 261
>>1272935
Все разрешилось рестартом сервера.
Аноним 2018/10/02 06:01:33  №1273133 262
В шапке советуют html академию, кто-нибудь проходил там курсы? Что скажете за бесплатные/платные уроки и учебу с наставником?
Ответы: >>1273166
Аноним 2018/10/02 06:41:58  №1273166 263
>>1273133
Рекомендую бесплатные. Темы платных курсов можно будет изучить после, самостоятельно и бесплатно.
Ответы: >>1273176
Аноним 2018/10/02 07:01:53  №1273176 264
>>1273166
И реально после курса бесплатного можно садиться и делать свои сайты? чувствую обман
Ответы: >>1273190 >>1273191
Аноним 2018/10/02 07:41:39  №1273190 265
>>1273176

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

А так, в вебе никаких секретов нет и при упорстве все можно освоить бесплатно.
Ответы: >>1273208
Аноним 2018/10/02 07:43:17  №1273191 266
>>1273176

При этом я не говорю, что платные курсы это плохо. Если это не курсы вида "купить за деньги учебник", а например, курсы подразумевают что препод следит за успеваемостью, помогает в сложных случаях и тд, то это конечно может быть более эффективно чем самостоятельная учеба.
Аноним 2018/10/02 08:12:48  №1273208 267
>>1273190
Получается чтобы делать сайты средней руки надо знать html, php, js, css?
Ответы: >>1273218
Аноним 2018/10/02 08:22:34  №1273218 268
>>1273208

SQL еще.

Если твоя задача как можно быстрее делать сайты, то можно взять CMS - там вообще программирования не нужно, но сделать можно только то, что заложено в CMS или ее модули.
Ответы: >>1273220 >>1273228
Аноним 2018/10/02 08:24:40  №1273220 269
>>1273218
Такой еще вопрос от другого анона: насколько в работе (да и вообще на практике) нужно именно программирование а не использование CMS-ок?

Спрашиваю про уровень джуна со стажем. Реально ли новичку дрючить КМС-ки, так почти ничего за свою "карьеру" и не написав?
Ответы: >>1273226
Аноним 2018/10/02 08:33:19  №1273226 270
>>1273220

Взял бы и попробовал использовать какую-нибудь CMS. Wordpress или Drupal. Там теоретически ничего сложного, но по факту много всяких подвохов. Так что я советую изучение программирования не забрасывать.
Ответы: >>1273237
Аноним 2018/10/02 08:35:58  №1273228 271
>>1273218
Я изучаю для себя, хочу сделать свой проект с возможностью модернизации последующей, и чтобы голову не ломать с переделкой в дальнейшем хочется делать если не хорошо, то хотя бы правильно
Аноним 2018/10/02 08:44:46  №1273237 272
>>1273226
Я ни-ни!
тот самый анон
Аноним 2018/10/02 10:19:00  №1273289 273
Что за наркоман выдумывал принцип работы объектов в JS? Поскорее бы вернуться к PHP, там все намного логичней.
Ответы: >>1273430 >>1273613
Аноним 2018/10/02 12:40:47  №1273388 274
Смотрел старые посты, и обнаружил, что пропустил человека с файлообменником:

>>1240285 - https://github.com/Qevg/filehosting

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

Если что, предыдущий тред доступен в архивах: https://phpclub.tech/pr/res/1232710.html

А так, вроде как проверил все посты в старом треде, вот последние непроверенные задачки. Позно, конечно, но лучше поздно, чем никогда.

>>1256038

> Калькулятор ОПа. https://3v4l.org/D5Apr

Решено верно.

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

Тут есть разные подходы. Можно регуляркой разбить выражение на части, чтобы каждое дробное число или знак операции было отдельным куском строки, и преобразовать его в тип float с помощью floatval($x). А можно читать символы по одному и добавлять к строке. А перед вычислением проверить эту строку на правильность регуляркой и преобразовать в float.

>>1255784

> Ребят, вопрос по symfony - если мне нужен минимальный функционал API причем даже не CRUD, а просто ~5 эндпоинтов, мне кажется, что для этого не стоит тащить целый бандл типа api-platform/fosrestbundle и достаточно будет добавить просто эти 5 эндпоинтов в роуты?

Достаточно добавить.
Ответы: >>1274240
Аноним 2018/10/02 12:41:20  №1273389 275
>>1255400

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

Проще всего на компьютере в конфиге сервера поставить привязку (bind) к адресу 0.0.0.0 - это значит "слушать на всех сетевых интерфейсах" (там может стоять 127.0.0.1 - слушать только на loopback-интерфейсе, к которому нельзя подключиться снаружи). После этого посмотреть IP компьютера и зайти на него с телефона (http://192.168.x.y/).

>>1253706

> Добрый вечер, такой вопрос по системам очередей (MQ). К примеру у меня есть определенные данные которые мне в любом случае надо обработать и ни в коем случае нельзя их потерять. На данный момент я вижу, что MQ тут реально был бы кстати, но встает следующий вопрос - нормальный ли подход если я организую работу в следующем ключе:
> 1. Создаем задачу с данными
> 2. Первый Consumer создает запись в БД и Продюсит следующую задачу с обработкой
> 3. Второй Consumer обрабатывает данные и Продюсит следующую задачу
> 4. Третий Consumer получает обработанные данные и создает ещё одну задачу
> 5. Четвертый Consumer делает реквест с отправкой данных конечному адресату

> Или можно как-то по другому всё сделать? Нельзя чтобы на каком нибудь из этапов потерялись данные.
> Ещё думаю над таким вариантом
> 1. Получаем данные и создаем тут же запись в БД (молимся чтобы БД была доступна, сеть работала и запись создалась успешно), тут же создаем задачу в RabbitMQ
> 2. Первый Consumer Обрабатывает данные и продюсит следующую задачу
> 3. Получаем данные вторым Consumer, обновляем БД (снова молимся) и отправляем данные конечному получателю

> ОП и другие небезразличные помогайте

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

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

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

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

Что касается надежности, надо смотреть на конкретную очередь - некоторые предоставляют гарантии сохранности данных.
Аноним 2018/10/02 12:41:42  №1273391 276
>>1248514

> http://sandbox.onlinephpfunctions.com/code/13dd69c45baf6239448f6cf4f104365e29663936
> Привет, ОП!
> Я правильно решил эту мини-задачку из ООПа?

Да, все верно.

>>1244359

>> addEmployee(Employee $e)
> ОП, извини, что вопросов много задают тупых, но никак не могу вкурить, что ты имел ввиду под этим.

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

>>1238140

> https://ideone.com/Ws1AAk
> Оцените решение

> $dep <= 1000000;
Вообще, тут должно быть <, а не <=, в остальном верно.
Аноним 2018/10/02 12:42:11  №1273392 277
>>1238138

Задача про группировку слов по первой букве
> https://ideone.com/FgM9lY

> lcfirst($word[0]);
Это будет работать только для латиницы, для кириллицы нет: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

Также, у тебя там много вложенных циклов. Это все можно сделать одним циклом:

список = [];

перебираем слова {
берем первую букву;
добавляем слово в массив список[буква];
}

Ну и варнинги надо исправить:

> PHP Notice: Undefined variable: combined in /home/Y1BEf2/prog.php on line 17
> PHP Warning: in_array() expects parameter 2 to be array, null given in /home/Y1BEf2/prog.php on line 17

>>1237587

> Опчик, проверь пожалуйста задачу про ООО Вектор
> https://ideone.com/slxeeN


> public function setRank($rank){
> switch ($rank){
> case 1:
> $this->rank = 1;
Это не удачная идея, что ты в поле rank вместо ранга сохранешь не сам ранг, а множитель. Ну представь, тебе надо будет повысить ранг работнику на один. Как ты это сделаешь?

> public function setSalary($baseSalary){
Лучше было назвать setBaseSalary(), чтобы не путать базовую ставку и итоговую зарплату.

> class Manager extends Employee{
> protected $coffeeConsumption = 20;
У тебя наследник Employee должен определить зарплату, кофе итд. Но это никак не документировано и не проверяется. Лучше использовать абстрактные методы, чтобы решить эту проблему:

abstract function getBaseSalary();

В остальном верно.

Ждем версию с антикризисными мерами.
Аноним 2018/10/02 13:20:45  №1273430 278
>>1273289

Вообще, там была идея сделать объекты без классов, на прототипах. Вот тут вот https://medium.com/@benastontweet/lesson-1a-the-history-of-javascript-8c1ce3bffb17 пишут, что автор вдохновлялся языками Java, Scheme и Self (можешь почитать про последние 2 для расширения кругозора).

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

Класс с полями и методами из традиционного ООП в прототипном заменен на базовый объект с методами. Операции наследования классов и создания объекта класса в прототипном ООП заменены на одну операцию создания нового объекта.

То есть мы создаем "базовый" объект такого вида:

var basePerson = {
setSalary: function (s) { this.salary = s; },
getSalary: function() { return this.salary; },
getName: function() { return this.name; }
};

А затем от него создаем (наследуем) уже конкретные объекты:

var ivan = Object.create(basePerson, { name: "Ivan", salary: 100 });
var peter = Object.create(basePerson, { name: "Peter", salary: 200 });
console.log(peter.getName());

Object.create() создает новый объект с указанным прототипом и свойствами.

Для удобства, можно добавить функцию-конструктор для создания объектов:

functon newPerson(name, salary) {
return Object.create(basePerson, { name: name, salary: salary });
}

var sidor = newPerson('Sidor', 300);

Как видишь, это похоже на традиционный ООП, где классы сделаны в виде объектов.

Наследование базовых объектов делается аналогично созданию:

var baseManager = Object.create(basePerson, {
getSubordinates: function () { ... },
setSubordinates: function () { ... }
});

var fedor = Object.create(baseManager, { ... });

Правда, в первоначальных версиях ES3 почему-то не сделали Object.create(), а заставили создавать объекты только через конструкторы:

// Код, что и выше, но в версии для ES3
function Person(name, salary) {
this.name = name;
this.salary = salary;
}

Person.prototype = basePerson;
var sidor = new Person('Sidor', 300);

Из-за отсутствия Object.create() наследование базовых объектов в ES3 делается очень коряво и я не рискну написать его по памяти.

В таком подходе есть и плюсы - например, здесь базовый объект можно передавать в функцию (в PHP класс нельзя передать или сохранить в переменную, только имя класса). В некоторых ООП-языках, впрочем, для классов есть представляющие их объекты:

- в Яве: https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
- в Руби: https://ruby-doc.org/core-2.5.1/Class.html

Ну и в общем прототипный ООП как-то не очень нашел поддержку и люди начали писать библиотеки для имитации традиционного ООП на классах. А в ES6 завезли синтаксис для описания классов, правда самих классов фактически по прежнему нет.
Ответы: >>1273495
Аноним 2018/10/02 15:29:51  №1273495 279
>>1273430
Вывод один - надо забивать на глубокое изучение JS и учить jquery.
Ответы: >>1273613
Аноним 2018/10/02 18:51:13  №1273600 280
Я тут единственный такой успешный могу проходить задания из оп поста по 5+ часов?
Аноним 2018/10/02 19:09:48  №1273613 281
>>1273289>>1273495

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

Так. Короче только объекты.
Все объекты делятся на callable и non-callable. Callable это функции, в понимании большинства. Но по факту это все те же объекты, со всеми свойствами что и у других.

Все объекты могут принимать всего несколько типов сообщений - get, set и call. При чем call может принимать только callable объект. при попытке послать call сообщение не-callable объекту будет исключение.

Сообщение get содержит один параметр, сообщение set два. Сообщение call параметром содержит кортеж аргументов, а так контекст this.

Если в объекте (а так же в цепочке прототипов) не назначены слушатели для get и set с определенными параметрами, ищутся слоты с такими именами в объекте и по цепочке. Если находится возвращается то, что в них лежит. Если в них лежит callable объект и ему посылают сообщние call сразу как получили его из слота, то у него будет перегружен контекст (this) на объект из чьего слота его получили. Если только этот объект не был сконструирован стрелочным синтаксисом, иначе контекст перегрузить нельзя. Если после получение callable объекта из слота его сразу не вызвать, а например положить ссылку на него в переменную, то контекст будет сброшен на тот, который был установлен у него в момент его создания (и это не обязательно будет тот же объект из чьего слота его получили).

У callable объектов есть scope (область видимости) и контекст (this) в момент посылки им сообщения call (вызова). scope средствами языка перегрузить нельзя (на самом деле частично можно изъебнуться с помощью eval), но некоторые окружения позволяют (например в ноде есть модеуль vm), this перегружается у callable объектов сконструированных не-стрелочным синтаксисом

Классов нет. Есть конструкторы. Любой конструктор принимает новый созданный объект, которому выставлен определенный прототип (другой объект). Оператор instanceof (someObject instanceof SomeClassName) проверяет лишь есть ли в цепочке прототипов у someObject объект который лежит у SomeClassConstructor в слоте с именем prototype. На сам конструктор ему поебать. Чтобы сменить класс, достаточно сменить цепочку прототипов. Даже если объект был сконструированным определенным конструктором.

Так же у объектов есть параметр ограничения доступа, контролирующие его расширяемость или изменяемость (sealed, extensible, frozen). У слотов объекта есть параметры configurable, enumerable, writable. Параметры слотов объекта не влияют на объекты, что в них лежат. Они лишь контролируют доступ к самим слотам.

Все. Никаких классов. Никаких интерфейсов. Как отдельных сущностей. По факту все есть объект и все строит из них.
наследование реализуется выстраиванием цепочки прототипов. Инкапсуляция только на уровне scope'в (читай замыканий).
В остальном все меняется и все динамично, если только специально все не зафризить в момент конструирования. Но обычно этим никто не заморачивается по причине оверхеда и бессмысленности. Разве только фанатики по иммутабельности, н это все из разряда те, кому надо чтобы им по рукам бил компилятор\рантайм\дядя петя. Все "привычные" понятия тянуться в язык для еще более простого вкатывания тех, кто приходит из других языков. Так уж сложилось, что есть куча литературы по привычному, статически классовому ООП, но очень мало по мессадж-пассинг\прототайп-базед\мета-программинг. Все эти притянутые понятия выливают в синтаксический сахар, который не делает ничего полезного, а даже наоборот, еще больше вносит путаницы и от того непонимамания многих вещей в языке. При этом часто этот синтаксический сахар дэже урезан и вспомнинают об этом лишь после (как например проебались с полями в конструкции class и тянут ее теперь только в proposol'ах будущих версий).

JS истинно объектный язык. В современный язык притащили много вкусных вещей для метапрограммирования. Нову примитивную сущность Symbol, и Proxy-объекты. С помощью которых можно еще больше и сильнее перегружать и менять поведение в динамике.

Другое дело, что почти никто не умеет этим пользоваться и не понимает, что такое объектное программирование на самом деле.
Им нужно не объектное, а статически типизированное. А какие именно структуры будут скрываться за этими типами, не собо важно. Важно что это просто структуры и функции, строго привязанные к ним, или иногда менее строго. То, что в Java\C++ это больше структурное программирование, нежели объектное. Объектное программирование не может существовать без динамической среды. Это противоречит самому понятию объекта. А динамическое программирование это слишком сложна и непанятна. И как бы не старались с пеной у рта фанатики кричать про низкий порог входа - низкий он именно что для входа, а не для всего остального. Модификация программ в рантайме всегда было уделом креативно мыслящих людей. Для большинства это слишком сложный уровень высокой абстракции.
Ответы: >>1273629 >>1273635
Аноним 2018/10/02 19:34:31  №1273629 282
>>1273613

Примитив это все же не объект. Простой пример:

var a = 6;
a.x = 1;
console.log(a.x); // undefined
Ответы: >>1273639
Аноним 2018/10/02 19:41:22  №1273635 283
>>1273613
ты охуенен. Посоветуй литературу для развития или сайты. Да чего угодно. Не доку по жс или реакту, а вообще что-то типо шаблонов и современном программировании, подходов к разработке и т.д. что "сложна и непанятна".

>Модификация программ в рантайме всегда было уделом креативно мыслящих людей. Для большинства это слишком сложный уровень высокой абстракции.
Аноним 2018/10/02 19:53:18  №1273639 284
image.png (28, 485x294)
294x485
image.png (136, 778x590)
590x778
>>1273629

Читай внимательнее
> их можно тоже рассматривать в качестве синглтон объектов

И во-первых - пик 1.
Во-вторых - пик 2.

Ответы: >>1273677
Аноним 2018/10/02 22:12:09  №1273677 285
>>1273639
Нифига себе волшебство.
Аноним 2018/10/03 06:22:16  №1273750 286
ЖС за одно только динамическое типизирование надо запретить.
Ответы: >>1273758 >>1273767 >>1274021
Аноним 2018/10/03 06:36:13  №1273758 287
>>1273750
Пиши на тупскрипте, никто не запрещает.
Аноним 2018/10/03 06:47:18  №1273767 288
>>1273750
>динамическое типизирование
php, python, lua, perl - тоже запретить?
Может еще беспартийных расстреливать?
Ответы: >>1273967
Аноним 2018/10/03 07:42:10  №1273815 289
ОП, задачку про файлообменник можно с Лярваелем сделать?
Ответы: >>1273876
Аноним 2018/10/03 09:43:44  №1273876 290
>>1273815

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

Ну ты попробуй, давай посмотрим, что получится.
Ответы: >>1273886 >>1273961
Аноним 2018/10/03 09:57:01  №1273886 291
>>1273876
Еще вопрос, какой лучше делать максимальный размер файла, и хранить ли его вечно или какой-то срок?
Ответы: >>1273898
Аноним 2018/10/03 10:25:56  №1273898 292
>>1273886

На твое усмотрение. 100 Мб, например.
Аноним 2018/10/03 11:14:13  №1273922 293
ОП, ты вроде забегал сюда. Не забыл про мои опечаточники?
>>1272269
Аноним 2018/10/03 12:51:38  №1273961 294
>>1273876
Вообще, ты прав. Как-то слишком все просто выйдет через Ларавел.
Аноним 2018/10/03 13:16:14  №1273967 295
>>1273767
вот кстате петон можно запретить
Ответы: >>1274021
Аноним 2018/10/03 15:08:49  №1274021 296
>>1273750
>>1273967
В тот момент, когда вы перестаете хотеть что-то запрещать, ненавидеть и плеваться желчью по отношению к тому, что не смогли осилить. Вот тогда вы, достигнув сатори, становитесь программистами.

Другое дело, что с большинством из вас этого так никогда и не случается.
Аноним 2018/10/03 17:59:49  №1274125 297
Господа, поясните следующее:
$a = '\x61';
$b = "\x61"

Если сделать var_dump, в первом случае выведется, как есть. Во втором случае выведется "a".

Что это за кодировка?
Как работают двойные кавычки по декодингу таких сущностей?
И как в php раскодировать переменную $a, чтобы в дампе было тоже "a"?
Ответы: >>1274128
Аноним 2018/10/03 18:07:02  №1274128 298
Ответы: >>1274131
Аноним 2018/10/03 18:12:20  №1274131 299
>>1274128
Так, символ в шестнадцатеричной системе, понял. Значит двойные кавычки такую последовательность сами конвертируют. А как все-таки быть и одинарными кавычками?
Ответы: >>1274133
Аноним 2018/10/03 18:16:26  №1274133 300
>>1274131
А никак, в одинарных кавычках ничего не сконвертируется. Баш напоминает. И вообще я мимокрокодил.
Ответы: >>1274143
Аноним 2018/10/03 18:22:53  №1274143 301
>>1274133
Блин, как же быть?
Мне один сервис отдает данные в виде такой строки: '\x61\x61\x61'
И мне ее надо у себя на сайте сконвертировать в читаемые символы.
Ответы: >>1274148
Аноним 2018/10/03 18:24:34  №1274144 302
Аноним 2018/10/03 18:35:36  №1274148 303
>>1274143

Ты, к сожалению, плохо прочел мануал.

Экранирующие последовательности работают только если ты пишешь их прямо в коде:

$a = "\x41";

Здесь при разборе строки PHP заменит \x41 на A и сохранит в память строку "A" (без кавычек). То есть экранирующие посл-ти работают только в строках в коде на этапе разбора программы. В ходе работы программы строки хранятся в памяти уже в преобразованном виде и обработка бекслешей не производится.

То есть эти последовательности нужны только для записи в коде символов, которые нельзя набрать на клавиатуре, вроде \n.

Если во время выполнения программы у тебя в переменной хранится строка вида "\x..." то с ней ничего делаться не будет.

Однако, есть функции как stripslashes и stripcslashes. Почитай про них.
Ответы: >>1274151
Аноним 2018/10/03 18:39:36  №1274151 304
>>1274148
Анон, ты наверное не понял.
Вот есть у меня переменная $a:
$a = '\x41';

Во время работы скрипта, в переменной будет именно строка из символов '\x41' без всяких преобразований.
Так вот, как мне дальше в скрипте значение переменной $a преобразовать в символ A?
Ответы: >>1274178 >>1274195
Аноним 2018/10/03 19:28:56  №1274178 305
>>1274151
>Так вот, как мне дальше в скрипте значение переменной $a преобразовать в символ A?
в двойные кавычки ебани echo "\x41";

мимикрокодил
Ответы: >>1274181
Аноним 2018/10/03 19:31:52  №1274181 306
>>1274178
ууу, как же сложно-то.

$a = '\x41';
$b = pseudo_convert($a);
echo $b; // A

вот так возможно сделать какой-либо функцией?
Ответы: >>1274187 >>1274190
Аноним 2018/10/03 19:38:08  №1274187 307
>>1274181
mb_convert_encoding("\x41", 'UTF-8');
Ответы: >>1274189
Аноним 2018/10/03 19:39:49  №1274189 308
>>1274187
Энкодинг бесполезен. На моменте интерпретации строки в двойных кавычках, уже будет получен символ А.
Ответы: >>1274196
Аноним 2018/10/03 19:39:52  №1274190 309
>>1274181
А вот так проверять кодировку
echo mb_detect_encoding("x41");
Аноним 2018/10/03 19:48:10  №1274195 310
>>1274151

Ты мой пост невнимательно прочел.

Ответы: >>1274204
Аноним 2018/10/03 19:48:16  №1274196 311
Ответы: >>1274199
Аноним 2018/10/03 19:52:50  №1274199 312
>>1274196
Наконец-то решение.
Только вот так будет правильно: echo pack("H*", '41');
Как же быть со строкой '\x41\x41\x41\x41'?
preg_match'ем искать цифры, потом их прогонять через pack и склеивать?
Ответы: >>1274201
Аноним 2018/10/03 19:53:40  №1274200 313
Поясните, почему в шапке говорится про symphony? Остальные фреймворки совсем говно чтоли? Как на счет Laravel?
Ответы: >>1274205
Аноним 2018/10/03 19:54:35  №1274201 314
>>1274199
>preg_match'ем искать цифры, потом их прогонять через pack и склеивать?
Да))

Когда приходить такое - это пиздец.
Если это приходит с какого-то сервера то значит сериализация запорота
Аноним 2018/10/03 19:57:33  №1274204 315
>>1274195
спасибо, анон
stripcslashes('\x41\x41');
работает, как нужно
Аноним 2018/10/03 19:58:35  №1274205 316
>>1274200
>symphony
symfony

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


Сам пробовал и то и это.
Говнокод есть и там и там, но ларавельщики вообще тупые нахуй какие-то.




Аноним 2018/10/03 23:40:09  №1274237 317
Спрашивают ли алгоритмы и структуры данных на собеседованиях?
Ответы: >>1274239 >>1274272 >>1274273
Аноним 2018/10/03 23:43:13  №1274239 318
>>1274237
>алгоритмы и структуры данных
Любое нормальное тех. собеседования и этого и начинается. Это основа, дебил. Если ты, чмо тупое, не знал об этом, то не теряй время, а читай учебники и решай задачи. Через годик освоишь.
Аноним 2018/10/03 23:46:20  №1274240 319
Аноним 2018/10/04 05:39:29  №1274272 320
>>1274237
На веб-макакия? Нет, в основном.
Аноним 2018/10/04 05:43:31  №1274273 321
>>1274237
Бывает, элементарщину спрашивают.
Пару раз было просили что то реализовать, но они ебанатами были полными.
Пыхеру редко когда это все надо, особенно крудошлепам уоторые магазины по продаже бисера пишут.

А вот про стандатные структуры типа \SplQueue, часто спрашивают.
Так что если сможешь объяснить что это и нахуя нужно, то нехило так блеснешь знаниями
Ответы: >>1274437
Аноним 2018/10/04 06:30:44  №1274288 322
Указал в hosts : 127.0.0.1 megafun
Указал в конфиге апача :
LoadModule rewrite_module modules/mod_rewrite.so
<Directory "${SRVROOT}/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<VirtualHost *:8080>
DocumentRoot "${SRVROOT}/htdocs/megafun/public"
ServerName megafun
</VirtualHost>

Перезапустил апач.
А теперь вопрос, почему это нихуя не работает?
Ответы: >>1274298 >>1274316
Аноним 2018/10/04 06:49:48  №1274298 323
>>1274288
> почему это нихуя не работает
А мы почем знаем?
Аноним 2018/10/04 07:16:40  №1274316 324
>>1274288

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

В hosts имя домена прописал? Если нет, то почему? Если не прописал, то подумай, что делает браузер при вводе адреса сайта.

Если прописал, то что получается при попытке открыть сайт? Что в логе ошибок Апача?
Ответы: >>1274323
Аноним 2018/10/04 07:27:53  №1274323 325
>>1274316
>Ты не написал, что ты делаешь и что происходит, в чем именно ошибка.
Это называется недосып, совсем крыша поехала.
А проблему я уже решил.
Аноним 2018/10/04 11:07:55  №1274437 326
>>1274273
Спасибо. Элементарщина, это типа найти сложность алгоритма и что это вообще такое, чем отличается сортировка слиянием и пузырьком с точки зрения времени выполнения, ну и всё в этом духе?
Ответы: >>1274542
Аноним 2018/10/04 11:12:43  №1274444 327
Какие характеристики ноута посоветуете для веб-разработки? Вкатывальщик, ничего сложного ануса разрабатывать скорее не дадут.
Ответы: >>1274471 >>1274477 >>1275111
Аноним 2018/10/04 11:30:50  №1274471 328
>>1274444
Все на чем можно набирать текст в текстовый редактор подойдет.
Если денег не жалко, то 13 + дюймов на базе интела от 8gb оперативки, ssd 128gb+ и батарея поживучей (тут главное не купить "планшет в корпусе ноутбука"). Среди моих знакомых сейчас в тренде синкпады, т.к. последние Макбуки Про пугают все постоянными косяками с клавиатурой.
Ответы: >>1275091
Аноним 2018/10/04 11:34:47  №1274477 329
>>1274444
ThinkPad, если хочешь быть модным.
Ответы: >>1275091
Аноним 2018/10/04 12:22:29  №1274524 330
Круто, внезапно, вообще перестали сss-ки работать, даже если я положу их в одну папку с шаблонами.
Аноним 2018/10/04 12:44:24  №1274542 331
>>1274437
>Элементарщина, это типа найти сложность алгоритма и что это вообще такое, чем отличается сортировка слиянием и пузырьком с точки зрения времени выполнения, ну и всё в этом духе?

Просто, какие знаешь, чем отличаются
Аноним 2018/10/04 14:33:01  №1274617 332
Pure или бутстрап? Оба выглядят отвратительно, но, вроде как, pure настраивать легче, или нет?
Ответы: >>1274626
Аноним 2018/10/04 14:56:53  №1274626 333
Ответы: >>1274632
Аноним 2018/10/04 15:06:43  №1274632 334
cotol.jpg (70, 410x283)
283x410
Ответы: >>1274775
Аноним 2018/10/04 18:03:15  №1274775 335
react21.jpg (309, 1024x576)
576x1024
someApprentice 2018/10/04 19:21:12  №1274823 336
somebae.jpg (115, 808x1024)
1024x808
У нас, на сайте phpclub.tech, есть задача, с которой справился бы любой новичок.

https://github.com/richBlueElephant/phpClub/issues/90

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

https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B2%D0%B8%D0%B3%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%86%D0%B5%D0%BF%D0%BE%D1%87%D0%BA%D0%B0

Необходимые знания:
-Умение пользоваться Composer'ом, чтобы развернуть проект у себя на локальной машине.
-Минимальное знание ООП, чтобы написать простой класс.
-Минимальное знание git.

Чему вы можете научится выполняя эту задачу:
-Разворачивать рабочий "боевой" проект, на своей локальной машине.
-Применять свои знания на, опять же, боевом проекте.
-Делать Pull Request'ы, которые просто необходимо уметь.


Чувствуйте себя свободно задавать если есть какие-то вопросы.
Ответы: >>1274975 >>1275157
Аноним 2018/10/05 08:26:54  №1274975 337
>>1274823
А вы работаете пацаны, программистами? Специально учились или благодаря треду?
Ответы: >>1275147
Аноним 2018/10/05 09:28:54  №1275022 338
Надо переставать писать enctype="multipart/formdata", постоянно дефис забываю, а потом полтора часа голову ломаю, почему $_FILES пустой.
Аноним 2018/10/05 09:29:40  №1275024 339
Аноны, сайт phpclub.tech, который упомянут выше - это "официальный" архив тредов клуба PHP. В нем, например, можно найти комментарии по разным задачам.

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

Если, например, вы сейчас готовитесь делать задачу про студентов, или делаете, то у вас знаний вполне достаточно.
Ответы: >>1275152
Аноним 2018/10/05 10:23:18  №1275055 340
FILTER_SANITIZE_SPECIAL_CHARS пойдет для фильтрации имен загружаемых файлов?
Аноним 2018/10/05 11:07:14  №1275091 341
>>1274471
>>1274477

Ноутбук Lenovo ThinkPad L380 Clam 13" 1366x768, Intel Core i3 8130U 2.2GHz, 4Gb RAM, 128Gb SSD, WiFi, BT, Cam, DOS, черный (20M5003QRT)

Как такое? Какие пеки у вас?
Ответы: >>1275117
Аноним 2018/10/05 11:34:46  №1275111 342
>>1274444

Проверь, нет ли в нем неприятных ограничений. Например, я сталкивался с ноутом, где стояло ограничение на 4 Гб памяти (больше нельзя поставить).
Ответы: >>1275130
Аноним 2018/10/05 11:38:18  №1275117 343
>>1275091
>1366x768
Я б нистал меньше 1080p. В /hw/ есть тред синкпадо-анонов, есть смысл с ними проконсультироваться для твоего бюджета. Может можно L380 дешево проапгрейдить.
Ответы: >>1275130
Аноним 2018/10/05 11:52:36  №1275130 344
someApprentice 2018/10/05 12:29:35  №1275147 345
>>1274975
Да-да, работаем и все благодаря этому треду.
someApprentice 2018/10/05 12:35:01  №1275152 346
>>1275024
>ну ок, если вы начинающий, то совсем быстро разобраться не получится
А вот не нужно пугать начинающих! Всё получится если иметь желание и энтузиазм разобраться. Главное начать и, если что-то непонятно, задать правильный вопрос.
Аноним 2018/10/05 12:41:20  №1275157 347
>>1274823
Вкачусь в воскресенье, если никто не опередит.
Ответы: >>1275181
someApprentice 2018/10/05 13:49:55  №1275181 348
>>1275157
Уже опередили.

Но ничего страшного! Ты всё равно можешь взяться с какое-нибудь другое issue и добавиться к нам в конфу в слаке ( https://join.slack.com/t/phpclub-group/shared_invite/enQtMzA2MjcyMTAwNjc5LTNlZTI3ZjE5MTgyZWVhZjc3MmMyMzlhZGJmYTg0ODQ3YjAzYWRmMGNjZmJhYjdlMWFhZjg5MzNhNWE1YzdmNjc ).

К примеру, у нас есть такая же супер простая задача для рефактиринга валидации https://github.com/richBlueElephant/phpClub/issues/10
Если ты делаешь "Студентов" или уже сделал, то знаний вполне хватит чтобы с ней справиться.


Чувствую себя свободно задавать любые вопросы.
Аноним 2018/10/05 22:36:54  №1275401 349
>>1268753 (OP)
Здравствуйте, господа. Пишет вам java-собрат. Пару дней назад получил от знакомого заказ на wordpress интернет магазин, вполне стандартный, с онлайн конрзиной, оплатой и избранным. Локация ДС

Никогда не занимался таким, но сложно не должно быть. Сколько ценник ломить?
Аноним 2018/10/06 07:36:17  №1275449 350
Как лучше хранить дефолтные настройки для пользователей, что бы их мог менять администратор? Сделать в базе дефолтного пользователя и грузить его каждый раз до вызова всей логики? Держать в json файле?
Как белые люди делают?
Ответы: >>1275451
Аноним 2018/10/06 07:39:04  №1275451 351
>>1275449
>Как белые люди делают?
В инишниках хранят.
Аноним 2018/10/06 09:20:38  №1275483 352
>>1268753 (OP)
Подскажите, вот у ОПа в задаче про список студентов предлагается каждого студента делать объектом, но зачем это мне?
В любом случае обработка действия это обращение к БД->получение данных->формирование таблицы, зачем мне добавлять еще шаг ->загнать данные в объекты-> перед формированием таблицы?
Аноним 2018/10/06 12:00:59  №1275545 353
>>1275483
И вообще, мускль неплохо так и в командную строку выводит в виде таблицы, может мне просто скриншот отдавать, и обращений к БД не надо никаких, профит.
Ответы: >>1275570
Аноним 2018/10/06 12:02:09  №1275547 354
Хотел отдохнуть сегодня от написания задачки, но слишком уж хочется коммитить. Как это лечить?
Ответы: >>1275563
Аноним 2018/10/06 12:43:41  №1275563 355
>>1275547
Прописываю Вам регулярный просмотре аниме 2 раза в сутки, утром и вечером.
Аноним 2018/10/06 12:55:51  №1275570 356
>>1275545
Спасибо, охуенно объяснил. Пошел ты нахуй
Аноним 2018/10/06 13:02:03  №1275572 357
Ну что анонсы. Есть ли смысл дропать питон и дрочить пхп? А то деньги на жрат ощена нужны. Говорят у вас тут с этим все в порядке.
Аноним 2018/10/06 13:21:41  №1275578 358
>>1275483
А я люблю обмазываться объектами когда делаю студентов. Каждый день я хожу по земле с черным блокнотом и собераю в него все сущности которые могу придумать. На два полных блокнота целый день уходит. Зато, когда после тяжёлого дня я прихожу домой, сажусь за пеку, включаю любимую IDE…ммм и сваливаю в нее свое сокровище. И набираю, представляя, что меня поглотил единый организм Object. Мне вообще кажется, что объекты, умеют думать, у них есть свои семьи, города, чувства, не прекращайте плодить сущности, лучше приютите у себя, говорите с ними, ласкайте их…. А вчера в ванной, мне преснился чудный сон, как будто я нырнул в море, и оно прератилось в интерфейс, рыбы, водоросли, медузы, все в виде объектов, даже небо, даже Аллах!.
Ответы: >>1275586
Аноним 2018/10/06 13:35:33  №1275586 359
Аноним 2018/10/06 14:28:55  №1275620 360
image.png (80, 640x870)
870x640
>>1275483
Вот такая поебень, зачем?
Аноним 2018/10/06 14:42:29  №1275625 361
>>1275483

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

Но давай я отвечу вопросом на вопрос и спрошу: а какие плюсы/минусы есть у представления студента в виде массива или в виде объекта?

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

function f1(array $student) { ... }

function f2(Student $student) { ... }

В какой функции будет проще разобраться?

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

Соответственно, исходя из плюсов/минусов мы и выбираем нужный вариант.
Ответы: >>1275630 >>1275633
Аноним 2018/10/06 14:51:04  №1275630 362
>>1275625
Вопрос по ООП-Будильнику.

Как лучше реализовать изменение параметров Alarm, через AlarmClock?
В каких случаях стоит использовать выбрасывание исключений?
Ответы: >>1275631 >>1275641
Аноним 2018/10/06 14:51:21  №1275631 363
Аноним 2018/10/06 15:01:43  №1275633 364
Аноним 2018/10/06 15:09:45  №1275639 365
Попытался сделать счетчик посещений на печеньках.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<?php
if (!$_COOKIE["NumVisited"]) {
setcookie("NumVisited", 1, time() + 1800);
} else {
$_COOKIE["NumVisited"]++;
}
var_dump ($_COOKIE["NumVisited"]);
?>
</body>
</html>

Вылезает Warning: Cannot modify header information - headers already sent by (output started at C:\блаблабла.php) in C:\блаблабла.php on line 16

Что с этим делать? В гугле какой-то пиздеж про запятые и про header(), но ничего все равно не работает.
Ответы: >>1275643 >>1277132
Аноним 2018/10/06 15:12:47  №1275641 366
>>1275630

Это зависит от того, как ты реализуешь архитектуру.

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

Желательно проектировать АПИ (набор методов для управления будильником) так, чтобы они были удобными в использовании, логичными (не требовали лишних аргументов), защищали от ошибок.

Исключение выбрасывается, если функции переданы некорректные данные (например: время 25 часов 99 минут) или она из-за непредвиденных обстоятельств не может выполнить свою работу. Урок: https://github.com/codedokode/pasta/blob/master/php/exceptions.md
Аноним 2018/10/06 15:15:02  №1275643 367
>>1275639

Во-первых, если ты не слышал про HTTP, то прочитай что-нибудь про него, без этого никак, например, тут: https://github.com/codedokode/pasta/blob/master/network/http.md

Во-вторых, а как по-твоему работает функция setcookie? Она, очевидно, добавляет в HTTP-ответ HTTP заголовок. Но HTTP заголовки в HTTP-ответе должны идти до тела ответа, а вывод HTML кода начинает отдачу тела ответа.
Ответы: >>1275649
Аноним 2018/10/06 15:28:31  №1275649 368
Аноним 2018/10/06 17:53:54  №1275694 369
Пытаюсь учиться по гайду из Оп-поста, немного застрял на игре в кубики, по 2 броска которая. Как логически реализовать я понял, а вот код не хочет работать. Уже трижды сам находил свои ошибки и поправил их, но где-то все равно остались косяки, помогите найти, пожалуйста.
https://ideone.com/kLyMgg
Ответы: >>1275697
Аноним 2018/10/06 17:59:43  №1275697 370
>>1275694
Я идиот, простите. В строке
>if (($anonDice1 == $anonDice2) && ($compDice1 == $compDice2)) {
забыл закрыть вторую скобку. Теперь все работает
Ответы: >>1275900
Аноним 2018/10/07 10:12:16  №1275897 371
Есть ли способ получить инфу о медифайле помимо отвратного getID3?
Аноним 2018/10/07 10:15:45  №1275900 372
>>1275697
Зачем тебе вообще скобки в этом выражении?
Аноним 2018/10/07 13:58:18  №1276045 373
Screenshot6-4.jpg (66, 815x475)
475x815
Палиндром
jdoodle.com/a/HQs
Новый айПад
jdoodle.com/a/HQJ
Стих
jdoodle.com/a/H4L
Аноним 2018/10/07 14:17:33  №1276066 374
metadata.png (162, 1911x640)
640x1911
Сколько же дерьма в этой вашей медии.
Аноним 2018/10/07 16:12:16  №1276140 375
Я так понимаю, в разделе "Регулярные выражения" в задаче про телефонные номера ОДНО регулярное выражение должно покрыть ВСЕ "правильные" варианты введения номера, верно?
Ответы: >>1276189
Аноним 2018/10/07 18:45:16  №1276189 376
Аноним 2018/10/07 18:52:42  №1276194 377
>>1268917
>jdoodle.com/a/G3e
это не кодерский подход. А если тебе скажут группировать по сочетанию первых двух букв? Будешь уже 32x32 ифов писать?

Этот сайт не дает сохранять без регистрации, так что только скрин.
Ответы: >>1282267
Аноним 2018/10/08 11:39:21  №1276398 378
Как же крыша едет от этого, есть параметры:
$haystack = 'name';
$needle = '9763215619';
есть выражения:
$stmt = $this -> mysqli -> prepare("SELECT FROM table WHERE ? LIKE ? ORDER BY file_id DESC");
$stmt -> bind_param('ss', $haystack, $needle);

Когда делаю execute выдает ноль рузультатов, а если просто делаю:
$stmt = $this -> mysqli -> prepare("SELECT
FROM table WHERE name LIKE '9763215619' ORDER BY file_id DESC");

все работает. В чем может быть проблема?
Ответы: >>1276407 >>1276417
Аноним 2018/10/08 12:05:26  №1276407 379
>>1276398
Нельзя биндить названия колонок, таблиц, баз e.t.c.
Ответы: >>1276408
Аноним 2018/10/08 12:07:32  №1276408 380
Ответы: >>1276418
Аноним 2018/10/08 12:40:52  №1276417 381
>>1276398

Ты хотел сделать WHERE name LIKE '1234'

А получилось WHERE 'name' LIKE '1234'

То есть сравнение строки со строкой.

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

$allowed = ['name', 'age'];
if (!in_array($field, $allowed)) {
throw new \Exception(...);
}

...prepare("... WHERE `$field` LIKE ? ... ");

Ответы: >>1276422
Аноним 2018/10/08 12:46:33  №1276418 382
>>1276408
Нет, это нормально. Ты можешь подставить сам:

$query = "select * from table where {$name} like ?";

Но если ты берешь это из инпута, то обязан проверить. Например сперва прогнать через белый список.
Аноним 2018/10/08 12:48:00  №1276422 383
>>1276417
Как. Здравствуйте, товарищъ Хайвмайнд.
Аноним 2018/10/08 15:58:55  №1276509 384
Блин какая же сложная задача про числа прописью.
Аноним 2018/10/08 16:38:14  №1276523 385
upload.png (13, 502x303)
303x502
Хватит столько инфы о файле для обменника?
Ответы: >>1276564
Аноним 2018/10/08 16:42:48  №1276525 386
Это снова чувак, который задавал вопрос про регулярные выражения. Я покрыл все "правильные" строки, но что с неправильными? Они не должны парситься/должны парситься по особому? Если что вот говнорегулярка, но я её обязательно поправлю:
/ ?([+] ?7 ?-?| ?8) ?-? ?[(]? ?[0-9]?[0-9] ?-?[0-9] ?-?[0-9] ?-? ?[)]? ?-? ?[0-9] ?-? ?[0-9] ?-? ?[0-9] ?-? ?[0-9] ?-? ?[0-9] ?-? ?[0-9] ?-? ?[0-9]?/
Ответы: >>1276563 >>1276575
Аноним 2018/10/08 17:36:22  №1276550 387
Сколько же танцев с бубном пришлось исполнить из-за того, что массивы при использовании json_encode теряют порядок.
Ответы: >>1276567
Аноним 2018/10/08 18:00:10  №1276563 388
>>1276525
Переделывай, это пиздец
Ответы: >>1276569
Аноним 2018/10/08 18:00:45  №1276564 389
>>1276523

Хорошо, только для битрейта стоит указать единицы измерения (я думаю, bit/s).

Аноним 2018/10/08 18:02:19  №1276567 390
>>1276550

В яваскрипте словари ({ a: 1, b:2}) не сохраняют порядок элементов. Они лишь используются для сопоставления ключей и значений. Массивы сохраняют порядок, но в них ключи числовые и идут по порядку.

А в PHP массивы сохраняют порядок и объединяют в себе функционал массивов и словарей из JS.
Ответы: >>1276571
Аноним 2018/10/08 18:03:50  №1276569 391
>>1276563

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

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

Допустим, у нас есть выражение для "одной буквы": [a-z]. Чтобы записать "от 2 до 5 букв", можно использовать фигурные скобки: [a-z]{2,5}.
Аноним 2018/10/08 18:11:22  №1276571 392
>>1276567
Да понятно. Пришлось это обходить заворачиванием в новый массив, в котором под нулевым ключем все ключи, а под первым все значения. Тогда порядок можно сохранить.
Ответы: >>1276576
Аноним 2018/10/08 18:27:06  №1276575 393
>>1276525
это в лоб, прочитай условия задачи и примеры внимательно
Аноним 2018/10/08 18:31:01  №1276576 394
>>1276571

Странный подход. Обычно в JSON это сохраняют как

[
{ key: x, value: y},
{ key: z, value: w}
]
Ответы: >>1276578
Аноним 2018/10/08 18:35:16  №1276578 395
>>1276576
>Странный
Ну не знаю. Для последующего декода очень даже удобный.
someApprentice 2018/10/09 16:39:58  №1276937 396
Как получить переменную из асинхронной функции в ReactPHP?

function getSmtn()
{
$loop = \React\EventLoop\Factory::create();
$connector = new \React\Socket\Connector($loop);

$connector->connect('...')->then(function (\React\Socket\ConnectionInterface $connection) use ($loop) {
$connection->on('data', function ($data) use ($connection) {
$smtn = $data;

$connection->close();
});
});

$loop->run();

return $smtn;
}
Ответы: >>1277072
Аноним 2018/10/09 16:42:39  №1276940 397
/([+] ?[7] ?| ?8[-]?) ?[(]? ?\d{3}\d? ?[)]? ?-? ?\d\d? ?-? ?\d ?-? ?\d{2} ?-? ?\d{2} ?\d?/

Ответы: >>1276975 >>1277077 >>1277094
Аноним 2018/10/09 17:27:56  №1276975 398
proxy.duckduckgo.com.jpg (118, 1280x720)
720x1280
>>1276940
/[+]?([ ]{1,})?[-]?[(]?[ ]?[+7]?[0-9]{1,}[ ]?[)]?/

Неужели всё было так просто? -_-
Ответы: >>1277059
Аноним 2018/10/09 17:39:30  №1276991 399
Ох лол... понял фейл.
Аноним 2018/10/09 18:50:18  №1277028 400
Аноним 2018/10/09 20:09:16  №1277058 401
ОП убежал, так что можно не торопиться вкидывать по одной
Аноним 2018/10/09 20:11:00  №1277059 402
>>1276975
сорян, что из пхп кода, вот
$pattern = "/^\\s?(8|\\+\\s?7)([\\s\\(-]\\d[\\s\\)-]){10}$/";
Аноним 2018/10/09 20:26:42  №1277072 403
>>1276937

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

$promise = getSmtnAsync();
$promise->done(...);

У промисов PHP есть неприятная особенность, в сравнении с JS промисами: они не сообщают об необработанных исключениях. Если ты не поставил обработчик (в done/then), то исключение просто потеряется. А ведь это может быть любое исключение, в том числе ErrorException вызванное например опечаткой в имени переменной или функции.

Аналогично, в PHP ошибки чтения/записи в поток по умолчанию игнорируются, если ты не поставил обработчик на on('error', ...). В общем, обработка ошибок сделана максимально плохо.

В твоем коде вообще логичнее всего было бы вернуть объект connection. Если же надо прочитать все данные до конца, тогда надо их читать в функции и по окончанию передать в промис через Deferred:

$def = new Deferred();
// На основании исследования пальца и потолка я решил что это эффективнее, чем строка. В реальности лучше проверить тестами.
$buffer = [];
$connection->on('data', function ($d) use ... { $buffer[] = $d });
$connection->on('error', function ($e) .. { $def->reject(4e); });
$connection->on('end', function () {
$content = implode('', $buffer);
$def->resolve($content);
});

return $def->promise();

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

Не забывай, обработка ошибок сделана максимально плохо и тебе надо делать ее полностью самостоятельно.
Ответы: >>1277349
Аноним 2018/10/09 20:40:47  №1277077 404
Ответы: >>1277152
Аноним 2018/10/09 21:35:18  №1277094 405
>>1276940

Я вижу, анон запутался. Давайте ему поможем.

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

Примеры:

Правильные выражения:
123
1+2+3
1+3-2

Неправильные:

xyz (это не число)
-2 (у нас в задаче нет отриц. чисел)
1++2 (2 знака подряд)
1 2 (нет знака между числами)

Пишем регулярку. Структуру выражения можно записать как:

число знак число знак число ...

Как это выразить регуляркой? Здесь можно использовать звездочку, чтобы сказать, что за первым числом могут следовать еще произвольное количество чисел, отделенных знаками:

число (знак число)*

Продолжим. Как записать "число" в виде регулярки? Это просто 1 или более цифр:

число = [0-9]+

Знак это плюс или минус: [+\-]

Соберем это вместе:

^[0-9]+([+\-][0-9]+)*$

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

^\s*[0-9]+\s*([+\-]\s*[0-9]+\s*)*$

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

Попробуй так же записать свое выражение. Что в нем может встретиться и где.
Ответы: >>1277152 >>1277166 >>1277169
Аноним 2018/10/10 00:50:34  №1277130 406
Я потрачу полгода на изучение и смогу после этого зарабатывать в комплютере и самосовершенствоваться?
Ответы: >>1277192
Аноним 2018/10/10 01:58:31  №1277132 407
>>1275639
Еще куки можно поставить c помощью мета тега:

echo "<meta http-equiv="Set-Cookie" content="NAME=value; EXPIRES=date; DOMAIN=domain_name; PATH=path; SECURE" />";

Но так делать, конечно, не стоит, если только нужно установить куку, а заголовки по какой-либо причине уже были отправлены клиенту и изменить это нельзя.
Аноним 2018/10/10 04:25:42  №1277151 408
([+] ?[7] ?| ?8)\D?\D?\D?\d\d\d\D?\D?\D?\D?\d\D?\D?\d\D?\d\D?\D?\D?\d\D?\d\D?\D?\D?\d\d

Ммм регулярка...

Аноним 2018/10/10 04:26:47  №1277152 409
Аноним 2018/10/10 04:53:48  №1277164 410
eg.PNG (24, 943x438)
438x943
>>1277059
>"/^\\s?(8|\\+\\s?7)([\\s\\(-]\\d[\\s\\)-]){10}$/"
Не работает
Аноним 2018/10/10 04:57:46  №1277165 411
reg2.PNG (21, 937x399)
399x937
>>1277059
Работает со знаком вопроса, но наполовину. Больше одного знака не цифры чот не хочет, разве запись "{10}" не относится к символам, отличных от цифры?
Аноним 2018/10/10 05:03:34  №1277166 412
proxy.duckduckgo.com.png (2491, 1635x1582)
1582x1635
>>1277094
>>1277059
^\s?(8|\+\s?7)([\s\(-]\d[\s\)-]){10}$
Ололо работает! прекращаю срать в тред и иду разбираться почему работает
Аноним 2018/10/10 05:09:57  №1277169 413
>>1277094
>>1277059
^\s?(8|\+\s?7)([\s\(-]\d[\s\)-]){10}$

Работает со звездочками блин, забыл их дописать в правильный ответ...
Ответы: >>1277224
Аноним 2018/10/10 07:01:50  №1277192 414
>>1277130
Нет. У тебя откуда-то ошибочное мнение, что можно за полгода вайти-в-айти и начать зарабатывать. Минимум год, если ты умный (судя по вопросам - нет). максимум 2 года, на эту цифру и рассчитывай.
Ответы: >>1277223
Аноним 2018/10/10 08:32:55  №1277223 415
>>1277192
Ну тут смотря что указывается под "зарабатывать" и "полгода". Если он ежедневно будет задрачивать теорию/кодить часов +6 то на джуна может и вкотиться. Мне кажется на начальном этапе решают больше параметры типа гитхаб + общая адекватность + отсутствие вредных привычек + наличие семьи/ребенка. Будет ЗАРАБАТЫВАТЬ %копейки% и СОВЕРШЕНСТВОВАТЬСЯ %иначе выкинут%.

А потом как у всех.
Аноним 2018/10/10 08:35:15  №1277224 416
15378125750940.jpg (32, 382x362)
362x382
>>1277169
Бляяяяяять, разметка! Я обосрался дважды -_- И тот анон тоже ошибся. Вот она, регулярочка:
>^\\s?(8|\\+\\s?7)([\\s\\(-]\\d[\\s\\)-]){10}$
Ответы: >>1277226
Аноним 2018/10/10 08:35:58  №1277226 417
>>1277224
Обосрался третий раз...
Ответы: >>1277230
Аноним 2018/10/10 08:40:21  №1277230 418
>>1277226
>Обосрался третий раз...
мы вам перезвоним
Аноним 2018/10/10 09:00:58  №1277239 419
Ответы: >>1277270
Аноним 2018/10/10 10:13:56  №1277270 420
>>1277239
Опушка, а когда задачки проверять будешь? Ты для многих из нас был главным источником мотивации.
Ответы: >>1277279
Аноним 2018/10/10 10:34:27  №1277279 421
>>1277270
Это не истинный оп.
Аноним 2018/10/10 11:14:13  №1277291 422
jhjj.png (12, 900x129)
129x900
Но ведь достаточно просто имя файла в двойные скобки поместить и все будет прекрасно работать.
Ответы: >>1277300
Аноним 2018/10/10 11:42:30  №1277300 423
>>1277291

Пруфы? Я лично много лет назад тестировал отдачу файла с именем с кириллицей в разных браузерах. ИЕ тогда интерпретировал содержимое заголовка как текст в Windows-1251, а другие браузеры как utf-8, если не путаю.

Если тебе интересно, например, как проблема решается в Симфони то можно глянуть код тут https://github.com/symfony/http-foundation/blob/master/BinaryFileResponse.php#L156

Пока 100% работающий метод это поместить имя файла в конец ссылки. Ну и для новых браузеров будет работать метод из Симфони.

(кстати там же можно увидеть код, поддерживающий отдачу через X-Accel-Redirect)
Ответы: >>1277308
Аноним 2018/10/10 12:02:00  №1277308 424
>>1277300
Хм, действительо. Проверил киррилицу в жопере, огнелисе и хроме - работает, а эксплорер хероту выдает.
Аноним 2018/10/10 12:09:44  №1277309 425
Хотя, написал:
header('Content-Disposition: attachment; filename="'.urlencode($data[0]['orig_name']).'"');
и теперь в эксплорере под нужным именем сохраняется. Иероглифы тоже проверил.
someApprentice 2018/10/10 14:34:35  №1277349 426
>>1277072
Я пытался самостоятельно закончить шифровальный мессенджер на JS фреймворке и с PHP на бэкенде, но оказалось, что Angular не способен в server-side rendering с другими языками.

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

https://github.com/angular/universal/issues/1000
https://github.com/angular/universal/issues/1069
https://github.com/angular/universal/commit/c16860c06ed645a0f3a6937191d1f9b7a6e2dc48

Когда я сделал это, я тестировал подгрузку шаблона просто:

$connector->connect('...')->then(function ($connection) use ($loop) {
$options = [
'id' => 1,
'url' => '/',
'document' => '<app-root></app-root>'
];

$connection->write(json_encode($options));

$connection->on('data', function ($data) use ($connection) {
$template = json_decode($data, JSON_OBJECT_AS_ARRAY)['html'];

include __DIR__ . '/../templates/index.phtml';

$connection->close();
});
});


Мне удавалось просто заинклудить шаблон, но проблемы начались когда я начал писать реальный код и установил Symfony, где рендеринг шаблона выполняется через return, и, к тому же, я обнаружил что с Angular server-side rendering даже нет причины использовать PHP, потому что он уже и так всё делает.


Я хотел написать чтобы приложение способно было работать без JS, а JS лишь добавлял плавности для подгрузки и/или перехода между компонентами.
Мне нужно чтобы я мог выдать шаблон с помощью PHP, а JS просто повесился поверх него. Чтобы максимум что мне пришлось сделать для этого, это скомпилировать JS код через Webpack или через что ещё это делают?. Ни больше не меньше!

Такой фронтэнд фреймворк существует? Вы можете посоветовать?

Я готов написать такое приложение и на ES6 и транспилировать его через Babel, чтобы получить поддержку относительно старых браузеров, но, опять же, я не уверен какие библиотеки я должен использовать.

Мне ни один из предложенных гуглом шаблонизаторов не нравится, потому что в них нужно определять шаблон либо как строку, либо как скрипт с типом type="script/name of template engine".

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

Все это не понятно и нужно тестировать самому.

Может мне просто взять ReactJS? Он подойдет для такой задачи?


А я потратил всё лето на изучение Angular, как напрасно как жаль, эх...
Ответы: >>1277389
Аноним 2018/10/10 16:25:59  №1277389 427
>>1277349

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

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

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

Есть подход, когда мы рендерим страницы на сервере и пишем JS код, который добавляет им интерактивности (progressive enhancement). Это не очень тебе подойдет, так как это подходит для "сайтов", а не "приложений". И придется дублировать шаблоны в PHP и JS коде.

Что касается, server side rendering - его первоочередная цель - это сделать сайты, построенные на SPA, индексируемыми (что, как мне кажется, проще решить отказом от SPA для таких сайтов).

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

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

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

2) нужно как-то сохранять состояние при перезагрузках страницы. Представь сценарий: пользователь вводит текст сообщения, затем жмет на кнопку добавления смайлика (которая открывает попап с ними). Нам надо перезагрузить страницу, но не потерять введенный текст. Это сама по себе сложная задача. Какой-то майкрософтовский фреймворк делал так: он в конце выполнения серверного скрипта сериализовал состояние (значения переменных) и вставлял в страницу в виде строки. При выполнении любого действия это состояние (с помощью простого JS) в запросе POST отправлялось на сервер, и значения переменных восстанавливались. Эта штука называлась viewState: https://msdn.microsoft.com/en-us/library/bb386448.aspx

Или представь такой сценарий: пользователь в оффлайне отправляет сообщение, оно сохраняется в localStorage, пользователь закрывает вкладку. Затем пользователь снова открывает вкладку - и в отрендеренной сервером странице этого сообщения нету.

Именно поэтому, мне кажется, есть смысл оставить только минимальный функционал в версии без JS.

Я вижу такие варианты:

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

По твоему PHP коду: в нем ошибка. Событие data не говорит о том, что все данные приняты. Оно говорит о поступлении куска данных. Ты должен собирать приходящие данные в буфер до получения события end, которое говорит о том, что пир закончил передачу данных и закрыл TCP-соединение на передачу. В ответ на это ты делаешь close(). Также ты должен проверять событие error, которое говорит об ошибке в процессе работы соединения.

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

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

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

Напиши, в чем проблемы.

> я обнаружил что с Angular server-side rendering даже нет причины использовать PHP, потому что он уже и так всё делает.

Это тоже вариант - оставить в PHP только API (и, может быть, страницы авторизации/регистрации), а рендеринг страниц мессенджера отдать Node.JS приложению. Почему нет?

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

Это хороший подход при написании веб-приложений, которые больше похожи на сайты - где есть страницы, меню, а JS лишь добавляет интерактивности. Но мессенджер это приложение, а не сайт. И тут имеет смысл основной сделать именно SPA версию.

А так, это умеет делать реакт. Можно отрендерить страницу на сервере, и потом к ней подцепить скрипты, когда они загрузятся. Я видел, например, дата-атрибуты в HTML-коде медузы (https://meduza.io) - можешь поковырять, если интересно.

Судя по мануалу, Ангулар умеет что-то похожее: https://angular.io/guide/universal#the-root-appmodule
Это позволяет показать какие-то данные до загрузки кода, но страница будет неинтерактивной (разве что на ней будут работать ссылки и классические формы).

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

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

Это, как мне кажется, умеет и Ангулар, и Реакт.

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

Также, для ускорения загрузки стоит "впекать" часть данных при генерации страницы на сервере. Если приложению после загрузки надо, например, загрузить список контактов, то можно его весь или часть вставить в тело страницы, например в теге script type="application/json" data-url="/api/contacts". Наверно, это как-то можно автоматизировать.

> Я готов написать такое приложение и на ES6 и транспилировать его через Babel, чтобы получить поддержку относительно старых браузеров, но, опять же, я не уверен какие библиотеки я должен использовать.

Babel транспилирует в ES5, для поддержки совсем старых браузеров добавляется ES5 shim, который при удачном стечении обстоятельств позволяет работать коду в ES3 браузерах (стоит только помнить, что совсем старые браузеры могут не поддерживать часть HTML5 тегов и новые CSS правила. Тут нужно тестирование). При этом современным браузерам в идеале хорошо бы отдавать ES6. Ну и при разработке желательно избежать запуска Babel, который не очень быстро работает, а грузить ES6 код напрямую.
Ответы: >>1277500 >>1277501
Аноним 2018/10/10 17:09:42  №1277403 428
Есть непустой массив $data_success(проверено вардампом).
Есть вывод шаблона через слим :
$response = $this -> view -> render($response,'home.phtml', $data_success);
Есть шаблон home.phtml с кодом:
<? if(isset($data_success)): ?>
Код №1
<? else: ?>
Код №2
<? endif; ?>

Вопрос: почему всегда отображается код номер два?
Ответы: >>1277425
Аноним 2018/10/10 18:21:48  №1277425 429
>>1277403
Сам разобрался. Анальный фреймворк все переданные значения переименовывает автоматически.
someApprentice 2018/10/10 21:25:29  №1277500 430
>>1277389
>То есть ты можешь, например, отрендерить на сервере страницу со списком контактов и последними сообщениями, а потом подцепить к ней приложение. Причем отрендерить стоит упрощенную версию страницы, чтобы пользователь не тыкал зря на неработающие кнопки. Сделать контакты ссылками - это позволит переключаться между ними. Сделать форму отправки классической HTML формой.
>
>А после подгрузки JS кода будут отрендерены дополнительные элементы, нажатия на контакты будут обрабатываться приложением, как и форма отправки сообщения.
А вот моё "черновое" приложение чата на чистом JS, как раз так и работало: - сначала отдавалась отрендеренная страница на PHP, а потом инициализировался JS, и все переходы по контактам, подгрузка новых или старых сообщений, и поиск контактов происходили "плавно" (если не считать времени на получение сообщений через http и дешифровку). Кстати, и если отключить JS в браузере, то можно так же было отправлять сообщения из той же формы, искать контакты, и подгружать старые сообщения, переходя по ссылке которая при включенном JS скрывалась при скролле вверх. Только это было моей первой работой и код получался запутанным. Хотелось бы, с моими новыми знаниями о JS, написать что-то погибче, используя современные инструменты и протоколы.


>В твоем случае логичнее всего сделать основным режимом SPA, а если хочется поддержка браузеров без JS, то можно поддерживать ограниченный функционал (например, упрощенный просмотр сообщений и упрощенная отправка). Сделать полноценный аналог без JS будет сложно. По таким причинам:
>
>1) любое действие требует перезагрузки страницы. Ну представь, например, фильтр по контактам, работающий по мере набора текста - это нельзя сделать без JS (только если превратить его в классическую форму с кнопкой). Или например открывающийся интерактивно попап для выбора смайликов.
>2) нужно как-то сохранять состояние при перезагрузках страницы. Представь сценарий: пользователь вводит текст сообщения, затем жмет на кнопку добавления смайлика (которая открывает попап с ними). Нам надо перезагрузить страницу, но не потерять введенный текст. Это сама по себе сложная задача. Какой-то майкрософтовский фреймворк делал так: он в конце выполнения серверного скрипта сериализовал состояние (значения переменных) и вставлял в страницу в виде строки. При выполнении любого действия это состояние (с помощью простого JS) в запросе POST отправлялось на сервер, и значения переменных восстанавливались. Эта штука называлась viewState: https://msdn.microsoft.com/en-us/library/bb386448.aspx
Ну вот, как у меня и было, в случае с поиском контактов, можно сделать классическую форму с кнопкой, затем, при инициализации JS, отменить интерфейс её отправки и обрабатывать эту форму уже с помощью самого JS.
В случае со смайлами, можно с сервера отрендерить форму без кнопки смайлов, а после загрузки JS, плавно вывести её (а при JS роутенге можно выводить её сразу).

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

В общем, везде можно придумать что-то.

>Именно поэтому, мне кажется, есть смысл оставить только минимальный функционал в версии без JS.
Да, на это и расчет. Чтобы без JS, по крайней мере, и работало.


>> я обнаружил что с Angular server-side rendering даже нет причины использовать PHP, потому что он уже и так всё делает.
>Это тоже вариант - оставить в PHP только API (и, может быть, страницы авторизации/регистрации), а рендеринг страниц мессенджера отдать Node.JS приложению. Почему нет?
А можно и API написать на Node.js. Только я не умею писать сервера, а в мануале по Angular'у написано что их пример сервера не безопасен https://angular.io/guide/universal#universal-web-server

>This sample server is not secure! Be sure to add middleware to authenticate and authorize users just as you would for a normal Angular application server.

Или я что-то путаю?


Так как мне следует поступить? Я склоняюсь к тому чтобы попробовать React, и если с ним не получится, то написать на ES6, и если и на нём не получится, то на Node.js уж железно получится написать приложение на Angular'е!
Ответы: >>1278721 >>1278722
someApprentice 2018/10/10 21:27:14  №1277501 431
1-pic.png (151, 1920x1080)
1080x1920
2-pic.png (217, 1920x1080)
1080x1920
>>1277389
>Я вижу такие варианты:
>
>- сделать отдельные страницы на отдельных роутах для упрощенной HTML-версии (как в Gmail). Они могут быть сделаны на PHP, или же на JS, но отдельным модулем, и не включены в браузерное приложение.
То есть сделать, например роут '/conversation/:id/' отдельно на PHP и отдельно на JS? Как понять отдельным модулем? Отдельным от чего? Как модули JS могут быть не включены в браузерное приложение? То есть, имеется ввиду, пререндерить сначала модуль, например, на Node.js?


>По твоему PHP коду: в нем ошибка. Событие data не говорит о том, что все данные приняты. Оно говорит о поступлении куска данных. Ты должен собирать приходящие данные в буфер до получения события end, которое говорит о том, что пир закончил передачу данных и закрыл TCP-соединение на передачу. В ответ на это ты делаешь close(). Также ты должен проверять событие error, которое говорит об ошибке в процессе работы соединения.
>
>Не может быть проблемы из-за этого, что ты не получил все данные до конца?
Я конечно же об это знал, что сокеты могут отправить сигнал о завершении трансляции, но в этом случае не подумал об этом, потому что так было в примере предложенным самими разработчиками этого инструмента, и мне самому очень не понятно как устроен серверный код Angular'а и JS.

https://github.com/angular/universal/issues/1000

>import * as net from 'net';
>
>const client = net.createConnection(9090, 'localhost', () => {
> const renderOptions = {id: 1, url: '/path',
> document: '<app-root></app-root>'} as SocketEngineRenderOptions;
> client.write(JSON.stringify(renderOptions));
>});
>
>client.on('data', data => {
> const res = JSON.parse(data.toString()) as SocketEngineResponse;
> server.close();
> done();
>});

Здесь нет проблемы с получением данных, потому что я проверял вывод шаблонов без Symfony и всё было в порядке.1-pic

>Также, ты должен прокидывать в ангулар-приложение HTTP-заголовки. Например, авторизационные куки, если они проверяются в приложении.
Я не знаю как это сделать и думаю что информации об этом не существует. Я вспоминаю вот это обсуждение по этому поводу https://github.com/angular/universal/issues/1000#issuecomment-391463462

>>What are your thoughts about cookies?
>I havn't put any effort into cookies just yet, but that's definitely something we can add onto these new additions. Right now i'd just like to keep it simple and make sure it solves the problems that people have with Universal on other platforms.

Кстати, полноценная возможность коммуникации Angular Universal с другими языками ещё только в разработке https://github.com/angular/universal#in-progress

>Node.js bridge protocol to communicate with different language backends - Django, Go, PHP etc.

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


>> Мне удавалось просто заинклудить шаблон, но проблемы начались когда я начал писать реальный код и установил Symfony, где рендеринг шаблона выполняется через return
>Напиши, в чем проблемы.
В том что шаблон я получаю в асинхронной функции, а в Symfony я могу отрендерить его только в синхроном коде контроллера, вызвав return.2-pic


>Если тебя беспокоит скорость загрузки JS кода и потребление трафика при загрузке (типичная проблема для SPA приложений), то я бы думал об его разделении на части и уменьшении. Ну, условно говоря, если у нас есть страница настроек, нам не надо подгружать контроллер и шаблон для нее сразу - можно это сделать, когда пользователь ее откроет. Вебпак позволяет разделять код на бандлы.
В Ангуляре есть ленивая подгрузка роутов когда модули загружаются только когда они нужны. Не уверен только как именно это работает - лениво загружается код по сети или лениво загружается инициализация модулей. Мне ещё предстоит узнать, какую конкретно играет роль Webpack по отношению к Ангуляру.

https://angular.io/guide/router#milestone-6-asynchronous-routing


>> Я готов написать такое приложение и на ES6 и транспилировать его через Babel, чтобы получить поддержку относительно старых браузеров, но, опять же, я не уверен какие библиотеки я должен использовать.
>Babel транспилирует в ES5, для поддержки совсем старых браузеров добавляется ES5 shim, который при удачном стечении обстоятельств позволяет работать коду в ES3 браузерах (стоит только помнить, что совсем старые браузеры могут не поддерживать часть HTML5 тегов и новые CSS правила. Тут нужно тестирование). При этом современным браузерам в идеале хорошо бы отдавать ES6. Ну и при разработке желательно избежать запуска Babel, который не очень быстро работает, а грузить ES6 код напрямую.
Разве Babel не транспилирует ES6 ещё? Почему-то его оффициальный сайт не открывается.
Ответы: >>1277505 >>1278720
someApprentice 2018/10/10 21:37:20  №1277505 432
>>1277501
* на изображении 2-pic нужно обратить внимание на переменные заголовка (title) - в PHP шаблоне выведется 'Symfony', а в Angular выведется 'ng'.
Аноним 2018/10/11 09:50:01  №1277618 433
MegaFun.png (53, 1920x1052)
1052x1920
После уныло-похоронного списка студентов обменник решил сделать поярче. Жаль только, что я вообще никак не могу понять, как сменить стиль поля выбора файла.
Ответы: >>1277681 >>1278720
Аноним 2018/10/11 10:21:21  №1277622 434
>>1268753 (OP)
Ребят, у меня вопрос по организации процесса разработки - деплоя. Хотелось бы узнать как вы это автоматизируете и увидеть на реальных примерах весь процесс.
Как я делаю это сейчас: есть у меня несколько сайтов. Поменял я, допустим, какой-то код, сохранил файл, закоммитил и залил через ide на рабочий сервер.
Может кто-нибудь подробно расписать как это всё автоматизируется, чтобы сам процесс загрузки изменённых файлов на рабочий сервер происходил автономно, а от разработчика требовался только коммит в мастер ветку, например.
Ответы: >>1278719
Аноним 2018/10/11 12:23:00  №1277681 435
Ответы: >>1277688
Аноним 2018/10/11 12:32:12  №1277688 436
Аноним 2018/10/11 15:01:54  №1277780 437
Сиськи! Внимание! Молния! Внимание привлек)
Вопрос: Может кто нибудь подсказать как открыть сайт для любого пользователя?
Надо что бы можно было прописать ip , порт и подключится с любого компьютера
Ответы: >>1277797 >>1277809 >>1278719
Аноним 2018/10/11 15:35:33  №1277797 438
>>1277780
>Сиськи! Внимание! Молния! Внимание привлек)
Укатывайся обратно к себе на пикабу, сын собаки сутулой.
Ответы: >>1278206
Аноним 2018/10/11 15:50:31  №1277809 439
>>1277780
Как вариант, можно сделать авторизацию на уровне apache-сервера с помощью .htaccess
Аноним 2018/10/11 20:36:53  №1277922 440
UKevggrHgkA.jpg (131, 708x1000)
1000x708
Анончик здравствуй, начал вкатыватья в кодинг, решил пощупать пхп. Сейчас иду по ньюби гайду в шапке.
Решил задачку https://ideone.com/e.js/o57cn0
Все хорошо, но не выполняется условие в 13 строке, не могу понять чому. Уже поздно и мб я в глаза ебусь, но сколько не разбираю непонятно. Хэлп.
Ответы: >>1277927
Аноним 2018/10/11 20:52:46  №1277927 441
хы.jpg (92, 862x599)
599x862
>>1277922
Да вроде выполняется всё.
Ответы: >>1277928
Аноним 2018/10/11 20:54:52  №1277928 442
>>1277927
я "и" перепутал с "или"
лел
Аноним 2018/10/12 02:59:44  №1277977 443
>>1269893
Норм синтаксис, вот $a жуть.
Аноним 2018/10/12 07:09:34  №1278013 444
Существует достойная опен сорс бесплатная замена пхпшторму?

Я так понимаю нетбинс более менее норм?
Аноним 2018/10/12 07:43:05  №1278019 445
не понял почему остаток от деления работает так:
50 % 100 = 50, тут же нет остатка?
Ответы: >>1278022 >>1278023
Аноним 2018/10/12 07:50:12  №1278022 446
>>1278019
Ты 50 делишь на 100, остаток сразу есть.
Ответы: >>1278024
Аноним 2018/10/12 07:51:31  №1278023 447
>>1278019
Не волнуйся, вы это пройдете в 6-м классе.
Ответы: >>1278025
Аноним 2018/10/12 07:56:33  №1278024 448
>>1278022
посмотрел в вики, оказалось что это не тривиальная операция, остаток - это типа частичка которая дополняет неполное частное, при этом поведение при отрицательных числах тоже не тривиально, тут надо смотреть формулу, а не интуитивно понимать.
9/90 = 90 * 0 + 9
Аноним 2018/10/12 07:58:13  №1278025 449
>>1278023
сьеби, токсичный даун
Аноним 2018/10/12 10:13:19  №1278054 450
Охренеть imagick медленный. Сделал анимированные превьюхи для гифок через него, так он их генерирует секунды три.
Ответы: >>1278112
Аноним 2018/10/12 12:06:57  №1278112 451
>>1278054
гореть в аду такому бордописателю
мимо
Аноним 2018/10/12 14:22:44  №1278182 452
Пытаюсь парсить сайт curl'ом.

Заменил ссылки в html, чтобы обращения шли не к localhost, а к сайту. Всякие css и js файлы подключил, в общем:
$content = str_replace('href="/', 'href="https://site.com/', $content);
$content = str_replace('src="/', 'src="https://site.com/', $content);

Но оказалось, что остались еще post- и get-запросы с относительными ссылками, которые в итоге тоже обращаются к локалхосту. Как перенаправлять их на site.com?
Ответы: >>1278222
Аноним 2018/10/12 15:12:08  №1278206 453
Аноним 2018/10/12 15:44:47  №1278222 454
>>1278182
Всё перегуглил. Нужно что-то отправлять в http-заголовках, как я понял, но что конкретно уже не понимаю.

Как заменить Request URL: http://localhost/al_im.php
На Request URL: https://site.com/al_im.php ?
Поменять отправляемый заголовок Host: localhost? Я пробовал:
curl_setopt($ch, CURLOPT_HTTPHEADER, "Host: site.com");
Но ничего не поменялось. Кажется, оно даже не отправилось.
Ответы: >>1278306 >>1278576
Аноним 2018/10/12 17:46:12  №1278306 455
>>1278222

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

Ответы: >>1278382
Аноним 2018/10/12 20:56:02  №1278382 456
>>1278306
Вот тег твой очень помог, а я вообще даже не думал смотреть в сторону html. А метод был корявым, потому что этого для начала хватало и альтернатив я не знал.

Буду теперь искать, как Access-Control-Allow-Origin обойти. Это же возможно?
Ответы: >>1278489
Аноним 2018/10/13 09:23:50  №1278487 457
14825424996810.jpg (477, 1536x2048)
2048x1536
Заметил за собой, что невнимательно читаю условия задачи. Так бы времени экономил огого.
Аноним 2018/10/13 09:57:05  №1278489 458
>>1278382
>Это же возможно?
В общем случае нет.
Аноним 2018/10/13 15:41:39  №1278562 459
Задачу про ТестХаб хоть кто-нибудь полностью делал? Выглядит слишком долгой для аттенш спана среднестатистического мейлачера-вкатывальщика.
Ответы: >>1278585 >>1278596
Аноним 2018/10/13 15:58:29  №1278576 460
Аноним 2018/10/13 16:09:06  №1278585 461
>>1278562
Я тут читал архивач в глубь, там был разговор на эту тему. К тому времени как упорные аноны берутся за эту задачу, они уже начинают ходить по собеседованиям и как правило находят работу.
Ответы: >>1278596
Аноним 2018/10/13 16:40:52  №1278596 462
>>1278562
Я тоже читал часть старых тредов (на phpclub.tech), никто даже на процентов 30 не реализовывал того, что описано в задаче, только самые базовые вещи, которые средний разраб накидает за вечер.

>>1278585
Так и есть, если реализовать полностью ту задачу с полным покрытием тестами и деплоем, то можно апплаиться на junior+/middle-
Задачу очень долго делать и не очень понятно зачем, если с такими навыками уже можно получать деньги.
Ответы: >>1278675
Аноним 2018/10/13 18:50:50  №1278643 463
У кого нибудь есть идеи почему у меня в travis не получается законектиться с postgres?
Вылетает вот такая ошибка:

In Db.php line 506:

Db: SQLSTATE[08006] [7] could not connect to server: Connection refused
\tIs the server running on host "postgres" (172.18.0.4) and accepting
\tTCP/IP connections on port 5432? while creating PDO connection

https://travis-ci.com/Qevg/filehosting/builds/87855623
На локалке все работает, а в travis нет
postgres из official image конфиги там правильные
думал может проблема в том, что postgresql(сервис) не успевает запуститься сделал https://github.com/Qevg/filehosting/blob/master/.docker/postgres/wait-for-postgres.sh как в доке написано https://docs.docker.com/compose/startup-order/
Но это не помогло или я неправильно его сделал (https://travis-ci.com/Qevg/filehosting/builds/87855849) filehosting.site | Postgres is up - executing command показывает уже после того как codeception запустился. Есть у кого идеи что не так?
https://github.com/Qevg/filehosting
https://travis-ci.com/Qevg/filehosting/builds


Если кому не лень попробуйте у себя запустить. Нужен git, docker, docker-compose, composer
git clone https://github.com/Qevg/filehosting.git
cd filehosting
composer install
make configure-docker-testing
docker-compose -f docker-compose.testing.yml build
docker-compose -f docker-compose.testing.yml run --rm codecept run

и в /etc/hosts 127.0.0.1 filehosting.site
Ответы: >>1278644 >>1278673
Аноним 2018/10/13 19:50:50  №1278644 464
>>1278643
>https://github.com/Qevg/filehosting
Вообще в докеркомпостер конфиге можно определить ГЛАВНЫЙ сервис, например, в котором поднимается php-fpm делается копосер инсталл и вообще хранится код, когда этот сервис соберется то остальные уже должны будут собранными быть
Ответы: >>1278645
Аноним 2018/10/13 19:52:19  №1278645 465
>>1278644
UPD:
app:
build:
context: docker/php7-fpm
volumes:
- ./:/var/www/site:cached
depends_on:
- mysql
- mongodb
- beanstalkd
Аноним 2018/10/13 20:28:04  №1278651 466
Вкатился на первую работу еще на ругулярках кажется.
В итоге с перерывами уже 3 года кожу по сути. Дальше вектора в итоге не дошел в силу лени и неусидчивости.
Ответы: >>1278969
Аноним 2018/10/13 21:56:41  №1278673 467
>>1278643

Прочел ли ты примечания к пункту depends_on?

https://docs.docker.com/compose/compose-file/#depends_on

И от это: https://docs.docker.com/compose/startup-order/

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

Читаем мануал:

> To handle this, design your application to attempt to re-establish a connection to the database after a failure.

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

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

Получается, ты wait-for-postgres не туда влепил. Нгиксу-то что, ему постгрес даром не нужен.

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

Зависимости будут такие:

- codecept зависит от nginx, postgres, redis, sphinx, chrome
- nginx зависит от php

Кстати, я не очень понял, а то, что написано в command - оно внутри докер-контейнера запускается или на хосте? Если внутри, то откуда в контейнере нгинкса есть psql? (вопрос от человека, никогда не пользовавшегося докером)

И еще. Я вижу, у тебя там php компилируется. Это каждый раз будет происходить? Я хотел было дать совет кешировать папку с образами докер, но в мануале тревиса написано противоположное: https://docs.travis-ci.com/user/caching/#things-not-to-cache
Аноним 2018/10/13 22:01:15  №1278675 468
>>1278596

Middle во многих компаниях это года 3 опыта, желательно на фреймворках. Задачу делать, конечно же, имеет смысл - ОП поможет тебе писать большие приложения правильно, соблюдая все лучшие практики, а не наобум.
Аноним 2018/10/14 03:35:26  №1278719 469
>>1277780

Это не так просто, так как ты скорее всего за NAT провайдера и снаружи к тебе не подсоединиться.

Выше давали ссылку на сервис, который позволяет это обойти за счет проксирования: https://ngrok.com/

>>1277622

Самый простой способ - деплой через гит. На сервере добавляешь в git hook баш-скрипт, который при пуше делает нужные действия: composer install, cache:warmup (для Симфони), прогон миграций итд. Не забудь set -e и проверку на ошибки в скрипте, так как баш скрипт по умолчанию при ошибке продолжает выполнять следующие команды.

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

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

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

Более сложные способы - освоить ansible например. Он понадобится, когда у тебя будет не один, а больше серверов.

Больше ссылок:

- https://toster.ru/q/305788
- https://www.youtube.com/watch?v=qMu4YHJV1Z8 / https://www.slideshare.net/BadooDev/5-php-70464795 (заблокирован в РФ)
Ответы: >>1279838 >>1280525
Аноним 2018/10/14 03:35:56  №1278720 470
>>1277618

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

>>1277501

Давай я еще раз объясню возможные сценарии.

1) Главное у нас JS приложение. Браузеры без JS получают упрощенные HTML версии отрендеренных на сервере страниц

Запускаем на сервере наше JS-приложение. Пользователь заходит на главную, приложение пререндерит ему упрощенную главную страницу, отдает. Дополнительно отдает JS-код. Если браузер поддерживает JS, то код запускается и прицепляется к странице, делая ее полноценной.

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

PHP тут отвечает только на запросы к API. Этот роутинг между PHP и JS можно настроить на нгинксе.

2) Есть отдельная упрощенная версия приложения

Запускаем на сервере наше JS-приложение. Пользователь заходит на главную, получает пустую страницу + ссылку на упрощенную версию (/html/) + JS код. Если он поддерживает JS, то приложение запускается и рисует в браузере интерфейс. Если нет - то он жмет на ссылку (или редиректится автоматом) на упрощенную версию.

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

PHP тут отвечает только на запросы к API

> То есть сделать, например роут '/conversation/:id/' отдельно на PHP и отдельно на JS?

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

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

То есть роут и шаблон будет один - в JS приложении. Но оно может работать как в браузере (если в нем включен JS), так и на сервере.

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

> Как понять отдельным модулем?

Если ты решил сделать отдельные, упрощенные версии страниц на отдельных URL (/html/conversation/:id/), то код для них незачем включать в браузерное приложение - он нужен только на сервере (и наоборот, код для отображения полноценных страниц в браузере не нужен на сервере). Логично разделить код на "бандлы" и не отправлять серверный "бандл" в браузер.

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

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

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

Я понимаю так: в ангуларе есть модуль platform-server. Он предоставляет функцию https://angular.io/api/platform-server/renderModuleFactory, которая берет HTML-код (пустышку с тегом <app-root>), URL, и рендерит в него содержимое данной страницы, как браузере. Также, в platform-server есть простейшая эмуляция браузерных API вроде document, DOM, window, location, чтобы код не падал с ошибкой из-за их отстутствия.

Ты берешь

1) Node.JS
2) модуль platform-server
3) свое ангулар-приложение

И добавляешь к ним небольшой вспомогательный скрипт. Этот скрипт поднимает HTTP-сервер, принимает HTTP-запросы от браузера и вызывает renderModuleFactory, которая настраивает окружение, вызывает твое приложение и оно рендерит запрошенную страницу. И отдает назад в браузер. То есть на сервере выполняется по сути тот же код, что в браузере, и рендерится статическая HTML страница. И почти без усилий ты получаешь серверную версию своего ангулар-приложения для браузеров без JS.

Твое приложение думает, что оно запущено в браузере, и работает точно так же. Шлет запросы к АПИ, берет шаблон, отрисовывает данные в нем (упс, не знаю, как там с промисами - не отрисует ли приложение просто индикатор загрузки, не дождавшись ответа АПИ?).

Описано тут: https://angular.io/guide/universal#how-it-works

> Здесь нет проблемы с получением данных, потому что я проверял вывод шаблонов без Symfony и всё было в порядке.

Это не значит, что код 100% корректный. Может, у тебя просто время передачи данных было такое, что они передались одним блоком. Плюс, ты наверно передавал данные на локалхосте между 2 процессами, почти без задержек.

Код некорректный. Событие data обозначает приход одной порции данных (причем размер порции никак не документирован и зависит от многих факторов), а не всех переданных данных. У тебя просто так вышло, что данные влезли в одну порцию.

Кстати, у тебя там server.close() вместо client.close().

> Я не знаю как это сделать и думаю что информации об этом не существует.

Даже если ее не существует, если понимать, как Angular universal работает, то можно попробовать придумать решение.

Тебе приходит HTTP-запрос от пользователя. В нем есть куки. Твое ангулар-приложение скорее всего использует их 2 путями:

- извлекает из document.cookie и что-то делает
- отправляет аякс-запросы, к которым они прикрепляются в браузере автоматически

На сервере, естественно, этого всего по умолчанию нет.

В platform-server наверно есть какая-то эмуляция видимых из браузера кук (document.cookie). Тебе надо их в нее как-то передать. Если там нет эмулции кук - придется сделать или найти библиотеку для этого.

Плюс, в platform-server есть эмуляция XMLHttpRequest для отправки аякс-запросов. Нужно как-то куки и туда прокинуть, если твое АПИ как-то их проверяет (вот мы и поняли, почему авторизация в АПИ без кук в данном случае удобнее).

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

Я погуглил по "angular platform-server pass cookies".

Судя по https://github.com/angular/angular/issues/15730 - возможность прокинуть куки есть, хоть и с багами.

> Кстати, полноценная возможность коммуникации Angular Universal с другими языками ещё только в разработке

В описанном мной варианте она не нужна.

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

Ты получаешь шаблон (точнее, HTML код) из сокета. Используй синхронную библиотеку или функцию для работы с сокетами. Например: socket_create() + fwrite() в цикле (он с первого раза может не записать все данные) + stream_get_contents(). Не забудь проверку на ошибки. Ты разве не работал с сокетами Беркли, с TCP?

Там JS код для Ноды, он асинхронный. В PHP мы можем писать синхронный код и не мучаться.

> Разве Babel не транспилирует ES6 ещё?

Да, он транспилирует ES6 в ES5. А к ES5 коду мы можем добавить ES5 shim дял браузеров, которые поддерживают только ES3, и надеяться, что это заработает. Если не заработает - давать им HTML версию.

Если у тебя есть время, я бы советовал полностью разобраться в этом. Так как пока есть пробелы в знаниях. Я всегда готов ответить на вопросы и пояснить.
Ответы: >>1279602 >>1280664
Аноним 2018/10/14 03:36:27  №1278721 471
>>1277500

> сначала отдавалась отрендеренная страница на PHP, а потом инициализировался JS, и все переходы по контактам, подгрузка новых или старых сообщений, и поиск контактов происходили "плавно" (если не считать времени на получение сообщений через http и дешифровку).

Так тоже можно, пока приложение простое. Как только оно превращается в полноценное MVC приложение, начинает само хранить данные, рендерить их в шаблон, работать в оффлайне - получается дублирование кода - тебе нужен одинаковый шаблон в PHP и в JS, одинаковый код для обработки данных, одинаковые классы и там, и там.

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

>>Или представь такой сценарий: пользователь в оффлайне отправляет сообщение, оно сохраняется в localStorage, пользователь закрывает вкладку. Затем пользователь снова открывает вкладку - и в отрендеренной сервером странице этого сообщения нету.

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

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

> А можно и API написать на Node.js

Тогда можно на PHP. По идее синхронный код на PHP написать проще. Хотя асинхронный с ReactPHP (или с нодой, или с Го) будет быстрее, что важно для мессенджера. Ну и сложные задачи ведь интереснее.

> Только я не умею писать сервера

Надо изучить сокеты Беркли и попробовать что-то написать. Я могу придумать задачку. Для начала: сделай 2 приложения, клиент и сервер. Сервер открывает порт X, слушает его, принимает соединение, выводит, все, что передано, в консоль, закрывает соединение, ждет следущее и так бесконечно. Клиент при запуске соединяется с сервером на порту X и передает указанное в аргументах командной строки сообщение.

Писать можно на любом языке, синхронно или асинхронно.

Если вдруг ты это уже делал и знаешь, и хочешь писать именно на Ноде, то изучай express например. Сделай на нем hello world.

> в мануале по Angular'у написано что их пример сервера не безопасен
Ну значит надо написать безопасный. Хотя было бы хорошо пояснить, что в нем не так.

> Я склоняюсь к тому чтобы попробовать React, и если с ним не получится, то написать на ES6, и если и на нём не получится, то на Node.js уж железно получится написать приложение на Angular'е!

Ты по моему смешал все в кучу. ES6 - это версия JS, а React/Angular - фреймворки. Писать можно на любом.

> то на Node.js уж железно получится написать приложение на Angular'е!
Angular предназначен для браузера. На ноде он запускается только для серверного рендеринга и это дополнительная фича, а не основное предназначение. На сервере, если ты пишешь чисто серверное приложение, ни ангулар, ни реакт не нужны, это оверинжиниринг, там хватит обычного шаблонизатора, коих под ноду предостаточно.

Не путай:

- обычный шаблонизатор: получает данные и шаблон, рендерит HTML. Самое то для сервера.
- ангулар/реакт: получает данные ("модель" или view model, что точнее) и шаблон, рендерит, записывает в DOM, данные меняются, он снова рендерит и снова обновляет ДОМ. Так пока пользователь не закроет вкладку. Самое то для браузерного приложения.

Разница между реакт и ангулар в том, как они ищут изменения.

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

Ну и еще, реакт это только библиотека для view, а англуар это полноценный фреймворк, который предоставляет еще например DI, и многое другое.
Ответы: >>1279602
Аноним 2018/10/14 03:40:26  №1278722 472
>>1277500

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

Ты делаешь форум - один подход. Делаешь сайт с редко менябщейся документацией - другой. Делаешь интерактивное приложение (мессенджер) - третий.
Аноним 2018/10/14 13:33:54  №1278969 473
>>1278651
> В итоге с перерывами уже 3 года кожу по сути. Дальше вектора в итоге не дошел в силу лени и неусидчивости.
А на работе как дела? Часто нагоняй получаешь от ТимЛида?Повышали зп? Менял место работы?
Аноним 2018/10/14 14:11:49  №1278975 474
Сап, двач! Есть ли кто-то, кто разрабатывает на php с freebsd?

Какие подводные? Заведётся ли докер? Вообще, стоит ли пробовать такое?
Ответы: >>1279605
Аноним 2018/10/15 09:15:57  №1279357 475
Анчоусы, надо сгенерировать письмо юзеру со ссылкой на опрос. Его он может пройти без авторизации, почему надо создать в БД запись user_id => hash и в ссылку на опрос этот хэш поместить.
Вопрос: как создавать этот хэш? Какой функцией или алгоритмом?
Ответы: >>1279387 >>1279639
Аноним 2018/10/15 10:00:56  №1279387 476
>>1279357
Функцию hash() не пробовал?
Ответы: >>1279395
Аноним 2018/10/15 10:13:26  №1279394 477
Зачем в абстрактных классах доступны приватные методы/свойства? Какой в этом смысл? Ведь объект абстрактного класса не может быть создан, а его дочерние классы не могут получить доступ к приватным методам и свойствам.

Или могут и я где-то проебался?
Ответы: >>1279399 >>1279420
Аноним 2018/10/15 10:14:58  №1279395 478
>>1279387
Вот загуглил про нее, думаю какой алгоритм теперь выбрать.
Алао на счёт соли непонятно: как ее сгенерить и какой длины, подставлять в начало или конец, можно ли хранить ее как константу класса или обязательно в БД?
Аноним 2018/10/15 10:16:38  №1279399 479
>>1279394
Приватные функции родительского абстрактного класса могут использоваться в защищённых функциях в нем же. А доступ к защищённым есть у дочернего класса.
Ответы: >>1279420
Аноним 2018/10/15 10:32:03  №1279420 480
eVoExyk[1].png (5, 227x222)
222x227
63exFpF[1].png (8, 259x288)
288x259
gqQhQT7[1].png (10, 258x364)
364x258
>>1279394
Пожалуй, поясню немного. Вот какой смысл в этой хуйне? Чтобы что? Пик 1

Лол, пока формулировал вопрос - разобрался (относительно). Пик 2 - работает, но я не очень понимаю как, почему и за счёт чего.

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

Почему если я реализую в ребёнке идентичный по коду метод, то он не будет работать, а унаследованный от родителя - будет? Пик 3. Если вместо $this в 22 строке использовать parent::, то ничего не изменится.

>>1279399
Не до конца уверен, что правильно осознал написанное, но пока аутировал тут - на мой вопрос ответили. Ну и хуй с ним, всё равно вкину в тред, может, кому-то другому поможет наблюдение за ходом моей мысли.
Ответы: >>1279649
Аноним 2018/10/15 10:54:03  №1279436 481
yIaTUc1[1].png (10, 226x343)
343x226
ICFUC5b[1].png (6, 1364x247)
247x1364
Да, я определенно нихуя не понял. Оставим методы в стороне, поговорим о свойствах. Мною происходящее воспринималось примерно так, что свойство - часть объекта. То есть, на основании класса К1 мы лепим объекты О1К1 О2К1 О3К1 и т. д, каждый из них "строится по классу" и, значит, содержит в себе те или иные свойства, методы для манипуляции с ними и т. д.

Но при вскрывшхиося обстоятельствах получается вот есть. Есть класс АК (абстрактный класс), он содержит приватное свойство $prop. Он же (АК) содержит метод pub_fn(), который меняет значение $prop и выводит его на экран. На основе АК мы создаём другой класс, К1. Делаем объект О1К1, вызываем его функцию pub_fn(), которую его класс унаследовал от АК1, свойство меняется и выводится. Создаём О2К1, свойство меняется и выводится.

Но где, блжард, это свойство находится? Оно вообще часть чего? Если оно часть объекта, то с хуя ли внутри класса К1 не получается получить к нему доступ через $this? Мой взгляд, который заключался в том, что объект - это некая единая сущность, которая просто "собирает воедино весь код относящихся к нему классов" (ну, типа, есть АК (абстрактный класс), там объявлено свойство $prop, это свойство - часть объекта, этой частью объекта мы можем манипулировать и из класса К1, который унаследован от АК) - тупое говно тупого говна? Видимо, объект - это какая-то такая не очень цельная хуита, в которой, условно говоря, каждый класс имеет некую свою область видимости не связанную со внешним миром?

То есть, $this - не указание на объект как таковой, а указание на "ту часть объекта, которая связана с этим классом"?
Ответы: >>1279664 >>1279668
someApprentice 2018/10/15 16:36:34  №1279602 482
>>1278720
>>1278721
Мне нравится 3-ий вариант с дублированием кода, но я не могу понять, почему это плохо - это плата за то чтобы опыт пользователя был максимально комфортным.

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

И к тому же, всё равно не получится не дублировать код. Допустим в упрощенной HTML версии есть формы (поиск или отправка сообщения), их всё равно нужно будет обработать на сервере так же как и в фронтенд JS приложении. Разве это не так?

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


Однако, как я уже писал, первые два способа можно улучшить, отказавшись от PHP и писать API на Node.js.

И даже можно ещё сильнее улучшить это, отрисовав Angular приложение на сервере Node.js, и тогда не придётся дублировать код. Только придётся самому написать библиотеку для проброса кукисов и не ясно какой ответ будет от запросов отправленных с упрощенной HTML страницы, и как там с промисами. Но об этом позже.

>> Я склоняюсь к тому чтобы попробовать React, и если с ним не получится, то написать на ES6, и если и на нём не получится, то на Node.js уж железно получится написать приложение на Angular'е!
>Ты по моему смешал все в кучу. ES6 - это версия JS, а React/Angular - фреймворки. Писать можно на любом.
Я имел ввиду, что у меня есть три варианта на чем написать приложение.

1) PHP (Symfony) + React на фронтенде

+Использование популярного фронтенд фреймворка
+Сверх быстрая отрисовка DOM

-Нужно изучить React, чтобы понять может ли он подхватывать отрендеренную на сервере HTML страницу и дальше работать как SPA приложение
-Дублирование серверного и клиентского кода

2) PHP (Symfony) + нативное ES6 приложение на фронтенде

+Не нужно ничего изучать

-Вспомогательные библиотеки могут не соответствовать заданным требованиям
-Дублирование серверного и клиентского кода

3) Node.JS + Angular

+Использование популярного фронтенд фреймворка
+Возможность подключить модуль platform-server на сервере Node.js и легко вывести отрендеренную Angular'ом стрианицу

-Нужно изучить устройство Node.js сервера
-Нужно написать безопасный скрипт для подъема сервера и вызова renderModuleFactory
-Нужно пробрасывать кукисы используя не совершенный подход, ранее испытав неудачный опыт с Angular Socket Engine (это тяжело поддерживать)
-Неизвестно какой ответ будет от запросов отправленных с упрощенной HTML страницы и будут ли промисы выполняться тоже на серверной части или "подхватяться" на клиентской


И ещё мне сейчас пришел 4-ый вариант с вашей подсказкой про socket_create():

4) PHP (Symfony) + Angular

+Использование популярного фронтенд фреймворка
+PHP отвечает и за отрисовку и за API приложения
+Не нужно ничего изучать

-Нужно пробрасывать кукисы используя не совершенный подход, ранее испытав неудачный опыт с Angular Socket Engine (это тяжело поддерживать)
-Неизвестно какой ответ будет от запросов отправленных с упрощенной HTML страницы и будут ли промисы выполнятся тоже на серверной части или "подхватяться" на клиентской
-Тяжело поддерживать, в связи с тем, что данный подход мало известен, т.е. имеет низкий порог вхождения для сторонних разработчиков


У меня есть пробелы в знаниях, так как отсутствует опыт написания современных JS приложений, поэтому мне бы пригодился ваш совет что из этого выбрать, чтобы было просто надёжно, т.е. чтобы в дальнейшем не возникало каких-то проблем с подхватом HTML страницы JS кодом, чтобы после подхвата работало полноценное SPA приложение, чтобы на сервере не нужно было без конца применять не совершенные подходы. Если сократить, то вопрос будет простым - может ли React подхватывать HTML страницу и вешать на неё JS?



>Кстати, у тебя там server.close() вместо client.close().
Где? $connection это же вроде client, разве нет?
Ответы: >>1282527 >>1282687
Аноним 2018/10/15 16:42:30  №1279605 483
>>1278975

Я не работал с ним, так что предлагаю изучить https://wiki.freebsd.org/Docker и проверить экспериментально.

С удивлением прочел, что в FreeBSD есть слой совместимости с линуксом.

Но вообще, на PHP можно и без докера разрабатывать.
Аноним 2018/10/15 17:44:01  №1279639 484
Ответы: >>1279667
Аноним 2018/10/15 17:55:06  №1279649 485
>>1279420

"Приватное" поле значит. что обращаться к нему можно только из кода в том же классе, то есть кода, который написан между class { ... и }.

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

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

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

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

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

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

Таким образом, реализуется инкапсуляция - сокрытие внутреннего устройства класса и разделение ответственности между классами.
Аноним 2018/10/15 18:21:34  №1279664 486
>>1279436

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

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

Если тебе хочется представить, как это выглядит, то пожалуйста:

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

[Класс]
Название: Parent
Предок: нету
Поля:
- private $a = null
- public $b = 1
Методы: ....

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

Если ты наследуешь класс - он сохраняет в память описание второго класса и ставит ссылку на базовый:

[Класс]
Название: Child
Предок: Parent
Поля:
- public $b = 3; // переопределяем значение поля по умолчанию
- public $c = 2;
- private $a = 10; // это другое поле! не то же, что выше
Методы: ....

Когда ты создаешь объект определенного класса, PHP читает его описание, определяет, какие есть свойства у класса и всех его предков, выделяет кусок памяти, размечает его и сохраняет туда начальные значения свойств (которые позже можно поменять). Заодно он сохраняет ссылку на описание класса:

[Объект]
Ссылка на класс: Child
Значения полей:
- Parent#a/private: null
- Child#b: 3
- Child#c: 2
- Child#a/private: 10

Здесь свойство b встречается только 1 раз, так как определение в классе Child просто переопределяет то, что в Parent.

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

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

Если ты из класса Parent сделаешь $this->a = .., то PHP будет искать поля в таком порядке:

приватное поле Parent#a
Child#a
Parent#a

Если ты из класса Child сделаешь $this->a = ..., то PHP будет искать поле в таком порядке:

приватное поле Child#a
Child#a
Parent#a

Если снаружи - то он будет искать в порядке

Child#a
Parent#a

Вот интересный код для проверки (и для собеседования):

class A
{
private $a = 1;
}

class B extends A
{
private $a = 2;
}

class C extends B
{
public $a = 3;
}

class D extends C
{
public $a = 4;
}

var_dump(new A);
var_dump(new B);
var_dump(new C);
var_dump(new D);

Что он выведет? Попробуй подумать, потом смотри ответ https://ideone.com/VM3tVG


Ответы: >>1279936
Аноним 2018/10/15 18:26:51  №1279667 487
>>1279639
А как же коллизии? Для разный email'ов теоретически может быть одинаковая "рандомная" строка.
Ответы: >>1279670 >>1279671
Аноним 2018/10/15 18:28:35  №1279668 488
>>1279436

> То есть, $this - не указание на объект как таковой, а указание на "ту часть объекта, которая связана с этим классом"?

Это указание на объект, просто при поиске свойства или метода проверяются правила доступа. И учитывается, из какого класса мы пытаемся к ним обратиться.
Аноним 2018/10/15 18:32:33  №1279670 489
>>1279667

1) Ну-ка посчитай вероятность такой коллизии
2) Ты можешь при генерации проверить, нет ли коллизии, и перегенерировать.
Ответы: >>1279675
Аноним 2018/10/15 18:33:21  №1279671 490
>>1279667

И в базу нужно влепить уникальный ключ для защиты от дубликатов.
Аноним 2018/10/15 18:36:10  №1279675 491
>>1279670
>2) Ты можешь при генерации проверить, нет ли коллизии, и перегенерировать
Тогда лишний запрос к БД.
Не легче ли поюзать что-то типа:
$salt = 'verystrongsalt';
$token = hash('sha256', $salt . 'abu@gmail.com');
Ответы: >>1279679
Аноним 2018/10/15 18:51:47  №1279679 492
>>1279675

При использовании хеша возможны те же коллизии.

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

Какой плюс у хешей тут? Я не вижу.

Я замечаю, что когда некоторые люди узнают про хеш-функции, они пытаются везде их использовать, даже там, где не надо.
Ответы: >>1279682
Аноним 2018/10/15 18:54:57  №1279682 493
>>1279679
>Какой плюс у хешей тут? Я не вижу.
Ну хотя бы не делать лишний запрос в БД, чтобы искать, есть ли такая рандомная строка или нет.
Аноним 2018/10/16 05:45:42  №1279838 494
>>1278719
Спасибо, анон, за пояснения про деплой - очень полезно.
Аноним 2018/10/16 05:50:37  №1279840 495
Это норм что у пхп RPS меньше чем длина хуя типичного пыхера?
Ответы: >>1279845
Аноним 2018/10/16 06:45:42  №1279845 496
Аноним 2018/10/16 09:40:03  №1279881 497
Ларавель рассчитан на даунов, или у авторов документации и их учебных видюшек просто такой стиль?
Аноним 2018/10/16 11:34:47  №1279936 498
>>1279664
Вот за это я и не люблю ООП.
Ответы: >>1279948
Аноним 2018/10/16 11:58:25  №1279948 499
Ответы: >>1280150
Аноним 2018/10/16 14:26:52  №1280068 500
какаие же упоротые фреймворки на нем
Аноним 2018/10/16 14:34:40  №1280072 501
>>1268753 (OP)
Подскажите пожалуйста как добавлять запрос в конец URI по клику на кнопку, может есть способ проще чем разбирать текущий и собирать новый?
В той же задаче про список студентов: поиск index.php?search=хуй, потом сортировка &sort_by=first_name, а потом го на вторую страницу &page=2.
Ответы: >>1280080 >>1280097
Аноним 2018/10/16 14:49:22  №1280080 502
>>1280072
Пишешь ссылку, добавляешь , что тебе нужно в ее конец.
Ответы: >>1280086
Аноним 2018/10/16 14:55:01  №1280086 503
>>1280080
Смотри, у меня уже есть результат поиска, выглядит так: i.php?search=хуй
Делаю кнопку с href='i.php?sort_by=хуй'.
И таблица будет отсортирована, только результаты поиска пойдут по пизде, а хотелось бы чтоб по клику стало i.php?search=хуй&sort_by=хуй, но может же быть сортировка и до поиска.
Аноним 2018/10/16 15:07:31  №1280097 504
>>1280072

Удобнее всего собирать с нуля функцией с кучей аргументов.

Зачем что-то делать с URL, что-то там дописывать, вырезать? Это плохой путь.

Кстати, есть еще относительные URL вида ?sort=name : https://github.com/codedokode/pasta/blob/master/network/urls.md
Аноним 2018/10/16 16:47:21  №1280150 505
>>1279948

ПРИСВАИВАЕШЬ ПЕРЕМЕННУЮ
@
ПРИСВАИВАЕТСЯ
@
ТЕПЕРЬ У ТЕБЯ ДВЕ ПЕРЕМЕННЫХ
@
ЗАБЫЛ ПРИСВОИТЬ
@
А ОНА УЖЕ ПРИСВОЕНА ДО ТЕБЯ
@
ЛОГИЧНОСТЬ
Аноним 2018/10/16 18:50:44  №1280234 506
Решил, перед тем как начать писать ТестХаб, отправить резюме на несколько джуно-вакансий. Чувствую, что обоссут.
Ответы: >>1280385
Аноним 2018/10/17 06:10:49  №1280385 507
>>1280234
TestHub недостаточное условие для трудоустройства на джуна
Ответы: >>1280401
Аноним 2018/10/17 06:57:48  №1280401 508
>>1280385
Да, это, скорее, на миддла.
Аноним 2018/10/17 12:07:40  №1280525 509
>>1278719
>Самый простой способ - деплой через гит. На сервере добавляешь в git hook баш-скрипт, который при пуше делает нужные действия
А как git на рабочем сервере узнает об этом пуше?
Я думаю сделать так: на локальной машине, где ведётся разработка, я делаю пуш в удалённый репозиторий (битбакет), на битбакете настраиваю веб-хук, инфа о пуше через веб-хук летит на рабочий сервер по адресу сайта и там я уже запускаю composer если надо, git pull и т.д.
Хуйня или норм?
Ответы: >>1281522
Аноним 2018/10/17 16:12:48  №1280664 510
nono.png (39, 564x768)
768x564
>включаешь видеокурс
>в первом же ролики говорят, что либо ты используешь пхп-сторм, либо идешь нахуй
Как это надоело.
>>1278720
>Рисуем свою кнопку, поверх нее кладем прозрачный инпут, при выборе файла выводим яваскриптом имя
Как-то так?
Ответы: >>1280788
Аноним 2018/10/17 19:57:11  №1280788 511
>>1280664
Анимешник, а ты доделал список студентов?
Ответы: >>1280858
Аноним 2018/10/17 20:29:25  №1280793 512
5105810491.jpg (49, 532x503)
503x532
Решение задачки по размену в тупую(т.е. не методом динамического программирования) показалось невероятно сложным и "думал" половину дня. Цикл с пика дополняется костылями в виде проверки суммы подмассивов массива на соответствие необходимой сумме к размену, лишние варианты стираются - https://ideone.com/FLJC6a
Все оче плохо?
Аноним 2018/10/17 21:04:49  №1280803 513
Что можно написать на пыхе в 2018, чтобы горда указывать её в резюме? Везде нужно обоссные фулстаки, никому чистая фронт макака не нужна. Гостевуху или что-то повеселее, и сколько на это нужно времени? Знаю джс и немного жабу в универе пердолил. Извиняюсь за классику.
Аноним 2018/10/18 05:32:03  №1280858 514
Аноним 2018/10/18 11:18:17  №1280991 515
В понедельник иду на собеседование пхп-ларавел-макакой, на нем раньше не писал почти кроме лаба1 и курсач3 другой работы один хуй нет в мухосранске, что нужно подтянуть в плане знаний? И чтобы пройти, и чтобы не обсираться сходу на рабочем месте.
Ответы: >>1280992 >>1280998 >>1281036
Аноним 2018/10/18 11:18:38  №1280992 516
>>1280991
Ах да, бэкенд-жуниор.
Аноним 2018/10/18 11:29:01  №1280998 517
>>1280991
Если в студию сокол идешь - ничего не надо, если в приличную контору - не успеешь.
Ответы: >>1281006
Аноним 2018/10/18 11:43:53  №1281006 518
>>1280998
>Если в студию сокол идешь - ничего не надо
Других и нет у нас.
Ну энивей минимум-то надо какой-то. https://laravel.com/docs/5.7 хватит дрочнуть, чтобы писать интернет-магазинчики для наебизнесменов мухосрани?
Аноним 2018/10/18 12:43:40  №1281036 519
>>1280991
>Что нужно подтянуть в плане знаний?
Перемножение матриц и сортировку пузырьком
Аноним 2018/10/18 13:19:18  №1281065 520
>то чувство, когда в мухосранске только две вакансии на пхп-джуна и в одной из них прямым текстом пишут, что берут только студентов.
Ответы: >>1281110 >>1281120
Аноним 2018/10/18 14:35:21  №1281110 521
go.png (22, 332x106)
106x332
Ответы: >>1281112
Аноним 2018/10/18 14:41:16  №1281112 522
golang.png (1, 165x49)
49x165
Аноним 2018/10/18 14:46:27  №1281120 523
>>1281065
Го в дс, будем снимать одну комнатку на двоих :3
Аноним 2018/10/18 23:03:43  №1281276 524
Аноним 2018/10/19 00:01:34  №1281279 525
Если я застрял на 2 задаче (про курс доллара) я совсем даун?
Ответы: >>1281280
Аноним 2018/10/19 00:10:21  №1281280 526
>>1281279
Вроде решил, но хуле в условии написано дописать строчку? Или я неправильно решил?

https://ideone.com/S8pq4n
Аноним 2018/10/19 00:20:04  №1281281 527
http://codepad.org/7N715LEE

Дайте, пожалуйста, совет, как можно попроще решить задачу с палиндромами, ибо я придумал только через костыли.
Ответы: >>1281402
Аноним 2018/10/19 00:31:27  №1281283 528
<?php

error_reporting(-1);

echo "Бросаем кубик...\n";
$random = mt_rand($1, $6);
echo "Выпало $random\n";

?>

Почему строчка с рандомом неправильная? хуле ему надо?
Нахуя нужно \n если можно поставить ; и писать с новой строчки?
Ответы: >>1281284
Аноним 2018/10/19 00:35:41  №1281284 529
>>1281283
В $mt_rand ты вместо простого интервала от 1 до 6 ссылаешься на переменные $1 и $6
Ответы: >>1281285
Аноним 2018/10/19 00:38:24  №1281285 530
>>1281284
Так в мануале написано, хоть бы подписали что $ это всегда переменная
Ответы: >>1281603
Аноним 2018/10/19 12:11:07  №1281402 531
>>1281281
убрать пробелы через str_replace(' ', '', $text)
Ответы: >>1281618
Аноним 2018/10/19 15:53:24  №1281522 532
Аноним 2018/10/19 15:55:17  №1281523 533
Таки зачем передавать данные в $_POST через ajax, если можно и без него?
Ответы: >>1281561
Аноним 2018/10/19 17:20:23  №1281556 534
зачем вы изучаете этого франкенштейна?
Аноним 2018/10/19 17:34:53  №1281561 535
>>1281523

Вопрос запутанный. $_POST - это переменная в PHP (в которую данные попадают из тела HTTP POST-запроса). Ajax - это способ отправки запросов на сервер из JS-кода.

Поясни, о какой ситуации идет речь.
Ответы: >>1281564
Аноним 2018/10/19 17:41:26  №1281564 536
>>1281561
Я говорю, зачем мне отправлять серверу данные из формы через ajax, если их можно отправить сабмитом в указанный action. Дело только в отсутствии необходимости обновлять страницу?
Аноним 2018/10/19 19:17:29  №1281603 537
>>1281285
>хоть бы подписали что $ это всегда переменная
Глаза разуй
Аноним 2018/10/19 19:20:31  №1281605 538
Ща будет перекат
Аноним 2018/10/19 19:31:41  №1281611 539
Аноним 2018/10/19 19:53:27  №1281618 540
>>1281402
А другие действия как то можно сократить?
Аноним 2018/10/21 08:16:30  №1282086 541
Попытался всё-таки сделать вторую задачку на массив. Можно ли сделать этот код короче и как?
Ответы: >>1282127 >>1282267
Аноним 2018/10/21 10:04:34  №1282127 542
>>1282086
Я тут не местный, самоучитель ОПа не открывал ни разу. Но если к этому моменту ты уже знаешь про циклы, то можно сократить. Получаешь список ключей массива, потом циклом проходишь по ним. Не нужно 100500 if.
Аноним 2018/10/21 13:00:57  №1282267 543
>>1282086
Это троллинг или у всех зумеров теперь такие симптомы? Отвечал уже одному такому по другой задаче но с аналогичным подходом >>1276194
хуй знает поможет тебе это или нет