Сохранен 1231
https://2ch.hk/pr/res/1305368.html
Отдельные треды Архивача попали в реестр Роскомнадзора, пользователи из России могут столкнуться с недоступностью всего сайта по HTTPS. Для обхода полной блокировки в большинстве случаев достаточно изменить протокол в ссылках на HTTP. Дальнейшие меры прорабатываются.
Напоминаем, что сайт всегда и полностью доступен через Tor.

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

 Аноним 03/12/18 Пнд 17:34:44 #1 №1305368 
php-noob-1.png
cat-cafe-osaka.jpg
welcome-to-php.png
imoto-cosplay.jpg
Брр, холодно-то как. Но даже это нас не остановит. Тут мы, несмотря ни на что, изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки, печем печенье и даже делаем простые сайты! Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

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

Предыдущий тред был тут: >>1281608 (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? — Да, однозначно. Посмотри любую вакансию.
Loading...
Аноним 03/12/18 Пнд 17:38:49 #2 №1305372 
grammar.png
neko-girl.jpg
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть. Если каждый будет оформлять код как хочет, будет бардак.

Если тебе лень выравнивать код руками, закачай его на 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
Аноним 03/12/18 Пнд 17:47:42 #3 №1305375 
Если вы в предыдущем треде >>1281608 (OP) написали вопрос или запостили решение, но вас не проверили - напомните о себе в этом треде.

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

Аноним 03/12/18 Пнд 17:47:45 #4 №1305376 
image.png
>2019
>php
Аноним 03/12/18 Пнд 19:21:13 #5 №1305413 
Привет анон, сегодня вкатился в изучении php, код не компилируется, не могу понять в чем ошибка, ведь первая часть АБСОЛЮТНО такая же https://ideone.com/5R215K
Аноним 03/12/18 Пнд 19:25:33 #6 №1305416 
>>1305413
>https://ideone.com/5R215K
Скобки круглые должны быть, ты чего?
Аноним 03/12/18 Пнд 19:26:34 #7 №1305418 
>>1305413
https://secure.php.net/manual/ru/language.types.array.php
Это прочитать не судьба?
Аноним 03/12/18 Пнд 19:28:44 #8 №1305421 
>>1305416
>>1305418
Посоны, использую версию 5.5, в них же квадратные должны быть?
Аноним 03/12/18 Пнд 20:16:37 #9 №1305441 
>>1305372
Как меня бесит когда пидарасы всякие { ставят в одну линию с условием. Только в css так делаю
Аноним 03/12/18 Пнд 20:17:17 #10 №1305442 
>>1305372
>4 пробелами
Про табы у вас в селе не слышали еще, да?
Аноним 03/12/18 Пнд 21:01:28 #11 №1305464 
>>1305441
Чмо про PSR не слыхало?
Аноним 04/12/18 Втр 00:45:31 #12 №1305546 
Чем обычно занимаются джуны пхп на своей первой работе? Какие вообще советы можете дать по поиску работы на позицию джуна? Думаю после зимы могу уже начать искать себе работу. До этого никогда не работал
Аноним 04/12/18 Втр 00:48:19 #13 №1305547 
>>1305546
Актуальный вопрос. Поддвачну.
Аноним 04/12/18 Втр 02:04:23 #14 №1305562 
Первый мой перекат в этом треде, посоны.

У кого какой?
Аноним 04/12/18 Втр 04:49:18 #15 №1305584 
>>1304932
>926-981
>
>Аноны, а интересно, как бы вы перевели "statement", например, отсюда:
>
>> As in C or Perl, PHP requires instructions to be terminated with a semicolon at the end of each statement.
>
>Я обычно и statement, и instruction перевожу как "команда".
>
>Ну и заодно, как бы вы перевели "clause" из SQL, например, "ORDER clause", "WHERE clause"?
Я бы перевёл как "выражение".

Со словом "clause" встречаюсь впервые, но знания с википедии дают простой ответ.

Во-первых: https://en.wikipedia.org/wiki/Clause
>In language, a clause is the smallest grammatical unit that can express a complete proposition.

Во-вторых: https://en.wikipedia.org/wiki/Clause_(logic)
>In logic, a clause is an expression formed from a finite collection of literals...

И наконец: https://en.wikipedia.org/wiki/Clause_(disambiguation)
>Clause, a constituent component of statements and queries in SQL


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

Или можно так и переводить - "клауза" (https://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B0%D1%83%D0%B7%D0%B0).
Аноним 04/12/18 Втр 05:32:22 #16 №1305587 
За сколько перекатов среднестатистический вкатывальщик зарабатывает первые деньги?
Аноним 04/12/18 Втр 07:51:28 #17 №1305599 
Оп, это анон, который про игру пошаговую спрашивал. Можешь привести пару примеров проектов по бэку на php, которые можно на собеседовании показать? Кроме магазинов и соцсетей ничего в голову не идёт.
Аноним 04/12/18 Втр 09:20:03 #18 №1305609 
palindrome problem solved.jpg
php ha-ha-ha.jpg
Чем дальше иду по мануалу ОПа, тем больше понимаю, какой же мерзкий это язык! Смешной момент на 2-й картинке где регулярка задается кастрированной версией, заместо полноценной с указанием флагов, и чтобы, например, игнорировать регистр заместо простого флага придумали ОТДЕЛЬНУЮ функцию. Ну что это за peezdos ?
Аноним 04/12/18 Втр 09:58:53 #19 №1305614 
php functions solved.jpg
>Функции и новый айпад
>
>Если у тебя есть соблазн сделать все, тупо скопипастив код 3 раза — знай, это решение не пройдет. Так-то.

А у меня прошло. Так-то! Ну или ОП ворвется и скажет, что strawbery не начисляет процент на свои 7777, тогда этот случай придется считать немного иначе.
Аноним 04/12/18 Втр 10:02:13 #20 №1305616 
>>1305609
Отклеилась ссылка http://sandbox.onlinephpfunctions.com/code/47e625f6e0189cfbaa1c1b18ab03d868701ae86e
Аноним 04/12/18 Втр 12:47:44 #21 №1305649 
>>1305587
У всех разная скорость обучения. Да и не перекаты учат, а решённые задачи.
Аноним 04/12/18 Втр 12:52:08 #22 №1305655 
>>1305609
Есть там флаги. Для второй пикчи: i - ignore case, u - utf8.
Аноним 04/12/18 Втр 13:05:31 #23 №1305665 
>>1305464
Каво нахуй?
Аноним 04/12/18 Втр 14:38:58 #24 №1305712 
lTzHqm.jpg
>>1305655
Действительно есть, но отдельным параметром для функции.
Аноним 04/12/18 Втр 14:39:05 #25 №1305713 
Вот вроде люди которые советуют использовать фреймворки, вы блять сами то их использовали. я только на установку ебучего laravel потратил 4 часа, каждый шаг сопровождался жопной болью. В плане "установи composer/настрой его правильно, настрой переменные,настрой ебучий файл хостс", но и это еще не всё. Работа с этим фреймворком это просто какой-то пиздец.
Переведу стандартную ситуацию в более реальную плоскость - для решения задачки уровня 2+2 второкласнику предлагают сначала выучить диффуры.
Четыреждеблядская ярость уже отошла. Я просто шлю фпизду этот фреймворк. Вот серьезно.
Аноним 04/12/18 Втр 14:41:02 #26 №1305714 
>>1305713
Стандартная ситуация для любого бэк-энд фреймворка.
Аноним 04/12/18 Втр 14:42:28 #27 №1305716 
>>1305714
Ок, что делать, если эти ебучие фреймворки нужны везде кроме Битриксоидов?

Аноним 04/12/18 Втр 14:45:31 #28 №1305719 
>>1305716
Страдать, что ж еще. Вообще, бэк-энд(нормальный) это не какая-то хуйня. Безопасность, вот это всё - учитывается. Отсюда с наскоку осилить установку/настройку не просто.
Аноним 04/12/18 Втр 16:11:20 #29 №1305754 
>>1305368 (OP)
Подскажите, почему в $_SERVER нет элемента 'HTTP_REFERER'?
Аноним 04/12/18 Втр 16:16:50 #30 №1305759 
>>1305754
Потому, что страница, с которой был переход, в ссылке имеет rel="noreferrer" ? https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types
Аноним 04/12/18 Втр 16:22:58 #31 №1305765 
>>1305759
Это я валет. Элемент появляется, если перешел по ссылке, а я руками урл писал. Но всё равно спасибо, добрый человек!
Аноним 04/12/18 Втр 16:53:48 #32 №1305772 
А кто-нить шарит в PDO? Почему при
>$row = $pdo-> query('select * from users') -> fetch();

И потом при выводе через

>\t<td>Name</td>
\t<tr><? echo $row['name'];?></tr>
\t<td>Login</td>
\t<tr><? echo $row['login'];?></tr>
\t<td>Password</td>
\t<tr><? echo $row['pwd'];?></tr>
\t<td>email</td>
\t<tr><? echo $row['email'];?></tr>

Я вижу только 1 запись в базу?
Где я еблан?
Аноним 04/12/18 Втр 17:00:21 #33 №1305775 
>>1305772
PDOStatement::fetch — Fetches the next row from a result set
PDOStatement::fetchAll — Returns an array containing all of the result set rows
Аноним 04/12/18 Втр 17:02:12 #34 №1305776 
>>1305775
>atement::fetch — Fetches the next row from a result set
>PDOStatement::fetchAll — Ret

fetchAll - не выводит в итоге вообще нихуя
Аноним 04/12/18 Втр 17:17:06 #35 №1305779 
Почему при pecl install grpc убунта ебёт мозги по поводу отсутствия zlib? При том, что apt install zlib1g говорит, что все ок и уже установлено. У кого-нибудь получалось без ебли установить грпц?
Аноним 04/12/18 Втр 17:46:14 #36 №1305791 
>>1305609
дваждую, ещё и с юникодом не дружит
Аноним 04/12/18 Втр 18:49:43 #37 №1305810 
>>1305712
>для функции
Нет, не для функции, нуб.
Ты чем учебник ОПа читал? Там есть всё.
Аноним 04/12/18 Втр 18:50:28 #38 №1305811 
>>1305791
И базу данных не прикрутишь никак без костылей.
Аноним 04/12/18 Втр 19:36:27 #39 №1305838 
не обоссывайте плз.
Вопрос следующий: видеокурсы, типа "Cпециалист php"(хвалебные) не прокатят? Начинать нужно именно с книг?
Аноним 04/12/18 Втр 19:38:16 #40 №1305840 
>>1305838
дополню вопрос: пытался вкатить в js, по книге нихуя не понял(начинать вкатывание с объектов это охуеть конечно), с видеокурса очень даже зашло.
Аноним 04/12/18 Втр 21:21:18 #41 №1305927 
>>1305838
Курсы норм, только устарели порядком и учат там говнокоду по сути. Но для того чтобы разобраться поначалу покатит, правда потом уже самому надо пыхтеть, чтобы не писать лапшу как в 2015 году.

С книжками, по идее, так же должно быть - устаревают пока тираж печатается. потому в ходу книжки с пространными философскими рассуждениями и без практики - общая теория не стареет
Аноним 04/12/18 Втр 21:23:39 #42 №1305930 
Лучшиекурсы по PHP для новичков на русском


https://www.youtube.com/playlist?list=PLSdH7dYnlGYgrWg5wsEG4v03MiJ1WSOTx

https://www.youtube.com/playlist?list=PLSdH7dYnlGYgQ6ElbHRpG2zRXbkgkO3zQ

https://www.youtube.com/playlist?list=PLSdH7dYnlGYht0eGi9-14X87hrSl9plCc

https://www.youtube.com/playlist?list=PLSdH7dYnlGYh4uk8fMvnjuKl5PI7Xoxnj
Аноним 04/12/18 Втр 23:35:26 #43 №1306021 
https://www.youtube.com/watch?v=w5vTmURvvko
Сделал всё как в видео, но почему-то когда вызываю метод printItem, в самом конце, срабаывает только код который выдаёт текс "Новость :" а оставшаяся часть $this->title нигде не срабатывает. Проверял все переменные, всё работает корректно, то есть если я хочу вывести инфу вроде author_name или conten из $row то всё отображается, а если в методе $this->author_name то уже нет.
Аноним 05/12/18 Срд 01:14:07 #44 №1306046 
>>1305413

Запятую пропустил, смотри внимательнее.

>>1305442

В PSR указаны пробелы. Табы отображаются по-разному и этим плохи.

>>1305584

Выражение (expression) это обычно что-то, что можно вычислить и оно вернет результат. Вроде 2 + 2.

>>1305599

Сайт новостей вроде meduza.io, клон Hacker news, сайт для проведения почтовых рассылок, сайт для поиска опен сурс проектов, которым можно помочь (поиск по навыкам, плюс рейтинг по количеству незакрытых багов), сайт, который показывает код с Гитхаба, но добавляет функционал для навигации по нему как в IDE, видеохостинг pipe, сайт для поиска/сдачи жилья, сайт для поиска временных работников, фриланс-биржа.

Радио, которое играет песни с помощью Ютуба.

И, кстати, сайт для проверки знаний, наш TestHub: https://gist.github.com/codedokode/8733007 .
Аноним 05/12/18 Срд 01:14:33 #45 №1306047 
>>1305609

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

Ну и если ты хотел покритиковать язык, то для тебя уже сделали готовую методичку: https://habr.com/post/315152/

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

Мне больше не нравится наличие глобальных настроек для mb_ereg...: http://php.net/manual/ru/function.mb-regex-set-options.php

Из-за них один и тот же код может работать по-разному.

>>1305614

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

Не пиши по 2 команды в одной строчке, это ухудшает читабельность. В if принято использовать фигурные скобки по PSR. Кстати, у тебя if можно заменить на min/max.

Не очень понятно, зачем писать ++ перед $months. Это в принципе правильно, но смотрится непривычно.

Вместо array() можно писать [].

Одинаковые вещи лучше называть одинаково: 'price' => $total_price

А так, решено верно.

>>1305810

Давайте спокойнее. И в учебнике ОПа про mb_ereg, по моему, ничего нету.
Аноним 05/12/18 Срд 01:14:59 #46 №1306048 
>>1305713

Это может говорить о том, что у тебя недостаточно навыков по работе в командной строке и недостаточное знание Windows/Linux. А у нас, кстати, есть простой гайд по основам командной строки: https://github.com/codedokode/pasta/blob/master/soft/cli.md

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

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

Почитал документацию по Laravel ( https://laravel.com/docs/5.7/installation ), мне конечно не нравится идея устанавливать утилиту laravel глобально, ведь у тебя может быть несколько проектов с разными версиями laravel. Я бы установил ее не глобально, а только для проекта. А так, вроде с виду ничего сложного.

>>1305754

Это вообще не обязательный заголовок. Например, при переходе с HTTPS страницы на HTTP он может не передаваться или передаваться в урезанном виде.

>>1305776

Прочти мануал по каждой используемой тобой функции PDO, обрати внимание, какие данные они принимают и какие возвращают. Если надо, с помощью var_dump() выведи возвращаемые данные, для каждой функции. Не пиши наугад. И тогда, может быть, ты увидишь причину. А может нет - тогда напиши, мы посмотрим.
Аноним 05/12/18 Срд 01:15:28 #47 №1306049 
>>1305779

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

Вот смотри, содержимое пакета zlib1g: https://packages.ubuntu.com/cosmic/amd64/zlib1g/filelist

Видно, что там есть только динамическая библиотека libz.so - это файл, в котором содержатся скомпилированные функции zlib. Программа может подключить эту библиотеку и вызывать ее функции. Чем-то похоже на библиотеки PHP. Но! Си - это не PHP. В Си, прежде чем запустить программу, ее надо скомпилировать из исходников в машинный код. А чтобы скомпилировать программу, которая будет вызывать функции библиотеки zlib, компилятору нужно дать их описание (в zlib.so его нету). Для этого нужны специальные заголовочные файлы, обычно они имеют расширение .h. В исходниках программы стоит ссылка на них и компилятор по описанию сможет сгенерировать код для вызова этих функций.

А вот содержимое zlib1g-dev: https://packages.ubuntu.com/cosmic/amd64/zlib1g-dev/filelist

Здесь мы видим заголовочные файлы вроде zlib.h, которые содержат описания (заголовки) функций библиотеки zlib на языке Си. Тебе наверняка любопытно, что это за файл, он выглядит примерно так: https://github.com/madler/zlib/blob/master/zlib.h

Там есть определения констант (#define), типов данных (typedef, struct), а также описания функций и комментарии. Содержимого функций там нету, только заголовки.

Также, в пакете ты можешь увидеть статическую библиотеку libz.a. Она содержит скомпилированный код функций, тот же самый, что в libz.so, но в другом формате. Статическая библиотека позволяет встроить (слинковать) код функций zlib прямо в скомпилированную программу. А динамическая библиотека zlib.so - она предназначена для подключения только в момент запуска программы.

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

Команда pecl компилирует расширения PHP их исходников. Если расширению нужна библиотека - то для компиляции такого расширения нужны именно заголовки из пакета zlib1g-dev. А для работы скомпилированного расширения - нужна zlib.so из zlib1g.

>>1305840

Я бы советовал попробовать и то, и другое параллельно. Так будет лучше всего разбираться.
Аноним 05/12/18 Срд 01:18:35 #48 №1306050 
>>1306046
>Выражение (expression) это обычно что-то, что можно вычислить и оно вернет результат. Вроде 2 + 2.
Но любая функция в программировании это же математическое вычисление, не так ли?
Аноним 05/12/18 Срд 02:45:47 #49 №1306066 
>>1306050

statement это например if. Он не является выражением.
Аноним 05/12/18 Срд 02:53:35 #50 №1306067 
>>1306066
if тоже можно представить как математическое выражение (вычисление).
Аноним 05/12/18 Срд 02:59:16 #51 №1306070 
>>1306066
Тогда, "statement" можно перевести как "утверждение". Если касаться перевода.
Аноним 05/12/18 Срд 06:26:14 #52 №1306087 
>>1305810
>нуб
Потише, бывалый.

>Ты чем учебник ОПа читал? Там есть всё.
Учебник не канон, а всего лишь гид.
Документация - канон, я читал её.
Аноним 05/12/18 Срд 08:08:03 #53 №1306121 
>>1306046
Сайт аренды жилья давно уже думал сделать. Когда искал квартиру, неделю впустую звонил и ездил ко всяким долбаебам, у которых условия меняются на ходу, фотки не как в реальности, агенты повсюду.
Что, если создать систему подтверждения владельца квартиры, проверку качества и правдоподобности фотографий. Системы бронирования для просмотра, чтобы хозяин квартиры мог просто в нужное время прийти для осмотра жилья,без тупых созвонов. Если на месте оказался не хозяин с сайта, то жмёшь жалобу и аккаунт в бан улетает, если условия или цена с сайта не совпадает с реальностью-тоже самое. Если клиент не пришёл смотреть хату в нужное время - его уже наказывают. Можно прикрутить к аккаунтам отзывы,о хозяинах и жильцах.
Единственная проблема с этим всем, как понять, когда жалуются на человека это правда или просто ебанутый клиент. Не всех же в бан кидать после 1 жалобы, клиент вообще мог прийти, а хозяин все равно пожаловался, что того не было. Для разбора всех этих конфликтов, наверное, персонал нужен сайту.
Аноним 05/12/18 Срд 08:31:32 #54 №1306130 
>>1306046
>Сайт новостей вроде meduza.io, клон Hacker news, сайт для проведения почтовых рассылок, сайт для поиска опен сурс проектов, которым можно помочь (поиск по навыкам, плюс рейтинг по количеству незакрытых багов), сайт, который показывает код с Гитхаба, но добавляет функционал для навигации по нему как в IDE, видеохостинг pipe, сайт для поиска/сдачи жилья, сайт для поиска временных работников, фриланс-биржа.
>
>Радио, которое играет песни с помощью Ютуба.
>
>И, кстати, сайт для проверки знаний, наш TestHub: https://gist.github.com/codedokode/8733007 .
Какие замечательные идеи для стартапов! Любой анон может реализовать любую из этих идей и получать пассивный доход.
Аноним 05/12/18 Срд 11:17:15 #55 №1306212 
>>1305368 (OP)
Сап, аноны.В php я полный ноль, потому нужна ваша помощь. Как сделать CRUD для комментариев?
someApprentice 05/12/18 Срд 11:55:49 #56 №1306284 
Я закончил разбираться с Node.js, React'ом и с тем, как работает Universal Application.

https://github.com/someApprentice/Reactive-Express/

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

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

Что касается использования уже существующих протоколов шифрования, то TOX привлекателен. Мне нужно поразмыслить стоит ли его брать.


У меня есть только один небольшой вопрос по коду:

https://github.com/someApprentice/Reactive-Express/blob/master/src/app.js

React Router так же обрабатывает роуты на серверной части помимо самого express'а. Поэтому для express'а нет никакого смысла ставить обработчик на каждый роут. Как можно заметить роут для '/' и для '/somewhere' имеет абсолютно идентичный код. Так может для рендеринга просто поставить обработчик с регулярным выражением для всех роутов '/.*', а сверху перезаписать отдельные для POST (если такие потребуются) и для API?
Аноним 05/12/18 Срд 12:59:19 #57 №1306323 
>>1305599
https://github.com/karan/Projects
Не благодари
Аноним 05/12/18 Срд 13:23:12 #58 №1306331 
>>1306323
И не буду, ничего интересного не нашёл.
Аноним 05/12/18 Срд 14:15:57 #59 №1306341 
>>1306331
Ну правильно, хули ожидать от человека без собственной фантазии.
Аноним 05/12/18 Срд 14:17:59 #60 №1306343 
>>1306341
Ну так зачем кидать идеи человека без собственной фантазии?
Аноним 05/12/18 Срд 14:18:22 #61 №1306344 
screencap.gif
/web совсем помер. Спрошу сдесь.

С помощью чего можно сделать выбор строки, программно прокручивать текст и выделять нужную, как на рисунке.
Аноним 05/12/18 Срд 15:05:40 #62 №1306382 
>>1306344

А какой язык программирования и какую платформу ты используешь для написания приложения?

Если HTML/JS то для прокрутки есть методы DOM:

https://developer.mozilla.org/ru/docs/Web/API/Element/scrollTop
https://developer.mozilla.org/ru/docs/Web/API/Window/scroll

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

Имей в виду, что если у тебя большой текст, и ты каждую строку делаешь элементом DOM, то вставка в DOM десятков тысяч элементов DOM может подвесить браузер. Может понадобиться оптимизировать код, например, создавая элементы только по мере прокрутки.
Аноним 05/12/18 Срд 15:50:47 #63 №1306399 
>>1306382
> А какой язык программирования и какую платформу ты используешь для написания приложения?
Голый JavaScript и HTML. Браузер хром.

Дизассемблированный код пихается в блок div у которого overflow-y: scroll
Каждая строчка это div в котором ещё 5 дивов. Адрес, мнемоника и аргументы
> scrollTop
Это я нашёл. Но как вычислять чему этот scrollTop равен к примеру для 4 строчке.

> Подсветку строки
Это буду делать изменяя background-color дива

> Имей в виду, что если у тебя большой текст
Адресное пространство от 0 до 0хfff
т.е. максимальное число строк 4095
Но по факту будет меньше, поскольку часть памяти идёт на видеобуфер, часть под переменные.

Главная функция эмулятора дёргается каждые 16мс. Если с таким интервалом менть css свойства браузер нормально будет отрабатывать?
Аноним 05/12/18 Срд 17:29:13 #64 №1306445 
Вечер в хату, увожаемые ананасы.

Я в php умею совсем чуть-чуть, без ООП, с фрейморвками не работал. Максимум что могу - написать какой-нибудь парсер или примитивный дорген (сейчас в процессе обучения по шапке).

Искал для своих целей клон реддита, из нескольких вариантов остановился на одном (ларавел), но есть нюанс: комментарии рисуются на стороне клиента через js, а не самим фреймворком.


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

Ссылка на этот кусок js кода https://github.com/Michael-J-Scofield/plebbit/blob/master/resources/views/threads/thread.blade.php#L245
Аноним 05/12/18 Срд 18:02:33 #65 №1306476 
>>1306445

Какой смысл брать готовое решение и чуть-чуть подправлять? делай с нуля. В нашей задаче про студентов из шапки есть много полезных советов и комментариев, которые и тут пригодятся.
Аноним 05/12/18 Срд 20:17:50 #66 №1306548 
>>1306476
цель - запустить как можно быстрее, а не научиться юзать ларавел.
Аноним 05/12/18 Срд 22:04:54 #67 №1306638 
Тут есть мастера по joomla? Нужна хелпа!
someApprentice 06/12/18 Чтв 03:26:41 #68 №1306737 
>>1306284
>
>React Router так же обрабатывает роуты на серверной части помимо самого express'а. Поэтому для express'а нет никакого смысла ставить обработчик на каждый роут. Как можно заметить роут для '/' и для '/somewhere' имеет абсолютно идентичный код. Так может для рендеринга просто поставить обработчик с регулярным выражением для всех роутов '/.', а сверху перезаписать отдельные для POST (если такие потребуются) и для API?
Уточнение: Можно ли поставить обработчик всех роутов с помощью регулярного выражения '/.
', не смотря на то что такой обработчик считается неприемлемым?

https://github.com/someApprentice/Reactive-Express/blob/master/src/app.js#L22-L30
https://github.com/someApprentice/Reactive-Express/blob/master/src/app.js#L38-L46
Аноним 06/12/18 Чтв 05:10:21 #69 №1306751 
может кто-нибудь объяснить нофане, почему
>echo "$sas + \$ucc" + "30%8";
выводит "35"?
Аноним 06/12/18 Чтв 06:11:44 #70 №1306756 
>>1306751
Что ты ожидал? Ты складываешь строки, при этом они конвертируются в числа, при конвертации отбрасывается хвост после первого нечислового символа.
Чтобы соединить строки нужно использовать "."
Аноним 06/12/18 Чтв 06:51:27 #71 №1306766 
>>1306756
понял, спасибо большое!
Аноним 06/12/18 Чтв 07:27:44 #72 №1306774 
>>1306445
Я делал комменты через рекурсию.
Нагуглил функцию и под себя переделал.
Вроде как понимаю, что написано, а вроде нет.
Аноним 06/12/18 Чтв 10:53:42 #73 №1306842 
Аноны, нид сам хэлп.
Имеется некое подобие подачи заявки. Необходимо отправлять в бд дату подачи заявки.
Проблема в следующем:
Сама инфа отправляется в бд с помощью sprintf через %s\%d(плейсхолдеры вроде?)
Как отправить дату через эти плейсхолдеры? Гугол уже прочитал чёт там по поводу даты ничего нет. Мануал официальный тоже прочитал есть только про строки( str_to_date мэйби юзануть?)и про числа(напомню в бд столбец сделан с datetime)
Собственно вопрос как подготовить строку для отправки, для datetime
Аноним 06/12/18 Чтв 11:33:11 #74 №1306847 
>>1306842
Отбой тревоги пасаны. Я еблан и писал в отображении заявки а не в подаче.

Короче если кому-то будет необходимо то datetime отправляется в бд через sprintf с помощью строчного коофициента( '%s')
Аноним 06/12/18 Чтв 13:34:09 #75 №1306896 
>>1306847
А что, обязательно дату в базу отправлять из приложения? Там должна быть встроенная функция автозаполнения датой, при создании новой записи. На MySQL есть, я пользовался.
Аноним 06/12/18 Чтв 17:44:46 #76 №1307039 
Есть ресурс с которого нужно спарсить csv файлы. Например их около 50 и имеют они размер от килобайта до 300мб. На самом сайте довольно всрато все и хоть и написано что файлы для базы, но раздаются они в виде урлов на странице.

Допустим я забрал весь html через file_get_content, дальше с помощью http://php.net/manual/ru/domdocument.loadhtml.php
я спарсил их кривой html, и получил все урлы на страничке. Из них уже выбрал те что ведут на сами csv и названия файлов.

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

Меня немного смущает размер файлов и то с какой скоростью сервер отдает их.

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

Какое можно надежное решение придумать в подобной ситуации?
Аноним 06/12/18 Чтв 18:17:25 #77 №1307056 
Допустим у меня есть недоделанный проект со студентами. На нем можно регистрироваться, авторизоваться, редактировать и смотреть список, но нет валидации, куков и всей хуйни. Допустим меня позвали на собеседование после выполнения какого-то тестового задания. Стоит ли показывать это на собеседовании или отправлять ссылку на это потенциальному работодателю?
Аноним 06/12/18 Чтв 19:49:29 #78 №1307102 
>>1307056
>можно авторизоваться
>нет валидации, куков

Это как? Ну а вообще думаешь долго доделать этимелочи? Посидеть вечерок и попилить хотя бы пару заготовок для всяких классов там. Ну и в целом конечно же стоит.
API API ебаный API Аноним 06/12/18 Чтв 21:03:29 #79 №1307134 
Аноны, третий день пытаюсь запилить API на yii2 базовый шаблон.
Мануалы курил, но нихрена не понял)
Проект уже весь запилен, осталось запилить папку API для react приложения.
Есть может у кого в закромах посмотреть где, как организованно API со всеми настройками..
Никак не пойму как настроить маршруты внутри http/lockalhost/projectName/API/index.php !!
Тут могу отдавать что угодно, а вот дальше как подключать контроллеры, экшены самомго API, не понимаю...
Аноним 06/12/18 Чтв 23:27:03 #80 №1307205 
Аноны, есть ли смысл брать Котерова "пхп7 в подлиннике"? Или лучше что то другое по 7ой пыхе?
Аноним 07/12/18 Птн 01:26:50 #81 №1307255 
>>1307205
>Котерова
не стоит
Аноним 07/12/18 Птн 02:50:10 #82 №1307278 
>>1307039
>Какое можно надежное решение придумать в подобной ситуации?
Отключи уйму времени и качай по очереди.
Аноним 07/12/18 Птн 03:45:54 #83 №1307286 
>>1307039

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

Аноним 07/12/18 Птн 09:26:37 #84 №1307359 
>>1305368 (OP)
Если я пишу сразу на удаленный сервак, то никак не получится накрутить xdebug?
Аноним 07/12/18 Птн 09:44:43 #85 №1307373 
>>1306049
Благодарю за развернутое объяснение, всё получилось. Задача у меня изначально была подружить пхп-клиент с го-сервером по грпц, докеризировать всё это дело и довести до продашкн-реди ума.
Если будет кому интересно, могу залить на гит то, что в итоге получится.
Аноним 07/12/18 Птн 09:55:47 #86 №1307386 
vg - Crossout поток №84.jpg
2 дня задачу из учебника делол, оказалось всё очень просто https://ideone.com/h3Zk89
Аноним 07/12/18 Птн 11:20:27 #87 №1307434 
>>1307359
Через ssh тунель я делал так.
Аноним 07/12/18 Птн 18:17:35 #88 №1307641 
>>1307434
А можно как то дебажить код на удаленном сервере без танцев с бубном?
Аноним 07/12/18 Птн 19:16:20 #89 №1307666 
2ch.PNG
Привет двач, делаю задачку про студентов и возникла такая проблема, не знаю как сделать чтобы столбец ID в бд заполнялся сам, в базе стоит параметр AI. Сейчас он ищет последний элемент через foreach, что очень хуево. Что подскажете?
Аноним 07/12/18 Птн 19:24:41 #90 №1307668 
>>1307666
без кавычек пиши $id
Аноним 07/12/18 Птн 19:28:42 #91 №1307673 
>>1307668
А остальные переменные тоже без кавычек писать лучше?
Аноним 07/12/18 Птн 19:32:00 #92 №1307674 
>>1307673
Понял, не нужно
Аноним 07/12/18 Птн 19:57:41 #93 №1307692 
>>1307673
Когда что то не работает или чето не понимаешь каким образом работает, то распечатывай переменную, которая вызывает вопросы.
Ты можешь распечатать твой скл запрос:
$sql ='INSERT INTO hooy WHERE id = zhopa ......';
echo $sql;
И ты увидишь что конкретно сжирает сервер
Аноним 07/12/18 Птн 20:53:54 #94 №1307718 
>>1307641
Если у тебя публичный статически ip можеш попробовать в настройках php на сервере:
xdebug.remote_enable=1
xdebug.remote_host=твой айпи
xdebug.remote_port=твой открытый порт
В настройках иде слушаешь этот порт.
SSH тунель едва-ли подходит под танцы с бубном - прокидываешь порт и айпи ставишь локальный.
Зато сразу защищено и не требует статики.
Аноним 07/12/18 Птн 20:57:17 #95 №1307720 
>>1307666
Чтобы автоинкремент заработал тебе не нужно вообще указывать id в INSERT, пропускай этот столбец.
Аноним 07/12/18 Птн 21:05:45 #96 №1307722 
>>1307720
Спасибо! Похоже я раньше, что-то не так сделал и это не работало
Аноним 07/12/18 Птн 21:14:17 #97 №1307732 
Объясните как правильно развернуть дев-окружение php + php-fpm + nginx + mysql в докере. Чем отличается MariaDB от MySQL? Дело в том, что для Alpine есть только Мария.
Аноним 07/12/18 Птн 21:40:38 #98 №1307742 
>>1305368 (OP)
Почему YII и Symfony, а не Laravel?
Аноним 07/12/18 Птн 23:14:16 #99 №1307776 
>>1307742
Нравится ларавел - бери его
Аноним 07/12/18 Птн 23:37:25 #100 №1307787 
>>1307776
Считается, что в Symfony много джавовой наркомании. Но это не точно. Поэтому спросил почему именно они.
Аноним 07/12/18 Птн 23:40:13 #101 №1307791 
>>1307787
Симфони - более тырпрайзный вариант, эдакий спринг для мира пхп.
Ларавел больше про хуяк-хуяк-в-продакшен.
Юи не трогай - устаревший кусок говна.мимо 1.5 года сидел на юи2 в галерке
Аноним 08/12/18 Суб 01:26:06 #102 №1307826 
PHP - кусок говна. Совсем не мотивирует меня работать на нем.
Аноним 08/12/18 Суб 01:32:51 #103 №1307828 
бамп
Аноним 08/12/18 Суб 01:40:01 #104 №1307830 
>>1307826
Зачем пишешь сюда тогда?
Чего стек не сменишь?
Аноним 08/12/18 Суб 13:30:15 #105 №1307939 
image.png
>>1307826
Ну-ну.
Аноним 08/12/18 Суб 14:27:56 #106 №1307965 
'SELECT * FROM student LIMIT $limit OFFSET $offset'
Такие же запросы можно использовать? Просто в задаче про студентов написано, что нельзя переменные вставлять прямо в запрос. Но здесь нет никаких данных введенных пользователем, для них же защита не нужна?
Аноним 08/12/18 Суб 16:06:12 #107 №1308014 
Аноны, туплю.
Как обратиться к этим элементам? Надо просуммировать их все.
Аноним 08/12/18 Суб 16:06:30 #108 №1308016 
Снимок.PNG
Не прикрепилось
Аноним 08/12/18 Суб 16:07:53 #109 №1308018 
Отбой, я понял
Аноним 08/12/18 Суб 16:08:05 #110 №1308019 
>>1308014
>>1308016
http://php.net/manual/en/control-structures.foreach.php
Аноним 08/12/18 Суб 16:58:59 #111 №1308059 
>>1307965
>Но здесь нет никаких данных введенных пользователем, для них же защита не нужна?
Ты, скорее всего, функцию запроса к БЖ не очень удачно реализовал - в норме она очищает вообще все данные извне, пользователь там или само прилетело.
Покаж функцию свою.
Аноним 08/12/18 Суб 17:05:38 #112 №1308062 
>>1308059
public function getStudentsByLimit($limit, $offset){
$db = $this->dbase;
$stmt = $db->prepare("SELECT * FROM student LIMIT $limit OFFSET $offset");
$stmt->execute();
$result = $stmt->fetchAll();
return $result;
}
Аноним 08/12/18 Суб 17:12:21 #113 №1308066 
image.png
>>1308019
Велосипеды конструировать изволите?
http://php.net/manual/ru/function.array-sum.php
Аноним 08/12/18 Суб 17:25:47 #114 №1308071 
>>1308066
Это ваще пиздец, особенно когда это не что-то очевидное, вроде сложений значений массива, а какая-нибудь ебанутая хуйня. Тратишь кучу времени на нормальную реализацию и поиск решения, а потом узнаешь, что уже есть готовая функция для этого случая, а ты просто изобретал велосипед.
Аноним 08/12/18 Суб 17:35:56 #115 №1308081 
>>1308071
Знакомо. Наверное, все через это проходили.
Рекомендую всегда, вообще всегда, смотреть документацию при работе с каким-то типом данных.
Вот работаешь ты с массивами - открой вкладку со списком функций на сайте и просмотри их все.
Это же самообман всё - думаешь, что долго открывать, искать эти функции, как дурак, тогда как ИРЛ всё обычно наоборот - функции имеют понятное название, а пилить велосипед с тем же foreach выйдет гораздо дольше, чем просто взять и использовать нужную из документации.
Аноним 08/12/18 Суб 17:40:35 #116 №1308084 
>>1308071
в вебе уже всё изобретено, гуглишь как сделать хуйня нейм и получаешь уже готовый код
Аноним 08/12/18 Суб 18:10:21 #117 №1308109 
>>1307965

А откуда ты в функции знаешь, откуда пришли данные? На них это не написано. Плюс, offset явно создается на основе данных пользователя.

Ну вот ты напишешь функцию:

function getStudent($limit, $offset)
{
....
'SELECT * FROM student LIMIT $limit OFFSET $offset'
...
}

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

getStudents($_GET['limit'], ...)

И у нас инъекция.

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

Кстати, в случае чисел для защиты достаточно применить intval() или поставить тайп-хинт int, но через плейсхолдеры все же будет надежнее. Их убрать труднее, чем заменить int на string, не заметив что это для обеспечения безопасности.
Аноним 08/12/18 Суб 18:18:09 #118 №1308113 
>>1308062
Не оч реализация, как по мне.
Обычно так пишу - https://ideone.com/TPhsrf
я там скобки посеял где-то пока писал

Если у кого есть ещё идеи - делитесь.
Аноним 08/12/18 Суб 19:17:20 #119 №1308169 
>>1308109
Пользователь не может передать туда ничего, у меня там идет не через гет, а просто типа site.com/page/2. Там все рассчитывается для создания пагинации. В оффсет и лимит не может попасть ничего кроме числа по идее. Я понимаю что этого не видно и тут не экстрасенсы сидят. Может я вопрос не так задал: можно ли вставлять переменные прямо в sql запрос, если я уверен, что туда не попадет какая-нибудь левая хуйня? Не будут ли на меня смотреть как на дауна из-за этого?
Аноним 08/12/18 Суб 19:22:27 #120 №1308176 
>>1308109
А хотя не, что-то я невнимательно твой ответ прочитал. Чтобы кто-нибудь, кто 'в теории' будет использовать скрипт, не сломал ничего, нужно действительно использовать какую-нибудь защиту. Завтра сделаю.
Аноним 08/12/18 Суб 19:22:32 #121 №1308178 
>>1308169

Ты то ли невнимательно прочел пост, то ли что-то не так понял.

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

Функция >>1308062\t этим требованиям не соответствует.

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

Попробуй подумать чуть масштабнее: проект может разрабатывать несколько человек, код может быть большой и ты замучаешься весь изучать. Потому функция была должна быть написана безопасно сама по себе, чтобы для ее проверки не надо было изучать остальной код.
Аноним 08/12/18 Суб 19:26:52 #122 №1308183 
>>1308178
Да, спасибо, я понял. Просто не подумал, что нужно защищать код не только от злых хакеров (лол), но и от мифического человека, использующего мой скрипт.
Аноним 08/12/18 Суб 19:34:41 #123 №1308189 
>>1308183
>от мифического человека, использующего мой скрипт
Ты сам через месяц забудешь что там накалякал.
Аноним 08/12/18 Суб 20:04:06 #124 №1308207 
>>1308062
>$db = $this->dbase;
Какая-то бессмысленная строка. Зачем она нужна?
Почему заместо этого всего:
>$db = $this->dbase;
>$stmt = $db->prepare()
просто не использовать:
$this->dbase->prepare()
Аноним 08/12/18 Суб 21:43:22 #125 №1308244 
Сапсан, как вывести погоду через API в динамическую обложку для вк
Аноним 09/12/18 Вск 01:27:38 #126 №1308331 
>>1305368 (OP)

https://ideone.com/YZhoeC

ООП-Будильник 2.0 с учетом замечаний из предыдущего треда, надеюсь ничего не упустил. Спасибо за подробные замечания, всё очень доступно и понятно!

https://ideone.com/Kj2GBG
Версия с тестами, выглядит не так стильно но работает. Ну эмм, я пошел делать вектор.
Аноним 09/12/18 Вск 10:21:03 #127 №1308417 
Это снова я!
Сумма прописью ULTIMATE FINALLY (надеюсь) EDITION - https://repl.it/@MaksimSienchien/GrowingStarkProducts

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

https://repl.it/@MaksimSienchien/LimitedTrimAfkgaming-1
Аноним 09/12/18 Вск 11:08:37 #128 №1308429 
ОП, глянь "Гостиницу" мою, если будет время:
http://sandbox.onlinephpfunctions.com/code/bf265b1dcfaab38559a459812aa03f0c5583fc7b

Также есть вопрос по оформлению кода, в PSR-1, PSR-2 ответа не нашел, PHPStorm на автомате не форматирует это. Как правильно разбивать построчно различные конструкции. Вот примеры у меня в коде - 55-60 строки (сокращенный if), 188-192 строки (длинное условие в if-е), 268-274 строки (массив).
Аноним 09/12/18 Вск 12:27:45 #129 №1308456 
>>1305368 (OP)
Может ли не работать перенаправление header("Location: /") из за того, что есть деприкейтед ошибка, на которую я пока забил хуй?
Аноним 09/12/18 Вск 12:28:19 #130 №1308457 
>>1308456
Cannot modify header information - headers already sent by...
Аноним 09/12/18 Вск 12:34:39 #131 №1308459 
>>1308456
Разобрался. Если кому интересно, да, может. Выводимые серваком ошибки не дают изменять заголовки
Аноним 09/12/18 Вск 18:26:00 #132 №1308663 
Если кому-то интересно - статья с вопросами и задачками с собеседования в Яндексе: https://medium.com/@olgakozlova/%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B-%D0%B8%D0%B7-%D1%8F%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B0-895261c94e16

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

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

Аноним 09/12/18 Вск 18:32:42 #133 №1308667 
Из предыдущего треда:

>>1299665

> https://repl.it/@underbottom/ATM - банкомат.

> $count100 = 0;
> $count200 = 0;
> $count500 = 0;
Если ты начинаешь создавать переменные с цифрами на конце, скорее всего тебе нужен массив. Не $count100, а $count[100]. У тебя, чтобы добавить новый номинал, надо переделывать весь код.

В общем, там сейчас один и тот же код скопирован 6 раз, надо использовать массив и цикл вместо копипасты.

В Википедии написано, что жадный алгоритм работает только для "канонических" систем монет или купюр: https://ru.wikipedia.org/wiki/%D0%96%D0%B0%D0%B4%D0%BD%D1%8B%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC#Размен_монет

> https://repl.it/@underbottom/smart-ATM -головоломка.

Да, тут идея относительно верная - перебирать все сочетания количеств купюр. Но проблема в том, что время выполнения программы быстро растет. Допустим, у тебя по 10 штук каждой купюры = это 10^6 = 1 млн. итераций (терпимо). Но если купюр будет по 100 штук, то это уже 100^6 = 10^12 = триллион итераций. Слишком долго будет работать.

Потому надо внедрять оптимизации перебора, вроде таких:

- если мы хотим выдать 6600, то не имеет смысл проверять варианты, где 2 и более купюры по 5000. Имеет смысл проверять варианты только 0x5000 и 1x5000
- если мы хотим выдать 500500, то сначала стоит попробовать вариант 100 x 5000, так как он ближе всего к цели, и только потом 99x5000, 98 x 5000 и тд.
- если мы хотим выдать 500500, и у нас сумма купюр номиналом < 5000 равна 6000, то не имеет смысла проверять варианты вроде 96 x 5000, 95 x 5000 итд., так как при их использовании нам не хватит мелких купюр.

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

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

Ну и у тебя скопировано 6 циклов, было бы выгоднее заменить их на рекурсивный вызов функции с одним циклом. Почитай про рекурсию и попробуй заменить циклы на нее. А то если мы хотим сделать 4 или 7 номиналов, надо код переделывать. Хватит копипастить.

Похожая задача о сдаче: https://habr.com/post/109384/

Почитать про задачи о размене: https://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D1%8E%D0%BA%D0%B7%D0%B0%D0%BA%D0%B5#.D0.97.D0.B0.D0.B4.D0.B0.D1.87.D0.B0_.D0.BE_.D1.80.D0.B0.D0.B7.D0.BC.D0.B5.D0.BD.D0.B5

В этих задачах число купюр неограниченно. Потому тебе можно изучить алгоритм и доработать его для ограниченного числа купюр.
Аноним 09/12/18 Вск 19:39:27 #134 №1308685 
Делаю телеграм-бота.
С локального сервера или через браузер все работает, но при отправлении текста из сервера "Aukštųjų" превращается в "Auk", а с urlencode в "Auk&#353;t&#371;j&#371;". Что делать? Использую Heroku, если это важно.
Аноним 09/12/18 Вск 19:56:26 #135 №1308690 
>>1305368 (OP)
ОП, что там с решением задачки TestHub? Есть какие-то варианты? Не совсем понимаю как сделать БД для вопросов с несколькими вариантами ответа.
Аноним 09/12/18 Вск 23:53:34 #136 №1308790 
>>1308690

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

- вопросы - questions
- варианты ответов - options - связаны с вопросами как M-1
- сеанс теста - session
- ответ на вопрос - answer, связан с session и questions
- выбранные варианты ответов - selected_options, связаны с answer и options
Аноним 10/12/18 Пнд 03:43:52 #137 №1308850 
Ответы на посты предыдущего треда с 305 до конца

>>1299989

> Почему не открывается страница в браузере из PHPStorm.

Тебе надо проверить настройки PHPStorm, вот этот раздел

https://www.jetbrains.com/help/phpstorm/settings-tools-web-browsers.html
https://www.jetbrains.com/help/phpstorm/configuring-local-interpreter.html

>>1299566

> Почему дампы выводятся дважды, причем показывают они разную информацию?

Потому, что код выполняется 2 раза.

>>1299564

> https://ideone.com/AbXtmY правильно ли я решил задачу со школьником взявший кредит на айпад?

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

>>1299056

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

Ссылки и ООП наверно.
Аноним 10/12/18 Пнд 03:44:22 #138 №1308851 
>>1298694

> Если по мануалу опа я не смог в MVC - я сильно тупой?

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

>>1298653

> https://repl.it/@underbottom/words-out-of-digits - Числа прописью.

> function makeThree($number) {
> $number/=1000;
Тут стоит сделать округление, а то % рассчитан на работу с целыми числами.

> function makeWordOfKeys ($number,$currencyName) {
Эта функция выглядит усложненно. Вот я писал другому анону про то, какие должны быть функции, прочитай пост: https://phpclub.tech/pr/res/1281608.html#1304593

> Видимо ты не понял идею разбиения кода на функции. Суть в том, что длинный кусок кода, который делает несколько вещей, сложно понять. Его сложно править, в нем много переменных, и можно нечаянно что-то сломать. Ну и физически прочитать 1000 или 10 000 строк кода быстро невозможно. Поэтому код разбивают на отдельные действия и выносят эти действия в функции. Так, что мы можем вместо огромной портянки кода читать только небольшую функцию, которая нас интересует.

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

> Вот пример более адекватной функции:

> /** 
> * Принимает на вход целое число от 0 до 999 и возвращает его
> * текстовое представление.
> *
> * Например, для числа 312 вернет "триста двенадцать".
> */
> function spellNumber(int $number): string
>
> Согласись, что даже если ты не прочитал код функции, ты из описания уже понимаешь, что она делает, и как ее можно использовать. Например, так:
>
> echo spellNumber(123) . "\n";
>
> Комментарий /** ... */ - это комментарий в формате phpdoc ( https://ru.wikipedia.org/wiki/PHPDoc ). Слово int и string - это тайп-хинты, советую их изучить:
>
> - http://php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration
> - http://php.net/manual/ru/functions.returning-values.php
>
> То есть ты должен в идеале каждую функцию так описать. Если ты не можешь понятно описать назначение функции и формат ее аргументов, то скорее всего, ты что-то неудачно спроектировал.

Функция makeWordOfKeys несамостоятельна и неуниверсальна. Она принимает на вход массив из 3 чисел и массив из 9 слов (это кстати не описано в комментариях и надо самому догадываться). И она явно привязана к другой функции, которая содержит этот массив из 9 слов. Лучше было бы сделать функцию, которая получает на вход число, формы слов и выбирает одну из форм. Тогда она будет достаточно отделена от остального кода. А так, у тебя это просто продолжение другой функции.

Вдобавок, в ней еще куча копипасты.

Та же проблема с makeWordOfThree. Непонятно, почему она должна получать именно массив из 3 чисел, а не одно число, например. И написание цифр лучше не передавать в нее, а поместить либо в нее, либо в отдельную функцию. В аргументы мы передаем значения, которые влияют на работу функции. Но этот массив с написанием чисел всегда одинаков и его передавать не надо.
Аноним 10/12/18 Пнд 03:45:08 #139 №1308852 
>>1298054

> Квантификаторы - условия задаваемые выражению внутри скобок.
нет, квантификаторы - это символы, которые задают число повторов идущего перед ними символа или выражения. Например: ?, +, *, {...}

> 2) Фигурные скобки. Внутри них задаётся число повторений от n до m.
Верно.

> 3) Круглые скобки - объединяют набор символов и квантификаторов в один элемент(тупая формулировка наверное).
Верно.

> задачка. Число находим вот так [\d]+. Найти число с запятой [\d]+(\,\s).
> >[\d]+(\,\s)*

Нет, неверно. У тебя написано:

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

То есть твое выражение это:

число (запятая пробел)*

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

число (пробелы запятая пробелы число)*

Попробуй записать это на языке регулярок.


>>1298000

> https://repl.it/@underbottom/povtorenie1 - (исправление пробелов и заглавные буквы)

Здесь можно было обойтись одним preg_replace:

> $regexp = "/(\S+)(\s)([,.!?:;]+)(\s)/ui";
> $text = preg_replace($regexp,"$1$3",$text);
> $regexp = "/([,.?!:;]+)([a-zа-яё0-9]+)/ui";
> $text = preg_replace($regexp,"$1 $2",$text);

В первом выражении [,.!?:;]+ квантификатор плюс "жадный" ( http://php.net/manual/ru/regexp.reference.repetition.php ) и захватит максимально возможное число символов в тексте. То есть, если там будет многоточие, то эта конструкция захватит все точки в нем. И потому можно одним preg_replace и убрать лишние пробелы, и добавить один пробел после знака.

> function makeLetterUp ($match) {
Эта функция сделана не очень логично, что она принимает массив, а не строку с буквой. Для использования с preg_replace_callback выгоднее было бы использовать анонимную функцию:

$upcaseLetter = function ($match) { ... };
...preg_replace_callback(..., $upcaseLetter);

Или вообще, убрав переменную:

...preg_replace_callback(..., function ($match) {
...
});

Почитать: http://php.net/manual/ru/functions.anonymous.php

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

А так, решено верно.

> https://repl.it/@underbottom/repeat4 - поправил недочёты.

> [^\\s]
Можно просто \\S

> $changedText=str_replace("здел","сдел",$changedText);
Слово "раздел" будет заменено на "расдел".

> [^,а-я0-9a-z]
ё не входит в диапазон а-я и его надо указывать отдельно.

> (а|но\s)

Здесь \s относится только к "но", но не к "а". Также, здесь проще использовать \b, чтобы указать, что там должна быть граница слова.

В общем, пока тут есть проблемы.

> https://repl.it/@underbottom/repeat3 - Исправил. Я перемудрил.

Ок, верно.

> https://repl.it/@underbottom/value-credit - долго думал, как реализовать вычисления наименьшей цены. Оказалось min сравнивая массивы берёт только валью нулевой строки.(пытался ставить миллион дней результат не поменялся).

Если 3 банка, то можно просто поставить 2 if. Также, можно сделать цикл по массиву, сравнивая каждый элемент с ранее найденным мин. значением. Также, можно отсортировать массив и взять первый элемент.

> $result [0] = 0;
> $result [1] = $i;

Это не очень понятный код, так как непонятно, что хранится в элементах массива. Что значит $result[0]? Лучше использовать переменные, а в конце функции написать:

return [$price, $bankName, ..];

Так виден формат результат и что в нем. Дополнительно можно описать это в комментарии перед функцией.

Я, кстати, не знал про такое использование min() и не встречал такое нигде. Но почему бы и нет.

Решено верно, но код мог бы быть понятнее.

> https://repl.it/@underbottom/ExcitingUnimportantExperiments - переделал регулярку, уверен, что нужно не так. Но вроде работает.

Ошибка 404 при попытке открыть ссылку.

> https://repl.it/@underbottom/repeat1 - переделал регулярку и способ решения.

> $phone = preg_replace ("/\+7/","8",$phone);
тут стоило добавить привязку к началу строки, а то +7 может быть и в середине. В остальном верно.


> https://repl.it/@underbottom/exam-after-chapter - опять перемудрил. Исправил.

Твоя программа считает одиночную латинскую букву вроде x или z ошибкой: https://repl.it/repls/ForsakenUnitedFreesoftware

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

> https://repl.it/@underbottom/yodashuffler

> $word = [];
> $phrases = [];
Эти глобальные переменные никак не используются.

> function makeYodaStyleText($text) {
> $phrases = [];
> $i = 0;
Это можно было не писать.

> ([.|!|?|;])
В квадратных скобках верт. черта не является спецсимволом и не имеет специального значения. Надо писать либо [.!?;] либо \.|!|\?|; . И круглые скобки не нужны тут. Что они делают тут?

> foreach ($word as $idinahooi) {
$words as $word. Как читать твою программу?

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

В общем, сильно переусложнено.
Аноним 10/12/18 Пнд 03:47:03 #140 №1308853 
Эти задачи:

https://repl.it/@underbottom/povtorenie1
https://repl.it/@underbottom/repeat4
https://repl.it/@underbottom/repeat3
https://repl.it/@underbottom/value-credit
https://repl.it/@underbottom/ExcitingUnimportantExperiments
https://repl.it/@underbottom/repeat1
https://repl.it/@underbottom/exam-after-chapter
https://repl.it/@underbottom/yodashuffler

Проверены тут: >>1308852\t
Аноним 10/12/18 Пнд 03:47:30 #141 №1308854 
>>1297954

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

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

- сетевое программирование и сокеты Беркли
- веб-сокеты и что-то вроде WAMP
- ReactPHP для асинхронной работы с сокетами

Если у тебя однопользовательская игра, проще обойтись без сервера. Если многопользовательская - придется делать сервер. Вот тут я писал, как это делают в настоящих играх: https://phpclub.tech/pr/res/1281608.html#1304936

Ты можешь делать на PHP, но если хочешь максимум производительности и десятки тысяч пользователей, то придется задействовать Си/Го/Раст/D/Java - что-то из этого набора. Но если ты не игровая студия, то можно и на PHP сделать.
Аноним 10/12/18 Пнд 03:48:01 #142 №1308856 
>>1297952

> Анончики, требуется помощь с задачей ОПа.
> Что я накрутил - ([\s\-()]\+7|8)([\s\-()][0-9]){10}$. Не ищет номер с пробелом между + и 7. Очевидным решение будет написать \s* между ними и тогда всё заработает, но сомневаюсь, что это правильное решение

Вообще-то это будет правильным решением. Если между ними может быть пробел, надо так и написать. Так, регулярка верная.

>>1297532

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

>>1293491

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

Если ты хочешь критику, ты можешь в этот тред выкладывать, может кто-то прокомментирует, или поискать, может есть какие-то форумы, где можно обсудить код. На SO есть https://codereview.stackexchange.com/ , но он на английском - может есть русская версия?
Аноним 10/12/18 Пнд 03:48:26 #143 №1308857 
>>1292844

> что делает эта функция? mysqli_fetch_array()
В офиц. мануале написано. Что именно там непонятно?

> И почему в конце mysqli стоит буква i?
Потому что было расширение mysql. Потом сделали улучшенное расширение под названием mysqli (MySQL Improved) и все функции из него имеют этот префикс, чтобы их не перепутали с функциями расширения mysql.

>>1292670

> Единственное что - создаётся ощущение, что я делаю что-то не так. Пока не буду выкидывать код(т.к. он не дописан), но распишу что он из себя представляет. Надеюсь что Добрый Анон скажет где я проебался.

Извини, без примеров кода это трудно.

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

Можно.

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

Зато ты можешь создать объект класса-наследника и на нем вызвать этот метод.
Аноним 10/12/18 Пнд 03:48:54 #144 №1308858 
>>1292672

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

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

>>1292613


> Задача про калькулятор
> https://ideone.com/kW3eWB

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

Вот если ты не боишься очень сложного кода, посмотри, как разработчики PHPExcel реализовали вычисление выражений: https://github.com/PHPOffice/PhpSpreadsheet/blob/develop/src/PhpSpreadsheet/Calculation/Calculation.php

Функции strpos, strlen надо избегать, так как они не поддерживают utf-8: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

Команда

$op;

выглядит странно.

Переменную $flag нужно назвать более осмысленно, чтобы было понятно, что в ней.
Аноним 10/12/18 Пнд 03:49:34 #145 №1308859 
>>1291781

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


>>1308429

> public function addRooms(array $roomsForAdding)
Это неудобная функция, так как непонятно, какого формата массив в нее передается. Логичнее было принимать сразу массив объектов-комнат. Это гораздо гибче, так как в таком случае можно как угодно настроить эти комнаты, и даже передать вместо комнаты ее наследника (правда, не очень представляю, зачем). А у тебя - нельзя.

Или хотя бы сделать функцию addRoom() с человекопонятными параметрами.

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

> echo "Добро пожаловать в гостиницу '$name'";
Это для отладки? в реальном коде такого быть не должно. Представь, ты хочешь на сайте вывести информацию о комнатах, создаешь объект, а он пользователю на страницу выводит надпись "добро пожаловать", причем в самом верху страницы, еще до шапки, и в неправильной кодировке (так как метатег, задающий кодировку, еще не передан).

Гостиница не должна сама ничего выводить. Она только принимает и возвращает значения.

> public function checkGuests(array $guestsList, string $entryDate, string $departureDate)
> string $entryDate
Почему не DateTimeInterface? У нас уже есть объект для представления времени. Это избавляет нас от необходимости проверять правильность строки, например.

> public function checkGuests(array $guestsList, string $entryDate, string $departureDate)
Стоит добавить проверку, что вторая дата больше первой. Это позволит быстро обнаружить ошибку программиста. А так - ошибка останется не замеченной, просто не получится заселить гостей, как будто номеров нету. Это собьет всех с толку и затруднит обнаружение причины проблемы.

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

> $guestsForRegestration = array_slice($guestsList, 0, $roomForRegestration->getCapacity());
> $guestsList = array_slice($guestsList, $roomForRegestration->getCapacity());

Есть array_splice для этого.

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

> public function printFreeRooms
Гостиница ничего не выводит. Она должна просто вернуть данные. Выводом занимается внешний код. Разделение ответственности.

> public function printGuestHistory(string $name)
Стоило бы Гостя тоже сделать объектом, можно даже без полей. Ну и интуиция подсказывает, что Гостиница захочет знать, кто вместе с кем приезжает, потому может понадобиться даже ГруппаГостей. Но делать ее пока не надо, раз это не просят.

> if (in_array($name, $regestration->getGuests())) {
Лучше бы сравнивать не имена, а сами объекты. Объект обладает идентичностью, он уникален, и подходит для сравнения.

> for ($fromTheDate; $fromTheDate <= $toTheDate; $fromTheDate->add(new DateInterval('P1D'))) {
> $dailyIncome = 0;
> foreach($this->regestrations as $regestration) {
А нельзя ли тут как-то оптимизироваться за счет, например, сортировки броней по дате? Или, например, первым проходом отсеять брони, попавшие в интервал, а вторым - пройтись по ним и посчитать массив сумм по дням. А то у тебя тут сложность O(days x regestrationsCount) получается.

> if (($entryDate >= $regestration->getEntryDate() && $departureDate <= $regestration->getDepartureDate()) ||

А можно еще сделать if ($regestration->includes($entyrDate)) или даже $regestration->intersects($entry, $departure). Это повысит читабельность. А то ты относишься к объектам как к массивам, которые ничего не умеют кроме хранения данных и ничего сами сделать не способны.

Также, здесь можно было ради читабельности сократить $regestration до $r.

> array_splice($freeRooms, $key, 1);
Плохая новость: у array_splice и у array_search сложность O(N), а у array_key_exists/unset() всего лишь O(1), то есть гораздо быстрее. Массивы заточены на поиск по ключу, а не значению. Можно бы оптимизировать, заменив splice на unset. Еще один вариант - использовать SplObjectStorage, который умеет хранить коллекцию объектов как ключи массива и искать или удалять их за O(1).

Если у нас 100 номеров и 10 000 броней, то получается порядка 100 x 10 000 шагов, а с оптимизацией - в 100 раз меньше.

Это конечно задача на ООП, но почему бы заодно не поучиться оптимизации?

> public function __construct(Room $room, DateTimeImmutable $entryDate, DateTimeImmutable $departureDate, array $guestsList) {

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

И еще, для проверки можно бы использовать юнит-тесты. Вот я тут подробно про них писал: https://phpclub.tech/pr/res/1281608.html#1303707

И вот что у анона получилось: https://ideone.com/Kj2GBG

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

> Как правильно разбивать построчно различные конструкции. Вот примеры у меня в коде - 55-60 строки (сокращенный if), 188-192 строки (длинное условие в if-е), 268-274 строки (массив).

А точно ли PSR не говорит?

> 5. Управляющие конструкции
> Перед закрывающими круглыми скобками НЕ ДОЛЖНО быть пробелов.
> Между закрывающей круглой скобкой и открывающей фигурной скобкой ДОЛЖЕН быть один пробел.

Тут кое-что написано. У тебя явно не выполняется требование про отсутствие пробелов перед круглой скобкой.

А вообще, если что-то не определено в PSR, и есть несколько вариантов, то лучше определить это в документации к проекту или в внутрикорпоративном стандарте. Можно также посмотреть, как это сделано в Симфони и сделать так же: https://github.com/symfony/symfony

Также, можно почитать https://github.com/php-fig/fig-standards и поднять вопрос в их mailing list. Например, предложить свой вариант стандарта. Вот здесь ты можешь почитать, как неспешно идет обсуждение новых стандартов: https://groups.google.com/forum/#!forum/php-fig
Аноним 10/12/18 Пнд 03:49:40 #146 №1308860 
ОП, а ты богатый?
Аноним 10/12/18 Пнд 04:31:20 #147 №1308865 
Я помню неделю-другую назад тут был разговор про ковариантность и контрвариантность и приведен пример, не работавший в PHP:

class Child extends Parent {};
interface X
{
public function get(): Parent;
}

interface Y extends X
{
public function get(): Child;
}

Готовится изменение, которое это разрешит: https://wiki.php.net/rfc/covariant-returns-and-contravariant-parameters
Аноним 10/12/18 Пнд 04:49:12 #148 №1308868 
Также, в дополнение к PSR-1 и PSR-2 готовится еще один стайл гайд - PSR-12 (в чем вы можете убедиться, зайдя на https://www.php-fig.org/psr/ ): https://github.com/php-fig/fig-standards/blob/master/proposed/extended-coding-style-guide.md

Кто там хотел больше правил? Налетайте.

Стандарт еще не принят и можно вносить пожелания и отмечать недостатки вот тут: https://groups.google.com/forum/#!forum/php-fig (читайте правила прежде чем постить).



Аноним 10/12/18 Пнд 11:04:03 #149 №1308946 
Посаны, можно ли с помощью call_user_func_array вызвать не статический метод?
Аноним 10/12/18 Пнд 11:48:31 #150 №1308962 
Посмотрел требования в куче вакансий, чет охуел, при том что я не первый месяц php дрочу. Что нужно знать, чтобы вкатиться: html, css, php (ООП, MVC), опыт больше года, sql, laravel или yii2 (остальные фреймворки гораздо реже), js, linux, git, еще куча всякой хуеты. Часто в требованиях дополнительно встречается jquery, еще какие нибудь джс фреймворки, битрикс, всякие цмс вроде джумлы или вордпресса. Иногда требуется вышка. Реже техническая вышка. Еще реже профильная. Понятно, что выучить sql на уровне 'select * from %huina%' можно очень быстро, но если по всей этой хуете требуют глубокие знания, то это учить заебешься. Есть конечно и вакансии аля PHP, sql, js, html, css даже без фреймворков и прочего, но их гораздо меньше.
Аноним 10/12/18 Пнд 15:09:26 #151 №1309030 
Помогите написать функцию, которой я бы в некотором виде кормил массив с состоящий из ассоциативных массивов ключей и значений, а она бы за 1 инсерт все это записывала в базу. Пока что на основе pdo пытался написать. Но чет не особо работает. Да еще и ошибки не могу отловить.

Вот пока то, что накалякал за сегодня по примерам: https://ideone.com/pG9yPF
Использовал вот этот подход https://phpdelusions.net/pdo_examples/insert#multiple как пример.

Тестовую дату из двух значений она отработала, а вот на 300 массивов по 16 значений уже не переваривает (белый экран без ошибок на локалке с включеным error_reporting(-1); )

Можно и другой формат рассмотреть, где будут отдельно передаваться ключи, и отдельно массив из массивов значений (не ассоциативные), главное что бы это дело отрабатывало как часы и могло за раз сделать в базу хотя бы 10 000 записей.
Аноним 10/12/18 Пнд 18:15:43 #152 №1309134 
>>1309030
Губу закатай - с хайлоадом надо ебстись порядочно и простой функцией тут не отделаешься.
Аноним 10/12/18 Пнд 18:32:35 #153 №1309144 
>>1308946
Д - документация.
Аноним 10/12/18 Пнд 23:26:15 #154 №1309297 
>>1309134
Это не особо хайлолад. Просто есть csv файлы которые нужно парсить раз в месяц. В самом большом файле 1.1милиона строк пока.
Аноним 10/12/18 Пнд 23:28:37 #155 №1309299 
Подкиньте материалов по хуйло аду.
Аноним 11/12/18 Втр 15:11:28 #156 №1309639 
Authorizer.authenticate(() => {this.setState({redirectToReferrer: true})}) читаемый формат записи?

Или лучше поставить пробельчики Authorizer.authenticate(() => { this.setState({ redirectToReferrer: true }) })?

Или ещё лучше переносить всё на новую строку?

Authorizer.authenticate(() => {
this.setState(
{
redirectToReferrer: true
}
)
});
Аноним 11/12/18 Втр 16:32:58 #157 №1309679 
>>1309144
Я нуфаг и ничего не понимаю че там написано
Аноним 11/12/18 Втр 16:50:35 #158 №1309690 
>>1309679
Нет, ты просто ленишься и предпочитаешь задавать людям тупые вопросы вместо самостоятельных поисков.
Аноним 11/12/18 Втр 16:58:39 #159 №1309692 
>>1309030
>10 000 записей.
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/batch-processing.html
Аноним 11/12/18 Втр 17:01:43 #160 №1309694 
>>1308868
Бесполезная хуйня
Аноним 11/12/18 Втр 17:03:16 #161 №1309696 
>>1309690
Бро ты прав как никто. Просто меня пугает документация т.к. раньше я вобще не понимал ни слова там и поэтому мне легче спросить.
Я посидел сейчас 5 блять минут в гугле и всё понял лол
Аноним 11/12/18 Втр 17:04:18 #162 №1309699 
Но так или иначе, официальную документацию мне всё равно сложно воспринимать. Я могу использовать ее как дополнение к объяснению от какого то живого человека.
Как с этим бороться?
Аноним 11/12/18 Втр 17:17:33 #163 №1309708 
>>1309699
>Как с этим бороться?
Учить PHP. Именно понимание документации показывает твой уровень владения.
Я тоже раньше боялся, а вчера себя поймал на том, что одним глазом смотрю стрим, а вторым - читаю php.net впрок.
Теперь пугаюсь гитхабов и прочих толстых библиотек.

Привыкай короче.
Аноним 11/12/18 Втр 18:33:16 #164 №1309754 
Прост желаю выговориться, но если советом поможете будет не плохо
Значит школьник, 17лвл. В течении 2-х месяцев нужно начать, как минимум самому себя содержать а желательно чуть больше и шоб жить было где. Так вот, прочел значит я летом 4-е издание Робин Никсона "Создаем Динамические сайты...", и еще посоздавал всякого чисто для себя, совсем не мног. Чуть чуть почитал статей да мануала. Естественно немног из того, что рекомендует ОП.
Вроде не глупый, да и в теме нравиться разбиратся. Я очень хорошо обучаюс и готов впахивать. Но тут у меня возникают проблеммы с вектором развития: я просто не понимаю, что за чем будет эффективнее, и в какой момент я стану востребованным юниором. Хочу выйти хотя бы уверенно на фриланс, но пока точно не справлюсс.
Умею еще видосики нарезать, но не более.
Как лучше мне сейчас поступить?
P.S.
Понятно, что сидеть просто так я и сейчас не буду. Просто хотелось бы узнать твою точку зрения анон.
P.P.S.
Наверн часто подобное влетает в тред?
Аноним 11/12/18 Втр 18:39:53 #165 №1309758 
Умные люди, поясните пожалуйста.
Зачем вобще нужен механизм наследования абстрактных классов, если можно тупо создать класс со статическим методом и вызывать его где только можно?
Аноним 11/12/18 Втр 18:53:50 #166 №1309761 
>>1309758
>Зачем вобще нужен механизм наследования абстрактных классов
Чтобы C++ дебилам было дегче стать Java дебилам.


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

Лучше создать Класс с нужным тебе методом и передавать его в обьект другого класса.
гугли внедрение зависимостей
Аноним 11/12/18 Втр 19:02:01 #167 №1309765 
>>1309754
> 2-х месяцев
Идешь на ВСЕ фриланс биржи, ищешь заказы на WordPress, берешь и делаешь сидишь по 8 и хуяришь, получаешь свои гроши.
Аноним 11/12/18 Втр 19:31:52 #168 №1309785 
>>1309765
Могу попробовать, но с WP не особо дружу, да и не очень он мне нравиться. Как вариант, спасибо
Аноним 11/12/18 Втр 20:30:03 #169 №1309814 
>>1309758

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

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

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

> если можно тупо создать класс со статическим методом и вызывать его где только можно?

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

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

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

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

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

class Element
{
abstract public function getPinCount();
}

Класс резистора определит его как

class Resistor extends Element
{
public function getPinCount()
{
return 2;
}
}

А у транзистора их будет, например, 3. У микросхемы - вообще разное число в зависимости от типа корпуса:

class IC extends Element
{
public function getPinCount()
{
if ($this->packageType == self::DIP_16) {
return 16;
} else ...
...

И я не очень понимаю, как ты это собрался заменять статическими методами.

Может, тебе какую-нибудь задачу на абс. классы решить?

Допустим: сделай классы для представления математического выражения в виде дерева объектов. Выражение состоит из таких элементов:

- целое или дробное число: 2, 3.5
- константы: Пи, e (для Пи есть юникодный символ)
- переменная: x, y, hello_world
- сумма, разность: x + 2 + y
- произведение: 3x, 2*2
- деление: 1/6, (x + 1)/y
- возведение в степень: 2^5
- функции: sin, cos, tan

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

$exp = new Sum(new Number(3), new Variable('x'));

Затем нужно сделать вывод выражения. Выражение выше должно быть выведено как:

3 + x

Затем нужно сделать функцию упрощения выражения. А именно, применить следующие правила:

- в сумме/разности можно сложить все числа в одно: 2 + x + 3 - 1 -> 4 + x
- в произведении можно умножить числа: 2 * 3x -> 6x
- в делении можно делить числа без потери точности: 4/6 -> 2/3, 5x / 5 -> 1x, но нельзя заменить 4/6 на 0.666 так как это не точно. Можно заменить 1.5 / 0.5 -> 3. Нельзя делить на ноль: 2/0 не упрощается.
- в возведении в степень можно заменять числа без потери точности: x ^ (2 ^ 3) -> x^8
- синусы и косинусы для круглых значений можно заменять: sin(pi / 6) -> 1/2.Для некруглых приблизительные вычисления делать нельзя
- можно суммировать одинаковые переменные: 2x + 3x -> 5x
- при умножении на 0 выражение ликвидируется, если в нем нет ошибок: 2x -2x + 3 -> 0x + 3 -> 3. Но нельзя убрать умножение тут: 0 * (2 / 0)
- 0/2 -> 0. 0/x можно заменить на 0 только если x != 0
- умножение/деление на 1 убирается: 1x -> x, y / 1 -> 1
- возведение в 0 степень дает 1, в первую степень - остается то же число: x ^ 1 = x
- можно дополнить список своими правилами

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

{n1} {v1} + {n2}{v2} -> {n1 + n2}{v1}

А программа уже применяет эти шаблоны к выражению. Но это ой как сложно. Зато кратко и понятно.

Уверен, тут ты статическими методами не обойдешься

Аноним 11/12/18 Втр 22:28:56 #170 №1309887 
>>1309297
>Просто есть csv файлы которые нужно парсить раз в месяц. В самом большом файле 1.1милиона строк пока.
Очевидный import numpy as np, pandas as pd очевиден
Аноним 12/12/18 Срд 05:02:49 #171 №1309980 
Чет щас начал вкатываться в PHP после C и у меня ощущение что это тот же C только с ебанутым синтаксисом и поломанный к хуям. Пардон май фрэнч.
Аноним 12/12/18 Срд 05:17:43 #172 №1309981 
>>1309980
так и есть
Аноним 12/12/18 Срд 06:32:20 #173 №1309989 
как меня трясёт от того что пхп не умеет с кириллицей работать, белые люди берут и просто кодят, а я с кодировками ебусь
Аноним 12/12/18 Срд 12:29:46 #174 №1310071 
>>1309989
Привыкай это не только в пыхе, это везде.
Аноним 12/12/18 Срд 13:35:16 #175 №1310117 
>>1309980
Держи в курсе
Аноним 12/12/18 Срд 14:53:59 #176 №1310137 
>>1310117
Держу в курсе, соси классы свои долбоеб.
Аноним 12/12/18 Срд 15:00:46 #177 №1310142 
>>1308685
Блядь, запарился уже. Всё перепробовал. Если просто выводишь получаемые данные в браузер и копируешь их, вставляешь в код и отправляешь через heroku же, то все работает. Вручную и через локальный сервер и без этого работает. А когда данные просто получаются извне и отправляются, то обрезаются до первого необычного символа. Все эти utf8_decode, utf8_encode, htmlentities - ничего не помогает, максимум - символы заменяются на &#353;. Как я ненавижу все эти кодировки.
Аноним 12/12/18 Срд 15:38:06 #178 №1310150 
А че можно почитать/посмотреть по базам данных? Книгу какую или видосики там.
Аноним 12/12/18 Срд 15:53:47 #179 №1310153 
Снимок.JPG
Помогач.
есть строка на входе. Ищу регляркой там дату в определенном формате. нужно к дате добавить например ЗАЛУПА.

исходная - предлагаю 10.04.2014 пообедать.

Сделать:

предлагаю 10.04.2014 Залупа пообедать.

Аноним 12/12/18 Срд 16:05:05 #180 №1310156 
>>1310153
угараешь?
Аноним 12/12/18 Срд 16:13:14 #181 №1310161 
>>1310156
нет. Строку поиска регулярки составил вот в конструкторе. А что дальше делать хз.
Аноним 12/12/18 Срд 16:16:14 #182 №1310162 
>>1310161

http://php.net/manual/ru/function.preg-replace.php
Аноним 12/12/18 Срд 16:42:42 #183 №1310169 
>>1310162
ну оно заменит полностью найденое совпадение, а мне надо добавить прост слово к совпадению.
Аноним 12/12/18 Срд 16:53:47 #184 №1310170 
>>1310169
напиши регулярку, которая будет искать слово пообедать рядом с датой и замени его на залупа пообедать
Аноним 12/12/18 Срд 16:54:55 #185 №1310171 
>>1310170
или можно просто заменить слово пообедать на залупа пообедать, без регулярок, че ты мозги ебешь
Аноним 12/12/18 Срд 17:18:13 #186 №1310176 
ЛАдно, пытался просто объяснить, чекните мое говно, почему оно не работает?
https://ideone.com/34FAk8
Аноним 12/12/18 Срд 17:24:31 #187 №1310177 
>>1310137
Сосу свои классы и радуюсь жизни.
Аноним 12/12/18 Срд 17:26:17 #188 №1310179 
>>1310177
А теперь глотни ка двойной массив который нахуй не нужен.
Аноним 12/12/18 Срд 17:28:12 #189 №1310181 
EeES3qxvWBU.jpg
>>1310179
>двойной массив
Аноним 12/12/18 Срд 18:06:37 #190 №1310191 
>>1310170
Думал это легко сделать, но не тут то было, хыыы, придется массивы городить
Аноним 12/12/18 Срд 18:24:00 #191 №1310199 
>>1310176
>>1310191

вот сделал 2 массива. Что заменить и на что. Через str_replace чет не выходит
Аноним 12/12/18 Срд 19:49:22 #192 №1310254 
>>1309639
Специально придумали prettier, чтобы каждый разработчик не делал как ему вздумается: https://github.com/prettier/prettier

Я запускаю его так: prettier --print-width=110 --tab-width 4 --single-quote --trailing-comma=es5 --write"

Алсо почему у тебя авторайзер занимается аутентификацией? Почитай про разницу между авторизацией и аутентификацией: https://stackoverflow.com/a/6367931
Аноним 12/12/18 Срд 22:00:17 #193 №1310305 
JS задачки душные какие-то. Сижу третий час вдупляю в 4-ое
Аноним 12/12/18 Срд 23:42:32 #194 №1310349 
1342240872894.jpg
>>1305368 (OP)
Как то тут уютно у вас, господа. Пожалуй пополню ваши ряды. Всем добра.
Аноним 13/12/18 Чтв 00:08:28 #195 №1310371 
Че, поцоны, говорят пыха-то мертвый язык.
Аноним 13/12/18 Чтв 01:03:51 #196 №1310397 
>>1310349
Добро пожаловать!
Аноним 13/12/18 Чтв 05:08:53 #197 №1310423 
>>1310371
На нём говорили древние?
Аноним 13/12/18 Чтв 07:10:27 #198 №1310433 
LlStdLGp.png
Почему не работают примеры из книг? Это уже не первый раз такое, и вот сегодня нашел такой вот самоучитель например

https://simtech.ru/wp-content/themes/simtechrutheme/book/Brett%20McLaughlin.PHP%20and%20MySQL.-%202013.pdf

первый жи код

<?php
echo "Приветствую вас здесь. Слышал, вы учитесь на PHP-программиста!\n";
echo "Почему бы вам не набрать свое имя для меня:\n";
$name = trim(fgets(STDIN));
echo "\nСпасибо, " . $name . ", очень рад с вами познакомиться.\n\n";
?>

нормально не работает!Ни на сервере(у меня сайт есть), ни в онлайн интерпритаторе. Может кто-нибудь объяснить почему. Буду благодарен.
Аноним 13/12/18 Чтв 07:38:14 #199 №1310437 
Screenshot2018-12-1307-36-36.png
>>1310433
Потому, что пример нужно выполнить в консоли, через php-cli.
Аноним 13/12/18 Чтв 07:53:22 #200 №1310445 
>>1310437
спасибо , анон . Еще бы узнать можно ли это как то запустить на сервере? Ну реалньо, смотрю , полезная вроде книга, но даже первый код не запускается
Аноним 13/12/18 Чтв 07:54:29 #201 №1310446 
>>1310371
https://habr.com/post/179399/
Аноним 13/12/18 Чтв 07:55:54 #202 №1310447 
>>1310445
> даже первый код не запускается
фейспалп.жпг

Ты сначал с консолью разберись
Аноним 13/12/18 Чтв 08:10:29 #203 №1310449 
>>1310445
И пытаться не стоит на данном этапе. Лучше разберись с установкой php, у ОПа есть уроки:
Установка и настройка PHP - https://github.com/codedokode/pasta/blob/master/soft/php-install.md
Как начать пользоваться командной строкой - https://github.com/codedokode/pasta/blob/master/soft/cli.md
Аноним 13/12/18 Чтв 08:11:03 #204 №1310450 

>>1310447

ну да, я не профессионал,не понимаю. Но интересный вопрос зачем это выполнять через консоль?Разве php не дл серверов делалось?
Аноним 13/12/18 Чтв 08:14:43 #205 №1310451 
>>1310449
Извини, я кое-что недопонл . Зачем мне его устанавливать на комп? У мне есть сайт на серваке, который поддерживает php. Я уже создал там ряд работающих php скриптов, как то , например : скачивани файлов по паролю , форма обратной свзи, автоматическая отправка email. Все они работают.А этот нет? Почему нельзя примеры из этой книге запускать на сервере своего сайта? Их же наверное можно там как-то применить , иначе какой в них смысл? Уж не думал что имея сайт , придется что-то на комп устанавливать

Буду благодарен ответам.
Аноним 13/12/18 Чтв 08:44:28 #206 №1310459 
>>1310451
У PHP есть разные режимы (интерфейсы) работы.
PHP-CGI - интерфейс для работы с веб-сервером (через этот интерфейс работает твой сайт).
PHP-CLI - интерфейс для работы из командной строки.

Почему не работает?

Давай посмотрим на fgets(STDIN):

fgets - функция, которая читает строку из файла.

STDIN - это стандартная константа php, её значение - php://stdin.

php://stdin - это поток (файл), в который попадает всё, что ты ввёл с клавиатуры в терминале (командной строке).

В итоге получается, что скрипт пытается прочитать строку из потока, который попросту "не существует", т.к. PHP работает в режиме CGI, а не CLI.


Не знаю как проще обьяснить.

Аноним 13/12/18 Чтв 08:49:37 #207 №1310462 
>>1310450
Ну так а как ты с сервером общаешься?
Аноним 13/12/18 Чтв 08:49:39 #208 №1310463 
>>1310459

Да , спасибо, щас понял почему не работает.

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

Да ради обучения можно сказать нужное ПО и все это запустить и тп. Но в конечном то итоге все равно все на сервере применять придется. И вот как этого добится? Может есть пособия где сразу на сервере показано?
Аноним 13/12/18 Чтв 08:52:57 #209 №1310464 
>>1310450
PHP - язык общего назначения.
Аноним 13/12/18 Чтв 08:57:46 #210 №1310468 
>>1310463
Начни с гайда в ОП-посте.
Аноним 13/12/18 Чтв 08:59:19 #211 №1310470 
>>1310463
>Получается, код что написан в книге не будет работать на сервере?
Будет, просто у тебя знаний не хватает.

>И вот как этого добится?
Перестать задавать тупые вопросы и читать гайд ОП.

>Может есть пособия где сразу на сервере показано?
Иди нахуй



Аноним 13/12/18 Чтв 09:00:11 #212 №1310471 
>>1310470
UPD: ,иди читать
Аноним 13/12/18 Чтв 09:00:58 #213 №1310474 
>>1310464
но мне интересно применение на сервере

>>1310459
просто , щас вот какой момент. В сети есть не мало материалов, про PHP и MySQL , но очень мало где бы было показано как это связано. Допустим даже такой банальный пример как, есть у нас база данных , мы к ней подключились. Пытаюсь использовать функию SHOW TABLES [FROM db_name]; , но выдет ошибки . Вот такая простая вещь. И хоть бы пример хоть одного работающего php кода найти связанный с базой.

<?php


$address = "----"; //Адрес базы данных
$user = "--------"; //Имя пользователя базы данных
$password = "------"; //Пароль пользователя
$name_db = "--------"; //Имя базы данных


//Подключаемся к базе данных
$conn = mysqli_connect($address, $user, $password, $name_db);
if (!$conn) {
die("Conneion failed: " . mysqli_connect_error());
}

echo "Connected successfully";

$result = mysql_query( "SHOW DATABASES");




?>

Почему это может не работать? Connected successfully выводит. То есть все подключились. А тут такая вроде элементарна функия и предупреждения рисует. Наверное я что-то делаю не так, но вот где написано что имено?
Аноним 13/12/18 Чтв 09:19:56 #214 №1310491 
>>1310474

>>1310470 Сей анон все тебе уже сказал.

Толку от того, что ты накопипастишь кода, не зная как он работает, не будет.
Аноним 13/12/18 Чтв 09:45:40 #215 №1310502 
>>1310491
просто видешь анон, я ведь вроде понимаю как код работает, по крайней мере котрый кописащу. Я ж не только кописастил, я нашел в сети самоучитель на сайте https://myrusakov.ru , шел по нему. Там вроде более менее понятно. Плюс сразу решил учится на практике, то есть на своем сайте.Если возникали, какие-то задачи,решал их по материалам самоучителя или гуглил, потом под свои нужды правил нагугленый код и тп. Я думал это правельный подход для обучения.

А потом решил сделать систему регистраии-авторизаии, и вот чот не получается. Точнее "регистрировать", то есть вносить в БД из формы на сайте вполне удолось(накопипастил-подправил), но с авторизаией проблемка вышла. Стал гуглить книги, что б понять связь php-mysql, нагуглил то с чем пришел, а она оказывается не для серваков.


Так вот анон, что мне щас посоветуешь, весь гайд с нуля читать? Я ведь вроде понимал что писали в том онлайн самоучителе. Устанавливать ПО на комп , что бы работать по гайду? Оно стоит того?Больше даст чем онлайн самучители? ТАк то ель знания преобрести у меня.
Аноним 13/12/18 Чтв 12:45:48 #216 №1310590 
>>1310254
А есть где-нибудь написанная спецификая с договоренностями как писать? Я лучше сам буду писать правильно.

>Я запускаю его так: prettier --print-width=110 --tab-width 4 --single-quote --trailing-comma=es5 --write"
Должен быть отступ в 2 пробела.

https://en.wikipedia.org/wiki/Authentication#Authorization
>The process of authorization is distinct from that of authentication. Whereas authentication is the process of verifying that "you are who you say you are", authorization is the process of verifying that "you are permitted to do what you are trying to do". This does not mean authorization presupposes authentication; an anonymous agent could be authorized to a limited action set.

And also

>For example, a client showing proper identification credentials to a bank teller is asking to be authenticated that he really is the one whose identification he is showing. A client whose authentication request is approved becomes authorized to access the accounts of that account holder, but no others.

So that means that by any mean, authorization is not restricted to make authentication.
Аноним 13/12/18 Чтв 15:13:18 #217 №1310637 
>>1305368 (OP)
Друзья, хочу удалить строку из базы. Пишу запрос в пхп файле: "DELETE FROM db WHERE id_cat = 1". Результата ноль, ошибок тоже нет.

Удаляю эту самую строку из пхп май админ рукой, тупа кликнув удалить и пхп май админ выдает такой запрос
DELETE FROM `db` WHERE `db`.`id_cat` = 5

Вопрос: зачем после WHERE писать db.id_cat? Для чего нужно еще раз указывать название базы?
Аноним 13/12/18 Чтв 15:28:42 #218 №1310642 
Оп и не только он, посоветуете книги какие по алгоритмам, или где ещё можно поучить их?
Аноним 13/12/18 Чтв 15:42:41 #219 №1310643 
>>1310642
Порешать онлайн:
Timus Online
codewars
Померятся хуями:
TopCoder
Посмотреть:
Stanford Online Algorithms: Design and Analysis
Robert Sedgewick курс с coursera. Если там закрыли бесплатный доступ, то есть на трекерах.
Почитать современную классику:
CLRS
Thomas H. Cormen
Charles E. Leiserson
Ronald L. Rivest
Clifford Stein
Introduction to Algorithms

Аноним 13/12/18 Чтв 16:14:35 #220 №1310650 
>>1310643
Спасибо.
Аноним 13/12/18 Чтв 16:52:32 #221 №1310672 
image.png
Сап.Подскажите, как сделать нечто подобное? По сути я вывожу информацию из бд в нужный блок/блоки, но как это сделать в цикле?
Аноним 13/12/18 Чтв 17:11:22 #222 №1310676 
>>1309754
Надеюсь успел ответить, и мой ответ дойдет до тебя.

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

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

Может быть как раз за пару месяцев получиться это сделать.


Однако.

Сейчас в вебе преобладает JS. Значит профитней всего будет учить его. Раз ты прочел ту книгу значит должен знать хотя бы его основы.

Отшлифуй знания прочитав mdn https://developer.mozilla.org/bm/docs/Web/JavaScript и/или туториал на https://javascript.info/

Затем ознакомься с нодой https://nodejs.org/en/docs/guides/ https://nodejs.org/en/docs/guides/getting-started-guide/

Затем выбири один или несколько фреймворков: React, Vue, Angular... (перечисленно по мере востребованнсоти), и попутно изучи webpack

Всё что я перечислил это достаточный объем зананий чтобы свободно писать приложения на JS.


Ну и английский естественно must have.


И если ты так хочешь во фриланс, то может быть тебе лучше будет найти просто удалённую работу?
Аноним 13/12/18 Чтв 17:33:49 #223 №1310681 
>>1310676
иди толсти в другом месте, бротишь
Аноним 13/12/18 Чтв 17:34:48 #224 №1310682 
>>1310681
что толстого в посте этом, брат?
Аноним 14/12/18 Птн 07:44:30 #225 №1310908 
Уважаемые костылитаны. Так композер с грушей и прочие технологий нужно прям от зубов знать? Пиздеть не буду административку Шлинукса знаю, клитор могу развить, ебашил скрипты. Мне уже этот язык нравится, конечно кроме этих ебаных долларов, тот же С4 только немного уродливый, зависимости эти ебучие, все как в С4 только уебищно. Но радует что можно ебать байты. Ахуеть сколько куков.
Аноним 14/12/18 Птн 07:47:20 #226 №1310911 
>>1310682
Я не он, но ты хуйню советуешь, настоящие масты идут в девопс, фуллстак. Ты сидишь в Пыхотреде и советуешь JS, ну не ебанутый? Без обид.
Аноним 14/12/18 Птн 09:12:54 #227 №1310924 
>>1310911
>фуллстак
Это которые CMS обслуживают? Они кроме говнокода ничего родить не могут - знают всё, но самые азы.
Аноним 14/12/18 Птн 09:43:32 #228 №1310934 
>>1310924
Я про тех что могут написать свой фрейм.
Аноним 14/12/18 Птн 10:10:08 #229 №1310945 
Есть два куска

$DealId="{=Document:ID}";
$res=CCrmDeal::LoadProductRows($DealId);
for($i=0;$i<=count($res);$i++){
if($res[$i]['PRODUCT_ID']==648){
$this->SetVariable('Variable1', 2);
}
}

и

$DealId="{=Document:ID}";
$res=CCrmDeal::LoadProductRows($DealId);
for($i=0;$i<=count($res);$i++){
if($res[$i]['PRODUCT_ID']==647){
$this->SetVariable('Variable1', 1);
}
}


как мне их в один слить? не вот эту проверку

for($i=0;$i<=count($res);$i++){
if($res[$i]['PRODUCT_ID']==648){
$this->SetVariable('Variable1', 2);
if($res[$i]['PRODUCT_ID']==647){
$this->SetVariable('Variable1', 1);

сделать одним куском?
Аноним 14/12/18 Птн 10:10:51 #230 №1310946 
не вот эту проверку
Аноним 14/12/18 Птн 10:12:29 #231 №1310948 
>>1310934
Не видел таких.
Аноним 14/12/18 Птн 10:39:35 #232 №1310958 
>>1310945
Должно выйти через array_map.
Аноним 14/12/18 Птн 11:29:08 #233 №1310976 
Снимок.PNG
>>1305368 (OP)
Аноны, я почти доделал движок по видеоурокам.
Но блять где то в коде я сделал дамп сессии и теперь не могу его найти ааааааа
Вот что делать?
Аноним 14/12/18 Птн 11:37:37 #234 №1310978 
>>1310976

из консоли:

grep -rni "var_dump" *

Если у тебя пхпшторм то нажми Ctrl+Shift+F
Аноним 14/12/18 Птн 11:37:44 #235 №1310979 
>>1310976
>RAINBOWTHEME
>RUNINTOTHERAINBOWTRACKRUNALONGWITHCAPTAINJACKD-RA-RO-DA-RI-RA-RO
Аноним 14/12/18 Птн 11:49:36 #236 №1310983 
>>1310978
>из консоли:
У меня хостинг

>Если у тебя пхпшторм то нажми Ctrl+Shift+F
Нетууу!! Бляяя, вот я алеша. Но реально нету. Разве что я запихнул сессию в какую то переменную, но ведь она печатается тоже var_dump или print_r
Это пиздец какой то

>>1310979
Да, я не скрываюсь
Аноним 14/12/18 Птн 11:51:31 #237 №1310984 
>>1310945
Я бы сделал так:

$foo = function ($fn) {
return function ($item, $key) use ($fn) {
switch ($item['PRODUCT_ID']) {
case 647: return $fn(1);
case 648: return $fn(2);
}
}
}

$bar = function ($v) use ($this) {
$this->SetVariable('Variable1', $v);
}

$DealId="{=Document:ID}";
$res=CCrmDeal::LoadProductRows($DealId);
array_walk($foo($bar), $res)
Аноним 14/12/18 Птн 13:22:50 #238 №1311022 
>>1310676
Хорошо, как раз думал об изучении фреймворка какого нить. Да и 2 вариант понравился.
Спасибо.
Аноним 14/12/18 Птн 13:34:47 #239 №1311029 
Только вкатился. Зачем отбивать 4 пробела если существует tab?
Аноним 14/12/18 Птн 13:47:15 #240 №1311037 
image.png
>>1311022
>Да и 2 вариант понравился.
Двачую, бротиш. Пацаны в жс треде подтвердили, учишь ЕКСПРЕСС + ВУЕ + МОНГО и со старда 300к минимум будешь получать на удалёнке. Говорят, будешь делать СПА с БОГАТЫМ АПИ и АСИНХРОННЫМ БЭКЕНДОМ и горя не знать. Работаешь, говорят, 3 часа в день максимум. Остальное время играешь в эксклюзивы и ссышь пукарям в /v на головы 4к скриншотами. В общем, все советуют подумать о будущем сразу вкатываться в НОД ЖС.
Аноним 14/12/18 Птн 13:58:53 #241 №1311044 
>>1310976
Аноны, у меня в коде вобще нет print_r и var_dump. Я в шоке, как такое может быть? Хелп!
Аноним 14/12/18 Птн 14:05:52 #242 №1311048 
>>1311029
Фича на в том какие педали ты там давишь. Все вменяемые редакторы имеют опцию ставить 4 пробела по нажатию Tab. Нужно для того, что бы код выглядел более менее одинаково, независимо от размера табуляции.
Аноним 14/12/18 Птн 14:21:46 #243 №1311056 
>>1311037
Выучил alert и confirm, можно уже джс джуном идти устраиваться? Или еще надо html выучить?
Аноним 14/12/18 Птн 15:58:48 #244 №1311081 
>>1310672

Ну у тебя из бд прилетает массив же прямо в html шаблоне берешь и хуяришь такую конструкцию:

<? foreach ($arrayOfSomeShit as $shit) : ?>
<div>
<img src="<? echo $shit['img_url']; ?>" />
<span><? echo $shit['title']; ?></span>
</div>
<? endforeach; ?>

Жирным выделил то что является собственно php-кодом внутри твоего html кода. Надеюсь макаба не испортит разметку
Аноним 14/12/18 Птн 16:38:43 #245 №1311098 
Снимок.PNG
Ну и чего ты добился, ОП-хуй?
Аноним 14/12/18 Птн 17:25:03 #246 №1311131 
13925547362135986208.jpg
Недавно закончил свой первый проект на Yii2. Потратил довольно много свободного времени. Над описанием я особо не старался и комментарии к методам есть на русском языке, не бейте.

Критика приветствуется
https://github.com/02Cetch/xenos


Если кому интересно, то очень помог вот этот курс:
https://www.youtube.com/watch?v=B1Q44OKh5YA&list=PLSdH7dYnlGYht0eGi9-14X87hrSl9plCc
Аноним 14/12/18 Птн 17:29:04 #247 №1311135 
Как написать программу с генерацией стихотворения? Перечитал начало урока (град информации без примеров, 95% не понятно как работает. Все предыдущие уроки были прекрасные) миллион раз, даже на предыдущий зашел. До этого задачи щелкал как орешки
Аноним 14/12/18 Птн 17:42:25 #248 №1311141 
Снимок.PNG
https://ideone.com/EzRrHO

Все что смог из себя высрать (И то случайно получилось)
Аноним 14/12/18 Птн 18:04:34 #249 №1311153 
>>1311131
Ты типа фулстак какой то? у тебя в гитхабе и чето на реакте и yii2
Аноним 14/12/18 Птн 18:09:50 #250 №1311155 
>>1311153
Да, так, баловался. На реакте делал проект, чуть не ёбнулся без Redux. Запутался в архитектуре и сделал кучу костылей. А так реакт, как view часть в SPA - это вещь
Аноним 14/12/18 Птн 18:29:01 #251 №1311167 
>>1311155
Бля молодец.
Аноним 14/12/18 Птн 18:40:20 #252 №1311172 
>>1311131
О, я тоже через пару дней начинаю. Сейчас закончил пхп старт. Дашь какое нибудь напутствие?
Аноним 14/12/18 Птн 18:45:50 #253 №1311175 
>>1311172
Конспекты, ОБЯЗАТЕЛЬНО. Не большие, но по важным темам нужно делать. + читать хотя бы чуть-чуть литературы, которую он к урокам прикрепляет. Выполнять домашку, которую он даёт(не обязательно самостоятельно, можно опять же взять решение на сайте, но, при этом, разобрать всё, что он написал.)

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

Ну и лично моё правило - уставший и заёбаный? Отдохни и хотя бы 3-5 минут осиль от видео, так хотя бы будешь двигаться потихоньку к своей цели.

Удачи
Аноним 14/12/18 Птн 19:11:51 #254 №1311184 
>>1311175
Спасибо.
А вобще можно начинать к пхп ап, если из реальных проектов у меня только пхп старт?
Аноним 14/12/18 Птн 19:37:22 #255 №1311193 
>>1311184
вполне, но могут быть проблемы
Аноним 14/12/18 Птн 19:46:42 #256 №1311196 
как в preg_replace изменить регистр символа следующего после точки?
Аноним 14/12/18 Птн 20:35:17 #257 №1311213 
Где искать норм фрилансеров пхп на снг биржах?
Аноним 14/12/18 Птн 21:29:40 #258 №1311232 
>>1311213
На апворке не пробовал посмотреть?
Аноним 14/12/18 Птн 22:55:29 #259 №1311245 
>>1311193
Спасибо, мужик
Аноним 15/12/18 Суб 05:12:03 #260 №1311327 
>>1311098
да, кстати встречал в задачках учебника глупые моменты
Аноним 15/12/18 Суб 11:28:57 #261 №1311419 
>>1311037
>и АСИНХРОННЫМ БЭКЕНДОМ
Ну-к, на этом моменте поподробней. Возможно ли делать с помощью Vue + React асинхронный server side rendering?
Аноним 15/12/18 Суб 12:10:00 #262 №1311431 
>>1311419
Я ебу? Мне посоны в жс треде сказали... Иди у них спрашивай.
Аноним 15/12/18 Суб 12:43:00 #263 №1311448 
Почему все последние уроки связаны со строками которые у меня не работают на ideone? Столько информации вывалили, а как ее использовать потом не поймешь
Аноним 15/12/18 Суб 13:24:33 #264 №1311465 
>>1311448
Ты можешь воспользоваться другой песочницей. Например https://3v4l.org/
Аноним 15/12/18 Суб 13:28:37 #265 №1311467 
>>1311448
подними апач
Аноним 15/12/18 Суб 13:34:50 #266 №1311473 
Bin-Laden-Geronimo-600x928.jpg
>>1311467
Не надо нас поднимать!
Аноним 15/12/18 Суб 15:28:01 #267 №1311510 
>>1308331
бамп
Аноним 15/12/18 Суб 17:44:40 #268 №1311566 
Короче сделаю еще какой-нибудь круд с админкой на слиме и пойду ларавел учить. А то чет заебало столько времени учу, а до сих пор сижу без нихуя.
Аноним 15/12/18 Суб 17:45:56 #269 №1311567 
>>1311566
что бы джуном вкатиться много знать надо? задачку про студентов осилил если чё
Аноним 15/12/18 Суб 17:48:36 #270 №1311568 
>>1311232
Я хз, на апворке за далары всё.
Аноним 15/12/18 Суб 18:01:12 #271 №1311571 
>>1311567
Я не знаю, анон. Я сам сделал студентов и файлообменник, плюс еще один говнопроект. Получается говнокод, но с каждым разом получше. Сейчас еще один круд сделаю и начну ларавель задротить. Ну и жс начну учить. Надеюсь к лету вкачусь.
Аноним 15/12/18 Суб 18:42:20 #272 №1311589 
>>1311571
Ебать к лету...
А сколько времени в день ты тратишь на это?
Аноним 15/12/18 Суб 18:47:14 #273 №1311593 
>>1311571
И какой у тебя план развития?
Аноним 15/12/18 Суб 18:47:31 #274 №1311595 
>>1311589
Если пишу код, то могу целый день сидеть. Не знаю часов 8. А если я смотрю какие-нибудь видосы или читаю туториалы всякие, то гораздо меньше. Сразу лень становится и все такое. Короче 1-3 часа в день, если смотрю что-то и до 7-8 часов если пишу код.
Аноним 15/12/18 Суб 18:59:20 #275 №1311601 
>>1311593
Сидеть учить PHP, Laravel, Js, в базах данных разобраться получше, чем просто делать самые простые запросы. Ну и английский. В алгоритмах разобраться хоть на каком-то начальном уровне, чтобы на собеседовании не обосраться. В конце марта - середине апреля уже начну искать работу, ну и просто по собеседованиям ходить (если меня на них пустят ваще, лол). А то типа я могу так и три года сидеть изучать всякую хуйню на васянском уровне, а потом даже джуном не возьмут.
Аноним 15/12/18 Суб 20:58:37 #276 №1311658 
Не смог осилить задачи на регулярки и соответсвенно сами регулярки (ОП вместо нормального урока решил посрать справочником, да и еще и в картинке, так чтобы потом нельзя было найти нужную информацию с помощью поиска)

Следующей задачей после регулярки идет задача "Чилса прописью". От нее я просто охуел. Я не знаю как ее решать. В моей голове вообще нету никаких идей и знаний от прочитанных уроков. Искать информацию в уроках ОПа невозможно. Что мне делать, искренне хочу научиться PHP
Аноним 15/12/18 Суб 21:28:44 #277 №1311670 
>>1311658
А что у тебя конкретно не получилось. Пришли свои наработки, пиши вопросы
Аноним 15/12/18 Суб 21:32:22 #278 №1311671 
>>1311658
Для поиска документация же есть, а у опа наглядные картинки, где выбрано основное и разжевано.
Аноним 15/12/18 Суб 21:37:53 #279 №1311674 
>>1311595
Так же сижу - то практика день-два, то теории три. Поначалу так вообще сидел: 7 статей прочитай - одно говно напиши. Уже четвертый месяц так торчу.
Аноним 16/12/18 Вск 01:08:14 #280 №1311770 
>>1305368 (OP)
https://ideone.com/WnhXAL
почему второй elseif не срабатывает?
Аноним 16/12/18 Вск 05:42:31 #281 №1311799 
>>1311770
что за задача?
Аноним 16/12/18 Вск 05:43:44 #282 №1311800 
>>1311674
Бля а я сижу читаю и одновременно ебашу код, тип проект есть нужно сайт с каким то функционалом до определенного времени создать (Это я для себя цель поставил) и я его сделать должен за месяц.

--мимокрок
Аноним 16/12/18 Вск 07:45:10 #283 №1311814 
Снимок.JPG
чёт у меня phpmyadmin к базе не цепляется, всё по туторам делал, примерно можете почуствовать что может быть?
Аноним 16/12/18 Вск 08:36:04 #284 №1311816 
>>1311814
Мож какой то компонент права не может получить?
Аноним 16/12/18 Вск 08:38:54 #285 №1311818 
>>1311816
Как это чекнуть? Алсо через командную строку всё myqsl исправно добавляет базы, проблема именно в phpmyadmin
Аноним 16/12/18 Вск 09:11:09 #286 №1311824 
>>1311814

Напиши какого пользователя (пароль не надо) ты указываешь в phpmyadmin.

Затем в командной строке зайди в mysql под пользователем или под админом и выведи, какие права даны пользователю:

SHOW GRANTS FOR 'username'@'localhost';

или

SHOW GRANTS FOR CURRENT_USER;

Обрати внимание что в mysql права привязаны к IP адресу. То есть ты можешь дать одни права пользователю x, заходящему с localhost, и другие - пользователю x, зашедшему с 10.0.0.1

Аноним 16/12/18 Вск 09:14:58 #287 №1311827 
>>1311824
Решил проблему, установил более старую версию пхпамйадмина и всё само заработало. Видимо в последней версии разрабы что то напортачили
Аноним 16/12/18 Вск 10:37:48 #288 №1311854 
>>1311827
Мне кажется зря, мог бы просто через права все решить. Присвоить как тебе кот показал.
Аноним 16/12/18 Вск 12:13:09 #289 №1311956 
image.png
Не смог понять как решать Лиличку. Нашел у кого-то решение, но так и не понял что делает этот алгоритм

$letterNumber = 0;
for($i = 0; $i < $maxLength; $i++){
foreach ($lines as $key => $value) {
\tif (mb_substr($value, $letterNumber, 1) != ""){
\t echo "|", mb_substr($value, $letterNumber, 1);
} else {
\techo "| ";
}
}
echo "|\n";
$letterNumber++;
}
Аноним 16/12/18 Вск 14:52:30 #290 №1312085 
>>1311799
число прописью, я там проверяю десятки и добавляю их в массив, но условие почему то не выполняется
Аноним 16/12/18 Вск 22:42:10 #291 №1312349 
>>1311956
Эта задача сверху вниз слова пишет?
Там $key->$value лишний, можно на $line заменить
Вывод будет такой:
Д | К
ы | о
м | м
Аноним 16/12/18 Вск 23:01:14 #292 №1312364 
image.png
image.png
image.png
Не получается выровнять block по центру с минимальным отступом в 10px.
Помогите, аноны.
Аноним 16/12/18 Вск 23:03:18 #293 №1312365 
image.png
>>1312364
Такая бадья соответственно
Аноним 16/12/18 Вск 23:34:28 #294 №1312379 
сделал часть от задачи про число прописью
https://repl.it/@askarpro24/VivaciousFaithfulScandisk-1
не могу понять как использовать массив из 1й функции чтобы через foreach подставить из массива с (400,20,1) сделать (четыреста,двадцать,один), просто обратиться к массиву из другой функции я так понял нельзя.
Аноним 17/12/18 Пнд 00:34:28 #295 №1312400 
>>1312379
//В основном теле программы:
$result = numberToText(421);
$text = smallNumberToText($result,0);
echo $text;

//в smallNumberToText:
$translatedNumber = "";
foreach ($result as $num){
$translatedNumber = $translatedNumber . ' ' . $spelling[$num];
}
return $translatedNumber;
Аноним 17/12/18 Пнд 00:42:18 #296 №1312403 
>>1312364

Ну так у тебя нет правил, которые бы задавали центрирование. Элемент с блочным позиционированием можно отцентрировать с помощью трюка с margin = auto:

- http://softwaremaniacs.org/blog/2005/08/27/css-layout-flow/
- и немного тут https://github.com/codedokode/pasta/blob/master/html/positioning.md
Аноним 17/12/18 Пнд 00:46:58 #297 №1312405 
>>1312403
Пробежался по статейкам. Так там используется display, в задании сказано, что без него нужно делать. Или я просто тупой
Аноним 17/12/18 Пнд 00:49:41 #298 №1312406 
>>1312403
Бля, работает. Спасибо большое
Аноним 17/12/18 Пнд 00:59:43 #299 №1312408 
>>1312405

У блочных элементов вроде div по умолчанию стоит display: block, и явно это прописывать не требуется. Думаю, имелось в виду это.
Аноним 17/12/18 Пнд 01:25:59 #300 №1312410 
Подскажите по коду. Я Получил ответ от API Vk, там есть параметр:

viewer_type=4&api_result=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%0A%3Cresponse%20list%3D%22true%22%3E%0A%20%3Cuser%3E%0A%20%20%3Cuid%3E5159802sex%3E%0A%20%3C%2F

Я пытаюсь декодировать api_result и вытащить из него sex=2. Перечитал весь Stack overflow, ничего не работает. Как вытащить переменную sex из параметра api_result?

Аноним 17/12/18 Пнд 01:41:16 #301 №1312412 
>>1312410
Настоящие индейцы уже не декодируют полученные строки?
Прогони через
http://php.net/manual/ru/function.urldecode.php
Аноним 17/12/18 Пнд 01:55:28 #302 №1312414 
>>1312412
>http://php.net/manual/ru/function.urldecode.php
Я прогонял, няша. Он выдает мне списком все данные оттуда имя фамилия пол. А как вытащить конкретную переменную?
Аноним 17/12/18 Пнд 01:59:22 #303 №1312416 
>>1312414

Ты умеешь работать с XML и массивами в PHP? Если нет, то иди читай теорию, так как невооруженным глазом видно, что строка в XML.
Аноним 17/12/18 Пнд 02:00:01 #304 №1312417 
>>1312414

В PHP есть расширения DOM и SimpleXML для разбора XML данных.
Аноним 17/12/18 Пнд 02:04:30 #305 №1312419 
>>1312414
>как вытащить конкретную переменную?
В документации должны быть описаны типы данных со всеми ключами.
Просто прогоняешь черед декодеру url, потом декодеру json, и в результате просто указываешь ключ.
Почитай ещё доки по декодеру json - там есть подводный камушек.

>>1312416
>XML
Там json, как я видел.
Аноним 17/12/18 Пнд 02:15:45 #306 №1312421 
>>1312416
>>1312417
>>1312419

Спасибо, буду читать мануалы по json decode
Аноним 17/12/18 Пнд 02:49:10 #307 №1312425 
>>1312400
>$result = numberToText(421);
>$text = smallNumberToText($result,0);
>echo $text;
спасибо, теперь разобрался как вызывать функции чтобы они массив возвращали
Аноним 17/12/18 Пнд 12:08:00 #308 №1312498 
>>1312410

заработало вот так:

<?php
$string = $_GET['api_result'];
$xml = simplexml_load_string($string);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
echo $array['user']['sex'];
?>

Всем спасибо за совет, целую вас в аунсы каждого.
Аноним 17/12/18 Пнд 13:00:34 #309 №1312516 
Что начать читать чтобы создавать простенькие сайты? Знаю основы php и html. Пока смотрю 8 часовой курс про регулярки - нужно куда-то двигаться.
Аноним 17/12/18 Пнд 13:11:56 #310 №1312519 
>>1312516
>8 часовой курс про регулярки
ебать
Аноним 17/12/18 Пнд 13:42:12 #311 №1312528 
>>1312519
Не, ну а чо. Уроков ОПа для решения его задач не хватает
Аноним 17/12/18 Пнд 14:18:34 #312 №1312541 
>>1312516
Сеньор Регулярка Девелопер?
Аноним 17/12/18 Пнд 15:57:37 #313 №1312600 
>>1312498
>json_encode
>json_decode
Ты сперва закодировал, потом раскодировал.

$response = $_GET['api_result'];
>рас
$json= urldecode($response);
>дфа
$result= json_decode($json,TRUE);

И готово.
echo $result['user']['sex'];
Аноним 17/12/18 Пнд 16:00:13 #314 №1312603 
15328217184450.jpg
>>1312516
>8 часовой курс про регулярки
Есть ссылка на курс? Может я чего упустил, когда за полчаса их освоил? Вдруг ими Абу можно унижать?
Аноним 17/12/18 Пнд 16:11:12 #315 №1312610 
>>1312519

Что плохого, что человек хочет нормально разобраться в предмете, а не проскочить и потом задавать вопросы, как извлечь текст из строки?
Аноним 17/12/18 Пнд 16:49:38 #316 №1312630 
>>1312610
Хочешь нормально разобраться - напарси говна через регулярки, а курсы хоть 24 часа смотри - без практики толку 0.
Аноним 17/12/18 Пнд 16:57:16 #317 №1312634 
посоны, как вы синтаксис запоминаете? всё время приходится держать перед собой пример или гуглить документацию
Аноним 17/12/18 Пнд 17:22:14 #318 №1312654 

>>1312634
Никак. Пиши каждый день немного кода. Само запомнится до уровня автомата.
Аноним 17/12/18 Пнд 17:25:25 #319 №1312657 
>>1312603
Вот курс https://www.youtube.com/playlist?list=PLT0-cCYWU-_SIlYYwScRLLKpTRQlTqp1r
Ну скажите мне чего почитать чтобы делать что-нибудь типо этого http://php.net/manual/ru/tutorial.forms.php
Аноним 17/12/18 Пнд 17:29:30 #320 №1312660 
>>1312634
Так и запоминаем. В голове только часто используемые функции и основные операторы синтаксиса. За специфическими фичами приходится лазать в доки.
Аноним 17/12/18 Пнд 17:30:58 #321 №1312661 
>>1312660
Главное запомнить, что эти фичи вообще есть, чтобы не изобретать велосипед.
Аноним 17/12/18 Пнд 17:35:17 #322 №1312667 
Как начать перебор foreach с начала, если какое-то условие не выполняется? Каким-нибудь goto?
Аноним 17/12/18 Пнд 17:45:31 #323 №1312674 
>>1312657
На хтмлакадеми фастом проходишь основы хтмл, там формы будут, потом у опа читаешь про http(get,post), как поставить wamp. Можешь ещё это все в видосах php start глянуть, тут советовали пару раз.
Аноним 17/12/18 Пнд 17:57:24 #324 №1312691 
>>1312667
Что то я не нашел вменяемого способа. Или упаковывают foreach в функцию и рекурсивно вызывают ее или упаковывают в цикл while.
Аноним 17/12/18 Пнд 18:05:42 #325 №1312696 
0baa1b9fae6aec55bbb73037f3016001-xkcd-goto.png
>>1312667
Короче, сам замутил чота такое. Делает 10 попыток и завершает цикл. Как раз сегодня про goto узнал.
$num = 0;
repeat:
foreach($list as $id) {
\tдействия
\tif ($id == null) {
\t\tif ($num < 10) {
\t\t\t$num++;
\t\t\tgoto repeat;
\t\t} else {$num = 0; break;}
\t}
}
Аноним 17/12/18 Пнд 18:06:54 #326 №1312697 
>>1312696
Забыл, что отступы убираются. А о том, что они превращаются в \t, я вообще не знал. Прастити.
Аноним 17/12/18 Пнд 18:13:54 #327 №1312701 
>>1312674
> опа читаешь про http(get,post), как поставить wamp.
Не понял. Это где?
Аноним 17/12/18 Пнд 18:38:15 #328 №1312706 
>>1312696
goto это пиздец...
Аноним 17/12/18 Пнд 19:19:39 #329 №1312729 
>>1312667
1. Можно вынести foreach в функцию и просто выходить из неё когда надо, сбрасывая его.
2. Посмотри на пхп.нет про итераторы-генераторы.

goto не используй вообще никогда - нинужно и говнокод.
Аноним 17/12/18 Пнд 19:33:22 #330 №1312737 
>>1312701
В шапке все ссылки есть, ищи.
Аноним 17/12/18 Пнд 20:24:57 #331 №1312763 
>>1306121
Пытаешься изобрести bnb?
Аноним 17/12/18 Пнд 21:23:59 #332 №1312807 
КТО ЮЗАЕТ HOMESTEAD ДЛЯ LARAVEL? ОТЗОВИТЕСЬ

Произошёл пиздец, старый конфиг наебнулся, сделал новый. Далее:

>vagrant up

А мне консоль в ответ
>Microsoft Windows [Version 6.1.7601]

C:\Users\55555>cd /d T:\m2\www\laravel-dev\homestead

T:\m2\www\laravel-dev\homestead>vagrant up
Bringing machine 'homestead-7' up with 'virtualbox' provider...
==> homestead-7: Box 'laravel/homestead' could not be found. Attempting to find
and install...
homestead-7: Box Provider: virtualbox
homestead-7: Box Version: >= 6.3.0
==> homestead-7: Loading metadata for box 'laravel/homestead'
homestead-7: URL: https://vagrantcloud.com/laravel/homestead
==> homestead-7: Adding box 'laravel/homestead' (v6.4.0) for provider: virtualbo
x
homestead-7: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/v
ersions/6.4.0/providers/virtualbox.box
==> homestead-7: Box download is resuming from prior download progress
homestead-7: Progress: 0% (Rate: 31580/s, Estimated time remaining: 19:30:02
homestead-7: Progress: 0% (Rate: 38358/s, Estimated time remaining: 17:40:50
homestead-7: Progress: 0% (Rate: 49230/s, Estimated time remaining: 16:16:52
homestead-7: Progress: 0% (Rate: 40903/s, Estimated time remaining: 16:35:30
homestead-7: Progress: 0% (Rate: 34871/s, Estimated time remaining: 17:01:47
homestead-7: Progress: 0% (Rate: 21877/s, Estimated time remaining: 18:20:30
homestead-7: Progress: 0% (Rate: 16459/s, Estimated time remaining: 18:56:37
homestead-7: Progress: 0% (Rate: 20666/s, Estimated time remaining: 19:28:40
homestead-7: Progress: 0% (Rate: 17938/s, Estimated time remaining: 20:52:37
homestead-7: Progress: 0% (Rate: 17998/s, Estimated time remaining: 21:06:38
homestead-7: Progress: 0% (Rate: 30227/s, Estimated time remaining: 20:13:23
homestead-7: Progress: 0% (Rate: 37105/s, Estimated time remaining: 19:57:13
homestead-7: Progress: 0% (Rate: 38358/s, Estimated time remaining: 20:03:33
homestead-7: Progress: 0% (Rate: 31266/s, Estimated time remaining: 20:07:17
homestead-7: Progress: 0% (Rate: 34983/s, Estimated time remaining: 19:35:12
homestead-7: Progress: 0% (Rate: 40784/s, Estimated time remaining: 19:14:06
homestead-7: Progress: 0% (Rate: 45479/s, Estimated time remaining: 19:05:20
homestead-7: Progress: 0% (Rate: 45256/s, Estimated time remaining: 18:32:13
)
Аноним 18/12/18 Втр 06:06:36 #333 №1312911 
>>1312661
чёт обосрался. ебался с регулярками, оказывается в пхп есть функция filter_input которая заменяет длинную регулярку одним словом
Аноним 18/12/18 Втр 09:30:05 #334 №1312952 
>>1312911
Постоянно такая хуйня.
Аноним 18/12/18 Втр 12:23:26 #335 №1312992 
>>1312729
1. Не понял.
2. Еще сильнее не понял.
И я не понимаю, почему говнокод? Запись короткая, читается легко, работает хорошо.
Аноним 18/12/18 Втр 13:25:26 #336 №1313019 
>>1312992
>И я не понимаю, почему говнокод? Запись короткая, читается легко, работает хорошо.
Потому что говнокод. Запись короткая, читается легко и все прочее - это пока у тебя скрипт на 10 строк. Если бы все скрипты были в 10 строчек, то ваще не нужно ни ооп, ни всякая другая хуйня, все сразу понятно. А так ты высрешь в процедурном стиле скрипт на 500 строк с бесконечными циклами, разветлениями и прочей залупой. А сверху еще приправишь это goto. И твой код нельзя будет без ящика водки прочитать.
Аноним 18/12/18 Втр 13:43:59 #337 №1313026 
>>1312992
>1. Не понял.
>2. Еще сильнее не понял.
Учи ОПовские уроки - рано тебе ещё программировать.
Аноним 18/12/18 Втр 13:54:41 #338 №1313031 
>>1313019
>И твой код нельзя будет без ящика водки прочитать.
Это заблуждение. Если писать говно, то и с ООП и без ООП говно будет. А если писать нормально, то и в процедурном, и в ООП, и даже с гоуту хороший код будет.
Аноним 18/12/18 Втр 14:18:30 #339 №1313041 
>>1312696

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

То есть мы видим

if () {
...
}

x();

И понимаем, что независимо от того, выполнится if или нет, управление дойдет до вызова x() (если только там нет return или throw). А с goto логика выполнения может быть сколь угодно запутанной.

Также, у тебя не соблюдаются отступы.

Если тебе надо сделать что-то с 10 попыток - сделай цикл от 1 до 10 и вызывай функцию N раз. А ты пишешь это каким-то запутанным способом, выворачивая все наизнанку. Зачем?

Также, есть break. Если ты про него не знал, то тебе надо начать с перечитывания мануала по PHP.
Аноним 18/12/18 Втр 14:18:41 #340 №1313042 
>>1312696
>Делает 10 попыток и завершает цикл
>Как раз сегодня про goto узнал
А про for ты ещё не узнал? Нахуевертил чёрт пойми чего. Выглядит так, будто ты меня в жопу этим кодом послал.
Лучше бы просто описал чего конкретно хочешь.

>>1313031
>Если писать говно, то и с ООП и без ООП говно будет
Если человек дорос до использования ООП, то уже понимает зачем это и почему.
>даже с гоуту хороший код будет
НЕ-БУ-ДЕТ. Это низкоуровневая хуета из ассемблера.
Используют её 2 типа людей: 1 - дикие нубасы-говнокодеры, и 2 - годные спецы на диких и очень специфичных задачах, когда обычным методом выйдет хуже и сложнее.
Аноним 18/12/18 Втр 14:37:38 #341 №1313047 
>>1313042
>Если человек дорос до использования ООП, то уже понимает зачем это и почему.
Нихуя. Мало кто правильно использует ООП. В основном вырвиглазная неподдерживаемая хуита.

>НЕ-БУ-ДЕТ. Это низкоуровневая хуета из ассемблера.
Если используется так, что понятно что происходит, то почему бы и нет?
Аноним 18/12/18 Втр 14:45:17 #342 №1313050 
>>1313047
>Мало кто правильно использует ООП.
Чего ты несёшь? Давай показывай тогда как правильно - код свой приведи, или кукаретик.

>Если используется так, что понятно что происходит, то почему бы и нет?
В твоём правильном ООП, ты хочешь сказать?
Аноним 18/12/18 Втр 15:02:29 #343 №1313056 
>>1313050
>Чего ты несёшь? Давай показывай тогда как правильно
Правильно это как-то так: https://github.com/yegor256/takes

>В твоём правильном ООП, ты хочешь сказать?
Да в любом, где есть хоть немного императивного кода.
Аноним 18/12/18 Втр 15:08:17 #344 №1313059 
>>1313056
>Правильно это как-то так: https://github.com/yegor256/takes
Там обычный ООП, пионер.

>Да в любом, где есть хоть немного императивного кода.
В приведённой тобой ссылке покажи.
Аноним 18/12/18 Втр 15:09:30 #345 №1313061 
>>1313056
Алсо, это не твой код, судя по всему.

Нехорошо чужое воровать, пионер.
Аноним 18/12/18 Втр 15:16:05 #346 №1313066 
>>1313056
>yegor256
>>1313059
>ам обычный ООП, пионер.
кек
Асло как правильно использовать гото написано у МакКоннела в Совершенном коде, нехуй тут тупые дискуссии устраивать.
кро
Аноним 18/12/18 Втр 15:18:26 #347 №1313068 
>>1313059
>Там обычный ООП
Ты даже не посмотрел что там внутри. "Обычный" ООП - это императивная хуйня. Взять какой-нибудь PHP фреймворк, CMS, мудл. Вот там типичный "обычный" ООП.

>В приведённой тобой ссылке покажи.
Там нет императивщины, там pure OOP.

>>1313061
Не мой. Но я почти так же пишу.


Аноним 18/12/18 Втр 15:20:43 #348 №1313070 
>>1313066
>кек
В чём его необычность. Давай рассказывай, а не кукарекай.
Аноним 18/12/18 Втр 15:21:23 #349 №1313071 
>>1313068
>Но я почти так же пишу
Лул. А ещё ты лидер митол-группы.
Аноним 18/12/18 Втр 15:46:54 #350 №1313082 
>>1313071
Ясно-понятно. У нас тут диванный кукаретик.
Аноним 18/12/18 Втр 15:55:54 #351 №1313089 
>>1313082
Ты главное гото почаще ставить в код не забывай, ссылаясь на настоящий ООП и срать левыми ссылками в ответ на реквест пруфа своих навыков.
Аноним 18/12/18 Втр 15:57:19 #352 №1313090 
>>1313047

> низкоуровневая хуета из ассемблера.

Читал про разработку первых электронных таблиц VisiCalc (1978) - интересно, что там, хоть и писали на ассемблере, использовали макросы для имитации if/else: http://rmf.vc/implementingvisicalc

> The assembler had macros so that instead of directly coding to the machines conditional instructions I could use an "aif/aelse/aendif" set in order to assure that the structure of the code was maintained.

А тут можно увидеть кусочек кода с do/until: http://www.bricklin.com/history/saiearly.htm

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

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

Приведи пример, где goto имеет преимущество перед структурным программированием.
Аноним 18/12/18 Втр 15:58:15 #353 №1313092 
Помогите пожалуйста настроить ngnix. Ставлю сервер на виртуалке, всё установил, всё сделал по гайду, сделал сайт test-lemp.local. Захожу на него и вижу белый экран, хотя должен заработать index.php. Почему не работает? Хелп!
Аноним 18/12/18 Втр 16:03:08 #354 №1313097 
>>1313090
>там, хоть и писали на ассемблере
Так это, по-моему, первое, чему учат программеров - наглядности кода, а goto тут явно расходится с парадигмой.
Да даже доморощенные макаки как-то понимают, что goto это путь в жопу и алкоголизм.
Аноним 18/12/18 Втр 16:04:17 #355 №1313098 
>>1313090
>Приведи пример, где goto имеет преимущество перед структурным программированием.
Да хотя бы организовать быстрый выход из нескольких вложенных циклов. Есть, конечно, языки с чем-нибудь типа break n;
Но в питоне, например, нет такой конструкции, и гото тоже нет, лол, и приходится извращаться.
Аноним 18/12/18 Втр 16:07:38 #356 №1313099 
>>1313092
>хотя должен заработать index.php
Он у тебя не пустой надеюсь? Вывод ошибок включен?
Просто надо исключить сам пхп.

Сам недавно трахался, то только с апачем - есть убунта серв, ну типичный такой lamp, только пых там не заводится - модуль не подключается. А не подключается потому, что его нету в списке модулей, хотя ставил. Возможно это из-за того, что я php на консолько ставил изначально. Думаю снести всё это дело и поставить по гайду.
Аноним 18/12/18 Втр 16:10:10 #357 №1313102 
>>1313092
А php-fpm то хоть поставил и запустил?
Аноним 18/12/18 Втр 16:10:15 #358 №1313103 
>>1313098
>организовать быстрый выход из нескольких вложенных циклов
>goto
В аду заставляют работать с твоим кодом.
Красиво, наверное, выглядит этот бросок через десятки строк и конструкций, вникуда.
Аноним 18/12/18 Втр 16:11:49 #359 №1313104 
>>1313103
Никогда не пишу больше десяти строк в одной процедурке. А уж в циклах и подавно.
Аноним 18/12/18 Втр 16:15:03 #360 №1313107 
>>1313102
>>1313099
Всё поцаны, я проебался с одной строкой в конфиге. 10 раз пересмотрел, написал в тред, а потом нашел ошибку. И у меня так вобще всегда.
Щас буду ебаться с установкой xdebug
Аноним 18/12/18 Втр 17:22:03 #361 №1313149 
>>1313104
>не пишу больше десяти строк в одной процедурке. А уж в циклах и подавно.
>быстрый выход из нескольких вложенных циклов
Кто-то запизделся.
Аноним 18/12/18 Втр 17:47:20 #362 №1313161 
>>1313149
Не, ну если брать во внимание строчки с одной операторной скобкой по PSR-2, то, таки, да, я напиздел, лол.
Аноним 18/12/18 Втр 17:51:10 #363 №1313163 
>>1313161
>строчки с одной операторной скобкой по PSR-2
>из нескольких вложенных циклов
Аноним 18/12/18 Втр 18:14:33 #364 №1313176 
>>1313163
Для имбецилов: по одной скобке на каждую строчку.
Аноним 18/12/18 Втр 18:17:53 #365 №1313180 
>>1313176
>путает скобки и вложенные циклы
>юзает гото
>называет кого-то имбецилом
А ты шутник, как я посмотрю.
Иди нахуй, короче. А то ОП придёт и во флуде обвинит из-за тебя - мудака жопорукого.
Аноним 18/12/18 Втр 18:47:46 #366 №1313197 
>>1313180
А ты, типа, не используешь операторные скобки при написании циклов?

Кроме того, я лишь сказал, что в гото ничего плохого нет, если его правильно готовить, а твое больное воображение нарисовало, что я его использую везде, лол.
Аноним 18/12/18 Втр 19:21:11 #367 №1313213 
опа
Аноним 18/12/18 Втр 19:22:24 #368 №1313215 
Ситуация такая, сначала было максимально интересно делать что-либо, но как только перешел на фреймворк, стало максимально лень, что со мной не так?
Аноним 18/12/18 Втр 20:01:23 #369 №1313228 
>>1308331
Бамп
Аноним 18/12/18 Втр 20:41:58 #370 №1313247 
>>1313215
Примерно та же ситуация. Интересных задач нету, а бессмысленное говно писать, ненужное никому, смысла нету. Вот и сидим как фуфелы.
Аноним 18/12/18 Втр 21:09:54 #371 №1313262 
image.png
>>1313247
>а бессмысленное говно писать, ненужное никому, смысла нету
В айти будущее большое ждет тебя.
Аноним 18/12/18 Втр 22:45:07 #372 №1313314 
>>1313262
Идёт четвёртый месяц изучения веб - мозги кипят, особенно вечером.
Аноним 19/12/18 Срд 02:56:37 #373 №1313379 
15396405250582.jpg
То чувство когда набросал лапши в редактор, на перспективу, а она с первого раза всё правильно отработала.
Аноним 19/12/18 Срд 05:33:57 #374 №1313401 
>>1313247
почему нет треда совместной разработки? можно было бы вместе реализовать интересное говно, заодно получив опыт работы в команде
Аноним 19/12/18 Срд 06:26:25 #375 №1313406 
>>1313314
так возьми отпуск. сходит в баньку с посонами. водовки наверни, блядей помацай
на ёбаной пыхе свет клином не сошелся
Аноним 19/12/18 Срд 08:51:06 #376 №1313422 
>>1313379
Бля ахаха сделал мой день анон
Аноним 19/12/18 Срд 09:25:40 #377 №1313426 
Аноны кто-нибудь вкатился в этом году? Сколько искали работу? Что знали на момент вката? Были ли у вас какие-нибудь проекты нормальные? А то чет я уже заебался сидеть. Вдруг остальные уже вкатились со знаниями на моем уровне или не очень сильно выше, а я сижу сычую.
Аноним 19/12/18 Срд 10:19:48 #378 №1313439 
Аноны спрашивали, где нужны трейты? Их ведь не было в оригинальном ООП.

Вот, что мне в голову приходит:

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

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

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

Какие есть минусы?

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

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

trait LastEditLogger requires SomeBaseClass, SomeInterface, SomeOtherTrait.

Также, у трейтов нет конструкторов и нельзя сделать инициализацию.

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

function x(SomeTrait $y)

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

Аноним 19/12/18 Срд 10:22:07 #379 №1313440 
НАчинал с пхп потом перешел на нормальный язык Джава.
теперь мне опять нужно писать на слонике.
Я теперь не могу нормально относится к этому синтаксису. Что делать?
Аноним 19/12/18 Срд 10:40:02 #380 №1313444 
>>1313439
>Сейчас у трейтов нет способа задать требования к классу-хозяину. Ну например, трейт вызывает какой-то метод хозяина, но в момент подключения трейта наличие этого метода не проверяется.
А разве нельзя в трейте просто создать необходимы абстрактные методы? Тогда класс, использующих их должен реализовать эти методы.
Я-новичек-если-сказал-хуйню-не-бейте-лучше-обоссыте
Аноним 19/12/18 Срд 10:54:23 #381 №1313451 
>>1313439
Inteface + trait>>1313439
>- трейт для контроллера с какой-то небольшой полезной функцией. Ну например, функцией отдачи файла с выставлением нужных заголовков (FileSenderTrait). Или функцией выдачи какой-то ошибки.
Тупое говно тупого говна.
Лучше это решать через композицию.
Сервисы, DTO.

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

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

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

>>1313439
>И видите другие применения трейтов?
Interface + trait.

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

Пример использования:
https://github.com/igorw/evenement/tree/master/src/Evenement




Аноним 19/12/18 Срд 13:19:55 #382 №1313508 
>>1313439
Нахуй оно нужно? Чтобы забить пробел между интерфейсами и наследованием: нет как множественного наследования, так и дефолтной имплементации у интерфейсов. Трейт - это код, который копипастится в твой класс с.

Вот тебе некоторый абстрактный пример:
https://ideone.com/jZYlWs
Аноним 19/12/18 Срд 14:23:04 #383 №1313537 
Анон, подскажи: IE не хочет открывать страницу в UTF8, упорно открывает в кириллице (windows), автовыбор отключен, в гугле ничего путного не нашел.
Аноним 19/12/18 Срд 15:10:01 #384 №1313562 
Аноны, что за хня со мной, 4тый месяц подряд учу программирование, каждый день увеличивал часы проведенные за компом, но последние две недели появляется странное чувство уже через час после того как
сел за комп , головокружение, затупы, как будто сильно нервничаю. Раньше сидел играл в ту же дотку по 5-8 часов к ряду и все было збс, а сейчас ни по прогать ни поиграть нормально не могу. Всего лишь 23лвл, может у кого похожее было, как фиксить?
Аноним 19/12/18 Срд 15:23:05 #385 №1313576 
>>1313562
Возможно, микроинсульт схватил, сходи к врачу.
Аноним 19/12/18 Срд 16:07:41 #386 №1313593 
>>1313562
Ыыы а у меня спондилез шеи в 20.
Аноним 19/12/18 Срд 18:56:17 #387 №1313679 
>>1313562
шея\голова болит иногда? трещит шея если поворачивать?
Аноним 19/12/18 Срд 21:06:12 #388 №1313761 
>>1313406
В пизду блядство и алкоголизм - я у мамы погроммист.
Аноним 19/12/18 Срд 22:29:21 #389 №1313819 
>>1313679
Да, голова болит довольно часто если перестаю соблюдать режим, шея хрустит при резких поворотах либо когда наклоняю голову назад.
Аноним 19/12/18 Срд 22:31:01 #390 №1313821 
i-know-that-feel-bro.png
>>1313819
>шея хрустит при резких поворотах либо когда наклоняю голову назад.

Аноним 19/12/18 Срд 22:42:15 #391 №1313827 
download.jpg
>>1313819
Некогда обьяснять, мышцы твоей шеи в хлам после сидений(плюс ты наверняка напрягаешься и пережимаешь все что угодно), ложишься на ровное, вытягиваешься, на спине поднимаешь голову(как маленький ребенок если ты видел, когда он учится шею держать) 5-6 подходов по 5-10 секунд держания на весу
Чем выше держишь, тем легче, со временем можно будет совсем немного поднимать и это будет обеспечивать хорошую нагрузку
На животе руки по швам смотришь вниз(не вперед) - то же самое делаешь, аля маня учится ползать в кроватке в годик
Через недельку должно быть полегче, ключевые слова "нестабильность шейного отдела позвоночника"
Делаю постоянно перед сном, если совсем пиздец можно погреть в ванной
цэпэ! тоже делает упражнениее второе
Аноним 19/12/18 Срд 22:47:38 #392 №1313830 
>>1313819
Шейный остеохондроз, бро.
Аноним 19/12/18 Срд 23:03:03 #393 №1313838 
>>1313827
>>1313830
Спасибо за советы, но думаю это одна из проблем. Такая вещь как тут >>1313562 еще происходит если выпить кофе/какао. У врача был, поставил ВСД, но в интернетах пишут что этот диагноз все совковые врачи ставят, а на платных еще не заработал.

Еще на счёт шеи, может какую гель/мазь посоветуйте?
Аноним 19/12/18 Срд 23:05:06 #394 №1313840 
>>1313838
Извиняюсь сразу за оффтопы, просто это решает судьбу, не представляю как я буду работать по 8 часов в офисе если дома не могу и 2-3 часов нормально поучиться.
Сами темпы обучения идут быстро, планирую уже через 6-8 месяцев искать работку
Аноним 19/12/18 Срд 23:25:50 #395 №1313849 
>>1313838
У меня была подобная проблема. Занялся легким спортом и она ушла. Сейчас забросил и периодически проблема возникает.
Аноним 19/12/18 Срд 23:33:11 #396 №1313855 
>>1313838
Мази все хуйня, укрепляй мышцы регулярными несложными упражнениями, чай можно не пить, всд хуйня, начинай думать о здоровье, вон космонавты тоже по кайфу чилят в невесомости, но потом если не будут там заниматься по пизде сразу всё пойдет как спустятся, те же перегрузки отсутствием нагрузки
всд + па стаж 5+ лет
Аноним 20/12/18 Чтв 06:07:54 #397 №1313930 
Анончики как вкатится в пхп,если нихуя не знаешь?
Аноним 20/12/18 Чтв 06:11:03 #398 №1313931 
>>1313930
Шапка опа.
Аноним 20/12/18 Чтв 10:42:34 #399 №1313959 
CentOS7, Apache2.4, PHP7.2
Посоны, есть такое желание: получать переменные окружения для всех сайтов на хостинге (сайтов много - больше 50) из одного источника, не копируя в каждый виртуальный хост apache.
Но веб-сервер ограничен в правах и не может получать переменные окружения из /etc/profile.d например.
Как быть? Как делают гуру?
Аноним 20/12/18 Чтв 14:40:59 #400 №1314047 
Вопрос, нахуя нужен JS для php прогера?
Аноним 20/12/18 Чтв 14:42:33 #401 №1314048 
>>1314047
нигде не нужен чисто пых прогер, обычно нужно знать пых, хтмл, жс и прочую малафью
Аноним 20/12/18 Чтв 14:42:42 #402 №1314049 
>>1314047
Грань между бекендом и фронтом щас размывается. Можно хуярить всё на одном языке (js). Ты со своим "онли пхп" уже динозавр.
Аноним 20/12/18 Чтв 15:07:27 #403 №1314063 
Снимок.JPG
да как этот ебучий список нормально сделать?
Аноним 20/12/18 Чтв 15:17:18 #404 №1314065 
Снимок1.JPG
вот такая дрянь
Аноним 20/12/18 Чтв 15:44:29 #405 №1314078 
>>1314048
>>1314049
То есть если я просто хочу клепать сайтики на bitrix, wordpress за дошикм, надо столько всякой ебалы знать? Мне js с его ебанутыми промисами, коллбэками как-то не зашел
Аноним 20/12/18 Чтв 16:20:43 #406 №1314098 
>>1313959
Используй виртуализацию. Погугли например про docker-контейнер.
Аноним 20/12/18 Чтв 16:21:39 #407 №1314099 
>>1314078
Да дохуя знать надо. Может если только ты выпускник вуза какого-нибудь в Москве, можешь изи вкатиться на джуна. Там вроде вакансии есть с требованиями аля знать синтаксис php. А так ебашить придется и учить много хуеты. Я сам начал джс учить потихоньку так лень пиздец.
Аноним 20/12/18 Чтв 16:35:43 #408 №1314104 
>>1314063
>>1314065
Покажи код!

>>1314078
>То есть если я просто хочу клепать сайтики на bitrix, wordpress за дошикм, надо столько всякой ебалы знать?
Зависит от требований работодателя. Мы не можем знать что ему потребуется. Наблюдай за рынком, смотри что требуется.

Моё личное мнение, JS для проектов на таких помойных фреймворках обладает таким же низким уровнем вхождения. А промисы и коллбэки, это не конкретная специфика JS и есть в любом языке. Понимание этого зависит от твоего общего уровня программирования. Коротко говоря, моя мысль заключается в том, что ты можешь изучить и JS, и это так же легко как html/css для твоего выбранного уровня.
Аноним 20/12/18 Чтв 16:38:23 #409 №1314106 
Снимок3.JPG
>>1314104
Аноним 20/12/18 Чтв 16:40:41 #410 №1314107 
>>1314106
А что в массивах находится показать? Пожалуйста, старайся выдать максимальное количество информации о своей проблемы за один пост, дабы не разводить флуд.
Аноним 20/12/18 Чтв 16:43:26 #411 №1314108 
>>1314107
https://ideone.com/4lxBGW
Аноним 20/12/18 Чтв 17:19:02 #412 №1314117 
>>1314104
>Моё личное мнение, JS для проектов на таких помойных фреймворках обладает таким же низким уровнем вхождения.
Там весь Джай Асс - прикрутить Джай Куэри и поназначать селекторы для эффектов. Где там программирование вообще? Мартышки отлично справляются тыкая наугад.
Уровень ПХП там точно такой же.

мимоковырятель вордпресса палочкой
Аноним 20/12/18 Чтв 17:43:52 #413 №1314128 
>>1314117
А какие вообще задачи по вордпрессу ты делаешь? Плагины новые создаешь или че?
Аноним 20/12/18 Чтв 17:53:56 #414 №1314133 
>>1314108
>while($row = mysqli_fetch_array($result)) {
> $array[] = $row[0];
> $array1[] = $row[1];
>}

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

[
'name' => 'Boris'
'password' => '12345'
]

Для этого тебе нужно воспользоваться оператором foreach

https://secure.php.net/manual/ru/control-structures.foreach.php

Подумай сам как это сделать.


Подсказка:

foreach($row as $key => $value) {
...
}



>$array = array();
Можно писать проще $array = [];

Переменные лучше называть тем что они обозначают, т.е. $array лучше переименовать в $users.


Затем, ты складываешь в $array все значения имён, а в $array1 все значение паролей, потом выводишь на новую строку <tr> данные имен <td> из $array и закрываешь эту строку </td>, и снова создаешь новую строку и выводишь в неё данные паролей из $array1. Кстати, при выводе $array1 ты в цикле обходишь $array >for($i=0;$i< count($array);$i++){ print_r($array1[$i])... Тебе нужно в каждой строке выводить данные И имён, И паролей.


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

Например это:
https://true-coder.ru/php/razdelenie-koda-i-shablona-mvc-chast-1.html
https://true-coder.ru/php/razdelenie-koda-i-shablona-mvc-chast-2.html


mysqli уже давно устаревшая технология, и все пользуются PDO.

https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
https://secure.php.net/manual/ru/book.pdo.php


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


Можешь свободно задавать любые вопросы если они появились.
Аноним 20/12/18 Чтв 17:57:39 #415 №1314135 
>>1314133
>и закрываешь эту строку </tr>*
Опечатался.
Аноним 20/12/18 Чтв 18:13:38 #416 №1314141 
>>1314128
Или че.
Аноним 20/12/18 Чтв 23:20:31 #417 №1314312 
>>1313537
Решилось комментированием строки
#AddDefaultCharset windows-1251
в конфиге денвера
Аноним 21/12/18 Птн 04:45:16 #418 №1314364 
Как передать свойство с одного класса в метод другого класса? Только статик?
Аноним 21/12/18 Птн 06:56:39 #419 №1314368 
Снимок.JPG
>>1314133
Слава аллаху отзывчивому анону, не знал что так можно делать, только сейчас узнал о функции array_combine
Аноним 21/12/18 Птн 11:18:11 #420 №1314425 
mb problem.jpg
Почему мне 2 выдает заместо 1 ? Мультибайто-проблемы? Но я же указал флаг /u , че ей не нравится?
http://sandbox.onlinephpfunctions.com/code/34c2e0e95accd4a9551b591f8b10745da88877bd
Аноним 21/12/18 Птн 11:29:19 #421 №1314426 
>>1314364
Статические сущности - корень зла.
Аноним 21/12/18 Птн 11:58:22 #422 №1314444 
>>1314364

Через аргументы:

$otherClass->method($this->property);

Аноним 21/12/18 Птн 12:49:15 #423 №1314454 
>>1314426
>>1314426
Да нифига. Просто группировка переменных и обрабатывающего их функционала в один пакет.
Тот же класс для дебага удобно в виде статика использовать - всё включается и выключается в одном месте, и смысла в инициализации тут нету.
Другое дело, когда всё на ней пишут - тогда пиздос.

Типичная аксиома Эскобара короче.
Аноним 21/12/18 Птн 14:34:22 #424 №1314512 
>>1314047
Потому что JAMstack
Аноним 21/12/18 Птн 14:35:51 #425 №1314514 
>>1314454
>Просто группировка переменных и обрабатывающего их функционала в один пакет.
Инкапсуляция, конечно, всегда хорошо. Но статические сущности в ООП не нужны.
Аноним 21/12/18 Птн 16:30:58 #426 №1314584 
>>1314514
Речь не об ООП, а о хелперах, намертво прикрученных к приложению.
Аноним 21/12/18 Птн 17:31:44 #427 №1314623 
>>1314426
А что лучше? Дублировать одинаковый код?
Аноним 21/12/18 Птн 18:37:45 #428 №1314674 
>>1314623
Пересмотреть архитектуру приложения.
Аноним 21/12/18 Птн 22:22:41 #429 №1314762 
А правда ли, что для программирования на пхп нужно быть еще и дизайнером и верстальщиком?
Аноним 21/12/18 Птн 23:26:55 #430 №1314788 
>>1314762
В днищеконторах только если.
Видишь такую - укатывайся подальше.
laravel начинающий бог в треде Аноним 21/12/18 Птн 23:51:12 #431 №1314797 
спрашивайие
Аноним 22/12/18 Суб 00:08:33 #432 №1314804 
И сразу накидайте пошаговую инструкцию для линукса чтоб поставить все двумя строчками. lamp уже стоит, если что.
Аноним 22/12/18 Суб 00:10:32 #433 №1314805 
>>1314797
Есть два стула: один - с толстыми контроллерами, другой - на статиках сделанный. Что себе оставишь, что на собес отправишь?
Аноним 22/12/18 Суб 00:17:33 #434 №1314807 
>>1314804
Как положено заходить в опен спейс? Если тебе под ноги кружку печенек кинут, что надо делать?

Как определить тимлида, где его рабочее место должно быть?
Аноним 22/12/18 Суб 00:20:57 #435 №1314808 
>>1314805
Буду ебашить лапшу кода покамест монстр не разрастется до размеров галактики, а потом сьебну на другую работу мидлом. И так до сеньора с 300к в день.
Аноним 22/12/18 Суб 00:22:03 #436 №1314809 
>>1314807
>Как положено заходить в опен спейс?
на гироскутере

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

>Как определить тимлида, где его рабочее место должно быть?
ближайшее к смузимашине
Аноним 22/12/18 Суб 00:23:17 #437 №1314810 
>>1314808
А не боишься, что тебе неперезвонят с такими закидонами? Пойдёшь веслать в козлиную галеру.
Аноним 22/12/18 Суб 00:26:41 #438 №1314813 
>>1314809
>смузимашина свежайшего смузи испить
С этим - к гламурным питорастам. У ПХПшников за это не погладят - у нас народ суровый и прожжёный.
Аноним 22/12/18 Суб 00:34:39 #439 №1314818 
>>1314813
> у нас народ суровый и прожжёный.
одним словом уёбки-ноулайферы

>>1314810
>не перезвонят
мне похуй, хуже веб-макаки профессии нет
Аноним 22/12/18 Суб 00:38:07 #440 №1314819 
>>1314818
Ты не вкатишься.
Аноним 22/12/18 Суб 00:51:58 #441 №1314820 
>>1314819
б-г миловал
Аноним 22/12/18 Суб 00:56:46 #442 №1314821 
>>1314820
Это вообще шениально - называть людей неизвестной тебе профессии уёбками и макаками.

>б-г миловал
Веб от тебя.
Аноним 22/12/18 Суб 00:58:26 #443 №1314822 
>>1314821
>Это вообще гениально
А ты подумой почему среди айтишнегов нет гениев? Тотоже!
Аноним 22/12/18 Суб 06:51:47 #444 №1314855 
>>1314818
Этот лев.
Аноним 22/12/18 Суб 11:52:35 #445 №1314886 
Day014-LocationWidget[1].jpg
Анон, а как сделать фон и поверх него блок с тем же фоном только без «зетмнения», как на пике?
Аноним 22/12/18 Суб 12:13:34 #446 №1314894 
>>1314886

Самый простой способ - просто сделать 2 картинки, одна чистая, другая затемненная. Затемненная имеет низкий контраст и может быть сильно сжата тем же JPEG. Если ты можешь гарантировать, что ее серединка всегда будет закрыта попапом, то можешь сделать серединку просто серой, что уменьшит вес. В попапе сделать закругление и фоном поставить цветную картинку. Чтобы картинки совпадали по расположению, можно:

- задать для них привязку к центру элемента. Это позволит сделать цветную картинку маленькой
- использовать привязку фона через http://htmlbook.ru/css/background-attachment и привязать их к углу экрана

Дальше - можно попробовать взять одну картинку, но заморочиться с фильтрами: https://developer.mozilla.org/ru/docs/Web/CSS/filter (интересно, что впервые фильтры появились в древних Internet Explorer, я помню, они были в IE6, вышедшем в 2003).

Надо понимать, что некоторые фильтры вроде blur не бесплатны. Например, у меня на телефоне применение фильтра blur к странице приводит к тому, что скроллинг идет со скоростью 2-3 fps (это очень дерганно).

Также, надо по caniuse проверить, насколько хорошо они поддерживаются: https://caniuse.com/#feat=css-filters

Заметь, что поддерживаются они так себе: в FF 2014 года надо включать флаг для их поддержки.

Попробуй сделать по описанию, и можешь выложить результат на codepen или jsfiddle для проверки.
Аноним 22/12/18 Суб 12:25:53 #447 №1314895 
>>1314818
>уёбки-ноулайферы
Вот какое тебе дело до чужой личной жизни? Ты ебаный вуерист извращенец?
Аноним 22/12/18 Суб 14:47:20 #448 №1314949 
>>1314895
На самом деле у него всё ещё хуже:
1 - он жирный-пассажирный, который за каким-то хреном залез в пхп-тред и троллит тут. Уж точно не от избытка общения такое делают.
2 - он не жирный, а просто идиот, который залез в пхп-тред из-за нехватки дураков в /б.
Аноним 22/12/18 Суб 15:59:23 #449 №1314972 
369-448

>>1314454

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

>>1314425

Флаг u говорит о том, что шаблон для поиска и строка в кодировке utf-8. Увы, он не влияет на тот факт, что PREG_MATCH_OFFSET возвращает смещение в байтах, а не символах. Русские буквы занимают 2 байта.

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

>>1314368

Это все хорошо, но не храни пароли в открытом виде, а храни соленый хеш от них: https://github.com/codedokode/pasta/blob/master/security/password-hashing.md

>>1313537

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

Аноним 22/12/18 Суб 15:59:56 #450 №1314973 
>>1313959

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

>>1314098

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

>>1313508

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

>>1313451

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

> DTO

Не очень понятно, при чем тут это.

> Ток надо проверить сможет ли доктрина прочитать анотации в трейте.

Может.

> Трейты можно в тайпхинте использовать.

Ты проверял эту информацию? У меня не работает: https://3v4l.org/0KcVF

> Пример использования:
> https://github.com/igorw/evenement/tree/master/src/Evenement

Мне, кстати, не нравится, эта система, так как там нет проверки на правильность написания события:

$x->on('dataaaReceived', ...)

А если бы были методы вроде

$x->onDataReceived(...)

То была бы и защита от опечаток, и видно, какие события доступны. Еще один вариант - через публичные свойства или методы, как в .NET:

$x->dataReceivedEvent->addListener(function ($e) {
...
});

Этот подход также защищает от опечаток и позволяет увидеть доступные события. А подход Evenement, скопированный с Node.JS, мне не очень нравится. Но это мое мнение.
Аноним 22/12/18 Суб 16:00:30 #451 №1314974 
>>1313444

Да, можно.

>>1313426

Поищи сам в архиве: https://phpclub.tech/search/?q=%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B8%D0%BB%D1%81%D1%8F

>>1313401

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

>>1313247

А что для тебя было бы интересно?
Аноним 22/12/18 Суб 16:01:05 #452 №1314975 
>>1313228
>>1308331

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

> $this->time = $hour.':'.$minute;
А не выгоднее ли хранить время как часы и минуты отдельно, чтобы не мучаться с преобразованиями?

> $hour = 0..$hour;
А зачем тут 2 точки? Это получается 0. (0 без дробной части) . $hour.

> $minute > 60
А 60 минут - это допустимо?

> $datesAndTimes[] = $currentTime->modify($ordinal.' '.$spelling[$dayOfWeek].' '.$this->time);
Интересное решение.

> public function setAlarm(int $id, Alarm $alarm): void
> public function getAlarm(int $id): ?Alarm
А зачем этот id? Для тестов? Мне кажется, проще вообще без него. Или ты не уверен, что когда ты меняешь свойства тревоги, они поменяются внутри AlarmClock ? А это уже к тебе вопрос: поменяются или нет?

> if ($object == $alarm) {

Изучи, в чем отличие == и === для объектов в PHP мануале: http://php.net/manual/ru/language.oop5.object-comparison.php

> public function findNearestAlarm(DateTimeImmutable $currentTime): Alarm
Возможно, было бы лучше использовать DateTimeInterface, чтобы можно было передавать и DateTime, хотя тогда придется беспокоиться, что ты не поменяешь его содержимое.

> $alarms[] = [$alarmTime, $alarm];
> sort($alarms);

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

> sort($datesAndTimes);
> return $datesAndTimes[0];

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

> sort($alarms);
> return $alarms[0][1];
То же самое.

> private function isTriggeredAlarm(Alarm $alarm, DateTimeImmutable $currentTime): bool
Мне кажется, тут было бы быстрее сравнить время, день недели и признак активности. Хотя использованный подход тоже годится.

> $currentTime = new DateTimeImmutable('13:00');
Здесь в тесте появляется зависимость от текущего дня. Лучше бы жестко прописать дату, чтобы убрать случайности.

> assert(get_class($alarmTime) == DateTimeImmutable::class);
Лучше было бы писать $alarmTime instanceof DateTimeImmutable - ведь мы не обязаны вернуть строго этот класс, а допустимо вернуть его наследника в соотв. с принципом Лисков (LSP).

> assert($alarmClock->getAlarm(0) === null);
Вот тут вместо поиска по id (а откда ты знаешь, какой у тревоги id? Это нигде не документировано) было бы лучше сделать метод вроде getAllAlarms() или hasAlarm() и проверять через них. А с твоим подходом - появляется необходимость в id, и тест становится хрупким, зависящим от деталей реализации класса: если завтра мы начнем нумеровать тревоги с 1, то тест сломается. А это затраты времени и денег на переписывание.

> assert($nearestAlarm === $alarm || $nearestAlarm === $alarm2);

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

> $alarm2->setType(Alarm::TYPE_NON_REPEATING);
> $alarmClock->setAlarm(0, $alarm2);
Вообще, вызывать setAlarm не требуется. Ты объект заменяешь тем же самым объектом.

В общем, сделано хорошо.

Ну и на будущее, сейчас ты писал тесты руками, но вообще есть готовые фреймворки для написания тестов, где много готовых полезных методов, где есть вывод отчетов о выполнении тестов. Самый известный - это PhpUnit, это PHP-версия семейства фреймворков xUnit, которые есть почти для любого языка (версия для Явы, например, называется JUnit). Это семейство началось с фреймворка для Smalltalk SUnit, описанного Кентом Беком в статье 1989 года ( http://swing.fit.cvut.cz/projects/stx/doc/online/english/tools/misc/testfram.htm - там есть полный код фреймворка). Почти 30 лет прошло!

Чтобы пользоваться PhpUnit, нужно его установить через композер, но если ты пока с ним не знаком, то его можно просто скачать в виде .phar-файла.
Аноним 22/12/18 Суб 19:21:48 #453 №1315134 
Насколько сложно сейчас(конец 2018 года) найти работу php junior во Львове?
Аноним 22/12/18 Суб 19:46:13 #454 №1315142 
>>1314894
Спасибо тебе огромное и побольше здоровья.
Аноним 22/12/18 Суб 20:59:37 #455 №1315175 
>>1314972
>Есть еще мнение, что для дебага лучше использовать дебаггер, или сделать логгирование или натыкать var_dump.
У меня ПХП как консольное приложение крутился - вывод прямо на экран в реалтайме.
>var_dump
Если у тебя скрипт 10 строк, то да, а если под 300? Задолбаешься потом это вар_дамп выковыривать из кода.
Аноним 22/12/18 Суб 21:01:18 #456 №1315176 
>>1315175
>а если под 300?
На каждый модуль, размазанные по файловой системе, в смысле
Аноним 22/12/18 Суб 21:06:30 #457 №1315179 
>>1314886
А еще можно открыть source и посмотреть как там это сделано.
Аноним 22/12/18 Суб 21:47:32 #458 №1315215 
>>1314975
> Возможно, было бы лучше использовать DateTimeInterface, чтобы можно было передавать и DateTime

Я не тот, кому адресован ответ, просто для справки отвечу - DateTimeInterface лучше не использовать. Это бесполезный интерфейс, так как если функция работает с аргументами типа \DateTime, на которых вызываются методы modify или setTime, то при передаче в функцию аргументов типа \DateTimeImmutable функция вернёт другие результаты, верно и обратное.
Например во Flow даже есть специальные конструкции, позволяющие пометить аргументы, для которых запрещено мутирование: https://flow.org/en/docs/types/interfaces/#toc-interface-property-variance-read-only-and-write-only

Ещё есть RFC от разработчика доктрины, предлагающее выпилить DateTimeInterface: https://wiki.php.net/rfc/drop-datetimeinterface
Похоже, что этот интерфейс вводился для поддержки перезрузки операторов вроде >, < для объектов дат.

Иммутабельные объекты-значения вроде денег и времени исключают огромное количество трудноуловимых багов. Кстати, в мире JS есть библиотека moment, в которой даты не иммутабельны и разработчики писали пост с извинениями за то, что сразу не сделали нормально. Сейчас уже слишком поздно что-то менять из-за обратной совместимости, поэтому приходится постоянно клонировать даты.
Аноним 22/12/18 Суб 22:06:05 #459 №1315228 
>>1315215

Вообще, да, справедливое замечание. Не стоит тогда менять DTImmutable на DTInterface.

Я ловил себя на мысли, что эти классы не очень совместимы, но как-то глубоко не думал.

Действительно, интерфейс определяет не только названия методов, но и определенные требования к ним. И неправильно, когда одна реализация modify создает новую сущность, а другая - модифицирует существующую. Трудно написать интерфейс, который корректно работает с обоими типами.
Аноним 22/12/18 Суб 22:06:50 #460 №1315230 
>>1315179
Это изображение, лол.
Аноним 22/12/18 Суб 22:07:04 #461 №1315231 
>>1315228

* трудно написать код, который корректно работает с обоими типами
Аноним 22/12/18 Суб 22:47:46 #462 №1315258 
>>1305609
екземпл
Аноним 23/12/18 Вск 01:15:12 #463 №1315297 
Отпишитесь, кто работает на пыхе в ДС. Сколько получаете?
Аноним 23/12/18 Вск 01:24:34 #464 №1315300 
>>1312630
Вспомнил свою спам-молодость.
И только попробуйте мне пиздануть, что нельзя парсить HTML регулярками — я напишу регулярку в 10 раз быстрее, чем вы будете подключать свою нескучную либу от васяна (которая ещё и поперхнется при первом нарушении формата) и этого будет достаточно для 98% задач.
Аноним 23/12/18 Вск 11:24:17 #465 №1315365 
как же блевотно на чистом пхп писать сайт
Аноним 23/12/18 Вск 11:30:18 #466 №1315369 
>>1315365
Держи нас в курсе.
Фреймворк Аноним 23/12/18 Вск 15:50:57 #467 №1315498 
Зимой будет долгий отпуск. Планирую ознакомиться с парой фреймворков. Сам работаю с ларой.

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

И еще вопрос. Какой фреймворк считается самым тру? Симфони вроде как?
Аноним 23/12/18 Вск 18:24:40 #468 №1315598 
>>1315498
>
Необходим дохуя простой фреймворк.
Slim/Silex.

> Какой фреймворк считается самым тру?
Zend > Symfony> Yii > ...
Аноним 23/12/18 Вск 20:09:39 #469 №1315653 
>>1315598
Чем плох Laravel?
Аноним 23/12/18 Вск 20:19:14 #470 №1315667 
>>1315653
Ничем.
Аноним 23/12/18 Вск 20:22:03 #471 №1315670 
>>1315667
медленный,самый главный тормоз
Аноним 23/12/18 Вск 21:57:14 #472 №1315713 
Аноны! Дайте советов мудрых по теоретическому вопросу.
Есть некий сайт с видео на пример возьмём паблик вкакахе. Нужно написать скрипт, который будет выкачивать видео оттуда и заливать на фтп. Пхп с этим справится? Если что, каждое видео открывается в новом окне. Скачивание вручную происходит путём ПКМ->Сохранить видео как...
Аноним 23/12/18 Вск 22:00:23 #473 №1315715 
>>1315713
Да, вполне справится.
Аноним 24/12/18 Пнд 03:29:28 #474 №1315784 
Можно ли в пхп работать с тредами и нужно ли это вообще?
Аноним 24/12/18 Пнд 11:15:07 #475 №1315838 
Не могу заставить Slim работать ни на локалхосте, ни на хостинге. Выдает Page Not Found.
Вот код index.php:
<?php
require 'vendor/autoload.php';
$app = new \Slim\App();
$app->run();

Аноним 24/12/18 Пнд 12:10:46 #476 №1315851 
>>1315838

htaccess настроил как в документации?
Аноним 24/12/18 Пнд 12:31:55 #477 №1315857 
>>1315851
Нет. Настроил по видео https://www.youtube.com/watch?v=TcFUNG7M3VE&t=554s хостинг выдает ошибку
Аноним 24/12/18 Пнд 13:04:33 #478 №1315865 
>>1315297
100к
Аноним 24/12/18 Пнд 13:11:31 #479 №1315866 
>>1314972
>PREG_MATCH_OFFSET возвращает смещение в байтах
Спасибо за развернутый ответ!
Аноним 24/12/18 Пнд 13:20:36 #480 №1315868 
>>1314973
>Сервис ради такой простой задачи, как добавить пару полезных функций - это оверкилл. Плюс, сервис не имеет доступа к внутреннему состоянию контроллера

Понятно, дальше не читал.
Аноним 24/12/18 Пнд 16:01:07 #481 №1315931 
>>1315868
Да, придётся подтянуть матчасть чтобы понять что написано.
Аноним 24/12/18 Пнд 17:00:38 #482 №1315955 
>>1315851
Все я разобрался
Аноним 24/12/18 Пнд 21:22:13 #483 №1316084 
>>1314975
Спасибо за замечания!

>Комментариев, мягко, говоря маловато
Понял, сделаю

>А зачем этот id?
Переделаю

>Интересное решение.
> $currentTime->modify($ordinal.' '.$spelling[$dayOfWeek].' '.$this->time);

Что-то не так? Есть вариант с $time-add(DateInterval::createFromDateString('параметры')); , но он выглядит слишком массивно и по-моему имеет какой-то подвох.

>Здесь есть проблема: если ни один день недели не выбран, то массив будет пуст и произойдет ошибка

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

У меня возник вопрос насчет функции setAlarm. Как она в нынешнем виде (замена объекта на объект) может пригодиться в реальном проекте? Ведь можно завести метод getAlarms():array и настраивать нужный нам объект выбрав его из массива. Это нарушит принцип solid?
Аноним 24/12/18 Пнд 23:04:18 #484 №1316130 
FUMk8eNINX8.jpg
>>1305368 (OP)
У меня возникли вопросы по вектору!

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

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

Я вижу два варианта решения, первый - это создать класс CompanyBuilder в котором будут методы создатьДепартаменты, создатьРаботников, получитьКомпанию.

Пример https://ideone.com/3FEnva

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

Пример https://ideone.com/PkdeAs

Вдохновлялся этим образцом https://github.com/domnikl/DesignPatternsPHP/blob/master/Creational/Builder/TruckBuilder.php

Ещё была идея сделать фабрику со статическим классом, которая будет отдавать нам массив с работниками.

Пример https://ideone.com/Fwij7Q

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

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

Надеюсь принципы ООП не запрещают иметь внутри объекта Employee объект профессии, который может быть у каждого работника уникальным или наоборот у всех сотрудников одной профессии в компании он будет одинаковым.

Буду благодарен за подсказки. Возможно я ещё не дорос до уровня на котором стоит пытаться вникать в паттерны?
Аноним 25/12/18 Втр 00:37:35 #485 №1316154 
Анонушки, есть такой массив $key, в котором такие данные

(
[0] => $10 000 business start up

[1] => $10 000 investment opportunities

[2] => $10 000 to invest

[3] => $1000 investment ideas

)

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

Таким образом, мы дергаем domain.ru/?page=1

А там выводится "$10 000 business start up"

Как мне вывести их наоборот, да так, чтобы этот массив начался с единицы, т.к. странцы в url начинаются с единицы, да еще в виде карты сайта? Но не xml в в виде списка <a href="domain.ru/?page=1">$10 000 business start up</a>... и так далее.

Короче пройтись по всему массиву, сделать по сути смещение на единицу и вывести с таким синтаксисом?
Аноним 25/12/18 Втр 01:07:16 #486 №1316164 
>>1316154
Даже не так лучше, анончики, простите: нужно просто вывести карту сайта в виде всех страничек (то есть просто вы ключи из массива без значений):

<?xml version="1.0" encoding="UTF-8"?>

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<url>

<loc>http://www.domain.com/?page=0</loc>

<lastmod>2005-01-01</lastmod>

<changefreq>monthly</changefreq>

<priority>0.8</priority>

</url>

<url>

<loc>http://www.domain.com/?page=0</loc>

<lastmod>2005-01-01</lastmod>

<changefreq>monthly</changefreq>

<priority>0.8</priority>

</url>

</urlset>

Аноним 25/12/18 Втр 01:21:32 #487 №1316170 
>>1316164
Тут по хорошему нужно бы разнести на несколько файлов и реализовать хотя бы примитивный темплейт, но если "хуяк хуяк и в продакшн" то как то так:
<?php
$keys =[
0 => '$10 000 business start up',
1 => '$10 000 investment opportunities',
2 => '$10 000 to invest',
3 => '$1000 investment ideas'
];
$myShittyCode = '';
foreach ($keys as $key => $value) {
$myShittyCode .= '<a href="domain.ru/?page=' . ($key + 1) .'">' . $value . '</a>';
}

echo $myShittyCode;

/
или использовать цикл for()

или получать имя ключа функцией key() . тут нужно будет читнуть мануал по массивам
*/
Аноним 25/12/18 Втр 01:53:28 #488 №1316175 
14572086925030.jpg
>>1316170
Спасибо большое! Сделал твой вариант в виде html и сделал xml по этому коду: gist.github.com/artlung/210438

Все получилось.
Аноним 25/12/18 Втр 06:04:16 #489 №1316200 
>>1308014
array_reduce();
Аноним 25/12/18 Втр 08:21:09 #490 №1316210 
Нужно ли пхпшнику задротить JS?
Аноним 25/12/18 Втр 10:17:31 #491 №1316243 
>>1316210
Необязательно, но желательно. Зависит от того, чем ты хочешь заниматься.
Аноним 25/12/18 Втр 11:53:22 #492 №1316273 
>>1316210
Если и лезть в эту тему, то с головой, не стоит относится к этому ЯП с пренебрежением или с отвращением. Подойдите к этому как к навыку работы с еще одним инструментом, который заслуживает отдельного внимания и детального изучения. К тому же, изучение JS приведет к встряске устоявшихся ментальных конструкций, полученных при изучении PHP.
Аноним 25/12/18 Втр 13:57:17 #493 №1316313 
Аноны, салют! Прошу совета.
Учусь писать простейший парсер.
Есть самописный интернет магазин. В нем есть блоки с товарами.
Я хочу запарсить к себе на другой сайт эти блоки, чтобы информация из них записывалась в массив такого вида:


$items= array(
0 => array(
"img" => "site/hooy.img",
"name" => "Штаны Гоша рубчинский",
"prcie" => "10000"),
1 => array(
"img" => "site/hooy2.img",
"name" => "Ватник",
"prcie" => "50"),
)
)
);
И так далее

Составил такую регулярку просто чтобы для начала вытянуть все блоки с товарами, а дальше че нибудь придумаю:
$pattern = '~<div class="item"(.*)</div>~';
preg_match_all($pattern, $content, $matches);

Возвращаются пустые массивы. Я не понимаю. Что я делаю не так?
Я знаю, что этот вопрос решили уже 100 раз. Я делаю это исключительно в целях обучения.
Аноним 25/12/18 Втр 14:35:41 #494 №1316325 
>>1316313
Мудак ты ёбаный, ну есть же json, нахуй тебе парсить хтмл?
Аноним 25/12/18 Втр 14:57:30 #495 №1316333 
>>1316325
То есть мне надо кодировать всю страницу в json, найти там нужные мне блоки, записать их, а потом раскодировать?
Аноним 25/12/18 Втр 15:08:10 #496 №1316336 
>>1316333
Кодера найми просто и он всё сделает за день. Сам ты неделю возиться будешь, мозг сломаешь, и не факт, что результат будет.

А так ты ересь несёшь.
Аноним 25/12/18 Втр 15:11:38 #497 №1316337 
>>1316325
Если там мускул, то жсон не нужен - прямо с базы можно брать данные.
Аноним 25/12/18 Втр 15:17:02 #498 №1316340 
>>1316336
Бро ты чего какой злой? Я учу пхп, хочу понять как мне запарсить блоки, вот и спрашиваю.
Аноним 25/12/18 Втр 15:23:58 #499 №1316343 
Найс, посоветуйте книг
Аноним 25/12/18 Втр 15:28:43 #500 №1316344 
>>1316340
Почему я злой? Нормально общались вроде.
Если сайт твой - парсить его выдачу смысла не имеет и создаёт лишнюю нагрузку.
Проще запрос к БД составить и получить свой массив куда надо. Ну или API с json прикрутить, но тут долго пыхтеть будешь.
Аноним 25/12/18 Втр 15:35:06 #501 №1316346 
>>1316344
Мне не принципиально с какого сайта парсить, хоть с яндекс ньюс. Просто у меня есть свой сайт, который я написал сам, мне проще парсить с него.
Цель - научиться и понять как вытаскивать блоки с одинаковым классом и записывать информацию из них в массив на чистом пхп.
На данный момент я запутался.
Аноним 25/12/18 Втр 19:56:14 #502 №1316478 
Спаси и сохрани
someApprentice 27/12/18 Чтв 06:33:22 #503 №1317102 
Screencast from 12-27-2018 10:30:07 AM.webm
Как вам код? Мне очень нравится.
Аноним 27/12/18 Чтв 06:39:10 #504 №1317103 
>>1316346
Получаешь страницу, парсишь регулярками по ситуации. Или какой-нибудь либой, которая уже умеет прекрасно работать с дом. Вероятно соснешь на динамичном контенте, придется выкручиваться.
Аноним 27/12/18 Чтв 07:16:51 #505 №1317107 
>>1317102
жмот
someApprentice 27/12/18 Чтв 09:47:42 #506 №1317143 
screencast.mp4
>>1317102
Аноним 27/12/18 Чтв 18:39:28 #507 №1317353 
Аноны, подскажите, можно-ли сгенерировать новую папку на PHP, если можно, то как?
Аноним 27/12/18 Чтв 18:48:48 #508 №1317356 
>>1317353
mkdir
Аноним 27/12/18 Чтв 18:58:07 #509 №1317362 
>>1317356
Спасибо.
Аноним 29/12/18 Суб 13:32:43 #510 №1318313 
Поцаны, я установил Intervention и начал разбираться. Сделал простейшую функцию ресайз и вот результат:
Fatal error: Uncaught Error: Call to undefined function Intervention\Image\mb_convert_case() in /var/www/images/vendor/intervention/image/src/Intervention/Image/AbstractDriver.php:105

Как я понял, у меня нет функции mb_convert_case(). Не понимать. Функции для пхп можно как то доустанавливать?
Аноним 29/12/18 Суб 13:51:35 #511 №1318327 
>>1318313
Разобрался. Надо было установить mbstring
Почему так происходит? Почему надо что то доустанавливать в пхп лол?
VirtualBox + MySQL Аноним 29/12/18 Суб 14:18:44 #512 №1318338 
Хз где спросить. Спрошу у вас.

Есть необходимость иметь отдельный виртуальны сервер под MySQL (в моем случае MariaDB).
Настроил все на VirtualBox. Проблема в том, что соединение с хоста происходит очень долго. Кто-то может пояснить почему и можно ли это исправить?

На виртуалке использую ubuntu server 18.04 и виртуальный адаптер хоста со статическим ip. Виртуальный адаптер хоста нужен для того, чтобы с базой можно было соедениться как с хоста, так и с других виртуальных образов.

Я тупой, поэтому если кто знает в чем проблема поясните на пальцах плез
Аноним 29/12/18 Суб 14:56:25 #513 №1318356 
>>1318338
Вопрос решился очень просто
Аноним 29/12/18 Суб 17:28:59 #514 №1318400 
Двощь, помоги мне.
$x = 2;
echo "$x $x = ($x$x)\n";
Мне нужно, чтобы выводило 2 2 = 4, а не 2 2 = (2*2)
Аноним 29/12/18 Суб 17:30:00 #515 №1318401 
>>1318400
Блядская разметка.
Мне нужно, чтобы выводило 2 умножить 2 = 4, а не 2 умножить 2 = (2*2)
Аноним 29/12/18 Суб 17:38:10 #516 №1318404 
>>1318400

Заведи новую переменную, в нее помести результат умножения и эту переменную подставляй в строку. В строку нельзя вставлять выражения.
Аноним 29/12/18 Суб 17:40:50 #517 №1318405 
>>1318404
>В строку нельзя вставлять выражения.
Очень жаль. Спасибо.
Аноним 29/12/18 Суб 17:48:31 #518 №1318406 
Grade-Middle.png
В два треда закинул, сюда тоже закину
Ну что, погроммисты, можете сдать грейд на мидла?
Аноним 29/12/18 Суб 18:39:52 #519 №1318420 
Screenshot20181229183929.png
>>1318404
Въебал бы тебе с ноги

>>1318400
Аноним 29/12/18 Суб 19:23:58 #520 №1318436 
>>1318420
Въебал бы тебе за щеку за тупые выебоны на детской теме. Кодер из тебя дерьмо, если ты экономишь переменные в ущерб читабельности.
Аноним 29/12/18 Суб 23:43:47 #521 №1318502 
>>1318406

Выглядит как набор обязательных знаний для любого разработчика. А, кстати, в вебе применяется паттерн Команда? Мне на ум в основном приходят примеры вроде редактора текста, где бы подошел этот паттерн.
Аноним 29/12/18 Суб 23:48:00 #522 №1318503 
>>1318420
>>1318436

Замечание справедливое - можно подставить результат выражения в строку через конкатенацию (я бы добавил скобки, чтобы не гадать о приоритетах выражений), но, увы, если его подавать в такой манере, то впечатление производится крайне негативное. Давайте вести себя культурнее.
Аноним 30/12/18 Вск 00:26:46 #523 №1318518 
>>1318503
>Давайте вести себя культурнее.
Да я, вроде, старался в стиле поста ответить. Но ты прав, пожалуй.
Аноним 30/12/18 Вск 06:54:21 #524 №1318575 
>>1318356
Расскажи как
Аноним 30/12/18 Вск 11:33:35 #525 №1318633 
В пыхе можно замутить нормальные дженерики каким-нибудь расширением?
Есть rfc, но это лишь бумажка для подтирания жопы, которой уже подтерлись.
Нужен какой-то реальный рабочий код или мод языка
Аноним 30/12/18 Вск 12:19:50 #526 №1318647 
grade-junior.png
grade-senior.png
>>1318406
На Сениора и Июня
Аноним 30/12/18 Вск 12:31:47 #527 №1318654 
>>1318406
>>1318647
Какая-то хуита. Вообще ничего нет про виртуализацию/контейнеризацию и системы деплоя.
Нихуя нет про сети кроме "http протокол".
При этом вопросы по БД на более высоком уровне, чем требуется при разработке 95% говносайтов.
При этом еще и чисто под SQL заточены, судя по всему.
Я уж молчу про отсутствие требований знаний структур данных и алгоритмов.

Аноним 30/12/18 Вск 12:33:21 #528 №1318656 
Нихуя не могу найти блять.
Можно ли в пыхе изменять область видимости члена класса при наследовании?
Аноним 30/12/18 Вск 13:22:52 #529 №1318678 
>>1318575
В настройках всего этого сетевого говна (в убунте 18.04 это netplan). У меня было написано:
nameservers:
addresses: [8.8.8.8, 8.8.4.4]

Что создавало какую-то залупа с DNSами всякими (хуйово в этом шарю). На практике, эта хуйня при запуске оси, записывала в этот файл: /etc/resolv.conf строку: nameserver: 127.0.0.53

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

Что мне не помогло, но я оставил. А помогло банальное удаление строк:
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
из настроек netplan

и удаление
nameserver: 127.0.0.53
из:
/etc/resolv.conf
Аноним 30/12/18 Вск 13:47:11 #530 №1318682 
Screenshot10.png
Насколько я конченый?
Аноним 30/12/18 Вск 15:06:20 #531 №1318705 
>>1318656
>область видимости члена класса
Какого ещё члена? Ты класс объявляешь или объект этого класса? И причём тут наследование?
Ничего не понятно из твоего поста.
Аноним 30/12/18 Вск 15:13:01 #532 №1318707 
>>1318656

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

А вообще, почему бы тебе не сделать эксперимент? Сделай 3 базовых класса с 3 разными видимостями полей, для каждого по 2 наследника, где видимость меняется, чтобы были все комбинации. И тогда обсудим, почему так выходит.
Аноним 30/12/18 Вск 15:15:55 #533 №1318708 
>>1318707
>>1318705
Уже сделал.
1. В пыхе нельзя менять область видимости членов класса.
2. Можно объявить в дочернем классе член с таким же именем и увеличить ему область видимости, но это будет не тот же самый член, что в базовом классе, а новый член, прост с таким же именем. Значение не копируется.
При этом если уменьшить область видимости члена с идентичным именем, то выкинет фатал еррор.
Аноним 30/12/18 Вск 15:27:21 #534 №1318714 
>>1318708

private члены класса видны только в нем. Если ты хочешь расширить область видимости, надо брать в базовый класс protected, а в наследнике делать public.
Аноним 30/12/18 Вск 16:07:24 #535 №1318727 
Screenshot11.png
Почему я не могу задать в возвращаемом тайпхинте сразу дочерний класс?
При этом фактически я возвращаю дочерний и далее из метода возвращается полноценный дочерний объект.
Но если задать тайпхинт на дочерний, пых падает с фатал-еррором.
Аноним 30/12/18 Вск 16:47:21 #536 №1318734 
>>1318727

Это случайно не связано с багом, который описан тут:

- https://phpclub.tech/pr/res/1305368.html#1308865
- https://phpclub.tech/pr/res/1281608.html#1297483

То есть когда ты в наследнике сужаешь возвращаемый тайп-хинт? Расширять его нельзя из-за приципа Лисков, а сужать можно, но PHP не позволяет.
Аноним 30/12/18 Вск 17:30:46 #537 №1318743 
>>1316130
Up!
Снимаю все вопросы, кроме.

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

Объект профессии не имеет смысла в системе без объекта сотрудника, получается его нужно создавать внутри конструктора сотрудника? Композиция, так кажется это называется.
Аноним 30/12/18 Вск 17:56:52 #538 №1318750 

>>1318734
Да, сужаю. В 7.2 подвезли какой-то костыль для этих дел, но это бред
https://wiki.php.net/rfc/object-typehint
Аноним 30/12/18 Вск 20:13:55 #539 №1318783 
>>1318633
Дженериков нет и не будет. Даже если будут, всё перечёркивает динамическая натура PHP, так как проверки типов происходят в рантайме, то есть эффект "скомпилировалось - значит работает" недостижим в PHP. Есть статические анализаторы, поддерживающие дженерики, например psalm, phpstan, phan: https://github.com/phan/phan/wiki/Generic-Types

Сейчас всё больше open source проектов внедряют статический анализ, например Doctrine ORM, но в локальной разработке это очень неудобно - на данный момент статические анализаторы плохо поддерживаются в IDE, у каждого статического анализатора свой синтаксис дженериков + для сторонних библиотек нет тайпингов и никто их не делает. Для того же TypeScript есть репозиторий DefinitelyTyped. Тем не менее, вот человек использует статический анализ в PHP: https://www.youtube.com/watch?v=sf39f2q15cU

Совет - бери другой язык. Сам последние полгода 90% времени пишу на тайпскрипте, остальные 10% мучаюсь с PHP. Тем, кто писал только на динамических языках, нас не понять.
Аноним 30/12/18 Вск 20:32:21 #540 №1318793 
>>1318783
>статический анализ
Ну это же костыль, причем лютейший, чет уровня "тайпхинтов в комментах".
К тому же, как показывает практика, такая хуйня в принципе никогда нормально не работает, а всегда что-то, да наебнется.
>кто писал только на динамических языках, нас не понять
Нахуй вообще нужны динамические языки? Для домохозяек? Что б тип было "проще" писать?
Они всегда генерят только гораздо больше проблем, чем дают профита.
Точнее лично я вообще ни вижу какие весомые преимущества могут быть в динамической типизации.
Это просто бесполезная тупая хуйня, кто это придумал вообще, пиздос...
Аноним 30/12/18 Вск 20:51:34 #541 №1318812 
Чому PSR такое говно?

Code MUST follow a “coding style guide” PSR [PSR-1].

Code MUST use 4 spaces for indenting, not tabs.

There MUST NOT be a hard limit on line length; the soft limit MUST be 120 characters; lines SHOULD be 80 characters or less.

There MUST be one blank line after the namespace declaration, and there MUST be one blank line after the block of use declarations.

Opening braces for classes MUST go on the next line, and closing braces MUST go on the next line after the body.

Opening braces for methods MUST go on the next line, and closing braces MUST go on the next line after the body.

Visibility MUST be declared on all properties and methods; abstract and final MUST be declared before the visibility; static MUST be declared after the visibility.

Control structure keywords MUST have one space after them; method and function calls MUST NOT.

Opening braces for control structures MUST go on the same line, and closing braces MUST go on the next line after the body.

Opening parentheses for control structures MUST NOT have a space after them, and closing parentheses for control structures MUST NOT have a space before.


В одном месте скобка на той же строке, в другом блядь на следующей. В одном месте есть пробелы возле скобок функции, в другом нет.
Какой говнарь это писал?
Аноним 30/12/18 Вск 20:53:40 #542 №1318813 
>>1318812
Ооо блядь, там и группового форматирования полей и переменных нет. Фу блядь, фу нахуй.
Жрите вы сами это говно, я ебал.
Стандарт-хуедарт, в рот ебал это казино блять, так им и передайте.
Аноним 30/12/18 Вск 21:11:47 #543 №1318821 
>>1318793
> вообще ни вижу какие весомые преимущества могут быть в динамической типизации
Это удобно тогда, когда вся программа может уместиться в голове: https://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two

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

> Ну это же костыль, причем лютейший, чет уровня "тайпхинтов в комментах".
Зависит от реализации, например Flow для JS это статический анализатор, но по мощи и удобству использования он обходит многие статически типизированные языки вроде джавы благодаря выводу типов. Только вот за анализаторами для JS стоят крупные компании - Facebook и Microsoft, анализаторы для PHP пишут энтузиасты в свободное время.

>>1318813
Поставь php-cs-fixer, сделай его precommit-хуком и не парься.
Аноним 30/12/18 Вск 22:41:11 #544 №1318879 
>>1318793

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

Сайт ОПа например представляет собой HTML-страницы с небольшой обвязкой на PHP (для вывода меню, подвала, ссылок итд), слепленной за один вечер.
Аноним 30/12/18 Вск 23:25:00 #545 №1318899 
Двощь, дай совета!
Мне каждый шаг цикла нужно записывать процент от суммы кредита, чтобы в конце посчитать потраченную сумму общую. Как мне это сделать?
https://ideone.com/l2f86A
Аноним 31/12/18 Пнд 00:25:24 #546 №1318938 
И ещё вопрос.
Почему переменная $number увеличивается всего на 1?
https://ideone.com/3f1uxG
Аноним 31/12/18 Пнд 00:29:44 #547 №1318940 
>>1318938
>https://ideone.com/3f1uxG
Потому что рост анона больше только по сравнению с Семеном, а остальных меньше.
Аноним 31/12/18 Пнд 00:30:22 #548 №1318941 
>>1318938
Тут уже я просто затупил. Элементарно не так значения переменных сравнивал.
Аноним 31/12/18 Пнд 00:31:09 #549 №1318942 
>>1318940
>>1318941
Да, я уже увидел, спасибо.

Вот это ещё интересует
https://ideone.com/l2f86A
Аноним 31/12/18 Пнд 15:36:19 #550 №1319120 
Оп, спасибо за то что ты делаешь. Зашел сюда, так как 2 года назад, я работал в мухосране, за 20к и постояно душила нехватка денег, неинтересная работа и я решил попробовать что то изменить, перекатившись в ит. И выбор пал на php, благодаря твоему сайту и твоей постоянной помощи. Сейчас же хоть все проблемы и не ушли, но у меня уже нет проблем, с тем что не хватает денег или я не вижу своего будущего. Работаю мидл php девелопером, учу низкоуровневый язык и проблемы с острой нехваткой денег или самореализацией отпали. Все началось с тебя, так что огромное тебе спасибо.
Аноним 31/12/18 Пнд 16:53:57 #551 №1319165 
>>1319120
пили кулстори, мотивируй
Аноним 31/12/18 Пнд 16:54:33 #552 №1319167 
>>1319165
+
Аноним 31/12/18 Пнд 18:18:39 #553 №1319199 
>>1318899
Бамп вопросу
Аноним 31/12/18 Пнд 19:11:37 #554 №1319214 
>>1318647
Все изи, как-то даже не густо, но вот по бд накрутили лишнего помоему, обычно эти тонкости мало кто знает до реального опыта проблем. + nosql обязательно, хотя бы парочку популярных на общем уровне.
Аноним 31/12/18 Пнд 19:55:29 #555 №1319223 
С наступающим, программисты! ОПу огромное, человеческое спасибо помощь и терпение к тупости ньюфагов.
Аноним 31/12/18 Пнд 23:07:23 #556 №1319266 
php-noob-01-new-year.png
448 - 555, 247 - 369

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

>>1318942

> $count;
Это немного странный способ создать переменную, и он не работает: https://ideone.com/WabCGW

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

Ты должен создать переменную перед тем, как пытаться ее использовать в выражении. Это делается с помощью оператора равно:

$count = 0;

А так, у тебя происходит ошибка, о чем тебе говорит PHP:

> PHP Notice: Undefined variable: count in /home/2Eccp2/prog.php on line 11

Параметры кредита (процент, выплата) лучше сделать переменными ради читаемости и удобства изменения. $percent гораздо понятнее чем просто "3". А если к ним еще комментарии добавить....

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

>>1318899

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

Лучше по-другому:

- считаем, сколько набежало процентов
- прибавляем к долгу
- считаем, сколько мы заплатим в этом месяце
- уменьшаем долг
- увеличиваем сумму потраченных денег
Аноним 31/12/18 Пнд 23:08:01 #557 №1319267 
>>1318812

Стандарт не обязан соответствовать твоим вкусам.

>>1316130
>>1318743

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

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

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

> Но я подсмотрел в phpclub.tech, что вы рекомендовали для построения фирмы использовать паттерн Builder.

Удивительно, но я такого не помню. Но, не исключаю, что советовал.

> первый - это создать класс CompanyBuilder в котором будут методы создатьДепартаменты, создатьРаботников, получитьКомпанию.

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

> Второй вариант, это - создать класс DepartmentBuilder с методами создатьРаботников, получитьДепартамент.

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

> Ещё была идея сделать фабрику со статическим классом, которая будет отдавать нам массив с работниками.

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

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

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

Хорошо.

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

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

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

Логичнее один объект. У нас же у многих работников одна и та же профессия. Значит, логично и объект сделать один. Если у каждого будет своя копия профессии, то мы:

- получим сложности при создании (нам надо создавать кучу объектов-профессий с одинаковыми свойствами и ничего не перепутать)
- при сравнении (сравнение $e1->getProfession() === $e2->getProfesion() не сработает и непонятно, как сравнивать профессии - придется добавлять какой-то идентификатор или название и следить за их уникальностью)
- при обновлении данных. Представим, что у профессии есть свойство "надбавка к пенсии", и нам надо ее поменять. Нам надо будет найти каждый объект профессии в программе и обновить у него это свойство.В большом, сложном коде, где создается и хранится много объектов в разных местах, это сделать нереально.

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

> Возможно я ещё не дорос до уровня на котором стоит пытаться вникать в паттерны?

Ну почему, с билдером же ты разобрался. В реальности, например, билдер используется в Symfony Forms для построения форм (вроде формы регистрации).

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

Не так. Вроде (я не уверен) композиция применяется когда объект является составной частью другого. Ну например, мотор и машина. Или факультет и университет. Профессия не является частью работника.
Аноним 31/12/18 Пнд 23:08:28 #558 №1319268 
>>1318750

Значит, пока сужать нельзя, надо потерпеть. Ну или просить разработчиков ускорить процесс.

>>1318708

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

Если это случай когда:

class Parent
{
protected $x = 5;
}

class Child extends Parent
{
public $x;
}

То ты переопределяешь значение по умолчанию на null и потому оно не "наследуется".

>>1318682

Читать ужасно. Элементы массива надо разбить переносами по одному на строке. Чтобы не копипастить $this->ts(), сохрани это в переменную и обращайся к ней.

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

Не используй подчеркивание перед переменной.

Не ставь пробел перед ().

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

Пока, код плоховат.
Аноним 31/12/18 Пнд 23:08:58 #559 №1319269 
>>1318327

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

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

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

>>1317102

У меня буквы почему-то маленькие. Трудно читать в таком виде.

>>1316313

> Составил такую регулярку
Возможно, проблема в том что точка соответствует любому символу кроме перевода строки. Почитай официальный мануал по рег. выражениям http://php.net/manual/ru/pcre.pattern.php если не знал.

>>1316164

Сайтмап удобно генерировать методами DOM так как это обеспечивает его корректность и экранирует все нужные символы. Гугли DOMDocument. Не надо тут делать велосипеды и писать уродливые циклы с конкатенацией строк.

>>1316084

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

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

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

> У меня возник вопрос насчет функции setAlarm. Как она в нынешнем виде (замена объекта на объект) может пригодиться в реальном проекте? Ведь можно завести метод getAlarms():array и настраивать нужный нам объект выбрав его из массива. Это нарушит принцип solid?

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

$a = new Alarm();
$b = $a;
$a->setEnabled(true);

То тут $a и $b указывают на один объект и писать $b->setEnabled() или дополнительное $b = $a не требуется. А ты зачем-то это пишешь.

В реальном проекте у тревог, скорее всего, придется сделать какие-то id (ради сохранения в БД например) и ты скорее всего будешь их искать по id и придется добавить findAlarmById(). Но, конечно, зависит от ситуации, можно и без идентификаторов.
Аноним 31/12/18 Пнд 23:09:39 #560 №1319270 
>>1315784

Ну, гугление выдает например http://php.net/manual/ru/book.pthreads.php

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

>>1315498

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

>>1312807

Судя по всему, у тебя там проблемы с соединением с сервером и файлы не качаются. Либо проблемы на удаленном сервере, либо с интернетом.

Я бы для начала просто скопировал URL https://vagrantcloud.com/laravel/boxes/homestead/v
ersions/6.4.0/providers/virtualbox.box в браузер и попробовал скачать файл через него для проверки. Если не качается - сделал бы traceroute и посмотрел, доходят ли пакеты до сервера.

>>1312701

Наверно тут: https://github.com/codedokode/pasta/

>>1312528

Да, урок про регулярки требует улучшения.
Аноним 31/12/18 Пнд 23:10:18 #561 №1319271 
>>1312379

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

> global $gender;
Не используй глобальные переменные, это затрудняет чтение кода, ведь теперь мы должны изучить весь код, чтобы понять, как эта переменная используется. А хотелось бы ограничиться изучением одной функции.

> $flor = floor($amount1/100)*100; //хра
Лучше $hundreds (сотни)

Разбиение на функции сделано не очень удачно. Каждая функция должна быть изолированной. Чтобы ее можно было использовать отдельно. То есть у нее есть понятное название, описание, что она делает, что ей передать и что она вернет. У тебя же описания нету, одна функция разбивает число на массив чисел непонятного вида, другая заменяет в этом массиве числа на слова. И одну не имеет смысла использовать без другой. То есть по сути это не 2 отдельных независимых функции, а 2 половинки одной функции и нет смысла их делать отдельными.

Ты можешь переделать код. Вместо этого:

$result = numberToText(125);
$text = smallNumberToText($result,0);

Вызывать smallNumberToText из numberToText так, чтобы она в итоге за один вызов возвращала бы сразу строку с текстом:

$text = numberToText(125);

То есть это:

elseif ($flor>0){ //записываем сотни
$result[]=$flor;

Мы заменяем на:

elseif ($flor>0){ //записываем сотни
$result[]=smallNumberToText($flor);

И вот мы получаем 2 независимых функции:

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

Но это тоже не идеально, так как в таком сценарии первая функция умеет заменять не любое число, а только круглые. И это не описано нигде, это знает только вторая функция. Значит, они сильно спутаны друг с другом и являются частями одной функции. Потому их стоит в идеале объединить.
Аноним 31/12/18 Пнд 23:10:45 #562 №1319272 
>>1311956

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

Это надо сделать самому.

>>1311770

> elseif (($remainder>10) & ($remainder<20)){
Ты использовал вместо логического И && оператор "побитовое И" &, который делает кое-что другое: https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8

Также, в блоке if-elseif... срабатывает только одна ветка и остальные не проверяются.

>>1311658

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

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

Спасибо за информацию о непонятных моментах в учебнике.

>>1311196

Никак. Она может только поставлять найденные подстроки без изменений. Тебе придется освоить preg_replace_callback и прочесть про анонимные функции.

>>1311141

С виду нормально. Выражение сложноватое получилось, и можно было вынести получение слова отдельно:

$part1 = $word1[array_rand(...)];

>>1311135

Как в следующем посте можно. Или через цикл по такому массиву:

$choices = [
['Чудесных', ....],
[варианты второго слова],
[варианты третьего],
...
];

Аноним 31/12/18 Пнд 23:11:07 #563 №1319273 
Все, остальное посмотрим с вами в следующем году.
Аноним 01/01/19 Втр 02:49:43 #564 №1319318 
С Новым Годом, гайс.

Всем удачного вката и пусть никто не уйдёт обиженным.
Аноним 01/01/19 Втр 10:31:48 #565 №1319332 
>>1318879
>в некоторых случаях это просто быстрее и проще
>Сайт ОПа например представляет собой HTML-страницы с небольшой обвязкой на PHP (для вывода меню, подвала, ссылок итд), слепленной за один вечер.
Ну я и говорю, в этом есть смысл, только если ты домохозяйка с говносайтом из 1.5 страниц.
В любом нормальном приложении статически типизируемый язык будет БЫСТРЕЕ И ПРОЩЕ
Аноним 01/01/19 Втр 16:08:29 #566 №1319376 
https://github.com/asdasdasdasddasasdasdas/StudentList
Чекните мой список студентов
Аноним 01/01/19 Втр 19:28:59 #567 №1319432 
Ребята посоветуйте видеокурсов годных. Каналов на ютубе
Аноним 01/01/19 Втр 22:15:21 #568 №1319481 
Есть массив времен. Формат - часы:минуты.
Надо сделать функцию, которая его сортирует.

Внимание, охуительный вопрос.
Как мне проверить, что мне передали в функцию именно массив времен в заданном формате, а не какое-то левое говно?
Аноним 01/01/19 Втр 22:25:03 #569 №1319485 
Двощь, помоги с таким вопросом.
Добавил проверку к array_rand() на предмет одинаковых элементов массива. Почему каждый раз пишется предупреждение? По сути же должно писать только тогда, когда выпадает 2 одинаковых элемента массива.
Или как сделать так, чтобы никогда одинаковые элементы не выпадали?
https://ideone.com/mUEyfD
Аноним 01/01/19 Втр 23:32:43 #570 №1319499 
>>1319481
preg_grep, пихаешь регулярочку и твой массив и получаешь именно те элементы которые соответствуют формату. Ну или прям в функции где будешь сортировать регулируй и сортируй.
'[012]\d:[0-5]\d'
Аноним 01/01/19 Втр 23:38:31 #571 №1319500 
>>1319376
Что у тебя там с гейтвеем Студента? Вроде запрос описал , а дёргаешь чистый PDO в половине методов.

мимокрок
Аноним 02/01/19 Срд 10:34:28 #572 №1319553 
>>1319485
Бамп
Аноним 02/01/19 Срд 11:14:31 #573 №1319563 
>>1319499
А в нормальном языке это делается List<DateTime> и проверяется на уровне тайпхинтов
Аноним 02/01/19 Срд 11:25:17 #574 №1319564 
15453217017260.jpg
>>1319563
Работаем с тем, что есть.
Аноним 02/01/19 Срд 13:02:50 #575 №1319591 
Я могу кидать стандартные исключения пыха?
Заебался уже на каждый пук свое исключение делать.
Иногда надо просто просигнализировать, допустим, если аргумент хуевый и все.
Аноним 02/01/19 Срд 13:34:14 #576 №1319600 
>>1319481
> Формат - часы:минуты.
Что ты подразумеваешь под часами и минутами? Под твой формат подходит как период времени, например "30:20" - 30 часов 20 минут, время в пути или временная отметка, например "23:00" - 11 часов вечера.
Если тебе нужно второе, то можешь обернуть время в объект \DateTime, тогда можно применить usort и проставить тайп-хинты:

$dates = [new \DateTime('+1 year'), new \DateTime('+1 day'), new \DateTime('-1 day')];

usort($dates, function (\DateTime $left, \DateTime $right) {
return $left <=> $right;
});

Код: https://ideone.com/5mm9Hc
В PHP есть ещё \DateInterval и \DatePeriod из полезного.

Вообще хорошая практика для таких ситуаций использовать объекты значения: https://codete.com/blog/value-objects/

>>1319499
> '[012]\d:[0-5]\d'
Можно выбрать 29 часов? Если проблему можно решить без регулярки, её лучше решить без регулярки.

>>1319591

> Заебался уже на каждый пук свое исключение делать.

Ну и это бессмысленно, у ОПа есть урок по исключениям: https://github.com/codedokode/pasta/blob/master/php/exceptions.md

> Иногда надо просто просигнализировать, допустим, если аргумент хуевый и все.

http://php.net/manual/en/class.invalidargumentexception.php#102218

Свои исключения есть смысл делать только тогда, когда тебе их нужно ловить.
Аноним 02/01/19 Срд 13:56:02 #577 №1319610 
>>1319600
>usort($dates, function (\DateTime $left, \DateTime $right)
Лол, так и сделал. Только я малец прихуел с оператора <=>.
Не знал о его существовании, существенно укорачивает код, збс.

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

>хорошая практика для таких ситуаций использовать объекты значения
Это самый лучший вариант, но только это все ДОЛГО пиздец, на каждый пук отдельный объект писать, создавать класс, геттеры, сеттеры и прочую поебистику.

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

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

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

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

Причина, по которой программа на яве почти никогда не падает, если она скомпилилась - именно в политике языка в повсеместном кидании исключений при малейшей ошибке и принуждению говнокодера их все ловить.
А не как в пыхе и c++.
Аноним 02/01/19 Срд 13:59:21 #578 №1319613 
>>1319610
Дополню, вернуть null вместо ожидаемого результата - весьма приемлимый вариант, но эта затея идет по пизде как только у тебя возникает несколько типов ошибок в методе.
Тут онли исключения.

Ну и еще идеологически исключения полезны, когда возникает совершенно лютая хуйня, при которой дальнейшее выполнение бессмысленно.
Такие исключения я обычно не ловлю (уходят в самый верхний обработчик).
Аноним 02/01/19 Срд 14:26:56 #579 №1319626 
кого еще корежит от этого языка?
Аноним 02/01/19 Срд 14:39:28 #580 №1319635 
>>1319626
Всех. Чем больше его знаю, тем больше бесит.
Аноним 02/01/19 Срд 14:50:58 #581 №1319642 
>>1319610

> Один хуй пришлось писать велосипед про проверке регуляркой массива времен.

Зачем, \DateTime ведь выбросит исключение, если не сможет создать дату из строки.

> это все ДОЛГО
Ну ты же из джавы и должен уметь пользоваться IDE и кодогенерацией, PHPStorm умеет по пропертям генерить геттеры/сеттеры. Лично меня большое количество классов не напрягает.

> И с исключениями вопрос бы решился.
Я же скинул ссылку, в PHP целая куча классов для исключений - InvalidArgumentException, LogicException, DomainException, RuntimeException. Вот полный список: https://habr.com/post/329140/

> Ты или возвращаешь полноценный результат или высираешь исключение и все, нехуй пытаться решить проблему, которую невозможно решить на данном уровне.
Согласен, но тут в 95% случаев хватит встроенных исключений в PHP.
Ещё я пользуюсь плагином Php Inspections Extended, он как раз будет ругаться, если не будешь обрабатывать if'ами nullable типы: https://github.com/kalessil/phpinspectionsea

Вообще, я ещё раз посоветую просто взять другой язык. (Я вот вообще во фронтенд укатился)

Аноним 02/01/19 Срд 14:54:32 #582 №1319648 
>>1319642
> посоветую просто взять другой язык
какой?
Аноним 02/01/19 Срд 14:55:51 #583 №1319650 
>>1319642
>\DateTime ведь выбросит исключение, если не сможет создать дату из строки
Да, но DateTime жрет далеко не только hh:mm.

>в 95% случаев хватит встроенных исключений в PHP
Это да.
Кстати, PhpStorm, ВНЕЗАПНО, почему-то не сует в throws в phpdoc для встроенных исключений. А для сторонних сует.
Аноним 02/01/19 Срд 15:30:35 #584 №1319663 
Аноны, а тут есть кто перегорел? Я начал изучать laravel и уже больше недели даже не открывал код и ничего не смотрел. Пропало желание пиздец, как будто хуетой какой-то занимаюсь. Че делать? Дропать или продолжать учить через силу (мб в процессе желание появится)?
Аноним 02/01/19 Срд 15:35:14 #585 №1319665 
>>1319663
Надо пилить что-нибудь, лучше свое, но если идей нет то копию чего-нибудь что нравится.
От документации лары у меня тоже депрессия наступает.
Аноним 02/01/19 Срд 15:36:37 #586 №1319667 
>>1319665
что скажешь за сам фреймворк?
Аноним 02/01/19 Срд 15:46:01 #587 №1319669 
>>1319667
Лично мне больше нравится Symfony. Но игнорировать лару в текущей ситуации невозможно. Это как фронтенд. По идее знать php пограмисту не обязательно, но тогда сильно сокращаются опции на рынке труда.
Аноним 02/01/19 Срд 15:56:23 #588 №1319679 
>>1319669
почему сиmфони?
Аноним 02/01/19 Срд 16:20:50 #589 №1319682 
>>1319663
Это не от пыха зависит.
Дело в дисциплине, почитай про это.
"Будь лучшей версией себя", "правило в 10 раз больше".
Аноним 02/01/19 Срд 16:39:18 #590 №1319685 
>>1319682
еще как от пыха
Аноним 02/01/19 Срд 17:20:58 #591 №1319695 
>>1319685
Не оправдывай свою слабохарактерность уебанством пыха
Аноним 02/01/19 Срд 17:44:31 #592 №1319704 
>>1319695
это не оправдывает его херовость
Аноним 02/01/19 Срд 18:18:11 #593 №1319716 
>>1319704
Не нравится - катись в другой. Жаловаться на свою немощь в пхп-треде это удел маминого неосилятора.
Держи в курсе.
Аноним 02/01/19 Срд 18:40:23 #594 №1319722 
Двощь, всё таки не понимаю, как запилить проверку на повторы.
https://ideone.com/CWYEdX
Аноним 02/01/19 Срд 18:47:11 #595 №1319724 
3 года пишу на PHP, сегодня первый раз устанавливаю PHPUnit, поздравьте меня
Аноним 02/01/19 Срд 19:17:46 #596 №1319729 
>>1319682
Что же ты забросил свой бложек, няша?
Аноним 02/01/19 Срд 19:42:10 #597 №1319747 
Не только магазины решают на Пыхе. Думай о больше, делай, блять, больше.
Аноним 02/01/19 Срд 19:56:22 #598 №1319756 
>>1319722
Ты зачем операцию в условие цикла засунул, норкоман? Если туда можно класть что-то, что срабатывает каждую итерацию, то это ещё не значит, что туда можно класть всё подряд.
Там место только для обработки условия, а само действие пиши где положено - в теле цикла.

Что у тебя с повторами? Телепаты уехали за бугор, от жизни такой.
Аноним 02/01/19 Срд 21:48:07 #599 №1319857 
>>1319756
Бля, не ту ссыль дал. Уже завтра скину.
А это я просто код с хелпы тестировал. Там такой давали в примере, так что вопрос не ко мне.

Алсо, перекатывать тред кто-то будет?
Аноним 03/01/19 Чтв 10:39:30 #600 №1320145 
15426537717440.gif
>>1319729
Аноним 03/01/19 Чтв 11:56:38 #601 №1320176 
Зачем проходить в 2к19 году учебник ОПа, если есть гениальнейший code-basics? Он еще и опенсорсный
Аноним 03/01/19 Чтв 13:21:12 #602 №1320218 
>>1320176
Тебя никто не заставляет, можешь читать любые говносайты, какие захочешь, разрешаю
Аноним 03/01/19 Чтв 14:35:28 #603 №1320240 
Какой же пиздос в пхп с отсутствием дженериков и коллекций.
Надо отсортировать массив объектов.
Как это делается в нормальном языке.
В объекте переопределяется компаратор и все.
А в пхп тонна анальных извращений.
Аноним 03/01/19 Чтв 15:52:57 #604 №1320283 
Может у кого есть рабочий скрипт (PHP!) для скачивания картинок из треда? Как вы обходите https? Кашу кашную получаю, хз, или так и должно быть.
Аноним 03/01/19 Чтв 16:15:38 #605 №1320294 
>>1319857

Погоди перекатывать, еще до конца праздников можно тут сидеть.
Аноним 03/01/19 Чтв 17:12:46 #606 №1320317 
>>1319376
bump
Аноним 03/01/19 Чтв 17:21:18 #607 №1320323 
>>1320283
Поехавший?
Начнем с того, что как картинки, так и треды доступны по http.
Во-вторых, обычно низкоуровневой работой с SSL занимается библиотека, с помощью которой ты осуществляешь запросы.
Аноним 03/01/19 Чтв 17:24:20 #608 №1320326 
>>1320240
Как обычно много гонору, а толку ноль. Все твои проблемы решаемы за считанные минуты, если ты банально на уровне джуна кодить умеешь. Или хотя бы гуглить. И да, дженерики к данной ситуации вообще не относятся, узколобая ты обезьяна.
Аноним 03/01/19 Чтв 17:31:38 #609 №1320334 
>>1320326
Вся суть в том, что в крестах или яве операции выполняют САМИ коллекции.
А в пхп надо писать левые велосипеды, чтобы отсортировать массив объектов.

Короче процедурщина ебаная получается.
Аноним 03/01/19 Чтв 17:40:40 #610 №1320346 
>>1320334
https://github.com/italolelis/collections
https://github.com/akanehara/ginq

Минута в гугле. Там еще дохуя такого же. И всегда можно сделать самому себе под задачу, а не сокрушаться, что язык плохой, и не как у людей.
Аноним 03/01/19 Чтв 17:46:34 #611 №1320348 
>>1320346
Сраный говнокод. Вся суть коллекций в том, что это коллекции не рандомного дерьма, а объектов одного типа.
Принес какие-то нескучные обертки над массивами и выебывается тут.
Аноним 03/01/19 Чтв 17:53:38 #612 №1320354 
>>1320326
Я вообще не понимаю зачем обращать внимания на такие посты. По мне, так это один и тот же жиртрест пишет, чтобы тред в срач скатить.

Ну не нравится - не используй это язык, пиши на ноде, или яве. Какой смысл тут высераться своим очень нужным всем мнением?
Аноним 03/01/19 Чтв 17:54:46 #613 №1320355 
>>1320348
Точно жиробас.
Аноним 03/01/19 Чтв 18:06:25 #614 №1320361 
>>1320348
>что это коллекции не рандомного дерьма, а объектов одного типа.
List<object> тебе за щеку, ни к чему строгому коллекции не обязывают.
>Принес какие-то нескучные обертки над массивами
То есть ты настолько донный, что не представляешь как сделать собственную коллекцию на коленке со строгой типизацией? Просто прекрасно, что ты хейтишь пхп - одним говнокодером у нас будем меньше.
Добавлю, что не все коллекции это дженерики, и кину в лицо тебе пожалуй коллекцию из шарпа - ArrayList - которая даже по названию очевидно нескучная обертка над массивом (хотя хуй знает в действительности ли это так, лень ради тебя это чекать).
Специально для "без массивов" ебни коллекцию на ссылках. Реализовать таким образом можно что угодно, были бы руки из того места.
>>1320354
Настроение поганое, захотелось проораться.
Аноним 03/01/19 Чтв 18:44:14 #615 №1320373 
Анончики, а теперь нетбинс только с апачем работает, что ли? Как отдельное приложение не накатить?
Аноним 03/01/19 Чтв 19:04:21 #616 №1320382 
>>1320361
>сделать собственную коллекцию на коленке
Да заебался я уже делать на коленке то, что обычно за меня уже сделано.
В итоге не проект пишешь, а коленочные реализации всякой хуйни.
Аноним 03/01/19 Чтв 19:09:16 #617 №1320383 
>>1320145
Возвращайся давай!
Аноним 03/01/19 Чтв 19:09:35 #618 №1320384 
ipad.png
Двощик, иду дальше по курсу ОПа и мне нужна твоя помощь.
Задание на пике.
https://ideone.com/M66Z31
1. Почему кол-во месяцев $month не прибавляется? Я же, вроде, в цикле прибавляю.
2. Как сделать проверку на отрицательное число остатка по выплате?
То есть, школьник в 12 месяц останется должен банку какую-то сумму, но цикл закончится, так как стоит условие $price>0. Как мне ему остаток-то выплатить?
Аноним 03/01/19 Чтв 19:11:08 #619 №1320385 
>>1320384
И сразу же 1-ый вопрос снимается. Пока писал - проверил, а там, оказывается, хуйня написана.
Аноним 03/01/19 Чтв 19:11:42 #620 №1320387 
>>1320176
Не обманывай. Ничего там гениального, тупо пересказ документации.
Аноним 03/01/19 Чтв 19:34:58 #621 №1320393 
>>1320382
Так не бывает, чтобы всегда были готовые решения. Особенно такие, чтобы подходили как родные на каждый конкретный случай. Как пример - древовидные (но не симметричные) структуры с разным типом нод внутри, логика у которых разная, и работу с которыми нужно оптимизировать - тут уже слабо помогут готовые коллекции, т.к. много работы с источниками данных, хитровыебанным кешированием, да и просто сама логика коллекции не ложится на готовые реализации из-за специфических требований. В общем писать свои коленочные решения так или иначе придется.
Аноним 03/01/19 Чтв 19:37:22 #622 №1320394 
>>1320384
Там проще всё реализуется. Переписывай нормально.
Аноним 03/01/19 Чтв 19:50:21 #623 №1320399 
Как удалить несколько элементов из массива во время итерации по нему с конца в начало, если для ключей не гарантируется то, что они будут непременно с 0 и до N.

То есть, массив вида [3=>15, 42=22, 1005=>13]
Копировать содержимое во временные массивы нельзя
Аноним 03/01/19 Чтв 19:51:49 #624 №1320401 
>>1320394
Как проще то? Хоть скажи, где изменить надо.
Аноним 03/01/19 Чтв 20:03:45 #625 №1320407 
>>1320399
>Как удалить несколько элементов из массива во время итерации по нему
unset($varname)

>>1320401
>if($forOpen!=0)
Убирай проверку $forOpen на 0. Зачем она там нужна? Достаточно просто сложить её с кредитом вначале. Если 0, то и будет + 0. А ещё лучше укажи этот $forOpen на 0 по умолчанию при объявлении ф-ции.

>for($price = 40000 + $forOpen;$price>0;$price = ($price + $inMonth +$comm)-5000)
Тут вообще бред.
У тебя цикл со счётчиком, а ты его как условный юзаешь по сути. Тут лучше танцевать от месяцев, а не от прайса. Просто за каждый месяц пересчитывай кредит.
Ну и циклы объявлять научись - там не надо лишнего писать.
Аноним 03/01/19 Чтв 20:23:23 #626 №1320416 
>>1320407
Так а как я буду от месяцев плясать, если неизвестно как раз количество месяцев, требуемое для погашения кредита?
>Убирай проверку $forOpen на 0. Зачем она там нужна?
Тут согласен. Не подумал об этом.
>А ещё лучше укажи этот $forOpen на 0 по умолчанию при объявлении ф-ции.
Типо вот так сделать$forOpen = 0?
Зачем?
>У тебя цикл со счётчиком, а ты его как условный юзаешь по сути.
И вот тут по подробнее, пожалуйста.
Аноним 03/01/19 Чтв 20:45:43 #627 №1320423 
>>1320416
>Так а как я буду от месяцев плясать, если неизвестно как раз количество месяцев, требуемое для погашения кредита?
$month++
И пересчитывай кредит. В теле цикла, а не в объявлении.

>Типо вот так сделать$forOpen = 0?
>Зачем?
Затем, что в 2х случаях из 3х она не указывается. Будет логично сделать её необязательной.

>вот тут по подробнее
For () - цикл со счётчиком. У тебя нет счётчика. Вернее есть $month=$month+1, но криво реализованный и к циклу отношения не имеет. Отсюда и цикл поехавший.
Аноним 03/01/19 Чтв 21:49:33 #628 №1320440 
Снимок1.PNG
Снимок2.PNG
Уважаемые аноны занимаюсь по книжке. Установил XMAPP. Но эта сука не запускается в браузере через localhost или через 127.01.01
Закидывал в каталог апачи. Бесполезно. Есть более менее разбирающиеся аноны. Хочу проконсультироваться. Отпишите пожалуйста.
Аноним 03/01/19 Чтв 22:28:40 #629 №1320451 
>>1320423
Я тут цикл починил.
https://ideone.com/aJTU6W
Всё ещё второй вопрос остался открытым
>Как сделать проверку на отрицательное число остатка по выплате?
То есть, школьник в 12 месяц останется должен банку какую-то сумму, но цикл закончится, так как стоит условие $price>0. Как мне ему остаток-то выплатить?
Аноним 03/01/19 Чтв 22:55:18 #630 №1320458 
Анонче буду тралировать вас занудством, начиная с нубовских задач
https://ideone.com/EeoltU вот тут в условиях задачи про игру в кубики было сказано только про дубли, но одинаковая сумма может выпасть и при разных числах, правильно ли решена задача?
Аноним 03/01/19 Чтв 23:04:45 #631 №1320461 
Получилась задача-стихотворение без всяких пробегов по массивам https://ideone.com/niDPTN
Просто через эхо вывод стиха, норм?
Аноним 03/01/19 Чтв 23:23:23 #632 №1320465 
>>1320451
>Как сделать проверку на отрицательное число остатка по выплате?
>но цикл закончится, так как стоит условие $price>0
Как вариант - поставить условие $price>$pay, где $pay это ежемесячный платёж. А сразу после цикла вывести остатки.
Тогда в минус не должно уходить.
Аноним 03/01/19 Чтв 23:28:16 #633 №1320466 
>>1320461
>без всяких пробегов по массивам
Говорят, что индусы так пишут. Или китайцы.

Меня бы писать так задолбало. Лучше головой разок цикл прикинуть, чем по клавишам долбить как секретарша.
Аноним 04/01/19 Птн 12:15:59 #634 №1320598 
>>1320440
Короче, сносишь это васянское говно и ставишь все необходимое окружение на линух на виртуалке
Аноним 04/01/19 Птн 13:01:15 #635 №1320614 
Подмогните с регулярками.
\W[7|8][\d\W]{10}
Мне нужно, чтобы искал ТОЛЬКО 10 цифр и любое кол-во символов между ними. А исходя из моей - ищет всего 10 любых символов. ЧЯДНТ?
Аноним 04/01/19 Птн 13:10:28 #636 №1320619 
>>1320614
> ЧЯДНТ
Неправильно составляешь регулярку
Аноним 04/01/19 Птн 13:12:51 #637 №1320620 
>>1320619
Ну это я понимаю. Так а как её правильно составить для моих условий?
Аноним 04/01/19 Птн 13:16:28 #638 №1320622 
>>1320620
> как её правильно составить

Правильно составив регулярное выражение.
Аноним 04/01/19 Птн 13:29:45 #639 №1320625 
>>1320622
Хорошо, спрошу по другому. Как мне заставить регулярку искать только 10 цифр, а кол-во других символов не имеет значения? Конструкция вида [\d{10}\W] не работает.
Аноним 04/01/19 Птн 13:35:28 #640 №1320626 
>>1320625
Я за тебя регулярку писать не буду. https://regexr.com/ вот хороший ресурс для понимания регулярок.
Аноним 04/01/19 Птн 13:37:10 #641 №1320627 
>>1320614
Можешь пример успешных/не успешных строк предоставить? Я по описанию чутка даже охерел, либо не так понял. Мб поебусь тогда, если она действительно интересная.
Аноним 04/01/19 Птн 13:38:38 #642 №1320628 
>>1320625
ты хочешь искать предположим
1аввара2пврварпорва3нгке4авп5ргпго и.т.д? Или шо?
Аноним 04/01/19 Птн 13:49:13 #643 №1320639 
>>1320628
>>1320627
Я делю задание ОПа. Ищу номера телефонов любого формата.

https://regex101.com/r/qF7vT8/3
Вот тут заготовка.

Аноним 04/01/19 Птн 14:07:20 #644 №1320651 
>>1320440
.php в названии не надо? или к чему ты обращаешься
Аноним 04/01/19 Птн 16:00:55 #645 №1320700 
Screenshot18.png
Screenshot19.png
Как называется эта болезнь?
Аноним 04/01/19 Птн 18:31:11 #646 №1320753 
Аноны, условие задачи: Напиши программу, выводящую таблицу умножения чисел от 1 до N на самих себя, используя цикл.

https://ideone.com/JdJq9X я не пойму, цикл должен получиться бесконечным или же до суммы 81, но тогда куда впихнуть условие?
Аноним 04/01/19 Птн 18:31:45 #647 №1320755 
>>1320753
https://ideone.com/R75Nht не ту ссылку прикрепил
Аноним 04/01/19 Птн 19:07:24 #648 №1320772 
Вопрос по yii2 и концепции MVC в целом: не нарушают ли данную идеологию сторонние методы внутри контроллера, которые не являются action-ами? Например, private function setImage()? Так как данный метод необходим в crud операциях и только внутри контроллера
Думаю, что не нарушают, но хочется все сделать красиво
Аноним 04/01/19 Птн 22:01:04 #649 №1320833 
>>1320755
https://ideone.com/eRVH5g
Я не эксперт, но так сойдёт?
Аноним 05/01/19 Суб 02:00:35 #650 №1320877 
>>1320833
Таки да, я просто пропустил, что в echo можно прописывать математические операции типа умножения и т.д.
Аноним 05/01/19 Суб 10:24:20 #651 №1320962 
Аноны, а поясните за "зеленый" гитхаб. Это че надо любой свой говнокод туда тащить, чтобы он зеленый был или как?
Аноним 05/01/19 Суб 10:57:34 #652 №1320976 
>>1320962
Говно этот ваш гитхаб.
Полно людей с очень высокими зп, которые в эту помойку никогда ничего не комитили.
К тому же, толку от полутора говнопроектов на полторы строки один хуй немного, а погромировать больше без оплаты - так себе занятие.
К тому же, твой говнокод быстро устаревает или становится неактуальным.
Короче, поддерживать гитхаб в актуальном качественном состоянии - достаточно геморойное занятие в большинстве случаев.
Аноним 05/01/19 Суб 11:02:28 #653 №1320982 
>>1320976
Ну хуй знает, просто все пишут что вкатиться с проектами на гитхабе легче, чем без него.
Аноним 05/01/19 Суб 14:23:41 #654 №1321064 
>>1320982
Легче всего вкатится с подвешенным языком и нормальными навыками коммуникации, когда ты за всё можешь всем легко пояснить. В общем-то, как и везде.
А вот зеленый гитхаб тебе вряд ли поможет, если ты совсем уж отбитый аутист.
Аноним 05/01/19 Суб 15:02:41 #655 №1321097 
Аноны, что скажете про мак 13 для разработки, хватит его? Или без линукса никуда в бэке на пыхе? Придётся тогда с виртуалками ебаться.
Аноним 05/01/19 Суб 15:58:57 #656 №1321126 
>>1320962
Тащи туда то, что другим пригодиться может. Если нечего тащить, и работу рано тебе искать.
Аноним 05/01/19 Суб 16:21:44 #657 №1321140 
whatmini.jpg
>>1321097
>13 для разработки
Аноним 05/01/19 Суб 16:51:06 #658 №1321153 
Безымянный.PNG
Всем сап. Пилю магаз, движок самописный, нужно шаблонизировать некоторый код. Правильно ли я ее делаю в 2к19, не будут ли ругаться валидаторы, не будут ли поисковые роботы кидать мой сайт во вредоносные, не будет ли это все потом тормозить при большой посещаемости?
Аноним 05/01/19 Суб 17:04:52 #659 №1321162 
>>1321153

А варианты из этой статьи про шаблонизаторы не подходят? https://github.com/codedokode/pasta/blob/master/php/templates.md

Не очень понятно, зачем тут изобретать велосипед.
Аноним 05/01/19 Суб 17:30:20 #660 №1321175 
>>1321153
Госпаде исусе, ну и дерьмо.
1) Сейчас десятилетие SPA, але, как там слышно из 2007-го? Бек только генерит жсон и все.
2) Пых имеет отличные встроенные средства шаблонизации, гугли как это сделано в Yii. То, что ты написал - кал чистой воды.

Ну я вижу ты не слишком умный, поэтому предостерегаю: к параше типа smarty или twig не вздумай даже прикасаться.
Аноним 05/01/19 Суб 17:40:49 #661 №1321181 
>>1321175

Ты слишком категоричен, что часто бывает у неопытных разработчиков, впервые с чем-то новым познакомившихся. SPA имеет немало недостатков:

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

Есть случаи, когда SPA больше подходит, есть, когда нет. Я не очень понимаю, зачем делать SPA, если страницу с описанием товара может сразу отдать сервер? Вот человек кликает в Яндекс Маркете на ссылку и получает готовую страницу товара. И не надо ждать пока твой SPA загрузится, загрузит мегабайт яваскрипта, сделает 10 AJAX запросов и тд (это можно оптимизировать, но это требует времени и стоит денег. SPA обойдется гв итоге ораздо дороже). Я не очень понимаю, зачем тут SPA.

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

Попробуй вместо категоричных заявлений рассматривать разные подходы со всеми плюсами и минусами.
Аноним 05/01/19 Суб 17:53:10 #662 №1321184 
>>1321181
Ну ладно, про SPA это я утрировал.
Но
>надо разрабатывать 2 приложения вместо одного
Очнись, ты обосрался, уже давно надо разрабатывать 2 приложения.
По сути, сейчас чисто серверной бизнес-логики куда меньше, чем фронтенд-логики.
Взять ту же гостевую книгу. Серверный цруд там можно за 100 строк написать, а вот фронт можно такой нахуевертить, что браузер заглохнет.

И находится ли это фронт-приложение в спа или в пых-шаблонах - вопрос вторичный.
Аноним 05/01/19 Суб 18:06:58 #663 №1321191 
>>1321153
Разметку с кодом перемешал смотрю. Нынче так уже не принято делать. Вроде как плохой стиль.
Хотя вордпрессу не мешает, лол.

Так что это скорее кунг-фу веб-мастера, чем веб-кодера. Иди в \web\ - там твои все.
Аноним 05/01/19 Суб 18:16:25 #664 №1321198 
Что делать, если меня вынудили написать говнокод?
Есть библиотека на гитхабе, 2000 звездочек.
Ну автор, наверное, крутой поц, уж мне ли ему говорить как код надо писать?
Думал я.

А сейчас понимаю, какой же этот чел отбитый говноед, весь код этой либы - полное говно, где каждый пердеж сделан через __callStatic(), магию и КОММЕНТЫ классов блять.
Еще и ПРИМЕРЫ того, как надо юзать его либу, написанные самим автором.
Я по своей наивности слепо им следовал, в итоге только сейчас начал понимать, какой это отбитый кал.
Методы длиной в 500 строк нахуй.
Статик на статике и статиком погоняет.
Мечта тестера блять, тестировать магию нахуй, которой не существует.
Вместо value-объектов тупо массивы))0) с ключами-захардкоженными строками блять, рандомно упоминающимися по всему проекту.

И только теперь я понял, в какой пучине говна я погряз, потому что слепо следовал выданным мне рекомендациям.
Такая хуйня вот
Аноним 05/01/19 Суб 18:17:21 #665 №1321200 
>>1321153
>не будут ли поисковые роботы кидать мой сайт во вредоносные
Они твой серверсайд не видят. С чего бы?

>не будет ли это все потом тормозить при большой посещаемости?
Вот когда убьют будет тормозить, тогда и приходите. А ранняя оптимизация - зло.
Аноним 05/01/19 Суб 18:30:47 #666 №1321209 
>>1321198
Ну так пиши нормально теперь, чего убиваться? Если знаешь, где неправильно - уже полдела.
Аноним 05/01/19 Суб 19:08:18 #667 №1321240 
>>1321097

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

>>1320962

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

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

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

>>1320833

$n можно было не использовать, сразу писать 9.

Аноним 05/01/19 Суб 19:08:41 #668 №1321241 
>>1320772

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

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

$user->setImage('avatar.jpg');
$userService->setImage($user, 'avatar.jpg');

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

private function setImage()
{
\t$form = new UploadForm();
\t$form->file = UploadedFile::getInstance($form, 'imageFile');
\tif ($form->validate()){
\t\t$this->userService->setImage($form->file);
\t} else {
\t\t...
\t}
}

Урок про MVC, ты прочел его? https://github.com/codedokode/apasta/blob/master/arch/mvc.md Там нет ответа?

>>1320753

Можно завести переменную:

$y = $x * $x;
echo "$x -> $y\n";

Цикл можно сделать от 1 до 9.

Аноним 05/01/19 Суб 19:09:10 #669 №1321243 
>>1320700

А ты не искал определение, как должно быть правильно? Документация PHP говорит: http://php.net/manual/ru/language.operators.arithmetic.php

> Результат операции остатка от деления % будет иметь тот же знак, что и делимое — то есть, результат $a % $b будет иметь тот же знак, что и $a. Например:

>>1320614

Ищем слово "кот": кот

Ищем кота + 1 или более пробелов: кот\s+

Ищем предыдущее выражение 10 раз подряд: (кот\s+){10} (ищет фразу вроде "кот кот кот кот кот кот кот кот кот кот")

Скобки тут используются, чтобы {10} применялось ко всему их содержимому.

>>1320440

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

Аноним 05/01/19 Суб 19:10:49 #670 №1321244 
>>1320384

Попробуй такой алгоритм в цикле:

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

«Платим» здесь значит уменьшаем долг и увеличиваем общую сумму выплаченного.
Аноним 05/01/19 Суб 19:13:25 #671 №1321246 
>>1320772
С подключением, скоро ты начнешь подозревать, что мир не всегда вписывается в три маня-термина: "Model, View, Controller".
Например, будут возникать куски кода, ответственные за обработку данных от разных моделей, используемые в разных контроллерах. Ну и куда это пихать?
Аноним 05/01/19 Суб 19:16:28 #672 №1321248 
>>1321162
Хороший ответ, пробежал глазками статью, теперь понял, как надо.

>>1321175
>Сейчас десятилетие SPA, але, как там слышно из 2007-го?

Да какая по сути разница? В чем принципиальное отличие SPA от кучи страничек для пользователя? Я стараюсь почти весь код серваку отдать, чтобы пользователя не нагружать ебланскими js-вычислениями.

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

Окей, спасибо, погуглю.

>Ну я вижу ты не слишком умный, поэтому предостерегаю: к параше типа smarty или twig не вздумай даже прикасаться.

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

>>1321181
Двачую.

>>1321191
>Нынче так уже не принято делать
Я вот не понял, и что? Что значит "нынче"? Мне понятен мой код, а главное - работать он будет быстро.
Если отбросить весь этот мусор с кучей библиотек и тонн кода, из-за которого подвисает броузер, то мы увидим, что интернет не изменился с того же самого 2007. Просто изменился дизайн, хтмл5 заменил флеш, ssl прикрутили. Все остальное программисты усложнили сами для себя же, чтобы получать больше бабла.
Аноним 05/01/19 Суб 19:20:26 #673 №1321249 
>>1321246
Model это не конкретные модельки в том же yii2. Model - это весь слой бизнес логики, он же и самый жирный со всего проекта. Обычно 90%+ кода в проекте и есть модель. И сделать ты его можешь как угодно.
Аноним 05/01/19 Суб 19:26:16 #674 №1321254 
>>1321248
>Я вот не понял, что значит "нынче"?
Последние 30 лет?

>Мне понятен мой код, а главное - работать он будет быстро.
Ты пишешь код не для того, чтобы он тебе был понятен.
Аноним 05/01/19 Суб 19:32:25 #675 №1321257 
>>1321254
>Ты пишешь код не для того, чтобы он тебе был понятен.
А кому?
Аноним 05/01/19 Суб 20:20:27 #676 №1321278 
>>1321257
Другим погромистам
Аноним 05/01/19 Суб 20:24:43 #677 №1321281 
>>1321278
Тащемта, я магаз для себя делаю.
Аноним 05/01/19 Суб 20:58:17 #678 №1321311 
>>1321281
Если ты не думаешь о других программистах, кто будет работать над проектом, ты - говнокодер, без вариантов, иначе быть не может.

Плюс это тебе сейчас кажется, что ты не в рот ебаться как хорошо разбираешься там. Через пару месяцев уже будешь вспоминать что и как, через полгода будешь вообще охуевать как ты мог такое высрать и хуй разберешь.
Аноним 05/01/19 Суб 21:15:59 #679 №1321327 
>>1321281
Выше верно сказали. Когда сделаешь перерыв и вернешься будешь со своим же кодом разбираться как с незнакомым, и тогда будет печально, если нахуевертил с легкой руки.
Аноним 05/01/19 Суб 21:32:55 #680 №1321343 
>>1321281
Всегда стремись писать так, чтобы тебя понимали другие программисты - писать на одном с ними языке. Иначе ты никогда не выберешься из вот такого своего июньского лапшекода.
Умные люди много всего нужного и полезного придумали для облегчения разработки. Зачем самому себе буратиной быть?
Аноним 05/01/19 Суб 21:37:10 #681 №1321347 
>>1321311
>Через пару месяцев уже будешь вспоминать что и как, через полгода будешь вообще охуевать как ты мог такое высрать и хуй разберешь.
Самое забавно в этой ситуации, что в процессе обучения бывает напишешь код и думаешь, что он идеален и вообще гениален. Через месяц смотришь на него и фейспалмы делаешь, думая - как же хорошо, что его никто не видел.
У меня такое пару-тройку раз было.
Аноним 05/01/19 Суб 21:41:38 #682 №1321352 
ОП, посмотри задачи, пожалуйста

Пиши верно https://3v4l.org/UaM8i
Yoda Speak https://3v4l.org/coKeP
Сумма прописью https://3v4l.org/NSeMe
Калькулятор https://3v4l.org/n6fuv
Аноним 05/01/19 Суб 21:55:03 #683 №1321361 
>>1306121
так пусть жалоба подается с каким-то доказательством, будь то видео или что-либо еще
Аноним 05/01/19 Суб 22:45:58 #684 №1321382 
>>1321347
Это норма и признак того, что ты развиваешься.
Бывает даже когда просто некоторое время проект не трогал и "свежим взглядом" на него посмотришь, без предвзятости, и видишь - что код-то говнявый.

Когда ты постоянно долго над проектом работаешь, тут скостылишь, там скостылишь, не замечаешь этого.
А потом уже смотришь и видишь - ну очевидно хуйня же и фейспалмишь.
Аноним 06/01/19 Вск 01:53:06 #685 №1321460 
Прошу помощи в смене парадигмы "пишу все в одном файле, похуй на стиль и синтаксис, все равно никто кроме меня не увидит" на нормальную. Всегда писал только для себя, даже в ООП не умею.

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

Посоветуйте, с чего начать и что почитать по этому поводу.
Аноним 06/01/19 Вск 01:55:30 #686 №1321462 
>>1321311
>Если ты не думаешь о других программистах, кто будет работать над проектом, ты - говнокодер, без вариантов, иначе быть не может.

Я не он, но взял тут симфони, написал composer update после чего он сожрал 2гб озу и ушел в своп. Нахуй не надо такие варианты.
Аноним 06/01/19 Вск 03:21:46 #687 №1321483 
>>1321460
>пишу все в одном файле
Выноси функции в отдельный файл библиотеки хотя бы, если их немного, если много - тоже разбивай на задачи\типы. Настройки всякие тоже в отдельной папке храни.
Я у себя ещё папку делают - \dev, куда валится всякая колбаса для разработки, формочки всякие, наброски кода\псевдокода, вроде как описание проекта.
Хотя сомневаюсь, что тебе это надо - ты, наверняка, сразу садишься писать что в голову взбрело, без описания задачи и т.д.

>в ООП не умею
Охотно верю.

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

>Посоветуйте
Ты в треде по ПХП. Советую читать ОПа.
Аноним 06/01/19 Вск 10:39:28 #688 №1321536 
>>1321460
Егор, ты?
Аноним 06/01/19 Вск 10:43:28 #689 №1321537 
>>1321462
Погоди, это ты ещё охуительные васянские фреймворки и либы на js не паковал. Там все 16 на изи сожрёт
Аноним 06/01/19 Вск 13:08:53 #690 №1321574 
Как работать с интерактивным интерпретатором? Вызываю его командой php -a, но когда ввожу любое выражение, например 2 + 2, результата никакого не выдает. Просто переходит на новую строку.
Аноним 06/01/19 Вск 13:10:37 #691 №1321575 
>>1321574
Оказывается нужно указывать оператор echo, тогда выражения высчитываются.
Аноним 06/01/19 Вск 13:11:32 #692 №1321577 
>>1321574
Поставь psysh: https://psysh.org/

php -a не для людей, максимально неудобный repl.
Аноним 06/01/19 Вск 13:13:45 #693 №1321580 
>>1321460
ООП не нужно. Почитай лучше СИКП.
Аноним 06/01/19 Вск 13:17:16 #694 №1321584 
>>1321577
Попробую, спасибо.
Аноним 06/01/19 Вск 13:22:47 #695 №1321587 
>>1321580
Какой сикп блять, ты че. Мы хардкорные макакоиды, заставляем вкладку браузера жрать 4 гига памяти и грузить проц на 60% на отрисовку веб-странички.
Подключаем зависимости композера на несколько гигов, чтобы использовать оттуда функцию калькулятора.
Сикп, лол...
Аноним 06/01/19 Вск 13:33:39 #696 №1321598 
>>1321587
Нормально делай - нормально будет.
Аноним 06/01/19 Вск 14:00:41 #697 №1321621 
71507285p0master1200.jpg
После общения с битриксом начал жалеть, что устроился на бэкенд.
Аноним 06/01/19 Вск 14:36:45 #698 №1321649 
Двощь, помогай опять.
Во-первых, почему на ideone.com не работает кириллица? Указываю и кодировку и mb_ приписываю - ошибка и всё.
Во-вторых, почему я после preg_split не могу через foreach пройтись по массиву и поменять буквы на заглавные с помощью ucfirst?
https://ideone.com/MmXhsI
Аноним 06/01/19 Вск 16:15:45 #699 №1321698 
>>1321460

Для начала научись правильно разбивать код на независимые функции. Скопирую из старого ответа:

-----

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

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

Вот пример более адекватной функции:

/** 
* Принимает на вход целое число от 0 до 999 и возвращает его
* текстовое представление.

* Например, для числа 312 вернет "триста двенадцать".
*/
function spellNumber(int $number): string

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

echo spellNumber(123) . "\n";

Комментарий /** ... */ - это комментарий в формате phpdoc ( https://ru.wikipedia.org/wiki/PHPDoc ). Слово int и string - это тайп-хинты, советую их изучить:

- http://php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration
- http://php.net/manual/ru/functions.returning-values.php

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

-----

Почитай про хороший код: https://github.com/codedokode/pasta/blob/master/good-code.md

Там недописанный урок, потому самостоятельно погугли про "хороший код" и выпиши еще 5-10 правил.

Потом почитай про шаблоны и про MVC:

- https://github.com/codedokode/pasta/blob/master/php/templates.md
- https://github.com/codedokode/pasta/blob/master/arch/mvc.md

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

Наконец, ООП. В ОП-посте есть учебник и в нем есть глава по ООП. Для практики попробуй решить ООП-задачи и вкинуть на проверку:

- ООП-Гостиница: https://phpclub.tech/pr/res/1082507.html#1097078
- ООП-Математика: https://phpclub.tech/pr/res/1305368.html#1309814

Предыдущие решения этих задач можно найти на phpclub.tech.

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

Насчет "нужно" - конечно, нужно, как другой человек будет разбирать твой код?
Аноним 06/01/19 Вск 16:17:48 #700 №1321699 
>>1321462

Не хочешь исследовать причины проблемы и исправить её? Или, может, кто-то из анонов хочет помочь улучшить композер? Для начала, ты бы мог дать пример composer.json и написать, что сделать, чтобы отъесть столько памяти.
Аноним 06/01/19 Вск 16:18:58 #701 №1321701 
>>1321574

Если интернет под рукой, то можно просто на repl.it запустить - там без echo работает.
Аноним 06/01/19 Вск 16:20:47 #702 №1321702 
>>1321649

На ideone нету mb-функций так как админы забыли поставить расширение mbstring, используй например repl.it.

ucfirst работает только с латинницей в ограниченных случаях, урок: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
Аноним 06/01/19 Вск 16:23:19 #703 №1321703 
>>1321698
Функции более широкое понятие нежели просто блок кода. Функция прежде всего выступает абстракцией, черным ящиком. Например функция возведения в квадрат, это механизм, черный ящик содержащий в себе механизм. Из таких маленьких механизмов можно строить более сложные. Вся программа это тоже черный ящик как и функция. В него опускают данные, и получают результат. Функция может принимать другую функцию, также как и программа можно принимать на вход другую программу.
Аноним 06/01/19 Вск 16:39:30 #704 №1321714 
>>1321702
Я увидел только то, что ucfirst не работает с utf-8 кодировкой. Однако тут всё отлично работает. https://ideone.com/vqpoX8

Алсо. Чтобы без ucfirst сделать - это мне после разбивки на предложения, надо с помощью substr брать первую букву и переводить её в заглавную?
Или там проще решение есть?
Аноним 07/01/19 Пнд 00:02:32 #705 №1321960 
>>1319626
поначалу было норм))
потом немного пописал на джаве и прозрел
Аноним 07/01/19 Пнд 02:06:46 #706 №1322000 
>>1321960
Хочешь сказать джава лучше?
Аноним 07/01/19 Пнд 02:07:50 #707 №1322001 
image.png
image.png
На скрине, где в роуте "/", все работает хорошо и переходит по другим страницам. Когда добавляю {page}, то больше не переходит по другим страницам, остается на своём view. Почему?
Аноним 07/01/19 Пнд 03:36:58 #708 №1322020 
>>1322001
Так дампани пейдж, делов то. Скорее всего там просто нет нихера.
Аноним 07/01/19 Пнд 12:17:08 #709 №1322080 
>>1322000
Ясен хуй джава лучше
Аноним 07/01/19 Пнд 13:06:39 #710 №1322093 
>>1322020
$page на месте с 1
Аноним 07/01/19 Пнд 14:55:25 #711 №1322170 
>>1322080
И чем же?
Аноним 07/01/19 Пнд 15:32:50 #712 №1322219 
>>1322170
Абсолютно всем. Попробуй найти хоть одну хуйню, что в пхп сделана лучше, чем в яве.
Не найдешь.
Аноним 07/01/19 Пнд 15:40:08 #713 №1322233 
>>1322219
Как обратиться ко второму символу в существующей строке?
Аноним 07/01/19 Пнд 15:45:13 #714 №1322240 
>>1322233
По имени и фамилии
Аноним 07/01/19 Пнд 16:01:05 #715 №1322255 
>>1321714
Бампую этот вопрос и прикладываю ещё один.

Пытаюсь писать калькулятор по заданию ОПа, но встал на моменте выполнения вычислений. То есть строку вида "241+142" я разобрал посимвольно, выяснил, где цифра, а где знак мат. операции и засунул цифры в переменную. Как быть со знаком? Я могу для каждого отдельного случая написать условие, вида: if($char == "+") {$result = $a+$b} elseif($char == "-") {$result = $a-$b}
Но можно же как-то компактней сделать это, правильно? У ОПа в примере есть кусок if($char == "+" || $char == "-"){}
Но что с этим делать - ума не приложу.
Аноним 07/01/19 Пнд 16:43:41 #716 №1322277 
>>1322255
> Но что с этим делать - ума не приложу
Хуй забить и использовать eval().
Аноним 07/01/19 Пнд 16:55:29 #717 №1322282 
>>1322277
Мысль интересная, но что-то я вообще запутался.
Если я все числа кладу в переменную, то у меня получается просто строка с числами. Было 442+511, а стало 442511.
Что-то вообще хуйня получается.
Аноним 07/01/19 Пнд 18:17:13 #718 №1322344 
>>1322219
Все там такое же. А иногда и хуже.
Аноним 07/01/19 Пнд 18:35:21 #719 №1322365 
>>1322255
если ты планируешь заниматься вебом, то такие сложные алгоритмы не пригодятся
Аноним 07/01/19 Пнд 19:37:49 #720 №1322404 
>>1322255
Весь код покажи. Только не сюда, а в repl.it какой нибудь скинь. Непонятно что тебе нужно. Нужно видеть весь код.

>>1322365
Это сложные алгоритмы? Смеешься что ли.
Аноним 07/01/19 Пнд 22:56:16 #721 №1322596 
>>1322233
.at() или как там
Аноним 07/01/19 Пнд 23:04:53 #722 №1322603 
>>1322255
Гугли вычисления на стеке и базовое устройство трансляторов
Аноним 07/01/19 Пнд 23:09:57 #723 №1322608 
>>1321621
если у тебя на работе битрикс, беги оттуда
Аноним 07/01/19 Пнд 23:25:45 #724 №1322618 
>>1322404
Да там смотреть-то нечего особо.
Ну вот всё, что навоял за это время.
https://repl.it/@JoeGreen/GrossPunctualTrapezoids
Алсо, дайте сборник задач годных. Для начинающих. А то в интернетах не особо много. И есть ли конфа пхпшников или что-то такое, а то на борде ответа ждать - долго получается.
Аноним 07/01/19 Пнд 23:27:52 #725 №1322620 
>>1322618
если честно, эти задачи в отрыве не так уж много и дают. пройти Опшные и иди дальше. в ооп и в создание проектов. больше профита будет
Аноним 07/01/19 Пнд 23:30:57 #726 №1322622 
>>1322620
Так в том то и дело, что я даже задачи опа не могу толком решить. После основного курса, в разделе "Повторим?" вообще толком ни одной не могу. Вот, как пример - калькулятор. Мой максимум - написать функцию или цикл, кажется.
По этому и думаю - другие задачи порешаю, проникнусь/закреплю знания, а дальше попроще будет.
Аноним 07/01/19 Пнд 23:32:32 #727 №1322623 
>>1322622
если честно, я тоже не смог изначально решить большинство задач. и я забил на многие. пока что ничего сложнее этих задач, я не встретил. а я работаю уже пол года.
Аноним 07/01/19 Пнд 23:32:45 #728 №1322624 
>>1322618
Что ты хочешь написать, калькулятор? Из сообществ советую slack-чат Хекслета, или чаты в Телеграм.
Аноним 07/01/19 Пнд 23:35:48 #729 №1322627 
>>1322620
>если честно, эти задачи в отрыве не так уж много и дают. пройти Опшные и иди дальше. в ооп и в создание проектов. больше профита будет
Не советуй такое. Он скорее всего еще толком ничего не писал. Нужно решать алгоритмические задачи, рекурсия, циклы, структуры данных, деревья. ООП вообще не нужно. Можно писать в ФП стиле. С ООП нужно знакомиться, когда уже уверенно пишешь код. Иначе неокрепший мозг сломается, и получится очередное "ООП головного мозга". И советую тот же путь.
Аноним 07/01/19 Пнд 23:39:39 #730 №1322635 
>>1322622
>Так в том то и дело, что я даже задачи опа не могу толком решить.
Потому что мало решал задачек. Советую эти курсы, там и задачек полно https://ru.hexlet.io/professions/php#education

Рано писать калькулятор, когда не понимаешь как составить алгоритм его работы. Лучше думай над этим алгоритмом. А когда поймешь, то сможешь реализовать. Пока у тебя еще мало опыта, поэтому не понимаешь. Но важно разработать алгоритм решения, а не тупо пытаться писать код. Так не получится. Сначала решение должно появиться в голове.
Аноним 07/01/19 Пнд 23:40:01 #731 №1322636 
>>1322627
Я ни разу не применил рекурсию за время работы. Мне не нужна было знать, что такое стек, деревья, графы (ну графы кстати в одной задачке Опа используются), до того момента пока я не начал писать, на низкоуровневом языке. Мне кажется, что задач со строками и циклами хватит на большую часть веба. А остальное нужно просто знать и может быть, если ты не останешь говнокодером на всю жизнь, те это пригодится.
Аноним 07/01/19 Пнд 23:40:45 #732 №1322637 
>>1322623
Скорее всего на Битриксе.
Аноним 07/01/19 Пнд 23:42:36 #733 №1322638 
>>1322636
Роутинг на деревьях как реализовывать будешь?
Аноним 07/01/19 Пнд 23:44:37 #734 №1322639 
>>1322624
Я просто хочу решить задачу ОПа, а она состоит в написании калькулятора.
>>1322635
>Потому что мало решал задачек.
Так никто и не спорит. Я решал только те, что были по ходу курса ОПа и всё.
Потом пытался найти в интернете что-то, но там всё примерно одинаковое - "заполните массив 10 случайными числами" или "посчитайте, сколько секунд в часе" и тому подобное.

За хекслет спасибо - завтра посмотрю.
Аноним 07/01/19 Пнд 23:53:18 #735 №1322645 
>>1322639
>Так никто и не спорит. Я решал только те, что были по ходу курса ОПа и всё.
Я не смотрел, но мне кажется там алгоритмических задач нет. Нужны именно алгоритмические. Лучше Хекслета ничего не найдешь, потому что кроме алгоритмических задач, там отлично обучают. Вряд ли где то еще тебя научат как применять функции высшего порядка. А просто на досуге задачки порешать можно на Codewars.
Аноним 07/01/19 Пнд 23:57:07 #736 №1322648 
>>1322645
Понял, спасибо. Завтра точно гляну.
Аноним 08/01/19 Втр 01:52:53 #737 №1322711 
>>1322627
>Иначе неокрепший мозг сломается
Иначе люди пишут такой ООП, который та же функциональщина.
Недавно тут один апи смотрел - там поц засунул все запросы на сервер в один метод. Пара десятков запросов в одном методе, Карл!
Аноним 08/01/19 Втр 01:55:38 #738 №1322714 
>>1322711
У него класс из двух методово состоял.

вот тогда мой мозг сломался
Аноним 08/01/19 Втр 05:12:08 #739 №1322778 
>>1321714

> Я увидел только то, что ucfirst не работает с utf-8 кодировкой. Однако тут всё отлично работает. https://ideone.com/vqpoX8

Если в отдельных случаях (латинница в utf-8) работает, а в отдельных - нет, то это называется "не работает".

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

>>1322001

Непонятно, что именно у тебя не работает? При наборе определенного URL получается страница 404? Пагинатор (какой?) генерирует неправильные ссылки? Поясни, чтобы было понятно.

Также, если ты прописал в роуте "/{page}" то он не будет открываться, если в URL просто "/". Для этого надо сделать отдельный роут, и желательно в /{page} запретить вариант page = 1.

>>1322219

Вам сюда: https://habr.com/post/315152/

И хватит разводить бессмысленный флуд. Ладно, если бы ты конкретные примеры приводил, а твои посты бессодержательны.

Аноним 08/01/19 Втр 05:12:27 #740 №1322779 
>>1322255

Написать блок if/elseif и не заморачиваться. Вот тебе пример калькулятора из phpExcel, если интересно: https://github.com/PHPOffice/PhpSpreadsheet/blob/master/src/PhpSpreadsheet/Calculation/Calculation.php

Он разбирает и вычисляет с помощью PHP значения формул в синтакисе Excel.

>>1322603

Можно без стека.

>>1322627

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

Поддерживается ли ФП в IDE? Есть ли там переход к определению и прочие радости?

Я не то чтобы против ФП, но плохо представляю, как его использовать, например в бекенде мессенджера, соцсети, IoT-устройства или интернет-магазина.
Аноним 08/01/19 Втр 09:05:49 #741 №1322820 
>>1322779
>Я не то чтобы против ФП, но плохо представляю, как его использовать, например в бекенде мессенджера, соцсети, IoT-устройства или интернет-магазина
ФП это просто способ писать код. Набор правил или рекомендаций если угодно.

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

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

В Лиспах к примеру if является выражением. Он всегда возвращает результат. И его можно вставлять в любой участок кода. В императивных языках if является инструкцией. Он ничего сам не возвращает, не становится значением. А выражение всегда возвращает значение. Поэтому if в императивных языках громоздкий и ограниченный по возможностям.
Аноним 08/01/19 Втр 09:15:08 #742 №1322821 
>>1322711
>Код в функциональном стиле выглядит как выражение. Как в математике. Выражение вычисляется и возвращается результат.
На словах очень хорошо звучит, но на практике мне адово тяжело это читать. Даже когда понимаешь хуле там делается и код сам красивенький - все равно нюансы ускользают. 8 лет опыта работы.
Аноним 08/01/19 Втр 09:15:55 #743 №1322822 
>>1322820
>>1322821
нитуда
Аноним 08/01/19 Втр 09:30:44 #744 №1322827 
>>1322821
Математику в школе все учат. В математике все представляется в виде выражений. Почему это сложно понимать?
Аноним 08/01/19 Втр 10:12:30 #745 №1322872 
>>1322827
Еще в школе нас учили бегать, прыгать и играть в мячик. Это не делает тебя спортсменом или даже разбирающимся в спорте человеком. Я субъективное мнение высказал - функциональщина на больших объемах для меня является лапшой, которая не стоит затраченного на нее времени, особенно на поддержку. Для тебя может и по другому.
Аноним 08/01/19 Втр 10:33:52 #746 №1322883 
>>1322872
>функциональщина на больших объемах для меня является лапшой, которая не стоит затраченного на нее времени, особенно на поддержку
Может ты просто не понимаешь о чем речь. Откуда знать что ты там видел, и что называешь функциональщиной. ФП код не может быть лапшой по определению. Значит ты видел что-то другое.
Аноним 08/01/19 Втр 10:38:29 #747 №1322885 
>>1322872
>Еще в школе нас учили бегать, прыгать и играть в мячик. Это не делает тебя спортсменом или даже разбирающимся в спорте человеком.
Не очень хорошая аналогия. Я бы привел в пример шахматы. Человек, который сыграл хотя бы несколько десятков партий, как минимум знает как ходят фигуры. Поэтому для него нет проблемы понимать как течет партия. Даже если он смотрит партию гроссмейстеров. Да, он не может делать такие же умные ходы, но он знает как двигаются фигуры, по каким правилам, и может видеть кто выигрывает или проигрывает. Со школьной математикой все даже лучше. Если человек решал школьные задачи, а не бездельничал, то он легко может понимать математические выражения. Это не выдающееся умение, просто навык.

Значит у тебя нет навыка. И ты не хочешь его приобретать. Поэтому придумываешь отговорки, что оно непонятно и сложно. Хотя в реале все наоборот. Это просто и понятно.
Аноним 08/01/19 Втр 12:35:14 #748 №1322974 
Сложные предложения строю, сорянчик, я уже пьян.
>>1322885
А помоему довольно хорошая. Это изначальный тезис был говном.
Это же как приравнять способность к рисованию блоксхемок на информатике к написанию сложных приложений. Вроде и соблюдено начальное условие, но промежуточные напрочь игнорируются.
Если так упрощать любую концепцию, то почему не каждый, кто умеет говорить способен еще и петь? Или че это не каждый из нас художник, хотя карандаш в руках держать способен? А те, кто и способен и художник - хуле не в "приавильном" стиле художники? И тут бы уже пора художникам завести спор о четкости предпочитаемого стиля.
О, а че это этот чувак зная правила шахмат не имеет даже разряда?
Список можно продолжать - это попытка излишнего упрощения в суждениях.
Аналогия с шахматами тоже излишне упрощена. Конечно любой, кто знает правила игры, сможет просто налюдать любую другую игру. Но видеть он ее будет на своем уровне, а нихера не близко к тому майндгейму, который в головах профессиональных игроков происходит. Да и как бы наблюдать игру гроссмейстера не значит сыграть с ним хотя бы достойно. Иначе в чем смысл этой аналогии? Типа тот, кто понимает "правила" фп сможет раздуплить фп код? Да все даже проще - их и понимать то не надо, чтобы раздуплить при достаточной сноровке, т.к фп хоть и оперирует выражениями, но не делает вообще никакой магии (потому что ее, понятное дело, не существует), кроме наложения новой парадигмы с опеределнными целями. Мимо простейшей логики у нас не пройти и все можно свести к ней же, так что упертость поможет решить проблему чтения кода на любом языке с любой применяемой парадигмой даже конченному барану. Захочешь - разберешь. Даже если из математики только яблоки складывать умеешь.
То, на что тот тезис про математику был ответом, вообще не имеет отношения к сказанному изначально, видимо меня не верно поняли. Придется уточнить приведением мысленного примера - если мне дать две версии кода сферического небольшого приложения, но одно будет написано на фп, а второе нет - то второе я смогу и разобрать и поддерживать практически мгновенно, даже если там довольно херовый код, в то время как на фп это будет гораздо медленее проиходить у меня. Не "не понято двоечником", а просто усложнен процесс инвестегирования и прочей поддержки. Объем приложения к примеру в сферические 30к строк императивного кода, на фп хз сколько. Нахер мне про школьную математику втирать, если я в состоянии работать с фп, просто не хочу это повторять?
Почему это должно быть не правдой, тем более что я четко указал, что это конкретно меня касается? На том моменте про "не понял" линию диалога понесло куда-то в сторону "докажи, что твой оппонент просто дурак любым способом". Это же вопрос обычной практики. Для того, кто наяривал фп наверняка все будет по другому, и это тоже не мешает ему высказать свое мнение по этому вопросу и остаться по своему правым. Правда тут есть только субъективная, т.к. это сраный спор о вкусах, где только время покажет, кто жрал говно, а кто нет. А скорее всего время покажет, что говно жрали все, как оно обычно и бывает, и одаримся мы какой-нибудь хитровыебанной парадигмой, на хую вертевшей всех, когда гению в башку клюнет. Сейчас на это по большому счету насрать, потому что элементы фп в любом современном языке чуть ли не в рекомендациях к действую имеются, и это тоже плюс, очень удобно по случаю (хотя и без специального сахара можно было обойтись, нихера же не меняется). Но вот чистое фп, чтоб аж скупая слеза у хардкорных адептов скатилась, пока что не сильно угрожает императивному коду, насколько бы оно простым не казалось например для тебя. Только не говори что в оценке на глаз я тут не прав, ты и сам знать должен, как дела обстоят. На данный момент ниша фп на подхвате в тех местах, где императивщина некрасивой становится. Такое себе перетягивание каната выходит.
Я кстати не спорю, что может я и с какой-то паленой приложухой на фп работал, откуда мне знать, я не прошаренный сильно в этой теме. Однако после этого, как ты верно заметил, желание искать на свою жопу новых функциональных впечатлений у меня отпало. Пока до новой необходимости приоритеты расставлены.
Аноним 08/01/19 Втр 14:06:30 #749 №1323042 
>>1322974
>Конечно любой, кто знает правила игры, сможет просто налюдать любую другую игру. Но видеть он ее будет на своем уровне, а нихера не близко к тому майндгейму, который в головах профессиональных игроков происходит.
Ну ты видел математику, а теперь говоришь, что выражения в программировании сложно понимать. Во первых они проще математических. Во вторых что сложного вообще может быть в выражении? Есть операнды, есть операторы, есть приоритет операций, - все, больше ничего нет.
Аноним 08/01/19 Втр 14:07:29 #750 №1323044 
>>1322974
>Типа тот, кто понимает "правила" фп сможет раздуплить фп код? Да все даже проще - их и понимать то не надо, чтобы раздуплить при достаточной сноровке, т.к фп хоть и оперирует выражениями, но не делает вообще никакой магии (потому что ее, понятное дело, не существует), кроме наложения новой парадигмы с опеределнными целями.
Ну так чего ты тогда голову морочишь.
Аноним 08/01/19 Втр 14:08:55 #751 №1323045 
>>1322974
>Придется уточнить приведением мысленного примера - если мне дать две версии кода сферического небольшого приложения, но одно будет написано на фп, а второе нет - то второе я смогу и разобрать и поддерживать практически мгновенно, даже если там довольно херовый код, в то время как на фп это будет гораздо медленее проиходить у меня. Не "не понято двоечником", а просто усложнен процесс инвестегирования и прочей поддержки. Объем приложения к примеру в сферические 30к строк императивного кода, на фп хз сколько. Нахер мне про школьную математику втирать, если я в состоянии работать с фп, просто не хочу это повторять?
Так и скажи, что не осилил, не хочешь, не понимаешь, и т.п.
Аноним 08/01/19 Втр 14:10:18 #752 №1323046 
>>1322974
Делай двойной перенос строки, дели текст на небольшие абзацы. Такую простыню сложно читать.
Аноним 08/01/19 Втр 14:32:31 #753 №1323070 
>>1322779
>Вот тебе пример калькулятора из phpExcel, если интересно:
Может и интересно, но я почти ничего не понимаю, что там происходит.
>Написать блок if/elseif
Чек.
Написал, всё работает. Единственное НО - я не понимаю, как выполнить операцию без указания её самой. То есть, если есть выражение 2+2, то я пишу if($char=='+') {$a+$b}
Я намеренно указываю, что а+б. Так как сделать так, чтобы код сам узнавал оператор?
https://repl.it/@JoeGreen/GrossPunctualTrapezoids

И да. Есть ли смысл на код бейсик проходить тренинги? На Хаскеле написано, что там первая часть уроков находится.
Аноним 08/01/19 Втр 14:43:43 #754 №1323080 
>>1323042
>а теперь говоришь, что выражения в программировании сложно понимать
Думаю тебе так показалось, я об этом не говорил. Может не достаточно ясно писал выше.
Мне проще понимать императивный код, чем функциональный - вот и все, что я с самого начала хотел сказать. Зачем это все выворачивать?
По мне: для поддержки он в несколько раз проще, чем фп. Это критичный момент, и я его упоминаю. Сопровождение кода самое больное место. Написать может любой и в закат уебать довольный, а кому-то потом разгребать и развивать всю красоту. Например тебе или мне. Как это вообще можно забыть? Как будто кривого кода никогда не встречал. (фп я к говнокоду сейчас не приравниваю, просто пример о восприятии)
Я не раз упрощал свои абстрактные финты ушами, чтобы понятнее становилось, зато лучше всем остальным работалось. Красота в понимании одного - проблемы для другого. Надо фидбек получать, чтобы не укатиться в корыто.
А так пойму любой код, дело только в комфорте поддержки, что лирика. Правда эта лирика в человекочасы конвертится.
>>1323044
Смотри выше.
>>1323045
Жопой читаешь.
>>1323046
Оке. Не привык писать длинные посты, чет пробило в этот раз.
Аноним 08/01/19 Втр 15:01:46 #755 №1323097 
>>1323070
>И да. Есть ли смысл на код бейсик проходить тренинги? На Хаскеле написано, что там первая часть уроков находится.
Чёхго? Ты про code-basics.ru? На Хаскелле? Может Хекслете. Стоит проходить, очень даже стоит.
Аноним 08/01/19 Втр 15:08:42 #756 №1323102 
>>1323080
>По мне: для поддержки он в несколько раз проще, чем фп
Как код с изменяемым состоянием может быть проще в поддержке? Все знают, что изменяемое состояние это зло. Если функция где-то что-то изменяет, то это приводит к ошибкам, и это сложно обнаружить. А ты говоришь это легко отлаживать. Не может быть у тебя 8 лет опыта, как ты написал.
Аноним 08/01/19 Втр 15:23:01 #757 №1323116 
>>1323102
Никто ни к чему никого не обязывает, ты путаешь холодное с сладким. Ты можешь делать имутабельной импертивщину прикинь))) Главное в правильных местах, чтобы жопа не горела. Хоспаде, откуда вы лезете, надоели уже. Опытнее станьте, а не по методичкам твердите. Хочешь поговорить с кем-то с головой, а тебе уже третий пост цитатами без смысла наяривают.
Аноним 08/01/19 Втр 15:38:23 #758 №1323126 
>>1323116
>Ты можешь делать имутабельной импертивщину прикинь)))
Смешная шутка.

>>1323116
>Опытнее станьте, а не по методичкам твердите.
Эта еще смешнее, если учесть, что ты плаваешь в простых понятиях, а говоришь, что у тебя 8 лет опыта.

Как может императивный код быть иммутабельным, если он состоит из состояний, которые последовательно меняют? о_О Иммутабельный переводится как неизменяемый.
Аноним 08/01/19 Втр 15:40:28 #759 №1323130 
>>1323126
>Иммутабельный переводится как неизменяемый.
Ну пятерочку по ангельскому ты заслужил, но схуя ты думаешь, что имутабельность это свойство определенной парадигмы, а другие НУ НИКАК не смогут? То, что ты больной не предлагай, слишком очевидно.
Аноним 08/01/19 Втр 15:41:25 #760 №1323132 
>>1323116
Приведу цитату из словаря:

ИМПЕРАТИВНОЕ ПРОГРАММИРОВАНИЕ
Парадигма программирования, которая, в отличие от декларативного программирования, описывает процесс вычисления в виде инструкций, изменяющих состояние программы.


Императивное = изменяемое состояние. Как оно может быть иммутабельным?! Вопрос риторический.
Аноним 08/01/19 Втр 15:43:24 #761 №1323134 
>>1323132
То есть когда я что-то иммутабельное на чистом ооп напишу ты глазам своим не воверешь, что это не императив? Ну ты и даун, хоспаде.
Аноним 08/01/19 Втр 15:45:35 #762 №1323135 
>>1323130
>имутабельность это свойство определенной парадигмы
Иммутабельность это свойство состояния. Состояние становится неизменяемым. Неизменяемые структуры данных. Неизменяемые переменные (Джо Армстронг называет их по-другому, не помню как) как в Эрланге.
Аноним 08/01/19 Втр 15:45:40 #763 №1323136 
>>1323134
Ой, а что если я просто напишу чистую функцию? Это все, я стал чернокнижником? Вы головой, а не словарями, думать умеете? А что если я функциональщину кааак ебну посреди мутабельного состояния - это будет фп или зашкваренное грязным пхп фп? У вас на районе как с этим? У меня всем похуй.
Аноним 08/01/19 Втр 15:47:12 #764 №1323138 
>>1323135
Ты выдрал часть саркастического предложения и на серьезных щах на это отвечаешь. Иммутабельно так сказать.
Аноним 08/01/19 Втр 15:47:48 #765 №1323139 
>>1323134
>когда я что-то иммутабельное на чистом ооп напишу ты глазам своим не воверешь, что это не императив?
Сам понял что написал. Учись ясно выражать свои мысли.
Аноним 08/01/19 Втр 15:49:02 #766 №1323141 
>>1323139
Ну ясно все с вами, тогда отчаливаю, слишком жестко.
Аноним 08/01/19 Втр 15:49:51 #767 №1323143 
>>1323134
>я что-то иммутабельное на чистом ооп напишу
Что такое "чистое ООП"?
Аноним 08/01/19 Втр 15:52:14 #768 №1323145 
>>1323138
>Ты выдрал часть саркастического предложения и на серьезных щах на это отвечаешь. Иммутабельно так сказать.
У тебя проблемы с логикой. Только состояние может быть иммутабельным. Как и то, что только жидкость может быть жидкой.
Аноним 08/01/19 Втр 16:17:26 #769 №1323168 
>>1323143
А что такое фп тогда? Просто способ написания кода. Иммутабельность можно сделать везде, и хоть мы тут друг друга уже говном закидываем очень блядь странно что вы этого вообще не понимаете, а на своей непогрешимой параше настаиваете запугивая бедных нюфагов в этом треде. Делов то полкопейки - парадигму под реальный мир приспособить. Чего вам, видимо, не дано. Фанатизма слишком много. Всегда у тебя будет состояние, в этом и ключевой косяк фп - слишком идеализируют и от этого сосут на всем, что выходит за рамки синуса. Вот и не взлетает выше хелперов к грязным мутабельным языкам это хваленое фп (покпок щас кинут какойнибудь твиттер). Хотя чего странного, по вики шпарите, практики и своих мыслей нихуя. Даже ценность мутабельности и иммутаьелности разъяснить не можете, только кейвордами покидаться есть силы.
>>1323145
С чего ты взял что состояние обязано быть везде, кроме фп? С чего ты взял, что везде, кроме фп состояние будет? Что по твоему такое вообще состояние? И с чего ты взял, что это главная фишка фп? Ты думаешь фп это про иммутабельность? Вы там клей нюхаете или что? - одна чушь охуительнее другой.
Ой, извините, с чего ты взял что состояния в фп нет? Еще как есть, ты просто немного в глазки идеализируешь. Я в ахуе с этих даунов, у них состояние просто в идеальном случае не в куче лежит, а на стеке, а они уже из себя уже форму жизни из темной материи строят. И то идеальных случаев не бывает, мы тут не фпшной сказке живем.
>У тебя проблемы с логикой
Сначала за свою логику со школьной математикой ответьте. Хотя куда там фп и логика, сорян за принижение.
Аноним 08/01/19 Втр 16:27:11 #770 №1323176 
>>1322779
>плохо представляю, как его использовать, например в бекенде мессенджера, соцсети, IoT-устройства или интернет-магазина.
>
Писал простой интернет магазин на функциях задавайте отверты. Вполне реально это делать.
Другое дело, что там без современных модных фич. Да тот же Вордпресс 90% через функции написан.
Аноним 08/01/19 Втр 16:28:53 #771 №1323178 
>>1323176
Вордпресс и аналогичное это не пример для подражания.
Аноним 08/01/19 Втр 16:40:14 #772 №1323190 
>>1323042
>Ну ты видел математику, а теперь говоришь, что выражения в программировании сложно понимать
Какая математика? Все стремятся к созданию\описанию модели небольшого кусочка реального мира посредством языка программирования, создавая объекты. Кому нужна математика в программировании? Это было актуально в 70х годах, но не сегодня.
Я тебе что, математик, чтобы формулы писать и считать? Пека у меня для чего нужна тогда? Мне, как кодеру, достаточно только уметь общаться с ней, донося, что хочет заказчик.
Аноним 08/01/19 Втр 16:46:00 #773 №1323195 
>>1323178
Это не тебе решать, а рыночку, который уже порешал.
Аноним 08/01/19 Втр 17:03:17 #774 №1323214 
>>1323168
Не буду толочь воду в ступе. Слишком много текста чтобы на каждое предложение отвечать. Да и почти все они не предполагают ответа.

Ты сам все спутал изначально, а теперь выкручиваешься. Состояние есть везде, но в ФП состояние не изменяемое, то есть то самое иммутабельное. В Эрланге к примеру все неизменяемое. Ты пишешь, что можно сделать иммутабельное состояние при императивном программировании, что само по себе абсурд.
Аноним 08/01/19 Втр 17:04:14 #775 №1323216 
>>1323176
Через функции не означает ФП.
Аноним 08/01/19 Втр 17:08:28 #776 №1323220 
>>1323190
>Все стремятся к созданию\описанию модели небольшого кусочка реального мира посредством языка программирования, создавая объекты.
Ешьте в забегаловке у ООП, миллион мух просто так не прилетят.

А если серьезно, то кто сказал, что все стремятся? В математике такого и близко нет. ФП как раз математическая модель, выросшая из Лямбда-исчисления Чёрча.

>>1323190
>Кому нужна математика в программировании? Это было актуально в 70х годах, но не сегодня.
Это вообще нонсенс. Ты хоть знаешь, что все программирование имеет математику под собой. Кроме ООП конечно, это чистой воды костыль, не имеющий никакого серьезного фундамента.
Аноним 08/01/19 Втр 17:11:13 #777 №1323226 
>>1323216
>"Пить воду" не означает что воду.
Ясно.
Аноним 08/01/19 Втр 17:16:33 #778 №1323234 
>>1323220
Так и скажи, что неосилил ООП и пишешь как джун.
И не осилишь никогда, судя по всему.

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

Ещё раз - все стараются уйти от математики в программировании, просто потому, что это слишком низкоуровневая тема. Все, кроме тебя.
Аноним 08/01/19 Втр 17:44:06 #779 №1323265 
>>1323226
>>1323234
Во первых не обобщай. Кто все? Ты несешь такую пургу, что даже смешно. Математика у него низкоуровневая. Я такой чепухи никогда в жизни не слышал. Уйти от математики в программировании - это смешно не меньше. Честно говоря, тебе уже ничем не помочь. К сожалению твой уровень вряд ли поднимется выше написания бесполезного инфраструктурного кода, ибо до алгоритмов (математики) ты не дорос. Пиши дальше бесполезные бойлерплейты.
Аноним 08/01/19 Втр 17:51:20 #780 №1323275 
Как же оря с веб-макак, которые спорят о математике и парадигмах программирования.
Аноним 08/01/19 Втр 17:51:44 #781 №1323278 
Как же ору с веб-макак, которые спорят о математике и парадигмах программирования.
Аноним 08/01/19 Втр 17:54:15 #782 №1323281 
>>1323265
>Кто все?
Все программисты. Байткод->ассемблер->ЯП->функционалка->ООП.
Ты либо сказочный пионер, либо зеленый.
Аноним 08/01/19 Втр 19:10:20 #783 №1323341 
>>1323281
>Байткод
Байткод это машинно-независимый код, а ассемблер компилируется в машинный код.

>>1323281
>функционалка
Функциональное программирование как математическая модель родилось в 30-х годах 20-го века. Еще до первых языков программирования.

Так что зеленый здесь ты. У тебя нулевые знания.
Аноним 08/01/19 Втр 20:57:14 #784 №1323391 
Задача: читать и редактировать двустрочный файл.
Есть ли адеватное, блять, решение такой элементарной задачи? Почему это так сложно и не работает ничего?
Аноним 08/01/19 Втр 21:09:56 #785 №1323397 
15411896070015.jpg
154118960700606.jpg
14817281493681.jpg
1331701232817.jpg
Сегодня с другом обсуждали как выгоднее накопить на хату. Я говорю ему что ипотека не оч, так как ты платишь проценты. И скажем лучше платить за аренду 15к, откладывая 15 про запас, чем платить в ипотеку 30к.

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

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

Скажем мы простой работяга у которого есть в месяц Х свободных тысяч рублей. Далее что мы делаем. Когда наши накопления становятся больше 50к (минимальный вклад в сбере), то кладем их в наш сбербанк под 7% (опять же есть такой вклад, если время минимум год.

Например имеем такие по 12.5тр. в месяц, стало быть через 4 месяца делаем первый вклад. Через еще 4 месяца уже второй. И так далее.

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

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

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

В общем никто не хочет начать решать? Сам поделился скорее что бы не забыть, просто сегодня сильно заебан на работке и лень думать.
Аноним 08/01/19 Втр 21:19:47 #786 №1323400 
>>1323391
http://php.net/manual/ru/function.file.php

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

Ну и еще проверь что бы у твоего интерпретатора доступы были к папкам в которых ты шаришься и что бы путь к файлу был правильный и все такое.
Аноним 08/01/19 Втр 21:36:04 #787 №1323419 
>>1323400
Спасибо, не ожидал увидеть ответ, писал уже просто от отчаяния. Но тут тоже не могу разобраться, как обратную операцию провести, т.е. записать измененный массив в файл. Еще же ведь и перезапись нужна, а не в конец писать. Ох.
Аноним 08/01/19 Втр 21:57:25 #788 №1323427 
Нашел вот такое компактное решение этой проблемы:

$filePath = 'closed/logpassDB.txt';

// Запись.
$data = serialize($DB);
file_put_contents($filePath, $data);

// Чтение.
$data = file_get_contents($filePath);
$DB = unserialize($data);
Аноним 08/01/19 Втр 22:17:29 #789 №1323438 
19r-1160x736.jpg
Слушайте, нужно удалить инфу из базы нажатием на кнопки. У кнопки есть id хтмлный. В зависимости от id удаляется та или иная информация. Нужно достать оттуда этот id, вычленить из строки последние символы, которые обязательно цифры, и послать запрос в базу на удаление строчки из таблицы, в ячейке которой есть эти самые цифры. Всю таблицу читать не нужно, только один столбец. Как это сделать максимально коротко и эффективно?
Аноним 08/01/19 Втр 22:20:35 #790 №1323439 
>>1323438
Ах, да. Id у кнопок генерируются динамически, так что простым с жикверным $().on('click', ...) тут не получится совладать, как мне кажется.
Аноним 08/01/19 Втр 22:24:50 #791 №1323441 
>>1323438
Можно сделать форму с hidden полем, через js туда передавать id и после этого отправлять форму.
Аноним 08/01/19 Втр 22:25:34 #792 №1323442 
Вот заходишь сюда, а эти нубы задают вопросы, внутри которых месяцы моего изучения сидят, отвечаешь им отвечаешь, а они все не кончаются, впизду.
Аноним 08/01/19 Втр 22:42:31 #793 №1323452 
>>1323441
А что, с базой можно соединиться только посредством формы?
Аноним 08/01/19 Втр 22:54:02 #794 №1323459 
PDO или mysqli?
Аноним 08/01/19 Втр 23:30:46 #795 №1323475 
>>1323459
windows or linux?
Аноним 08/01/19 Втр 23:41:51 #796 №1323479 
>>1323475
Для игр винда, для администрирования лексус.
Аноним 09/01/19 Срд 05:13:11 #797 №1323537 
>>1322820

А примера кода нету?

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

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

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

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

> Выражение вычисляется и возвращается результат.

Я плохо представляю выражения размером хотя бы в 10 000 строк.

Аноним 09/01/19 Срд 05:15:28 #798 №1323539 
>>1323176

В вордпрессе процедурное программирование, а не функциональное. Ты можешь посмотреть определения в википедии.
Аноним 09/01/19 Срд 05:18:19 #799 №1323541 
>>1323438

Лучше класть id в дата-атрибуты, которые для этого придуманы. Также, можно каждую кнопку обернуть в форму со скрытым полем и обойтись без JS.
Аноним 09/01/19 Срд 09:09:41 #800 №1323573 
>>1323537
>Я плохо представляю выражения размером хотя бы в 10 000 строк.
Никто не в состоянии написать выражение такой величины. И цели такой нет ни у кого. Наоборот, функциональное программирование склоняет к минимализму.

>>1323537
>А примера кода нету?
На PHP у меня готового кода нет, и искать не хочется. PHP разработчики могут не до конца или не правильно понимать ФП, поэтому учиться ФП по PHP коду плохая идея. У ФП есть математическая база - Лямбда-исчисление, ее нужно понять прежде чем подходить к ФП. Могу посоветовать темы для изучения, книги, курсы.

Для начала можно посмотреть это https://www.youtube.com/watch?v=7BPQ-gpXKt4
Аноним 09/01/19 Срд 09:31:24 #801 №1323581 
>>1323539
Ты скозал?
Аноним 09/01/19 Срд 12:29:49 #802 №1323639 
>>1323070
Вместо иф-элс используй switch
Аноним 09/01/19 Срд 12:33:49 #803 №1323640 
>>1323573
Это что, за хуйня? Залез в пхп тред, на пхп не пишет, несёт ебень какую-то и впаривает ФП. Коммивояжёр 2.0
Иди-ка ты нахуй с треда, теоретик.
раб божий Митрофан 09/01/19 Срд 14:20:02 #804 №1323703 
Поцантрэ, порекомендуйте хостинг забугорный европейский. Парашкины блокировки всего подряд достали уже. Хочу кодить как европеец - без ватно-совковых ограничений.
Аноним 09/01/19 Срд 14:50:27 #805 №1323730 
>>1323703
digitalocean
Аноним 09/01/19 Срд 14:56:09 #806 №1323734 
>>1323730
Удвою. Пока что стабильно служит, блокировок не наблюдаю. Да и вообще хорошо с ним работается.
Аноним 09/01/19 Срд 15:06:35 #807 №1323742 
>>1323703

Можно поискать тут: https://vps.today/ или https://poiskvps.ru/

Учти, что все, что принимает российские платежные системы вроде webmoney или yandex - это скорее всего российские компании, даже если там стоит другая страна.

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

Не бери OpenVZ: там часто нельзя загружать модули ядра, менять iptables итд в силу архитектуры. Также, там память считается таким образом, что ее расходуется в 1,5 - 2 раза больше. 1 Гб на OpenVZ может примерно соответствовать 500-700 Мб на KVM.

Хетцнер русских не любит и сразу требует документы.

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

Аноним 09/01/19 Срд 15:10:48 #808 №1323746 
>>1323742
>Хетцнер русских не любит и сразу требует документы.
Разве так плохо с документами? Я просто хз, не был владельцем тут, но понравились цены сильно.
Аноним 09/01/19 Срд 16:11:22 #809 №1323783 
>>1323397
Обидно что никто не заинтересовался задачкой, по сути расширенный вариант задачи с процентами. Одни фрилансеры сидят теперь судя по треду, которые не могут id из дата-аттрибута в мускуль-запрос скормить.
Аноним 09/01/19 Срд 16:19:32 #810 №1323788 
>>1323783
А ты сам чего?
раб божий Митрофан 09/01/19 Срд 17:41:29 #811 №1323844 
>>1323742
ВПС брать - дороха. Ещё не известно выйдет ли чего путного, а деньги уже уплочены будут.
Аноним 09/01/19 Срд 17:46:48 #812 №1323848 
>>1323783
Какая ещё задачка? Там портянка левого текста на 5 килобайт. Кто это будет дочитывать?
С первый строк уже насрать на тебя и твоего дружбана.
Аноним 09/01/19 Срд 19:07:15 #813 №1323908 
Безымянный.PNG
Сап, анонче. Пытаюсь добавить данные в базу, mysqli_query возвращает false. Типы данных совпадают. Что не так?
Аноним 09/01/19 Срд 19:29:59 #814 №1323926 
>>1323908
Понял, функцию с датой нельзя передавать напрямую в запрос.
Аноним 09/01/19 Срд 19:44:37 #815 №1323939 
>>1323926
У Мускула есть встроенная функция таймштампа, просто укажи её в поле даты по умолчанию. Не надо такие вещи посылать в базу.
Аноним 09/01/19 Срд 22:17:00 #816 №1324002 
>>1323703
digitalocean если зарегаешься по чей-то рефке упадет 10$, на 2 месяца минимального тарифа хватит.
Аноним 09/01/19 Срд 23:06:36 #817 №1324039 
>>1323939
Один хуй форматировать на стороне клиента придется, ибо мне нужна дата в определенном формате.
Аноним 09/01/19 Срд 23:22:09 #818 №1324051 
>>1323541
Чем лучше?
Аноним 10/01/19 Чтв 00:05:38 #819 №1324108 
>>1324039
>мне нужна дата в определенном формате
Таймштамп на то и таймштамп, что перегоняется в любой формат.
Твоя функция может принимать его - date ( $format, $timestamp)
Используй документацию, Люк. И не городи огород.
http://php.net/manual/ru/function.date.php
Аноним 10/01/19 Чтв 00:41:08 #820 №1324123 
>>1324108
Ччерт, я поражаюсь твоей терпеливости, антончик. Спасибо за помощь.

Я тут кстати еще недавно спрашивал совета насчет вытягивания айдишника из элемента и передачи его в обработчик пхп.
Мне посоветовали создать форму с невидимым элементом, передавать в него значение и отправлять. А я сделал еще короче. Я заменил айдишник на value у элемента с тем же значением, вытягиваю его $_POST и отправляю запрос.
Аноним 10/01/19 Чтв 00:48:25 #821 №1324125 
>>1324108
Ты забыл еще сказать, что юзая таймштам, нужно передавать ему функцию UNIX_TIMESTAMP(), чтобы метка времени была удобочитаемая функцией date().
Аноним 10/01/19 Чтв 01:23:58 #822 №1324133 
Двощь, снова к тебе с вопросом. Не могу понять, как в конец строки вставить определённое кол-во символов. С помощью substr_replace() только один вставляется. А если мне надо 10, на пример? Там, вроде, всё с помощью цикла решается, но я не могу сообразить что-то.
https://repl.it/@JoeGreen/testing
Сама задача:
> Дана строка. Если ее длина больше 10, то оставить в строке только первые 6 символов, иначе дополнить строку символами 'o' до длины 12.
Аноним 10/01/19 Чтв 01:31:40 #823 №1324134 
Сап двач, у меня появился вопрос по безопасности сайтов. Как защитить конфигурационные файлы конекта БД. Ведь к ним есть доступ вообще у всех.
Я пробовал через .htacess выставлять Deny from all
Но тогда сайт перестаёт конектится к базе.
Аноним 10/01/19 Чтв 01:40:01 #824 №1324136 
>>1324134
А что у тебя конфиг делает в паблике? Вынеси, например, на уровень ниже.
Аноним 10/01/19 Чтв 01:40:57 #825 №1324138 
Repl.it - ElderlyObedientAttributes - Google Chrome 2019-01[...].png
>>1324133
>как в конец строки вставить определённое кол-во символов.
>С помощью substr_replace()
Конкатенация же.
Аноним 10/01/19 Чтв 01:41:29 #826 №1324140 
>>1324136
В отдельной директории лежит конфиг.
Аноним 10/01/19 Чтв 01:47:13 #827 №1324142 
Антоны, а вы вкатывались в какие-нибудь гитхаб репозитории.
У меня например есть пара мест где я бы хотел исправить овер 9000 строк говнокода, перевести всё к PHP7.0 но я имею 0 опыта работы в командных репозиториях и вообще не понимаю как это будет работать на практике. Помогите советом.
Аноним 10/01/19 Чтв 01:52:30 #828 №1324143 
>>1324133
Вот тебе вариант покороче и лаконичнее.

https://repl.it/repls/SinfulShinyBootstrapping
Аноним 10/01/19 Чтв 01:53:47 #829 №1324144 
>>1324142
Обычно в репозитории есть список необходимой работы, в issue. И описание требований для контрибьюторов, стиль кода, и все остальное. Смотришь задачи, клонируешь репо, решаешь, отправляешь пулл реквест. Если твой код устроит, то его внедрят в мастер ветку.
Аноним 10/01/19 Чтв 01:58:52 #830 №1324147 
15464546874620.mp4
>>1324143
>Укорачивание за счёт удаления перевода строки
>Конкатенация через While
Ну... такое себе решение.
Аноним 10/01/19 Чтв 02:38:06 #831 №1324158 
>>1324147
Лол, залезь под капот функции, которую ты юзаешь, и увидишь то же самое.
Аноним 10/01/19 Чтв 02:45:14 #832 №1324160 
>>1324158
>Есть ссылка на исходник
>залезь под капот
Так и так всю функцию видно. Это не повод засовывать туда while, когда можно обойтись без него.
Аноним 10/01/19 Чтв 02:48:27 #833 №1324161 
>>1324160
Я про subst_replace или что он там написал. Залезь в самые недра, так сказать.
Аноним 10/01/19 Чтв 06:03:23 #834 №1324176 
>>1324144
А что если репозиторий старый. Я например видел несколько игруль где код не одновлялся аж с 2009 примерно. Там даже ЧПУ не привезли. Можно ли взять этот код и редактировать, но уже как свой проект?
Спасибо за ответ анон.
Аноним 10/01/19 Чтв 10:20:24 #835 №1324225 
>>1324176
Тебе кто то мешает форкнуть проект? Я разрешаю.
Аноним 10/01/19 Чтв 10:38:46 #836 №1324237 
Оп, нужно ли пхпшнику учить docker?
Аноним 10/01/19 Чтв 11:24:21 #837 №1324252 
>>1324237
Какая конечная цель? Докер удобен для запуска чего угодно в изолированном окружении.
Аноним 10/01/19 Чтв 12:02:45 #838 №1324266 
>>1324134

Если ты вывалил весь код в публично доступную папку сервера, то это неправильно. Надо создать в проекте папку public, настроить ее как корневую, и в эту папку класть только то, что нужно - js/css/картинки, index.php.

Тогда конфиг будет не доступен из веба.

Закрывать папки и файлы по одному, как ты предлагаешь - это ненадежные костыли.
Аноним 10/01/19 Чтв 12:05:04 #839 №1324267 
>>1324138
Немного не то. Я хочу не просто приклеить +n символов, а как-то это в цикле сделать, что ли. Там в задаче написано, мол, если длина меньше 10, то в конец добавить символ "о", чтобы длина стала 12.
>>1324143
Спасибо. Вчера тоже пытался через while сделать, но не приклеивал, а в теле substr_replade() делал.
Алсо, почему вот такой код работать не будет?
while($count < 12)
{
$result = substr_replace($text, "o", $count);
echo $result;
}
Аноним 10/01/19 Чтв 12:07:32 #840 №1324268 
>>1324267
То есть, как я это вижу:
Пока длина $text < 12 символов, делаем substr_replace (добавляем в конец строки) символ "о". Где я ошибаюсь?
Аноним 10/01/19 Чтв 12:31:13 #841 №1324283 
>>1324133
https://3v4l.org/0ovOb

Нужное?
Аноним 10/01/19 Чтв 12:38:03 #842 №1324287 
>>1324268
Ошибаешься например в том, что $count не пересчитываешь. Да и вообще попытка такого решения как-то наизнанку простую вещь делает.
Аноним 10/01/19 Чтв 12:43:29 #843 №1324292 
>>1324143
Плохой код. Ты считаешь длину получающейся строки каждую итерацию вместо того, чтобы один раз высчитать нужное количество новых символов.
Аноним 10/01/19 Чтв 12:52:41 #844 №1324297 
>>1324292
Тогда скажи как через substr_replace() за один шаг добавить нужное кол-во символов. Пока что его решение самое лучшее.
>>1324287
Точно. Про пересчёт забыл.
Аноним 10/01/19 Чтв 12:54:02 #845 №1324300 
>>1324283
За str_repeat() спасибо. Не знал.
Аноним 10/01/19 Чтв 12:55:20 #846 №1324301 
>>1324297
Почему ты к str_replace так привязался? Это само по себе не нужно тут. Да и моя придирка была совершенно в другом. Выше лежит мой пример, где показано как высчитать сколько тебе символов нужно. Можно это же сделать тупо циклом, а не str_repeat, но при этом ты считать каждый раз длину строки не будешь.
А была бы она по условию задачи до 1кк символов дополнить например - тогда бы уже точно было некрасиво глаза закрыть на лишние действия.
Аноним 10/01/19 Чтв 13:00:42 #847 №1324305 
>>1324301
https://3v4l.org/sd4Hd

Вот держи, тут изменил немного, без реплейса канеш, ибо это совсем глупость, но с циклом вместо готовой функции и без какого-либо пересчета длины строки на каждой итерации.
Аноним 10/01/19 Чтв 13:16:17 #848 №1324318 
>>1324301
И еще вот наглядную демонстрацию почему это плохо завез.
https://3v4l.org/Qr6sY - выполняется хотя бы.
https://3v4l.org/59mRU - ну фактически тоже выполняется, но уже не успевает за лимиты этого сайта выйти.
Из-за одной такой мелочи в простейшем месте можно получить натуральный удар по яйцам. И ведь даже указал на это сразу, а все равно пришлось разжевывать.
Аноним 10/01/19 Чтв 13:24:21 #849 №1324326 
>>1324301
>А была бы она по условию задачи до 1кк символов дополнить например - тогда бы уже точно было некрасиво глаза закрыть на лишние действия.
Я, конечно, понимаю, что тут не /web, и на практику тут забивают, но вы все-таки думайте хоть немного при разработке не абстрактно. Если не требуется проверять строку в 1000000 символов, то и нечего мозги ебать, тем более, что цикл, что функции твои встроенные практически с одной скоростью выполнят процедуру.
В общем, хочу я сказать, что задачу решить можно разными способами, но для каждой задачи нужно подбирать оптимальный способ.
Аноним 10/01/19 Чтв 13:37:01 #850 №1324329 
>>1324326
Человек, который закрывает глаза на такие неприятные мелочи может наделать их огромное количество, что уже вполне будет аналогично выполнению вот этой залупы на 1кк строк.
Делов то просто сразу написать чуть по другому, понимая что делаешь, даже не затратив дополнительного времени и усилий на это. Не какая-то хардкорная оптимизация или преждевременная, а просто здравый смысл, привычка не писать глупость по принципу "да все ок, не ебанет" в мелочах. Да и попросту привычка не писать говнокод необоснованный. Даже анализатор шторма такие моменты подсвечивает, а он вообще разумом не обладает. И на ревью за это не погладят, а проведут разъяснительную беседу, только уже поспорить не слишком получится.
Ладно, вижу что не понят и оставлю вас при своем.
Аноним 10/01/19 Чтв 14:39:40 #851 №1324352 
Посоны, есть условный цикл while($i<100){}, как сделать что бы каждый десятый $i увеличивал на еденицу другую переменную?
Аноним 10/01/19 Чтв 15:07:39 #852 №1324380 
>>1324352
Проверить, что $i делится на 10 без остатка.
Например
https://3v4l.org/ooCHC
Или завести переменную счетчик и сбрасывать ее когда она становится 10.
Аноним 10/01/19 Чтв 16:46:31 #853 №1324420 
Двощь. Придумал себе занятие. Хочу написать функцию, которая создаёт массив с требуемым количеством элементов массива. Или такая уже есть функция уже есть?
Алсо, накидайте каких-нибудь интересных, не сложных заданий. А то в интернетах какое-то всё не то.
Аноним 10/01/19 Чтв 17:15:40 #854 №1324427 
Хочу значит изменить label формы в Symfony, пишу в твиге {{ form_label(form, "new label") }}, а он мне все равно создает в form_widget еще один label. Что не так? Пробовал как атрибут в контроллере передать, один хер
Аноним 10/01/19 Чтв 17:17:37 #855 №1324430 
>>1324420
range есть к примеру
Аноним 10/01/19 Чтв 19:17:55 #856 №1324485 
>>1323908
>UNREGISTERED
>Windows XP
>это нелепое замазывание струйкой
Это просто комбо какое-то
Аноним 10/01/19 Чтв 20:16:54 #857 №1324506 
>>1324485
Тебя не должно ебать кто на чём пишет.
Аноним 10/01/19 Чтв 21:04:08 #858 №1324518 
>>1305368 (OP)
https://github.com/asdasdasdasddasasdasdas/StudentList
Оп чекни мой список студентов
Аноним 10/01/19 Чтв 22:53:23 #859 №1324642 
>>1324506
И правда забавное замечание у этого.
>>1324506
Аноним 11/01/19 Птн 00:51:49 #860 №1324695 
>>1324266
Это ведь стандартный хостинг с доступом только к публичной папке.
Аноним 11/01/19 Птн 00:53:59 #861 №1324697 
>>1324267
>в задаче написано, мол, если длина меньше 10, то в конец добавить символ "о", чтобы длина стала 12.
Вообще тебя не понял. Ну удали лишние символы. Всё равно решение подходит для задачи.
Аноним 11/01/19 Птн 01:05:16 #862 №1324707 
>>1324326
Вот из-за таких разрабов хром сжирает к хренам по 2-3 гига оперативы загружая какой-нибудь фэйсбук. И заставляя Крузис тихонько курить в сторонке. Ну подумаешь цикл лишний раз прикрутил туда, где он просто нафиг ненужен. "Чё мозги ебать". Правильно. Говнокодьте и не думайте головой. Зачем это в 2019?
Аноним 11/01/19 Птн 02:12:19 #863 №1324725 
>>1324485
>UNREGISTERED
Ну не хочу я платить за то, чем можно пользоваться бесплатно. Тебе-то какое дело?

>Windows XP
Что плохого в хрюше?

>это нелепое замазывание струйкой
Это распылитель, даун тупой.
Аноним 11/01/19 Птн 02:40:59 #864 №1324729 
>>1324725
Двачую, XP - лучшая ось эвар.
Аноним 11/01/19 Птн 10:13:38 #865 №1324813 
Есть кто не смог осилить задачку с банкоматом и это не помешало стать пхп-сеньором 300к?
Аноним 11/01/19 Птн 10:17:14 #866 №1324817 
>>1324813
Лол, нет конечно. Все, что у опа представлено для обучения - должно с легкостью щелкаться нормальным джуном, не говоря о сеньорах.
Аноним 11/01/19 Птн 10:23:02 #867 №1324818 
>>1324817
Ну пездос вы тут гении тогда, если и тут нужно разбираться в таких сложных вещах, а кто-то еще макаками кличет
Аноним 11/01/19 Птн 11:48:31 #868 №1324849 
>>1324813
>стать пхп-сеньором 300к
Ты хотя бы джуниором стать. Неразумно делить шкуру еще не убитого медведя. Сколько вас таких.
Аноним 11/01/19 Птн 11:55:24 #869 №1324854 
>>1324849
Да это шуточки
Просто приуныл от задачки, что такой непосильной показалась