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

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

 Аноним 19/10/18 Птн 22:29:51 #1 №1281608 
15376956868120.png
15376956868121.jpg
15376956868142.jpg
15376956868163.jpg
Добро пожаловать в клуб востребованных и незаменимых людей.

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

Тут мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки, печем печенье и даже делаем простые сайты! Зачем? Кто-то хочет изменить мир, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

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

Предыдущий тред был тут: >>1268753 (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? — Да, однозначно. Посмотри любую вакансию.
Аноним 19/10/18 Птн 22:30:58 #2 №1281610 
15376958125050.jpg
15376958125071.png
>>1281608 (OP)
В прошлом треде >>1268753 (OP) все проверено - зайдите и найдите свой пост и скорее всего на него есть ответ. Если я кого-то пропустил, напомните о себе тут.

---

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

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

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

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

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

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

PSR-1: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-1-basic-coding-standard.md
PSR-2: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md
Аноним 19/10/18 Птн 22:55:27 #3 №1281620 
В прошлом треде не успел задать все вопросы по поводу своего выполнения задания про палиндром - http://codepad.org/7N715LEE

Можно ли ещё какие либо другие действия сократить с кучи строк до одной команды или ещё как то? Особенно мне не нравится 21-22 строка, но другого решения я на тот момент не нашел.

Заранее спасибо.
Аноним 19/10/18 Птн 22:57:48 #4 №1281622 
>>1281620
Запихнуть описания этих переменных в условие if
И пробелы убрать готовой функцией в пхп
Аноним 20/10/18 Суб 03:16:21 #5 №1281663 
Вопрос такой, нахожусь в самом начале пути в программировании. Хочу выучить питон, но я так понимаю к питону нужно подходить с какой то базой в виде htlm/css ну и так далее. ВОПРОС, стоит ли учить php перед питоном, будет ли мне легче потом или наоборот я засру мозги хуевым языком (многие так говорят) и мне будет сложнее перестроится. Может быть есть срединный путь, например ознакомиться с языком поверхностно. И еще такой вопрос, стоит ли налегать на информатику для укрепления фундамента, ну там всякие нули/единицы, булева алгебра итд, или это все придет в процессе?
Аноним 20/10/18 Суб 08:13:29 #6 №1281694 
ОП, посмотри, пожалуйста, 13 задача по HTML/CSS

https://github.com/deadj/deadj.github.io
deadj.github.io
Аноним 20/10/18 Суб 08:30:41 #7 №1281696 
>>1281663
>Эй макаки! Если я тут с вами говна поем, я таким же пидором как вы стану? Может быть есть срединный путь, например полизать говно поверхностно?
Аноним 20/10/18 Суб 08:39:56 #8 №1281697 
>питонобыдлу опять жопу разрывает
Не надоело? ЖС-тред засрали, ПХП-тред засрали, что следующее?
Аноним 20/10/18 Суб 08:57:39 #9 №1281701 
>>1281696
Я к тому что вдруг по работе потом встречусь с пхп и нихуя не пойму, а мне скажут ты че лах чтоле не понимаешь)) иди нахуй отсюда. Я пока не вдупляю что нужно знать обязательно а что нет. Понятно что все знать невозможно. А насчет макак не мне судить с моим уровнем знаний, я пока даже до макаки не дорос.
Аноним 20/10/18 Суб 09:00:41 #10 №1281702 
>>1281697
Оскорблять кого то не хотел, глупо споря о языках скатываться до оскорблений.
Аноним 20/10/18 Суб 09:06:41 #11 №1281707 
>>1281663
> php перед питоном
Нет.
>булева алгебра итд,
Походу дела освоишь.
Для сайтов на джанго мат. не нужна.
Аноним 20/10/18 Суб 09:11:16 #12 №1281709 
1497998043177.png
Учи руби, он самый лучший.
Только на нем вакансий нет.
Аноним 20/10/18 Суб 09:33:24 #13 №1281715 
Можно ли где где-нибудь найти документация к симфони в менее вырвиглазном виде, чем у них на сайте?
Аноним 20/10/18 Суб 10:30:36 #14 №1281720 
>>1281715
Видосики от от knpuniversity ?
Аноним 20/10/18 Суб 10:33:26 #15 №1281721 
>>1281720
Меня тошнит от рекламы пхпсторма и их тупого юмора. Я уж лучше глаза себе ломать буду.
Аноним 20/10/18 Суб 10:40:08 #16 №1281726 
1492378203437.gif
Если я скажу, что у меня виндовс 10 дома, на собеседовании обоссут? Может, стоит на арч вернуться?
Аноним 20/10/18 Суб 10:48:50 #17 №1281727 
>>1281726
Очевидный ляликс очевиден.
Аноним 20/10/18 Суб 10:52:30 #18 №1281729 
>>1281727
А арч теперь не ляликс?
Аноним 20/10/18 Суб 12:04:49 #19 №1281741 
>>1281721
Просто сьеби
Аноним 20/10/18 Суб 12:12:48 #20 №1281744 
Анон, сделал тестовое. Попросили залить в сеть.
Ебусь heroku.com .Уже сил моих нету.
Какая есть альтернатива php+mysql + бесплатный домен
Аноним 20/10/18 Суб 12:18:15 #21 №1281745 
>>1281741
Любитель дегенератских шуточек?
Аноним 20/10/18 Суб 12:18:16 #22 №1281746 
>>1281744
ngrok + отсутствие перебоев в элекросети
Аноним 20/10/18 Суб 12:27:21 #23 №1281749 
>>1281726
Покажи виртуалку с настроенным серваком на debian.
Аноним 20/10/18 Суб 19:21:33 #24 №1281895 
ОП совсем убежал да?
Аноним 20/10/18 Суб 22:01:20 #25 №1281936 
>>1281895
Если этот тред сделать платным, может ОП тогда не будет убегать?
Аноним OP 20/10/18 Суб 23:25:27 #26 №1281952 
>>1281936
Ели его сделать платным, то только ОП убегать и не будет.
Аноним 21/10/18 Вск 10:39:54 #27 №1282072 
Ребят, нужны прогнозисты.
Есть два стула, начать изучать JS, либо PHP, на какой сесть?
Где больше шекелей будут давать?
Аноним 21/10/18 Вск 11:20:31 #28 №1282088 
who is taller than anon.training.png
Попытался всё-таки сделать вторую задачку на массив. Можно ли сделать этот код короче и как?
Аноним 21/10/18 Вск 11:50:07 #29 №1282102 
>>1282088
Конечно. Но тут тебе нужны алгоритмы сортировочные. Самый приметивный - пузырёк. Но в твоём случае лучше алгоритм с вставкой. http://publicstatic.ru/sortirovka-vstavkoj-na-php/
Аноним 21/10/18 Вск 12:00:08 #30 №1282106 
>>1282088
Начинай уже думать глобально. А если у тебя человек 100 или 1000? А если у тебя рост отрицательный?
Аноним 21/10/18 Вск 12:09:44 #31 №1282109 
>>1282106
> у тебя рост отрицательный

Нахуй ты из него ёбаного QA делаешь, пидор?
Аноним 21/10/18 Вск 12:28:13 #32 №1282113 
3912048104801.jpg
>>1282088
Аноним 21/10/18 Вск 12:38:50 #33 №1282117 
>>1282088
Не понимаю, толсто это или правда. . . . .
Аноним 21/10/18 Вск 12:44:51 #34 №1282123 
>>1282088
как так получилось, что в переменную нумбер набралось 8, если внутри цикла прохода по массиву все эти составляющие? разве не должно было получиться 8 * (кол-во элементов в массиве)?
Аноним 21/10/18 Вск 12:51:10 #35 №1282125 
>>1282123
Он обнуляет переменную в начале цикла.
Аноним 21/10/18 Вск 13:07:52 #36 №1282128 
>>1282088

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

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

Для начала, попробуй стереть все внутри foreach, кроме echo. Ты понимаешь, как работает этот код и что он выведет?

После этого, попробуй сделать в цикле такой код:

если (рост текущего ученика выше анона)
то увеличить number на 1

А после цикла выведи, чему равно number.

Если что-то непонятно - уточняй.
Аноним 21/10/18 Вск 13:11:18 #37 №1282133 
>>1282123
Выучи русский язык, олень ты малолетний. В одной итерации цикла может быть столько условий на сколько хватит ОЗУ+swap.

Переменная нумбер имеет значение 8, потому что 8 рыл выше коротышки анона.
Аноним 21/10/18 Вск 13:39:32 #38 №1282148 
>>1282125
Точно!
Не заметил.
Аноним 21/10/18 Вск 14:03:52 #39 №1282165 
Есть ли смысл погружаться в асинхронный пхп с евентлупами (реакт-пхп/свул/пхп-пм и тд), либо сразу вкатываться в го?
Аноним 21/10/18 Вск 14:22:35 #40 №1282175 
>>1282165
Сразу в го, у пхп с асинком нет будущего, к сожалению.
Аноним 21/10/18 Вск 14:56:30 #41 №1282197 
>>1282165
Если тебе нужна только ассинхроннось, то имеет смысл поковырять РеактПХП или только прототип накидать.

А так лучше Го или Джаву.
Аноним 21/10/18 Вск 16:21:51 #42 №1282297 
Как это должно было быть.png
>>1282128
Я уже было исправил согласно >>1282113.
Аноним 21/10/18 Вск 16:33:55 #43 №1282306 
>>1281608 (OP)
Подскажите пожалуйста, мб не туда смотрю, вроде был список сделанных списков студентов.
Я уже спрашивал, но нифига не понял как сделать много гет-параметров, хотел бы подсмотреть как другие люди решали мой вопрос.

Допустим я искал студента по фамилии Иванов и сейчас у меня в адресной строке: index.php?search=Иванов
И я хотел бы чтоб кнопка сортировки (например по баллам) тогда имела внутри ссылку на index.php?search=Иванов&sort_by=grades, а если ничего не искал то index.php?sort_by=grades.

Я в twig нашел как засунуть в href текущий url {{ app.request.query.all }}, но как туда добавлять что-то вообще не понимаю, и не гуглится нихрена, и документацию twig почитал нихрена не вижу, я может вообще не с той стороны подхожу?
Аноним 21/10/18 Вск 17:05:44 #44 №1282322 
>>1282306
Скорее не с той стороны всё-таки.
У тебя есть какой-то набор параметров, по которым происходит выборка из базы (например, тебе нужны 20 студентов с фамилией "иванов", отсортированных по имени). Тогда набор параметров будет представлять собой объект с подобными полями:
{order_by: "name", search: "иванов", page: 1, perpage: 20}
Этот объект можно передавать на фронт с бэка, чтобы знать текущее состояние выборки на фронте и по нему строить другие запросы к бэку (например, изменить страницу с первой на вторую). Его же можно передавать get-параметрами (удобнее всего - в обычном джсоне одним параметром), либо в теле post-запроса, и обрабатывать его на бэке (в соответствии с ним построить запрос к базе). Такой подход гораздо гибче ковыряния в request query (тем более в шаблоне).
Аноним 21/10/18 Вск 21:42:30 #45 №1282462 
>>1282306
вырвать руки или ебать тебя в жопу.

сделай форму к странице, сохрани там все варианты
<form>
<input type=hidden name=search value="ivanov">
<input type=hidden name=order value="grades">
<input type=hidden name=page value="1">
</form>

далее делаешь жабаскрипт при клике на ссылку, которая соберет твои данные, типа
$.post("prettyurl.php",{"search": $("input[name=search").val(), "order": $("input[name=search").val()}, function(data){ alert(data);});

году в 2005м закончили с этой ебаторией и генерацией ссылок для пейджеров из php, генери на фронте все ссылки


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

someApprentice 22/10/18 Пнд 00:48:23 #46 №1282527 
Напомню про свой пост в прошлом треде >>1279602

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

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


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

Я набросал небольшой код, как это примерно будет работать:

https://codepen.io/anon/pen/ePjNLP?editors=0010

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

1) При иницилиазации приложения определять текущий роут и запустить привязанный к нему компонент (в моем случае запустить у компонента метод run() ).

2) При переходе по роутам, очищать страницу, отрисовывать компонент и запускать его.

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

И у меня есть один не большой вопрос... Сейчас, при создании роутера, мы передаём экземпляр компонента, и каждый раз, когда мы инициализируем соответствующий этому экземпляру роут, вызывается метод run() этого компонента, и если в нём есть подписка на какое-то событие (DOM или RxJS Observable), то при переходе на другой роут эта подписка не отмениться, и, что хуже того, при возвращении на этот же роут, повеситься ещё одна такая же подписка. Я должен написать, например, метод stop() или в ES6 есть какой-то трюк для этого?


Кстати, для рендера можно и React использовать.


Back to the god damn jQuery
Аноним 22/10/18 Пнд 07:17:12 #47 №1282560 
>>1282527
Берешь фреймворк, назначаешь на роуты компоненты, в компонентах подписываешься на хуки : onInit/onDestroy
Аноним 22/10/18 Пнд 13:14:23 #48 №1282626 
>>1282462

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

Также, в твоем коде нет индикатора загрузки и обработки ошибок, советую почитать мой урок про аякс: https://github.com/codedokode/pasta/blob/master/js/ajax.md

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

>>1282306

Списка нет, но можно на гитхабе поискать по student list.

> Я в twig нашел как засунуть в href текущий url {{ app.request.query.all }}

Это для фреймворка Симфони, а не для Твига. В Симфони в шаблон передается глобальная переменная app, которая содержит много всяких полей. Это немного нарушает разделение ответственности в MVC, если view может так спокойно залезть в параметры запроса (хотя и сокращает код).

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

Вот вариант решения: сделать функцию, которая будет принимать на вход текущее значение параметров (сортировка, поиск итд), название колонки и выдавать ссылку для нее:

function generateSortLink($viewParams, $column): string

Это может быть функция, метод, статических метод (паттерн Utility Class), функция-расширение twig. Она определяет по названию колонки и текущей выбранной колонке направление сортировки, собирает параметры и генерирует ссылку, например, с помощью http_build_query.

Что такое $viewParams? Это текущие параметры вывода таблицы, их конечно можно сделать массивом, а можно сделать классом с комментариями:

class TableFilter
{
public $searchPhrase;
public $sortBy;
public $sortDir;
public $page
}

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

Аналогично, для пагинации можно написать похожую функцию:

function generatePagerLink(TableFilter $viewParams, int $page): string

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

function generateTableLink(TableFilter $currentParams, array $replace): string

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

Теперь затронем тему аякса и JS. В страницу можно встраивать код на JS, который может сам отправлять запросы на сервер аяксом и вставлять результат на страницу без ее перезагрузки. Если ты разбираешься или интересуешься JS и хочешь сделать обновление таблицы без перезагрузки, то есть довольно интересная библиотека pjax. Она перехватывает клики по ссылкам, запрашивает указанную в ссылке страницу аяксом и вставляет ее в указанную область страницы. Таким образом ты можешь сделать страницу, работающую без JS, а затем в соответствие с принципом progressive enhancement, для пользователей с JS добавить возможность работы без перезагрузки страницы. И это все - почти без написания JS кода.

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

При этом будет корректно работать кнопка "назад" и обновляться URL в браузере.

Если что-то еще непонятно - задавай вопросы. Это обучающий тред.
Аноним 22/10/18 Пнд 13:16:02 #49 №1282628 
>>1282306

Если захочешь использовать pjax или просто аякс в любом виде, прочти пожалуйста сначала урок: https://github.com/codedokode/pasta/blob/master/js/ajax.md
Аноним 22/10/18 Пнд 15:18:54 #50 №1282687 
>>1279602

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

Потому, что это на практике очень плохо будет работать. Разработчик добавляет новую фичу в JS-версию. Не забудет ли он добавить ее в PHP-версию? Или исправление бага. Плюс, удваиваются затраты времени. Дублирование кода - почти всегда плохо. Если же код не дублировать, то такие ситуации, когда 2 версии кода работают по-разному, сразу исключаются.

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

Конечно, бывают случаи, когда это оправданно. Например, фейсбук делал легкую HTML версию для слабых телефонов. У Gmail есть легкая версия. У фейсбука это полностью отдельное приложение. Раньше многие сайты делали мобильную версию отдельными контроллерами и шаблонами.

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

Если и делать PHP версию, то максимально простую. Ведь цель - слабые устройства с ограниченным трафиком. Но тогда придется делать ее на отдельном URL (https://messenger/h/), к ней не получится прицепиться из реакт-приложения (да и если она выглядит по-другому, то пользователя не обрадует внезапная смена внешнего вида в процессе загрузки).

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

Да, действительно. Обработчик, может быть, придется писать отдельно. Но у меня была мысль, нельзя ли сэкономить на написании шаблона и кода для отображения данных (view). Чтобы и на сервере, и на клиенте страницу рисовал один и тот же код.

Кстати, в классическом HTML надо бы добавить в форму уникальное число - nonce - для защиты от случаев, когда плохая связь и пользователь несколько раз отправляет форму с сообщением.

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

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

> +Сверх быстрая отрисовка DOM
Ой-ой. "Быстрый" в реакте - это значит "быстрый в сравнении с другими фреймворками, делающими сравнение деревьев DOM", а не быстрее любых JS библиотек.

Но реакт имеет еще плюс в том, что есть React Native - это для написания нативных приложений (в первую очередь мобильных), где ты пишешь код на JS, но без HTML/CSS, вместо них ты используешь нативные для платформы виджеты (кнопки, текстовые блоки и тд).

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

Я погуглил и нашел это: https://reactjs.org/docs/react-dom-server.html - если ты используешь то же самое приложение на сервере, то думаю, что можно:

> If you call ReactDOM.hydrate() on a node that already has this server-rendered markup, React will preserve it and only attach event handlers, allowing you to have a very performant first-load experience.

> 2) PHP (Symfony) + нативное ES6 приложение на фронтенде
И еще там больше работы в сравнении с реакт.

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

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

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

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

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

Это есть и в реакт, и в ангулар. Чтобы это реализовать, страницу надо генерировать на сервере из того же шаблона тем же приложением. Из двух я бы выбрал реакт из-за популярности и наличия React Native.

> Если сократить, то вопрос будет простым - может ли React подхватывать HTML страницу и вешать на неё JS?
Да. https://reactjs.org/docs/react-dom-server.html
Аноним 22/10/18 Пнд 15:19:26 #51 №1282689 
>>1282527

> Я набросал небольшой код, как это примерно будет работать:
> https://codepen.io/anon/pen/ePjNLP?editors=0010

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

> $('.feed ul').
Тут кстати должен быть поиск не по всей странице, а относительно корня компонента.

> Нужно писать приложение на ES6, поскольку, я боюсь, что готового решения, для подхвата отрендеренной страницы и дальнейшей работы как SPA приложения просто не существует

Реакт и ангулар же вроде умеют это.

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

Не может быть такого. Наверняка есть такая возможность.

> Сейчас, при создании роутера, мы передаём экземпляр компонента, и каждый раз, когда мы инициализируем соответствующий этому экземпляру роут, вызывается метод run() этого компонента, и если в нём есть подписка на какое-то событие (DOM или RxJS Observable), то при переходе на другой роут эта подписка не отмениться

Да, надо делать "жизненный цикл" компонента, предусмотреть в нем метод detach(), и гарантировать его вызов перед удалением компонента из дерева DOM. И, конечно, вызывать detach() у всех дочерних компонентов. А уже в этом методе мы отменяем подписку на события и все остальное.

В Реакте это делается за счет метода componentWillUnmount: https://reactjs.org/docs/state-and-lifecycle.html#adding-lifecycle-methods-to-a-class
someApprentice 22/10/18 Пнд 18:10:13 #52 №1282804 
>>1282687
>>1282689

Спасибо за ответы - у меня теперь не возникает сомнений на чем и как писать.

>Ведь цель - слабые устройства с ограниченным трафиком.
Моя цель изначально была сделать поддержку приложения с отключенным JS, потому что по версии Tor Project это повысит безопасность (https://www.torproject.org/docs/faq.html.en#TBBJavaScriptEnabled).

>On the other hand, we should disable JavaScript by default to better protect against browser vulnerabilities ( not just a theoretical concern!).


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


>Но у меня была мысль, нельзя ли сэкономить на написании шаблона и кода для отображения данных (view). Чтобы и на сервере, и на клиенте страницу рисовал один и тот же код.
Да, я теперь вижу эту точку зрения. Для этого нужно писать серверную часть на Node.js. Это может занять ещё какое-то время.


Спасибо большое за ответы, ещё раз.
someApprentice 22/10/18 Пнд 18:21:00 #53 №1282816 
>>1282687
* Забыл написать

>В нашем случае еще и немного ухудшается безопасность, идеальнее было бы расшифровывать сообщения только на клиенте.
Я тоже думал об этом, и мне пришла в голову мысль, что обычные чаты шифруются более просто, а для GPG использовать особые "секретные чаты" как в телеграмме, которые будт работать только с включенным JS или в нативных приложениях. Причем можно добавить функцию, чтобы пользователь мог сам загружать свои приватные/публичные ключи. Хранить приватные ключи на сервере, конечно же плохая идея, даже если они зашифрованы паролем.
Аноним 22/10/18 Пнд 20:19:19 #54 №1282918 
>>1282816

А, кстати, я вспомнил, есть интересный мессенджер Tox - он работает вообще без серверов, за счет DHT сети (как в торрентах) и прямых соединений между клиентами. И тоже все шифрует. Может еще из него можно какие-то идеи подчерпнуть.
Аноним 22/10/18 Пнд 20:20:24 #55 №1282922 
>>1282816

Такие компромиссы не очень хорошие, приложение либо надежно, либо нет. В твоем варианте, те, кто использует секретные чаты, будут выделяться среди пользователей и привлекать внимание.
Аноним 22/10/18 Пнд 21:04:03 #56 №1282950 
1520770236141.gif
Таки линукс творит чудеса - только установил, сразу две конторы пригласили на жуниора поболтать. А я ведь даже симфони не доучил.
Аноним 22/10/18 Пнд 21:35:29 #57 №1282975 
>>1282950
Это всё из-за аниме.
someApprentice 22/10/18 Пнд 22:08:24 #58 №1282992 
>>1282918
Помню-помню что вы писали об этом. У меня всё это отмечено и будет изучено когда дойдёт очередь.

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

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

Или просто хранить приватный ключ зашифрованный паролем на сервере. Но мне такая идея просто не нравится, хоть у меня и нету весомых причин для этого, кроме той, что если пароль от приватного ключа слишком простой, то его можно просто брутфорснуть (но это вина пользователя что он имеет слабый пароль).
Аноним 22/10/18 Пнд 23:25:31 #59 №1283020 
Как перестать прокрастинировать и сделать наконец тестхаб?
Аноним 22/10/18 Пнд 23:49:48 #60 №1283040 
>>1281663
>ВОПРОС, стоит ли учить php перед питоном
Если чтобы потом кодить на питоне - нет, конечно. Это примерно как научиться ездить на тракторе, чтобы потом ездить на легковушке: php и сам по себе-то в разы сложнее питона, а если наворачивать что-то кроме кора, то это у тебя растянется на полтора года. Опять же, изучать только кор, в отрыве от домена применения - бесполезно, писать какие-то скрипты в разы проще на удаве, да и приятнее, да и либок навернуто с миллион на каждую тему.

ОП, скинь эталонную (на твой взгляд) реализацию списка студентов. Можешь?
Аноним 23/10/18 Втр 00:09:14 #61 №1283051 
>>1283020
Оп, знаю что занят. Но глянь моих студентов:
https://github.com/Awesome-Kirill/fukingStudent
>>1283020
Я к выходным первую версию своего ТестХаба выложу
Ничего сложного, без задней мысли берешь и делаешь
Аноним 23/10/18 Втр 00:19:25 #62 №1283057 
что лучше выбрать
Аноним 23/10/18 Втр 00:47:06 #63 №1283071 
>>1283057
Вилку
Аноним 23/10/18 Втр 11:25:26 #64 №1283247 
>>1283071
я бы попу выбрал
Аноним 23/10/18 Втр 13:27:49 #65 №1283303 
Какое же глючное говно этот атом, гитхаб явно самых лютых говнокодеров для него созвал. Лучше бракетсы с майнерами из АУРа установлю. Или есть что лучше на линукс для ПХП?Emacs не предлагать.
Аноним 23/10/18 Втр 13:47:04 #66 №1283312 
>>1283303
>Что либо, кроме полноценной ide для кодинга
Аноним 23/10/18 Втр 14:03:37 #67 №1283318 
>>1283312
>полноценной ide
Я не хочу ждать две минуты после набора каждого символа.
Аноним 23/10/18 Втр 14:27:45 #68 №1283331 
>>1283303
PhpStorm
Аноним 23/10/18 Втр 14:48:47 #69 №1283347 
1504104438524.gif
>>1283331
Аноним 23/10/18 Втр 14:58:04 #70 №1283350 
image.png
image.png
Джуны и вкатывалщики. Учитесь хорошо. Слушайте ОПа. И не делайте такое говно никогда.
Аноним 23/10/18 Втр 15:15:13 #71 №1283361 
>>1283347
Анимешник, опять ты? Пыхошторм === профессиональный стандарт.
Аноним 23/10/18 Втр 15:15:51 #72 №1283362 
>>1283350
Работаете над cpa-сетью?
Аноним 23/10/18 Втр 15:47:46 #73 №1283377 
42947868p0.jpg
>>1283361
Для тех, у кого есть деньги.
Аноним 23/10/18 Втр 15:49:32 #74 №1283379 
>>1283350
Вкатыватьщик на стажировку ИТТ, постараюсь.
Аноним 23/10/18 Втр 15:52:47 #75 №1283382 
аноны, а поясните за функции, что-то я понять это задачу не могу с 3 разными кредитами, как на ideone.com запустить функцию то?
Аноним 23/10/18 Втр 16:06:24 #76 №1283394 
>>1283303

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

kate, gedit - простые редакторы с подсветкой.

vim/emacs если ты любишь нестандартные сочетания клавиш

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

Аноним 23/10/18 Втр 16:17:09 #77 №1283400 
Почему Симфони до сих пор использует неймспейсы вместо автозагрузки?
Аноним 23/10/18 Втр 17:00:33 #78 №1283419 
>>1283377
Крякни!
Аноним 23/10/18 Втр 17:29:59 #79 №1283437 
>>1283419
Кря!
Аноним 23/10/18 Втр 17:32:22 #80 №1283440 
>>1283377
Есть же EAP
Аноним 23/10/18 Втр 18:07:20 #81 №1283470 
>>1283440
Он сейчас поломан на ауре.
Аноним 23/10/18 Втр 18:31:19 #82 №1283496 
>>1283437
Абракадабра!
https://www.jetbrains.tools/d/4-how-use-activation-code
Аноним 23/10/18 Втр 19:49:35 #83 №1283541 
screencapture-docs-google-document-d-1pnLJz2gnDgPjvLwEmWGDA[...].png
Чет работодатели дают задачи даже легче студентов. Ну хоть Doctrine изучу попутно.
Аноним 23/10/18 Втр 21:16:15 #84 №1283591 
>>1283541
Ростов?
Аноним 23/10/18 Втр 21:26:10 #85 №1283598 
>>1283591
Почти.
Аноним 24/10/18 Срд 02:03:02 #86 №1283658 
мы тут таких не любим.jpg
>>1283437
найди старый активационный код, а после добавь сервер активации в блок ( hosts -> 0.0.0.0 )

сервер активации еще надо найти рабочий, они как то долго не живут.


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

>>1283350
ты удивишься, но так написано 90% прожектов. почти каждый раз случается:
1. да ладно, мне дружбан вася за пиво напишет
2. надо кого на 300 баксов нанять, хотя бы удаленно, вася послал нахуй с обновлением
3. биз прет и мы нанимаем разработчика в штат, но подешевле. какой дурак нанимает разработчика за 500к дерева, когда и за 30 сделают тоже самое.

profit !!
Аноним 24/10/18 Срд 08:58:02 #87 №1283698 
>>1283496
Лайк. рабочий способ
Аноним 24/10/18 Срд 10:36:22 #88 №1283708 
Омг, Анон, я смог написать эту ебучую функцию с 3 банками. может кто-нибудь глянуть и сказать, насколько код ущербен? https://ideone.com/B0PT91
CMS Аноним 24/10/18 Срд 10:51:18 #89 №1283713 
Как я блядь ненавижу CMS'ки!
Нахуй существует это говно вообще блядь?
Оно никогда не работает. Не соответстует своей доке. Чтобы чтото там сделать необходимо писать костыли и т.д.

Заставили создать страницу на какомто новом говне - Тридион. Блядь я бы на 3х языках сайт уже переписал пока разбираюсь
Аноним 24/10/18 Срд 11:06:30 #90 №1283716 
1480192928409.jpg
>>1283541
>задание на вакансию пхп-макаки
>90% работы в задании - фронтенд
Гениально.
Аноним 24/10/18 Срд 11:09:52 #91 №1283718 
>>1283708
Зачем ты присваиваешь результат выполнения функции переменным и пытаешься его вывести, если у тебя весь вывод информации осуществляется в функции? Алсо, ставь пробелы между параметрами функции, после управляющих конструкций и перед кавычками, изучи psr-2 хотя бы в рамках описания уже известных тебе языковых конструкций, если хочешь чтобы твой код можно было нормально прочесть.
Аноним 24/10/18 Срд 11:18:23 #92 №1283720 
>>1283718
>Алсо, ставь пробелы между параметрами функции, после управляющих конструкций и перед кавычками, изучи psr-2 хотя бы в рамках описания уже известных тебе языковых конструкций, если хочешь чтобы твой код можно было нормально прочесть.
>
Благодарочка, исправлюсь. А присваиваю, потому что иначе почему-то ideone не хочет выводить ответ, и output будет пуст
Аноним 24/10/18 Срд 11:29:10 #93 №1283722 
1474571634372.jpg
Доктрина импортила мне настроение. Работа с БД - моя любима тема, а ORMы ее, получается, практически полностью берут на себя, а мне только энтити остается гет/сетить.
Аноним 24/10/18 Срд 11:31:46 #94 №1283724 
>>1283716
Двачую. Укатываюсь из ПХП, только потому что я хочу работать с сервером, а не адаптивной говноверсткой заниматься
Аноним 24/10/18 Срд 13:42:00 #95 №1283790 
>>1281608 (OP)
есть проблема , прошу анона помочь.

Есть свой сайт, ПХП поддерживает, скрипты ПХП уже есть свои и все работают, то есть технически все в порядке.

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

https://myrusakov.ru/php-curl-post.html

Создаю 2 файла, пытаюсь выполнить код, что в примере

<?php
$a = $_POST['a'];
$b = $_POST['b'];
echo $a + $b;
?>

и второй

<?php
if( $curl = curl_init() ) {
curl_setopt($curl, CURLOPT_URL, 'http://mysite.ru/receiver.php');
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "a=4&b=7");
$out = curl_exec($curl);
echo $out;
curl_close($curl);
}
?>


Понятно, название сайта свое, он выдает ошибку 301 Moved Permanently. Гуглил как испавить, судя по всему такая ошибка возникает не редко. Догуглился до того что вставил

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

теперь он уже не показывает ошибку 301 ,а показывает пустаю страницу. Если открыть файл receiver.php то цифра ноль и все.

Скажите пожалуйста, как заставить эту хуйню работать. Спасибо
Аноним 24/10/18 Срд 14:28:59 #96 №1283815 
>>1283318
Зато будешь тратить несколько дней на рефакторинг и дебагинг (если конечно это реальный проект, а не манясайт на локалхосте) вместо нажатия пары клавиш.
Аноним 24/10/18 Срд 14:41:52 #97 №1283824 
>>1283724
У меня вот на нынешней работе исключительно бэкенд. Так что я даже задачки опа хз как решать, потому что всякие хтмл и жс вообще не знаю.
Аноним 24/10/18 Срд 15:36:01 #98 №1283843 
>>1283790
Непонятно, как у тебя вообще может вернуться 301 - потому что это не ошибка, а ответ-редирект. Грубо говоря, сервер говорит браузеру "301: иди вон туда ->>>>".
Выставив же CURLOPT_FOLLOWLOCATION ты просто прошёл по адресу.
Вангую, что твой запрос летит просто не на тот скрипт.
Поэтому посмотри заголовки ответа, тебе должен прийти заголовок Location - это скорее всего даст тебе ответ, кто именно тебя редиректит и куда.
Аноним 24/10/18 Срд 18:20:54 #99 №1283903 
>>1283303
пхпсторм, тк есть под все языки
Из бесплатного эклипсе
я PHP говнарь, задовайте ответы. Мамкаёб 4000 24/10/18 Срд 21:10:58 #100 №1283979 
Не понимаю хейта на php. ясен хуй, что только им не обойдется. Но, используя sql и java, чем он плох? наговнокодил, показал, все ЩЩастливы...
Аноним 24/10/18 Срд 22:27:15 #101 №1284012 
>>1283303
NetBeans - годнота на самом деле, но придетс напильником поработать - чтото поднастроить, какие-то плагины накатить
Аноним 24/10/18 Срд 23:05:22 #102 №1284016 
>>1283541
можешь в тред скинуть решение, интересно что у тебя выйдет.
или напиши в тг @korts
Аноним 24/10/18 Срд 23:50:14 #103 №1284027 
Посоны, как пыха то, жива? Нужно чем то зарабатывать дополнительную денежку пока сижу на основной работе. Сейчас рисую всякие макеты сайтиков, но пизданутые заказчики уже настаебали. Пишу простенькие скрипты на питоне для внутреннего использования, с ооп знаком
Аноним 25/10/18 Чтв 02:51:24 #104 №1284071 
Дружки пирожки, нужна ваша помощь:

Дано много блогов на WP с установленным плагином, этот плагин имеет API с кучей эндпоинтов.
Есть сайт, с веб сервера которого нужно делать запросы к блогу на эти эндпоинты.
Как обезопаситься да так, чтобы инициация была только со стороны веб сервера, а не вордпресса? То есть тупо в плагине же я не могу хранить user:password которые буду сравнивать с пришедшими с запросом из веб-сервера, как быть?
Сгенерить токен при инсталле плагина, сохранить его, а потом передать на веб-сервер я тоже не могу, потому что инициатор всех действий - веб сервер.
Какие еще есть варианты?
Аноним 25/10/18 Чтв 02:51:40 #105 №1284072 
>>1281701
ты либо пойдешь в контору с пхп, либо с питоном. вряд ли там будут оба бекенд языка использоваться.
Аноним 25/10/18 Чтв 02:54:12 #106 №1284073 
>>1282072
на жс чуть больше в снг секторе из-за его хайповости, особенно если ты фуллстек нода + реактом
Аноним 25/10/18 Чтв 03:24:40 #107 №1284078 
>>1283979
зачем тебе жаба?
Аноним 25/10/18 Чтв 03:25:31 #108 №1284079 
>>1284027
беру джангу, пили круды
Аноним 25/10/18 Чтв 03:49:54 #109 №1284087 
>>1283843
А не может сервер его футболить из-за отсутствия нужных заголовков, типа наличия версии браузера и прочего ливера? Ну, вроде как защита от ботов такая?
Аноним 25/10/18 Чтв 11:01:53 #110 №1284165 
>>1283843
спасибо за ответы.

Ошибку 301 он после проставления CURLOPT_FOLLOWLOCATION уже не выдавал, там просто нихуя не происходила , пустая страница.Интересно как это понимать? В коде вроде ошибок нет, да я его и тупо копировал.

А если CURLOPT_FOLLOWLOCATION, то 301. Как-то так.

>>1284087
пробывал разными браузерами одно и то же
Аноним 25/10/18 Чтв 11:16:24 #111 №1284168 
68032202p0.jpg
Есть что хорошего почитать о том, как готовиться к собесам на пхп-мартышку? В перезвоним треде сплошь долбоебы и статьи для иностранного рынка.
редактирование документов Anton 25/10/18 Чтв 12:08:20 #112 №1284192 
Всем привет.
Есть задача. Редактировать документ онлайн.
По прямой ссылке обращаться нельзя.
Документы должны хранится на локальном сервере.
Какие варианты решения можете предложить?

P.S Хотелось бы бесплатный вариант на подобии webdav. Можно открывать документ средствами юзера, но что бы он потом сохранялся на сервер.
Аноним 25/10/18 Чтв 12:23:18 #113 №1284200 
>>1284192
Тебе в жс тренд.
Задачка Аноним 25/10/18 Чтв 12:45:39 #114 №1284215 
682HwXy8mSU.jpg
Добрый вечер, аноны. Сделал задачку из шапки, появился вопрос: возможно ли было сделать этот код компактней? У меня чувство, что я где-то проебался. Извиняюсь, если вопрос глупый, язык только начал изучать. Прикреплю код пикчей потому что я долбаеб потому что я сейчас на работе, а ебаный пхп меня почему-то очень увлек и я вместо сна решаю разные задачки. Как убегал не нашел ничего более логичного, чем сделать скрин и перебросить на телефон. Спасибо заранее.
Аноним 25/10/18 Чтв 13:14:56 #115 №1284231 
1540462497699.jpeg
Кто-то может простым языком пояснить зачем нужно внедрение зависимостей? :(
Аноним 25/10/18 Чтв 13:28:56 #116 №1284236 
>>1284231
Очевидно же.
Отсеивать вкатывальщиков вайтишников
Аноним 25/10/18 Чтв 15:57:32 #117 №1284307 
>>1284215
>возможно ли было сделать этот код компактней?
Возможно. если использовать не array(), а []
Аноним 25/10/18 Чтв 16:54:12 #118 №1284333 
>>1284215
Так как ты пишешь, обычно не делают. Есть (нестрогое) правило, что если в массиве больше 2-х элементов, его пишут в столбик, а не в строчку.
Ну и да, советую поставить phpstorm, настроить себе code style: psr-2, а потом вызвать автоформатирование проекта - увидишь как правильно.
Аноним 25/10/18 Чтв 16:54:16 #119 №1284334 
>>1284231

Давай попробуем начать со статьи https://github.com/codedokode/pasta/blob/master/arch/di.md

Или там недостаточно простой язык?

Для понимания статьи надо знать ООП.
Аноним 25/10/18 Чтв 16:57:32 #120 №1284336 
>>1284168
Читай статьи кайнд оф "вопросы к php-разработчику на собеседованиях" на хабре (ну и комментарии, ясен пень).
Ну и отдельно вопросы и мануалы по выбранному фреймворку.
Обычно, классика это внутренности php (типы, наследование, позднее статическое связывание), схема работы интернета (веб-сервер, всё такое), ООП-паттерны (нарисуй синглтон, т.п.) и базы данных (джоины, агрегации).
Аноним 25/10/18 Чтв 16:58:26 #121 №1284337 
>>1284165
Ещё раз, убери CURLOPT_FOLLOWLOCATION и скажи, что у тебя возвращается в заголовке Location?
Аноним 25/10/18 Чтв 17:13:51 #122 №1284347 
15362619406540.jpg
Помогите дураку сделать функцию, которая удаляет элементы массива, если они не целые числа ИЛИ состоят из менее 11-ти символов.
Аноним 25/10/18 Чтв 17:24:39 #123 №1284350 
58604162p0.jpg
>>1284336
>нарисуй синглтон
Надеюсь, фабрику рисовать не заставят.
Аноним 25/10/18 Чтв 18:04:39 #124 №1284374 
Почитал все эти статейки и понял, что мне надо не вопросы штудировать, а русскоязычные термины. Таки есть минус в чтении доков только на английском.
Аноним 25/10/18 Чтв 18:09:25 #125 №1284377 
>>1284333
Спасибо, попробую
>>1284307
Не знаю почему, но категорически не хочу учить себя этому упрощению, потому писал через array()
Аноним 25/10/18 Чтв 18:11:19 #126 №1284378 
Сил моих нет больше читать Зандстру, половину одолел уже тошнит. Есть что то не такое нудное по тем же темам ?
Аноним 25/10/18 Чтв 18:52:32 #127 №1284410 
>>1284378
>Зандстра
>нудно
Выкатывайся из программирования.
Аноним 25/10/18 Чтв 19:09:16 #128 №1284418 
>>1284347
Уже не нужно, сам сделал. Спасибо за помощь:3
Аноним 25/10/18 Чтв 20:53:26 #129 №1284492 
Здаров пацаны, я не кодер, пробую сделать элементарный Update Data In a MySQL Table.

Делаю запрос connfirmation.php?ordernum=123 но нихуя не работает, объясните долбоебу почему.

Connfirmation.php:

<?php

$ordernum=$_GET['ordernum']

require_once 'connection.php';

// подключаемся к серверу
$conn = mysqli_connect($host, $user, $password, $database);

if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

$sql ="UPDATE orders SET confirm='YES' WHERE Num='$ordernum'";

if (mysqli_query($conn, $sql)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($conn);
}

mysqli_close($link);

?>

Аноним 25/10/18 Чтв 21:40:14 #130 №1284524 
>>1284492
Что за ошибка возникает или какой ответ?

У тебя так же есть уязвимость к SQL-инъекциям. У нас есть паста как избежать её https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
Аноним 25/10/18 Чтв 21:41:04 #131 №1284525 
>>1284334
Благодарю! Потерял
Аноним 26/10/18 Птн 03:47:15 #132 №1284642 
>>1284378
Чувства тебя не обманывают, задрачивание паттернов, особенно в отрыве от практики тебе ничего особенно не даст, более того все без применения это довольно быстро забудется. Лучше почитать действительно важные книги вроде Совершенный код Макконнелла или чистый код Р. Мартина, sicp навернуть в конце концов. Это, конечно, только мое мнение но паттерны штука опциональная, которая изучается уже в процессе, а не нечто фундаментальное и необходимое. От того что начнешь всюду пихать абстрактные фабрики,код лучше и понятней не становится.
Аноним 26/10/18 Птн 09:09:01 #133 №1284692 
>>1284642
А потом такие дауны никуда не могут вкатится годами, потому что тратят все время на бесполезные для веба задачки, а фронт контроллер написать не в состоянии.
Аноним 26/10/18 Птн 12:02:19 #134 №1284761 
Есть одна так называемая бд написанная на фреймворке simfony. Есть одна покупная CRM, которая предоставляет api для импорта из самописного говна. Надо из самописаной базы вытащить данные и выгрузить их CRM. Про апи нихуя не знаю и даже не могу понять чего начать. Направьте на путь истинный
Аноним 26/10/18 Птн 17:44:48 #135 №1284922 
>>1284524
у меня небольшой шоп, вообще я вручную по мылу запрашиваю подтверждение о покупке, хотел немного автоматизировать процесс.

ошибок не возникает никаких, ответов тоже никаких, смотрю через консоль в firefox. В логах просто отправка запроса. Спс за ссылку, почитаю на досуге.
Аноним 26/10/18 Птн 22:48:16 #136 №1285057 
мы тут таких не любим.jpg
>>1284692

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

и я всегда с удовольствием смотрю на жжение ануса у заказчика, когда его модный и хваленый ленд переписывается и код занимает экран понятного кода, а не 20 классов прикрученных к симфони, которые ему писали месяц
Аноним 27/10/18 Суб 08:17:03 #137 №1285187 
>>1284922
>ошибок не возникает никаких, ответов тоже никаких
Возможно, у тебя отключен вывод ошибок в настройках php. Вот первая ссылка из гугла как их включить https://karashchuk.com/PHP/error_reporting-display_errors-display_startup_errors/

В крайнем случае ты можешь после каждой переменой выводить её значение с помощью var_dump().

https://secure.php.net/manual/ru/function.var-dump.php
Аноним 27/10/18 Суб 08:19:19 #138 №1285188 
>>1284922
>смотрю через консоль в firefox
Также, обрати внимание на код ответа (400 - ОК, 500 - Внутренняя ошибка сервера).
Аноним 27/10/18 Суб 08:34:02 #139 №1285189 
>>1285057
Чуствуется запашок проперженного дивана от твоего поста...
1) На практике ситуация диаметрально противоположная. Внезапно оказывается что у заказанного лендоса должен быть магазин, авторизация с ролями, управление заказами и так далее и так далее.
2) Заказчик никода не заглядывает в код. Ему побоку один там экран или 100500.
3) Вовремя ты никогда не напишешь потому, что четкое ТЗ , по крайней мере для мира пыхеров - это что то из области розовых пони.

Мимо
Аноним 27/10/18 Суб 12:17:06 #140 №1285223 
>>1285189
Согласен на 70%. Сразу наворачивать симфони и тридцать классов тоже - ещё одна крайность.
Мудрый разработчик выберет то, что при минимальных трудозатратах принесёт максимум пользы сейчас и в ближайшее время, но при этом будет расширяемо до более сложных вариантов по необходимости - и заранее предупредит заказчика.

Другой мимо
Аноним 27/10/18 Суб 12:19:09 #141 №1285224 
>>1284692
Спор не имеет смысла.
Очевидно, нужны и теория и практика, в комплексе.
Иначе это будет или заучивание бессмысленных концепций, или кодирование без понимания того, что ты делаешь и зачем.
Аноним 27/10/18 Суб 13:56:36 #142 №1285267 
>>1285189
вы забыли про:
4. оплата за ваш труд - 2 миски похлебки и мы подумаем платить вам или нет
5. а в последующем помимо управления заказами надо будет привязать все к битриксу, друпалу, водпрессу, настроить под поисковики и т.д. то чего почти все фреймворки не умеют из коробки
Аноним 27/10/18 Суб 19:30:46 #143 №1285489 
>>1284922

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

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

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

Ну и как тебе написал анон, на локальном сервере стоит включить вывод ошибок на экран, опциями display_errors и error_reporting в php.ini.

>>1285057

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

DI придуман не просто так, у меня, если что, есть урок про него.

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

>>1284761

Не очень понятно, чем именно можно тебе помочь. Если ты хотел спросить, что такое API, то вот советы:

- API это набор правилили стандартов для взаимодействия между программами
- тут скорее всего (ты не написал подробностей) API основан на протоколе HTTP
- значит, надо прочесть про HTTP, например, тут: https://github.com/codedokode/pasta/blob/master/network/http.md
- затем надо прочесть документацию по API
- затем, посмотреть, может для работы с API уже есть готовая библиотека?
- если нет, придется писать свой код для отправки HTTP запросов. Можно взять библиотеку вроде Guzzle для этого.
Аноним 27/10/18 Суб 19:31:12 #144 №1285491 
>>1284215

Не, код довольно краток и сокращать дальше уже нечего.

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

>>1283722

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

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

>>1283713

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

>>1283708

Пока что неправильно. У тебя там получаются круглые цифры:

> 12-й месяц выплаты. Долг перед банком :-3576.4368783754.Всего выплачено:60000

А должно быть всего выплачено около 61270.

> if ($open == 0){
> $creditSumm = $creditSumm;
Это можно было не писать, эта строчка ничего не делает.

Функции лучше не выводить результат, а возвращать - тогда тот, кто вызвал, может использовать его как хочет.
Аноним 27/10/18 Суб 19:45:08 #145 №1285498 
>>1283400

Ты что-то путаешь. Нейимспейсы и автозагрузка независимы друг от друга и не заменяют друг друга. Почитай урок https://github.com/codedokode/pasta/blob/master/php/autoload.md

>>1283382

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

function something($x, $y) {
...
}

$z = something(100, 500);
echo $z;

На ideone или где-то еще - не важно.

>>1283040

Не могу, там куча вариантов. Ищи на гитхабе по словам student list, и выбери то, что выглядит поприличнее.
Аноним 27/10/18 Суб 19:45:28 #146 №1285500 
>>1285491
>Ты по одному продукту делаешь вывод обо всех.
Они все дерьмовые. CMS - это неюзабельная параша.
Аноним 27/10/18 Суб 19:45:45 #147 №1285501 
Анон, который с https://github.com/Awesome-Kirill/fukingStudent - надо сделать папку для публичных файлов. Сейчас ты корень проекта вываливаешь в веб, это небезопасно. В комментариях к задаче это описано. Также, файлы для докер имеет смысл поместить в проект (можно внутрь отдельной папки), это неудобно, поддерживать 2 связанных репозитория.

https://github.com/Awesome-Kirill/fukingStudent/blob/master/composer.json#L2
Название проекта можно убрать или вписать правильное, это поле обязательно только для библиотек.

Ты используешь https://github.com/Awesome-Kirill/autowiringDI , но в нем нет даже общего описания. Я первый раз эту библиотеку вижу. То есть человек, получается, должен читать код, чтобы понять, что это такое и как работает. Думаю, тут нужно дополнить ридми, кратко описав, что это, зачем, как работает с примером кода, что может и что не может. Кратко.

> Created by PhpStorm.
Советую отключить этот бессмысленный комментарий в настройках IDE.

> $this->container["{$id}"];
Красивее сделать явное преобразование к строке, как мне кажется, через strval().

> https://github.com/Awesome-Kirill/autowiringDI/blob/master/src/AutowiringDI.php#L66
> public function make(string $cls){
Нужен комментарий. Название ничего не говорит.

Тут выравнивание кривое из-за смеси табов и пробелов: https://github.com/Awesome-Kirill/autowiringDI/blob/master/src/AutowiringDI.php - надо исправить. Тяжело читать.

https://github.com/Awesome-Kirill/fukingStudent/blob/master/student.sql#L40
> `ege` int(11) NOT NULL,
Нужно добавить UNSIGNED

https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/mylog.log
Это надо добавить в gitignore, и логи лучше вынести в отдельную папку.

Твой роутер правильнее назвать Front Controller.

https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/tmp/404.html#L18
надо экранировать вывод, почитай мою пасту про XSS

https://github.com/Awesome-Kirill/fukingStudent/tree/master/src/tmp
Папке надо дать название получше

https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/View.php
надо убрать лишние пустые строки в коде

> https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/Controller/FormController.php#L36
> $postRequest = $postRequest + ['pass' => hash('sha256', random_int(0, 1200))];
Ох ты наивняша. У тебя ведь, получается, тут всего 1200 вариантов пароля. Хеш может выглядеть внушительно, но в его основе лежит одно из всего лишь 1200 чисел. И подобрать такой пароль элементарно.

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

Ты, возможно, где-то слышал, что надо хешировать пароли. Это немного не то, что ты сделал, у меня есть урок: https://github.com/codedokode/pasta/blob/master/security/password-hashing.md

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

https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/Model/DataBase.php#L23
> } catch (\PDOException $e) {
> echo $e->getMessage();
Непраивльно. Ты выводишь ошибку пользователю (который ничего в ней не поймет), а в лог не пишешь (и разработчик о ней не узнает).

> https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/Model/DataBase.php#L123
> $config = parse_ini_file('./src/config.ini');
Почему у тебя класс базы данных занимается парсингом конфигов? Ты нарушил принцип разделения ответственности, когда каждый класс занимается своим делом. Ну и представь, если тебе захочется, например, усложнить код чтения конфига. Тебе придется копировать это в несколько мест. Неудобно.

https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/Model/InitPDO.php
Непонятно назначение этого класса. Что мешает вместо него создавать PDO напрямую?

Также, ты там сделал логгирование. Ты для каждого catch в коде планируешь копировать код логгирования?

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

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

По тестам: не стоит делать проверку кучи условий в одном тесте. Лучше на каждое условие сделать свой тест:

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

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

> $I->see('Этот email уже использован');
Это делает тест хрупким. Достаточно чуть поменять формулировку и все, тест провален. Лучше бы тестировать по более надежному признаку, может там есть какой-то класс или атрибут, который менее склонен к изменению.

https://github.com/Awesome-Kirill/fukingStudent/blob/master/tests/acceptance/FirstCest.php#L27
> $I->see('Logout');

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

> $I->amOnPage('/add/');
> $I->dontSeeCookie('isLogin');
Это мне не очень нравится, так как пользователь таких вещей не видит, а мы ведь имитируем его поведение. Также, ты привязываешься к подробностям реализации. То есть ты не проверяешь, что пользователь разлогинен, а проверяешь, что нет куки с определенным именем. И если ее имя поменяется, твой тест станет ошибаться.

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

https://github.com/Awesome-Kirill/fukingStudent/blob/master/tests/acceptance.suite.yml
Надо написать в ридми про этот файл, что в нем надо задать параметры соединения. И вообще про тесты, как их запустить.

Это не полный список замечаний, это только что я с первого взгляда увидел. Задавай вопросы, если что
-то непонятно.
Аноним 27/10/18 Суб 20:19:21 #148 №1285515 
>>1284215

echo join(" ", array_map(function($val){
return $val[array_rand[$val]]
},$poema);

на строку короче
Аноним 27/10/18 Суб 20:40:09 #149 №1285521 
>>1285515

Читабельность и понятность страдает. Не надо так запутывать код.
Аноним 27/10/18 Суб 22:30:02 #150 №1285621 
Безымянный.png
Добрый вечер! Помогите, пожалуйста, с задачкой. Как сделать код проще? Не могу додуматься как сократить первый foreach(), в котором я убираю пробелы, тире и скобки
Аноним 27/10/18 Суб 22:30:57 #151 №1285623 
>>1285621
А, и еще момент. Скажите, пожалуйста, где лучше выкладывать код, чтобы не мучаться со скринами? Не могу в гитхаб, не понимаю
Аноним 27/10/18 Суб 23:57:12 #152 №1285675 
java.jpg
>>1285623
начни с того что str_replace принимает массив первым аргументом ( типичная ошибка нуба )
str_replace(["-","(",")"," "],"",$number);

во вторых, синтаксис "{$base}" - пиздец сам по себе.

зы. парсер номерв, это такая уникальная задача.... поищи готовый, уже есть 100500 вариантов
Аноним 28/10/18 Вск 00:49:52 #153 №1285708 
>>1285675
>начни с того что str_replace принимает массив первым аргументом ( типичная ошибка нуба )
О, спасибо. Я до этого сам не додумался, не знал что так можно.
Еще, как я заметил, не обязательно вводить переменную или создавать пустой массив перед использованием.

>во вторых, синтаксис "{$base}" - пиздец сам по себе.
Почему? В каком плане?

>зы. парсер номерв, это такая уникальная задача.... поищи готовый, уже есть 100500 вариантов
Погуглю, спасибо. Мне просто интересно, возможно ли это было сделать без использования str_replace(), а только используя регулярные выражения.
Аноним 28/10/18 Вск 01:18:10 #154 №1285719 
рубль.jpg
>>1285708
пустая переменная - твой слчай, если ты будешь делать продакшен то у тебя будет вариант с str_replace($this->replace_array,"",$str)
т.е. ты даешь себе же возможность расширить массив заменяемых зняений

"{$base}" = $base вообще следует избегать двойных строк, для них существует отдельная обработка и лучше делать "".$base."" пока не понимаешь как оно работает
нубы которые делают как ты жарятся в отдельном котле
Аноним 28/10/18 Вск 04:29:12 #155 №1285754 
>>1285623

На ideone можно выкладывать. Там заодно и результат выполнения виден. Правда, там не работают mb-функции.

Есть и другие сайты: http://codepad.org/
https://repl.it/languages/php
pastebin

Также, если ты зарегистрирован на гитхабе (бесплатно, без СМС), то там есть отличный удобный сервис для выкладывания кода - gist.github.com. Чтобы им пользоваться, не надо знать git, просто копируешь код и сохраняешь. Попробуй.
Аноним 28/10/18 Вск 15:38:51 #156 №1285899 
Привет, посоветуйте плз имеет ли смысл покупать онлайн курсы( я рассматриваю курсы от лофтскул,если вам не лень погуглите посмотрите их программу) по php? У меня проблема в том, что самому на самообучение мне сложно себя смотивировать и все никак систематически за это не засяду. Но я не работаю, сижу на шее у мамки и деняк нет лишних, так что 300$ для меня деньги. Там проекты делаются и уже какое-никакое портфолио будет. А как самому пилить проекты в портфолио,как их делать - все кажется сложным. Вроде щас вся инфа есть в открытом доступе. Реально ли выучиться самому?
Аноним 28/10/18 Вск 15:39:51 #157 №1285900 
>>1285621

Вместо кучи str_replace лучше использовать один strtr() с массивом замен, либо один preg_replace().

Убирать foreach не требуется. Хотя можно 2 foreach объединить в один.

Вместо "{$number}" надо писать просто $number.

>>1285675

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

>>1285708

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

Обязательно. Если ты сделаешь

echo $a;

то это выдаст warning.

> Мне просто интересно, возможно ли это было сделать без использования str_replace(), а только используя регулярные выражения.

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

Аноним 28/10/18 Вск 15:40:51 #158 №1285903 
>>1283051

В дополнение к замечаниям тут: >>1285501

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

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

https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/Controller/ListController.php#L36
> if (isset($_COOKIE['isLogin']) and $this->authentication->isValidCookie($this->model, $_COOKIE['isLogin'])) {

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

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

https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/tmp/allVue.html#L6
> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">

Зачем ты запрещаешь масштабировать страницу? Этот код придумали люди, которым лень было делать нормальную верстку и проще показалось запретить масштабирование. Я негативно отношусь к таким людям.

> <hr class="container-fluid">
Что за ерунда? Почему hr?

https://github.com/Awesome-Kirill/fukingStudent/blob/master/src/tmp/vue-bootstrap-table.js
12 000 строк - не многовато ли для отображения простой таблицы?

Фреймворки вроде bootstrap лучше класть в отдельную папку, а не сваливать все в кучу. Сторонний код желательно явно отделять от своего.

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

При ошибке надо показывать форму с заполненными полями, а не редиректить.
Аноним 28/10/18 Вск 15:41:20 #159 №1285905 
>>1282992

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

Да. Получается, есть такие решения:

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

Второй вариант мне кажется адекватным. Он же используется в эппловском iMessage.

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

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

Кстати, есть такая интересная штука, как 2FA. Это второй фактор для защиты от случая, когда у пользователя украли пароль. Есть такие протоколы TOTP и HOTP: https://ru.wikipedia.org/wiki/Google_Authenticator . Вместо программы от Гугла можно использовать свободную программу из F-Droid, не требующую доступа в интернет.

Выглядит это так:

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

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

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

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

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

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

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

Вообще, конечно, правильнее могло бы быть не изобретать свои протоколы, а взять какой-то сушществующий, благо их много: https://en.wikipedia.org/wiki/Comparison_of_instant_messaging_protocols (да, немного поздно об этом думать).
Аноним 28/10/18 Вск 15:41:40 #160 №1285906 
>>1282133

У нас тут не урок русского языка.

>>1282102

В PHP есть стандартная функция сортировки, свою писать не надо. Да и сортировать тут не надо.
Аноним 28/10/18 Вск 15:42:32 #161 №1285907 
>>1281694

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

Для проверки я открыл Developer Tools. В фаерфоксе - есть вкладочка "Шрифты", где написано, какой именно шрифт использован. В хромиуме эту информацию можно поискать на вкладке Computed.

Там видно, что использован шрифт Lato с начертанием normal. А так как у нас элемент em, то браузер сам синтезировал из нормального шрифта косой, механически наклонив буквы. Загадка разгадана.

Для подтверждения я открыл https://fonts.googleapis.com/css?family=Lato:300,400,900 - там нету курсива (кстати, изучи этот файл, там интересная оптимизация сделана).

Тебе надо подключить определения font-face еще для курсивных начертаний Lato.

Далее, почисти кеш (или поставь галочку в devtools) открой вкладку Network и перезагрузи страницу. У тебя там гигантские PNG-картинки с работами, весом под мегабайт в сумме. PNG дает хорошее качество, но совершенно неразумный вес. Попробуй их пережать в JPG, желательно без визуальной потери качества, и посмотреть, будет ли вес меньше. Не советую пользоваться автоматическими конверторами без выбора степени сжатия - они могут слишком сильно сжимать - ее лучше выбрать вручную.

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

После сжатия ты можешь, если хочешь, использовать дополнительные утилиты для дополнительного уплотнения файла: jpegtran, jpegoptim, mozjpeg.

Из минусов JPEG: в нем нельзя сохранять мелкий текст - он коверкается. Я когда-то для оптимизации даже разделял картинку на JPEG-фон и PNG-текст.

Верстальщик должен разбираться в оптимизации картинок. Потому, советую почитать https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/automating-image-optimization/

Также, есть набор старых, но очень интересных статей по оптимизации картинок: http://chikuyonok.ru/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/

Я также советую изучить теги picture и img srcset. Они позволяют указать несколько вариантов картинок, которые могут выбираться в зависимости от размера экрана, плотности пикселей, поддержки браузером формата картинки: https://developer.mozilla.org/ru/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images

> <div class="serveicesBlock">
> <div class="img"></div>
Тег .img разве нельзя убрать и заменить на псевдоэлемент :before? Попробуй сделать, или там какая-то проблема? Этот тег смотрится лишним в разметке.

В картинках - плохо, что картинки дублируются. Этот как минимум может вызвать повторную отправку запросов для них. Браузер всегда загружает картинки, указанные в атрибуте img[src], даже если они скрыты и невидимы. Тут лучше бы убрать дублирование, или что-то мешает так сделать?

Далее, надо проверить адекватность стилей по умолчанию. Представь, что к этому сайту решили добавить текстовую страницу, например, "О нас" (или даже подключить CMS и дать возможность менеджерам добавлять страницы самим). Как она будет выглядеть?

Для проверки я взял простой сайт https://motherfuckingwebsite.com/ и через devtools подключил твой CSS. Результат - не впечатляет: текст отцентрирован и плохо читабелен, списки выглядят ужасно. Нужно переделать CSS так, чтобы страница с простыми HTML тегами в нем выглядела нормально и в стиле сайта. То есть чтобы при добавлении новой страницы надо было сделать минимум работы и не надо было искать, как отключить центрирование.

> box-sizing: border-box;
Если добавить префиксы вроде -moz-box-sizing и -webkit-box-sizing, то поддерживаемых браузеров будет чуть больше: https://caniuse.com/#search=box-sizing (тебя наверно путают номера версий, не смотри на них, смотри на год выпуска браузера).

Если ты знаком с Node.JS, то можешь установить autoprefixer для автоматизации процесса.

> .serveicesBlock:nth-child(3) > .img {
Это не очень удачная идея. Если добавить, убрать или переставить блоки, то все картинки перепутаются. Лучше поставить уникальный класс на каждый блок. Не надо так делать, что при правке кода в одном месте ломается что-то в другом.

То же касается портфолио. Если возможно, я советую привязать картинки к кнопкам с помощью CSS классов или data-атрибутов. Так проще все это поддерживать.

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

Еще меня беспокоит, что при определенной ширине экрана блоки Consectetur, Tristiquet выстраиваются 3 в один ряд, и один снизу. Было бы красивее по 2 в ряд.

Также, я потестировал сайт в browsershots (а ты потестировал?) и в некоторых браузерах кнопки типов работ (illustration/motion) склеиваются друг с другом, а в некоторых, наоборот, далеко, там всюду разное расстояние. Это плохо:

- http://api.browsershots.org/png/original/a1/a1f0cd30d038c27fa04739dbb02a396e.png
- http://api.browsershots.org/png/original/86/8693a113b4c0c01939393f1d2143e9b5.png
- http://api.browsershots.org/png/original/0c/0c373ab1a4baaeab83f7b28ff643c6ac.png

Также видел склеенные кнопки в одном из IE:

- IE10: https://www.browserstack.com/screenshots/b35082fa437b517d40ea30383c037102943de97e/win7_ie_10.0.jpg

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

Но в общем молодец, у тебя неплохо получается. Советую исправить замечания, почитать теорию по ссылкам, которые я дал, может еще почитать про новшества CSS3 (flexbox, grid итд) и начинающий верстальщик из тебя вполне готов.
Аноним 28/10/18 Вск 23:07:06 #162 №1286165 
Аноны, помогите, прошу вас!
Задачка на исправление ошибок в тексте и у меня встает следующий вопрос (вот код http://codepad.org/3zrTEE2d): как сделать так, чтобы местах, где требуется просто поставить пробел, код не сжирал последующую букву? Я пытался через $replacement.'$2', но он, сука, выдает мне ебаный еррор Array to string conversion, хотя я вроде не передаю ему никаких массивов, а хочу дать вторую часть кода из массива регексп. Я уже в отчаянии!

Аноним 28/10/18 Вск 23:23:36 #163 №1286177 
>>1286165
И вот еще: http://codepad.org/RWkJyh7k . Это задачка на наебалово в госзакупках. Возможно ли сделать код короче?
Извиняюсь, если сильно напрягаю анона, но просто почему-то немного трудно идут рег. выражения. Я их уже второй день штудирую, пишу-переписываю свой код. И приходится в методичку загядывать
Аноним 29/10/18 Пнд 00:35:51 #164 №1286201 
>>1286165
"/([,])/u",
Аноним 29/10/18 Пнд 00:54:36 #165 №1286205 
>>1286201
Вроде должно работать
"/([,|.|!|?|:])(\\S)/u",
"$1 $2",
Аноним 29/10/18 Пнд 04:39:41 #166 №1286233 
Аноносы, посоветуйте книжку, сайт, или что-нибудь другое, где МАКСИМАЛЬНО КРАТКО и ПОНЯТНО объясняется устройство и прнципы работы сетей, адресация, маршрутизация и. т. д.
Аноним 29/10/18 Пнд 10:04:15 #167 №1286291 
>>1286233
>МАКСИМАЛЬНО КРАТКО и ПОНЯТНО
Читай стандарты епта.
Аноним 29/10/18 Пнд 12:48:09 #168 №1286347 
>>1286233
Котеров PHP5, первые две главы.
Аноним 29/10/18 Пнд 14:01:18 #169 №1286397 
>>1286347
Читал. Как-то поверхностно.
Аноним 29/10/18 Пнд 16:02:37 #170 №1286438 
Хотел воспользоваться ларавель-микс и установил нод.жс, это нормально, что он нахуярил мне всякой всячины в папку node_modules на 170мб, хотя мне нужен только бутстрап и жквери?
Аноним 29/10/18 Пнд 16:32:41 #171 №1286445 
>>1286205
>"/([,|.|!|?|:])(\\S)/u"
Спасибо, но я так уже делал. Это только на знаки препинания. А, например, жи-ши - это уже отдельно делать, или как? Так ведь получается слишком много повторяющегося кода. Я для этого в массив все вариации запихал, чтобы просто дополнять массив новыми правилами. А то не фен-шуй
Аноним 29/10/18 Пнд 16:33:59 #172 №1286446 
>>1286233
Андрей Созыкин, ютуб
Аноним 29/10/18 Пнд 17:13:40 #173 №1286462 
>>1286445
>>1286165
$errors = [
'$1ардинально' => '/(К|к)оординально/ui',
'$1десь' => '/(С|с)десь/ui',
'с$1' => '/з(дела(л|ю|н|ем|нный))/ui',
'$1и' => '/(ж|ш)ы/ui',
'$1 $2' => '/([,.;:!?])(\w+)/ui',
'$1, $2 ' => '/(\w)\s(но|а)\s/ui'
];
дальше нужно пройтись циклом
Аноним 29/10/18 Пнд 17:22:55 #174 №1286470 
>>1286462
\t это так табуляция отображается.
Аноним 29/10/18 Пнд 18:36:07 #175 №1286510 
62877922p0.jpg
Эх, хочется уютно писать бек на пхп, а работу предлагают только для chad fullstack-инженеров.
Аноним 29/10/18 Пнд 19:02:45 #176 №1286530 
http://codepad.org/fCzesIi4 почему эти два варианта не работают? Хоть убейся, но не работают. Никак не могу решить проверочную задачку, отформатировал текст таким способом
function makeThisTextBetter ($text){
$regexp = "/(\\s)([.|,|!|?|:])(\\s)/u";
$result = preg_replace ($regexp, "$2 ", $text);
return $result;

, а сделать первую букву заглавной не удается
Аноним 29/10/18 Пнд 19:36:41 #177 №1286563 
>>1286462
О, спасибо большое
Аноним 29/10/18 Пнд 20:43:40 #178 №1286586 
>>1286233
Таннебаума читни.
Аноним 30/10/18 Втр 06:06:59 #179 №1286823 
Анонче, глянь, пожалуйста, мою задачку на числа-буквами. Я не дописал еще, но мне интересно знать в правильном ли я направлении двигаюсь http://codepad.org/xLD7yTTv
Дальше пока не пишу, потому как очень хочу спать. Однако написал я ее за пару часов. Я молодец? Просто хотелось похвалиться перед кем-то. Под задачкой написано, что она сложна для новичков, однако управился относительно быстро
Аноним 30/10/18 Втр 11:50:50 #180 №1286887 
Анон по ссылке решение задачи по ООП о компании "Вектор" https://repl.it/repls/AttractiveWoodenButtons. Чувствую, что нагородил лишнего. Начиналось все вроде просто, а потом выросло в такое.
Аноним 30/10/18 Втр 13:57:06 #181 №1286951 
Где можно прочитать, как работать с HTML + PHP? После пары гайдов мне кажется, что я делаю все очень хуево, ибо файлов ну очень много (для каждой странички - связка .html + php, для индекса - полупустой файл с include_once(huita.html) и сам huita.html) и пиздец.

Есть какие то стандарты, а то я совсем себя неуютно чувствую?
Аноним 30/10/18 Втр 14:28:04 #182 №1286959 
>>1286951
Задача список студентов из шапки. В ней есть ссылки на уроки по отдельным вещам от ОПа.
Аноним 30/10/18 Втр 14:42:12 #183 №1286962 
Аноны, что то бошка уже кипит.
Мне надо, чтобы вышла строка МАССИВ ПУСТОЙ, КРАСАВЧИК, если в массиве нет ни одной записи.

if ((empty($array)){
echo "Массив пустой, красавчик";
}
почему то не работает. Хелп!
Аноним 30/10/18 Втр 14:52:53 #184 №1286965 
>>1286962
Дохуя как то скобок.

if (empty($array)){
echo "Массив пустой, красавчик";
}
Аноним 30/10/18 Втр 14:58:21 #185 №1286970 
>>1286965
Не работает.
Вар дамп выдает вот это:
array(0) { }

Работает такое условие:
if ($myArray === array()){
echo "заебись";
}
Аноним 30/10/18 Втр 15:23:38 #186 №1286980 
Можно ли где то скачать уже готовые, наверстанные html+css сайты, чтобы не пердолится с разметкой и сразу натягивать свой пхп?
Аноним 30/10/18 Втр 15:30:13 #187 №1286983 
Вы таки говорите, что без знания математики можно вкатиться в пхп. Но у меня глава про айфон и циклы еле идет. Может быть навернуть для начала SICP ?
Аноним 30/10/18 Втр 16:15:15 #188 №1287019 
>>1286983
В задачах ОПа максимум арифметика за 7 класс, если у тебя с этим проблеммы, то о сикп пока и думать нечего. Можешь попробовать пройти вводный курс по программированию на хекслете. https://ru.hexlet.io/courses/introduction_to_programming
Аноним 30/10/18 Втр 16:21:10 #189 №1287024 
>>1286823
Не вчитывался, но заметил, что операции остаток от деления и деления с округлением ты не используешь, инклайн ворд переделал, а можно как у ОПа сделать.
Аноним 30/10/18 Втр 16:24:47 #190 №1287027 
>>1287019
банкомат и по кругу - нет
Аноним 30/10/18 Втр 16:28:40 #191 №1287033 
>>1287019
Спасибо. Буду лучше вникать
Аноним 30/10/18 Втр 16:31:51 #192 №1287038 
>>1287019
Собственно проблема у меня скорее с самим пониманием программирования , потому что с арифметикой проблем нет. Для меня это все разновидность магии. А программисты - колдуны ирл все от незнания, да
Аноним 30/10/18 Втр 16:36:36 #193 №1287041 
в ларавеле есть что либо похожее на гемы или батарейки?
Аноним 30/10/18 Втр 16:53:03 #194 №1287064 
>>1287041
Тебе в симфони 4.
Аноним 30/10/18 Втр 17:00:17 #195 №1287070 
>>1287064
тебя лично его возможности полностью удовлетворяют?
Аноним 30/10/18 Втр 18:17:20 #196 №1287104 
Безымянный.png
Не пойму, что не так?

<?php

class Car{
public $color = "Wite";
public $speed;
public $brand;
public $fuel;
}

$car1 = new Car;
$car1->brand = "Жигули";
$car1->color;
$car1->speed = 70;
$car1->fuel= 10

$car2 = new Car;
$car2->brand = "ГАЗ";
$car2->color = "black";
$car2->speed = 100;
$car2->fuel = 15;

echo $car1->brand;
?>
Аноним 30/10/18 Втр 18:18:20 #197 №1287106 
>>1287104
Точку с запятой поставь, ковбой.
Аноним 30/10/18 Втр 18:18:22 #198 №1287107 
когда ОП вернется?
Аноним 30/10/18 Втр 18:18:45 #199 №1287108 
>>1287104
Блять, вот я валет.Нашел пропущенные точку с запятой. Сори!
Аноним 30/10/18 Втр 18:45:53 #200 №1287128 
>>1287107

А все задачи до 162-го поста в этом треде кто, по твоему, проверил? Если на твой вопрос не ответили или не проверили задачу, напомни о ней.
Аноним 30/10/18 Втр 18:58:37 #201 №1287136 
>>1287024
Да, не использовал. Мне этот способ показался проще. Пока на работе подумал ещё, что для вывода тысяч можно проверить длину массива и разбить массив на сегменты по 3 т.е. 0-2 это сотни, дальше проверочное [3] для больших значений , 4-6 сотни и т.д., это всего пару строк кода плюс массив для крупных чисел, плюс подправить баг с числами, допилить склонения и будет всё складно. Т.е. я мыслил таким образом, что в числе 987 654 321, 987 миллионов, 654 тысячи 321. И каждый "миллион/тысяча" будет ключом для второго массива больших чисел, который будет подставляться между малыми. На словах все труднее звучит, но я попробую как вернусь с работы это реализовать
Аноним 30/10/18 Втр 19:04:11 #202 №1287139 
>>1287136
А, ещё забыл один вопрос: почему у меня \n не пашет? Не переводит строку. Приходится <br> использовать
Аноним 30/10/18 Втр 19:45:10 #203 №1287151 
nia-exoticeyes2943.jpg
ОП, проверь плиз.
Опечаточники: https://www.ideone.com/XKbY9H
Shift: https://repl.it/repls/RequiredColorlessUnits
Yoda Speak: https://repl.it/repls/SalmonGoldenExpertise
Числа прописью: https://repl.it/repls/TrustyNegativeJavabytecode
Калькулятор: https://repl.it/repls/StingyLargeState
Аноним 30/10/18 Втр 20:06:21 #204 №1287165 
https://ideone.com/9wUomK
Задание- описать классы для прямоугольника, круга, пирамиды, описать метод для нахождения площади фигуры (не уточняется именно пирамида или все-таки треугольник, поэтому пирамида с равнобедренными треугольниками), а так же отсортировать по убыванию площади объекты и вывести на экран.
Сделал создание рандомных фигур, с рандомными параметрами, вывод нормально работает, но никак не могу сделать сортировку, вот уже несколько часов бьюсь.
Может стоит как-то по другому сделать массив с фигурами? Или просто я слепой, что не могу увидеть как сортировать
Аноним 30/10/18 Втр 20:31:45 #205 №1287193 
>>1287139
в терминале запускай
Аноним 30/10/18 Втр 20:40:39 #206 №1287201 
>>1287139

Платиновый вопрос. Когда ты запускаешь скрипт в PHP-сервере и отображаешь результат в браузере, браузер воспринимает данные как текст в формате HTML, а в HTML перевод строки равносилен пробелу.

Чтобы переносы строк нормально работали и в браузере и в ideone (и в консоли), можно использовать для этого \n, а в начале программы поставить

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

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

Иначе перенос строки будет в исходном коде страницы (его можно увидеть нажав Ctrl + U), но на самой странице его не будет.


Аноним 30/10/18 Втр 22:51:47 #207 №1287262 
Аноны, снова Добрый вечер. На связи Анон который последние несколько дней засирает тред тупыми вопросами про >>1287139, и который смог написать программу про перевод цифр в слова, но так и не понимает как сделать первую букву заглавной(стртуаппер хоть убейся, но в целом массиве меняет только первую на заглавную). Так вот, у меня есть вопрос. Я иногда, когда не могу писать код (как сейчас, я на работе), читаю учебники и задачки и представляю по какому принципу их сделать. Я прочитал задачку про навигатор и она мне показалась очень простой и у меня возникла мысль. Сделать (или сгенерировать, это сложнее и как это сделать пока представление мутное, но есть идеи как повернуть это через рандом) массив, который будет размером 100*100 где-то и который будет являеться картой. На карте есть несколько дорог и зданий и типо_курсирующие_автобусы пару штук. Смысл в том, чтобы по нажатию на первую клетку передавалась информация откуда, при нажатии на вторую передавалась информация куда, а скрипт уже считал дистанцию до ближайшей дороги, а дальше считал дистанцию до места прибытия по дороге пешком или автобусом. У меня в голове (возможно это иллюзия, конечно, а я долбаёб) есть примерное представление как это сделать. Единственное что, я пока не знаю как сделать кнопку,, которая будет передавать скрипту что либо, всегда передавал инфу рандомом или значением, а когда надо что то поменять менял значение. А вопрос состоит в том, стоит ли заниматься этой хернёй и даст ли она мне что нибудь, каких то знаний или опыта, или лучше дальше делать задания по методичке и не заниматься ерундой и тратить время? Хотя бы до конца учебника опа и на моём уровне знаний.
Аноним 30/10/18 Втр 22:57:10 #208 №1287267 
Up
Аноним 30/10/18 Втр 23:04:39 #209 №1287270 
>>1287262
Или даже можно без массивов, но с картой-массивом мне кажется интереснее
Аноним 31/10/18 Срд 02:01:53 #210 №1287320 
Добрый вечер, не могу понять что не так
https://ideone.com/7Qw2os
почему в итоге прибавляет 5к, а не 1270
Аноним 31/10/18 Срд 02:08:44 #211 №1287323 
>>1287320
а, уже разобрался
Аноним 31/10/18 Срд 08:53:02 #212 №1287383 
Вкатился в PHP, и обнаружил, что отсутствуют хорошие рекомендации по построению правильных архитектур backend'a, так как каждый видит со своей кучи навоза (как и в js на frontend'e). Значит какой напишешь в силу своего видения говнокод - так и будет работать. Мой всё правильно понимается или всё же в чём-то заблуждаюсь?
Поясните, пожалуйста... Желательно ссылками и примерами, по возможности
Аноним 31/10/18 Срд 10:50:40 #213 №1287426 
>>1287267
Добро пожаловать в тематику
Аноним 31/10/18 Срд 15:26:23 #214 №1287543 
Подскажите пожалуйста, как настроить сервер, чтобы он выдавал все ошибки? У меня бесплатный хостинг 000webhost.com. Чето не понимаю.
Аноним 31/10/18 Срд 16:06:32 #215 №1287554 
>>1287262
Думать мало, надо делать тоже, когда садишься и начинаешь конкретно кодить, то проясняются все иллюзии.
Аноним 31/10/18 Срд 17:51:51 #216 №1287625 
>>1287262
Просто пиши, что угодно, главное кодируй и решай проблемы.
Всё, с чем столкнёшься - крайне полезный опыт.
Аноним 31/10/18 Срд 18:18:02 #217 №1287654 
Можно ли сделать так, чтобы информация выдавалась кусками через промежутки времени? То есть, загрузилась страница, на ней написано "Привет, Мир". Проходит 2 секунды и появляется следующая строка "Пока, Мир". Проходит еще время и появляется еще что нибудь. Или же подобное делается с помощью жабаскрипт?
Аноним 31/10/18 Срд 18:19:12 #218 №1287656 
1482432455763.jpg
Блядский хачик тимлид на собеседовании мне минут пять втирал, что $string.='text'; не будет работать, если я заранее не объявлю $string="";. Хотелось встать и уйти.
Аноним 31/10/18 Срд 18:19:37 #219 №1287657 
>>1287654
>Или же подобное делается с помощью жабаскрипт?
Именно.
Аноним 31/10/18 Срд 18:26:29 #220 №1287666 
>>1287656
работать то оно будет но кинет нотис
ну и бтв некоторые люди оборачивают ошибки в исключения
так что всё возможно
Аноним 31/10/18 Срд 18:27:21 #221 №1287667 
>>1287666
>работать то оно будет но кинет нотис
Я это ему и говорил.
Аноним 31/10/18 Срд 18:32:31 #222 №1287670 
Алсо, когд я спросил, почему они используют pg_ вместо PDO, он начал гуглить PDO.
Аноним 31/10/18 Срд 18:40:37 #223 №1287677 
>>1287656
Веб-студия сокол?
Аноним 31/10/18 Срд 18:42:42 #224 №1287680 
>>1287677
Нет, они где-то в 7 км от них.
Аноним 31/10/18 Срд 18:59:24 #225 №1287695 
Какой же я тупооой
Аноним 31/10/18 Срд 19:19:50 #226 №1287708 
>>1287656
В итоге он признал ошибку?
Аноним 31/10/18 Срд 19:26:26 #227 №1287710 
>>1287708
В итоге я его отсортировал пузырьком и ушел.
Аноним 31/10/18 Срд 19:37:31 #228 №1287718 
>>1286980
Ctrl+U в хроме на любом сайте и верстка твоя
Аноним 31/10/18 Срд 19:44:26 #229 №1287721 
>>1287710
"Своего первого тимлида, я отсортировал в 16 лет" (с)
Аноним 31/10/18 Срд 19:52:20 #230 №1287724 
15210634003770.png
Полтора года начал изучать пхп, за год его более-менее подучил. Чуть более полу года назад на сайте вакансий города где я живу увидел объявление веб-разработчика на пхп/яваскрипт. Я отписался, выполнил пару тестовых заданий, потом два месяца делал простую работу и учил яву - платили 20к в месяц. Потом меня взяли на постоянную основу и спросили сколько я бы хотел получать, я не очень разбирался в оплате и думал что у меня знания плохие и сказал 40к, они сказали что ок.
Суть в том, что я уже пол года работаю на эту зп, и думаю что я могу получать намного больше т.к. даже мои входные знания были очень даже неплохие. Платить больше мне в этой компании вряд ли будут. И я думаю - стоит ли увольнятся и искать новую работу (а я постоянно вижу вакансии где платят больше), или я еще зелёный и мне стоит работать где я работаю?
Думаю спросить поднимут ли мне зп до 55к, если нет, то уволюсь. Или 40 это норм зп для веб разработчика?
Студия занимается созданиями местных сайтов.
Не могу решить что делать, помоги аннован. Просто, я скопил немного денег т.к. живу с родителями, и мог бы пол-года год еще поучиться и найти еще лучше работу, но я не уверен что смогу.
Аноним 31/10/18 Срд 19:52:51 #231 №1287725 
maxresdefault.jpg
>>1287721
>отсортировал
Аноним 31/10/18 Срд 19:53:13 #232 №1287726 
image.jpeg
>>1287721
Содомит.

Мимо
Аноним 31/10/18 Срд 20:32:15 #233 №1287774 
чем так хорош ларавел,что он щас в топе?
Аноним 31/10/18 Срд 20:57:13 #234 №1287796 
>>1287128
Просто мне показалось, что отвечают только на вопросы с проектами, а на задачки нет, вот я подумал что это не ОП.
Аноним 31/10/18 Срд 23:10:38 #235 №1287865 
>>1287724
Посмотри на опыт западных коллег: там сначала получают оффер, а потом с этим оффером идут к боссу, и торгуются, кто больше заплатит. Таким макаром очень быстро поднимают ЗП, и часто скачут между конторами.
Вообще там собеседования что-то типа спортивной дисциплины - на них ходят даже не ради офферов, а просто чтобы понимать, сколько ты стоишь на рынке, имеешь ли прогресс, или начал закисать и пора шевелиться.
Это у нас пиздец: поговорил с конкурентом - все, предатель, расстрел на месте.

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

Да, есть и адекватные конторы, в этой сфере вообще кадровый голод, и, если босс не дурак (что в РФ редкость), и личных конфликтов нет, выгоднее тебе просто немного поднять ЗП, потому что с тебя все равно имеют намного больше.
Но тут уже опасность для тебя - можно 10 лет отработать в одной конторе, каждый год увеличивая ЗП на 5к, и к концу получая аж 90к(!), а можно за эти же 10 лет сменить несколько контор, каждый раз получая прибавку в 10-20к, и к концу иметь за уже под 200, плюс огромный опыт: сидя в одной конторе, при всем желании стать профи, сгниешь заживо, т.к. узкая специализация и однотипные задачи., уже через год поймешь, что ничего нового тебе не светит, кроме как клепать одно и то же ради денег, не прогресс, а застой, рутина.

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

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

Но и голову тоже нужно включать.
Если ты понимаешь, что на деле ничего из себя не представляешь, стоит прибегнуть к концепции трамплинов: используй первую работу чтобы наработать опыт, а когда поймешь свою реальную стоимость - сможешь выйти на рынок сам, и это будет уже не попытка найти хоть какую-то работу, а выбор наиболее достойного места из нескольких предложений.
Аноним 31/10/18 Срд 23:11:50 #236 №1287866 
>>1287724
А входные какие были знания конкретно можешь рассказать?
Аноним 31/10/18 Срд 23:43:26 #237 №1287875 
>>1287383
Заблуждаешься
Да, каких-то четких рекомендаций тут нет, но в целом архитектура бекенда устоялась.
Всегда есть роутер, есть реквест, а иногда и ответ (мало где, в основном везде свои велосипеды с глюками), есть конфиг (тут пожалуй больше всего велосипедов), есть ядро, есть контроллер, есть кэш, иногда контейнер зависимостей (довольно редко на самом деле), и конечно же какой-нибудь недо-orm.

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

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

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

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

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

И конечно стоит подумать о тестах. Подумать, потому что на практике нигде не видел, чтобы их использовали. Зато почти все публичные модули идут с тестами.
Идея заманчивая, но начать её использовать не так просто - кажется, что оверхед будет слишком большой, хотя на деле оно наоборот, экономит время: на тестах ты быстро формализуешь задачу, быстро натыкаешься на баги, и быстро приводишь код в соответствие с задачей, а без тестов ты быстро нахуевертишь гору кода, быстрее тестов, но потом потратишь в десять раз больше времени, ползая по коду, в попытках отловить непонятно откуда взявшиеся странные баги, потому что магия, мать её
Аноним 01/11/18 Чтв 04:08:49 #238 №1287944 
https://www.ideone.com/vORnwM
Оп, посмотри, пожалуйста, цифры в слова.
Аноним 01/11/18 Чтв 07:54:31 #239 №1287961 
Вопрос по ООП-Будильнику

>- для данного текущего времени получить ближайшую активную тревогу, которая сработает в будущем. Если таких несколько, можно вернуть любую из них. Это будет использоваться для показа времени ближайшего срабатывания будильника на экране.
>- для данного текущего времени получить активную тревогу, которая срабатывает ровно в это время. Это будет использовано для проигрыша мелодии. Например, если в списке есть тревога на 08:00 в Пн, Ср, Пт и сейчас среда 08:00, то нужно ее вернуть. Если тревог больше одной - можно вернуть любую.
>- для данного текущего времени удалить из списка все одноразовые тревоги, которые больше никогда не сработают.

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

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

Заранее спасибо.
Аноним 01/11/18 Чтв 08:15:26 #240 №1287965 
>>1287961
Можно сократить код мелодии подобным образом?

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

https://ideone.com/DcsQxM
Аноним 01/11/18 Чтв 09:05:56 #241 №1287983 
Как можно вывести значение массива, если известен его индекс?
Аноним 01/11/18 Чтв 09:51:06 #242 №1287992 
>>1287983
Открой уже учебник, не самоунижайся.
Аноним 01/11/18 Чтв 09:57:32 #243 №1287996 
>>1287983
$array[$id]
Аноним 01/11/18 Чтв 09:58:31 #244 №1287998 
>>1287875
Спасибо. Значит исходя из твоего ответа чистый PHP никому не нужен.
Однако мне нравится чистота без каких-либо фреймворков и сторонних библиотек.
Мне трудно представить трудно отслеживаемые баги, так как разработка кода процесс детерминированный.
ООП нужно только для энтерпрайза по моему личному опыту, поэтому предпочитаю ПОП, так как наиболее гибко.
Роутеры, контроллеры и прочее это разве не относится к MVC и MVVC, а если так, то действитетльно ли нужно это?
Алсо спасибо за мудрые рекомендации к последующему обдумыванию.
Аноним 01/11/18 Чтв 10:19:38 #245 №1288010 
>>1287998
С чего это не нужен? Крупные проекты пишутся на нативном php. Любой фреймворк - это зависимость. Чем больше проект, тем больше проблем с зависимостями.
Сегодня в моде микросервисная архитектура. Использование шаблонов ООП в этой архитектуре зависит от ситуации. Последний проект, в котором я участвовал, был на микросервисах. У нас только в двух использовались шаблоны. И то, самые простые, типа фабрики.
Аноним 01/11/18 Чтв 17:34:05 #246 №1288227 
>>1287866
Прошёл курс опа, знал цсс/хтмл/пхп неблохо, мог бы написать сайт, фронт, бэк, всякие парсеры етц, умею в медиа. Когда пошёл на работу в целом особо нового не узнал, только приёмы которыми пользуются на работе и с 0 почти яву подучил, но не то чтобы силён в ней.

>>1287865
Спасибо что расписал, сегодня сказал что я бы хотел больше получать и был послан со словами - не нравится увольняйся. 2 месяца дорабатываю и после НГ увольняюсь.
Аноним 01/11/18 Чтв 19:59:45 #247 №1288357 
>>1288227
>яву
java или javascript?
В перзвоним тредах говорят, что декабрь-январь мертвый сезон. Увольняйся сейчас или жди до февраля.
Аноним 01/11/18 Чтв 20:03:45 #248 №1288365 
15401459034652.jpg
БлЯдь сука ебесь оно в рот нахуй блядь сука как нахуй получить доступ CGI-BIN ёбанный рот этага ядра блядь
Аноним 01/11/18 Чтв 20:05:53 #249 №1288367 
hhh.png
Помогите дауну
Русские буквы выводятся как на пики, как решить?
Аноним 01/11/18 Чтв 20:21:26 #250 №1288375 
>>1288367
все, исправил, сори
Аноним 01/11/18 Чтв 22:21:33 #251 №1288440 
image.png
>>1281608 (OP)
https://github.com/sergnik1995/students-list опчик чекни, пожалуйста, моё решение задачи студентов и скажи что там пофиксить.
Аноним 02/11/18 Птн 00:56:48 #252 №1288519 
>>1288440
тебе нужно почитать про MVC паттерн и ООП в целом.
Начни с написания роутера.
Не ОП
Аноним 02/11/18 Птн 01:01:04 #253 №1288520 
>>1288519

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

А вот "толстые" (большие) контроллеры - это нехорошо.
Аноним 02/11/18 Птн 01:13:47 #254 №1288527 
>>1288519
Ок, спасибо.
Аноним 02/11/18 Птн 08:02:26 #255 №1288583 
>>1288227
Прямо все задания опа сделал, включая тестхаб?
Аноним 02/11/18 Птн 10:33:47 #256 №1288656 
В чем вы пишите свой код?
Аноним 02/11/18 Птн 11:31:42 #257 №1288694 
>>1288656
В пьяном угаре.
Аноним 02/11/18 Птн 13:34:00 #258 №1288757 
>>1288656
emacs
Аноним 02/11/18 Птн 15:02:10 #259 №1288795 
С пдо вобще не работал, а манул дочитал лишь до середины (Connections and Connection management). Решил, что потом дочитаю и начал делать. И вот присваиваю пременной значение ответа sql, а код выполняется не дожидаясь этого ответа, и на тесте на нулл выдает true. Выставил задержку в качетсве костыля, но она тоже не помогает, а ждать на каждом обращении более 0.15 сек не по барски. Что делать?
Аноним 02/11/18 Птн 15:22:10 #260 №1288802 
>>1286462

самый херовый совет который я только видел. с фтронта на бек соскакивали ?

preg_replace - принимает 2 массива, что заменять - регулярка, на что заменять - регулярка
Аноним 02/11/18 Птн 15:24:41 #261 №1288804 
slow.jpg
>>1288802
str_replace может просто в тупую принимать 2 массива
str_replace(["a","b"],["z","x"],$str) - заменит a->z, b->x

нубы обычно не читают доку. что не показано на ютубе, того не существует
Аноним 02/11/18 Птн 15:25:07 #262 №1288805 
>>1288795

Минимальный пример кода в студию. Напиши, что он выводит, и что, по-твоему, должен вывести. Тогда я смогу глянуть и за 5-10 секунд понять, в чем дело. А по твоему описанию ничего не понять.
Аноним 02/11/18 Птн 16:04:36 #263 №1288813 
>>1288805
https://pastebin.com/6bDkZCAx
Аноним 02/11/18 Птн 16:33:27 #264 №1288820 
>>1288813

sleep надо убрать.

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

Также, включи выброс исключения при ошибке: http://php.net/manual/ru/pdo.setattribute.php ( PDO::ERRMODE_EXCEPTION: )

Также, включи отображение ошибок в php.ini (display_errors = 1), если оно не включено. Но не делай так на продакшене!

Я подозреваю, проблема в том, что ты почему-то не включил вывод ошибок (хотя во всех моих уроках написано, что надо его включать), происходит какая-то ошибка, но так как ты не включил их вывод, ты о ней не знаешь и придумываешь неправильные объяснения происходящему, ставишь sleep, хотя он ни на что не влияет итд.
Аноним 02/11/18 Птн 16:34:12 #265 №1288822 
>>1288813

Также, на будущее: минимальный пример лучше писать без использования класса, просто последовательность команд.
Аноним 02/11/18 Птн 16:36:30 #266 №1288824 
>>1288813

Также, вместо if ($ans == null) надо в примере писать var_dump($ans); Чтобы точно видеть, что возвращается, а не гадать.

У меня такое ощущение, что ты пропустил основы, и сразу берешься за сложные темы, в итоге путаешься. Это конечно не имеет отношения к багу, и это твое личное дело, но по моему это плохая идея, а на собеседовании это легко определить.
Аноним 02/11/18 Птн 16:39:32 #267 №1288827 
>>1288795

Твое объяснение неправильное. PDO работает синхронно, и его методы не возвращают управление, пока не получат ответ от БД или пока не будет обнаружена ошибка. Соответственно, от того, ставишь ты sleep или нет, ровным счетом ничего не зависит. Тем более, что ты его ставишь уже после выполнения взаимодействия с БД.
Аноним 02/11/18 Птн 17:50:57 #268 №1288870 
>>1288820
>ATTR_PERSISTENT
Ну мне нужно минимизировать время, а запросов к базе много. Если есть альтернативы, то я буду не против. А вообще скорее всего перепишу все на prepare, без кривого класса.
>display_errors
Вроде все включено
>PDO::ERRMODE_EXCEPTION:
Он тоже вроде включен по умолчанию, но ошибки через try catch нет
>>1288824
Возвращает пустой массив, но если передвинуть на строчку вниз, то вернет все что запрашивал.
>>1288822
Аноним 02/11/18 Птн 18:12:32 #269 №1288882 
>>1288870
Хотя возможно это действительно не в pdo вина. Просто это выглядело достаточно странно, когда у меня ПК был под нагрузкой, то возвращался пустой массив, а если внутри if я убирал die, то программа после выполнялась вполне нормально.
Аноним 02/11/18 Птн 20:39:57 #270 №1288974 
Дублирую из прошлого треда.
Задачка про банкомат - https://ideone.com/yC58nJ
Не могу сделать проверку на достаточное количество купюр в банкомате.
"Лиличка" - https://3v4l.org/9nNiF
Не предсталвяю, как вывести столбцы рядом друг с другом.
Аноним 02/11/18 Птн 21:34:17 #271 №1289005 
>>1288974
А если через for перебирать по каждому символу, и в строчке выводить тип $lines[0][$i]
 Аноним 02/11/18 Птн 21:34:43 #272 №1289006 
>>1288974
А если через for перебирать по каждому символу, и в строчке выводить тип $lines[0][$i]
Аноним 02/11/18 Птн 23:31:20 #273 №1289076 
>>1288870

>>PDO::ERRMODE_EXCEPTION:
> Он тоже вроде включен по умолчанию, но ошибки через try catch нет

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

Прочитай внимательно мануал, что стоит по умолчанию: http://php.net/manual/ru/pdo.error-handling.php

Также, try/catch писать не надо. Почитай урок про исключения: https://github.com/codedokode/pasta/blob/master/php/exceptions.md
Аноним 03/11/18 Суб 09:41:56 #274 №1289176 
Похоже, вкатываться в PHP с отвращением к верстке бесполезно. Все жуниорские вакансии - фулл-стек с упором на жабаскрипт.
А жаль, бэк ведь писать интересно.
Аноним 03/11/18 Суб 10:35:53 #275 №1289183 
какой фреймворк самый понятный?
Аноним 03/11/18 Суб 10:40:50 #276 №1289185 
>>1289183
Слим.
Аноним 03/11/18 Суб 10:44:34 #277 №1289187 
>>1289185
из больших
Аноним 03/11/18 Суб 10:45:51 #278 №1289188 
>>1289187
Лярваэль.
Аноним 03/11/18 Суб 12:35:01 #279 №1289221 
>>1289183
Symfony
Аноним 03/11/18 Суб 12:43:31 #280 №1289225 
1497998043177.png
>>1289221
Толсто.
Аноним 03/11/18 Суб 13:48:43 #281 №1289242 
>>1289176
В твоей мухосрани нет ни одной вакансии с чистым беком на пхп (юи2/лара)?
Аноним 03/11/18 Суб 13:50:38 #282 №1289243 
>>1289242
Есть. Для сеньоров.
Аноним 03/11/18 Суб 17:20:55 #283 №1289314 
5b8cec7ee13d6316fc769d8123b7a620.png
>>1289183
Все MVC фреймворки похожи как близецы
rwerw 03/11/18 Суб 20:10:15 #284 №1289371 
test
Аноним 03/11/18 Суб 20:13:12 #285 №1289373 
http://sandbox.onlinephpfunctions.com/code/c5d81d82be08b5c3f533f1e53d61eed6a2a0d803
Чекните что и как и критику
Аноним 03/11/18 Суб 20:14:36 #286 №1289374 
>>1289373
Посмотрел твой код и думаю программирование не твое,парень...
Аноним 03/11/18 Суб 20:17:06 #287 №1289376 
>>1289374
А конкретнее?
Аноним 03/11/18 Суб 20:23:08 #288 №1289379 
>>1289376
Логики нет, складывается впечатление что у тебя в школе по математике были одни двойки.
Аноним 03/11/18 Суб 20:26:19 #289 №1289380 
>>1289379
Чего конкретно исправить и какая логика верная?
Аноним 03/11/18 Суб 20:27:03 #290 №1289381 
>>1289380
Problem, Michael ? :tf:
Аноним 03/11/18 Суб 20:37:14 #291 №1289384 
>>1289243
они могут быть не против ждунов
Аноним 04/11/18 Вск 04:13:14 #292 №1289494 
bump треду
https://www.ideone.com/vORnwM гляньте, пожалуйст. Может программирование - не мое, как у этого анона и я зря стараюсь?>>1289373
Аноним 04/11/18 Вск 04:28:10 #293 №1289495 
>>1286962
Что находится в переменной $array?
Аноним 04/11/18 Вск 04:38:03 #294 №1289496 
Ищи как менять настройки php.ini на своём хостинге. Нужно поменять настройки display_errors = On и error_reporting = E_ALL.
Аноним 04/11/18 Вск 06:01:57 #295 №1289505 
>>1289494
еще бамп


Аноны, помогите, пожалуйста, с задачкой на навигатор! Во первых, у меня выскакивает ошибка Warning: Use of undefined constant by - assumed 'by' (this will throw an Error in a future version of PHP). Что это за предупреждение такое? Вот кусочек моей функции https://www.ideone.com/SbFo4J. У меня он ищет путь по наименьшему кол-ву прыжков, а я хочу по времени, но не могу сообразить как. Рассуждал по логике, что функция должна прыгать от одной станции к другой в поиске искомой (чего, в принципе, добился). Тип, если цель не по соседству, то запрыгнуть в любую и снова искать, там снова прыгнуть и снова искать. Но как по времени это все провернуть? Заставлять его не убивать себя после найденного маршрута, а искать всевозможные вариации и сравнивать время? Я в замешательстве. Помогите, пожалуйста. Может и правда программирование - не мое?или сначала протрезветь?
Аноним 04/11/18 Вск 06:55:14 #296 №1289508 
image.png
>>1286970
Всё работает. Ты криворукий просто.
Аноним 04/11/18 Вск 15:04:06 #297 №1289611 
В задаче, где надо привести телефоны к одному виду написал /^(\+?\s*7)?/ для поиска +7 и замены на 8. С номерами, которые начинаются на +7 проблем нет, а у номеров, начинающихся на 8 появляется ещё одна 8. ЧЯДНТ
https://ideone.com/u4b6h9
Аноним 04/11/18 Вск 15:24:31 #298 №1289617 
>>1289611
> /^(\+?\s7)?
/^(\+?\s7)
Аноним 04/11/18 Вск 15:50:44 #299 №1289631 
>>1289617
Спасибо. Вижу, что я ступил.
Аноним 04/11/18 Вск 19:30:00 #300 №1289723 
>>1289505
Вроде все сделал, программа исправно прокладывает маршруты, но есть одно но: почему если я ставлю return вместо exit() скрипт сходит с ума, зацикливается и начинает искать вообще всевозможные пути до искомой точки? Разве return не останавливает выполнение функции и возвращает значение? Не выкладываю код т.к. по мере написания он оброс кучей мусора(я в рабочем скрипте, который написал ранее, дописывал новый код, чтобы не сломать то, что работает и проверял что изменилось), от которого я сейчас планомерно стараюсь избавиться. И мне захотелось, чтобы фукнция отдавала мне массив пройденного пути, а не прописывала путь по мере выполнения т.к. она иногда может прокладывать путь, но не писать как она это сделала.
Аноним 04/11/18 Вск 19:35:31 #301 №1289726 
>>1289723
return прерывает работу текущей функции, поднимая тебя "наверх" в стеке вызовов.
Аноним 04/11/18 Вск 19:51:30 #302 №1289736 
>>1289726
Понял, спасибо. Можешь по задачке подсказать? Я сейчас только понял, что он отображает текстом в принципе неверный маршрут, но сам каким-то образом добирается до точки верно. https://ideone.com/1U7MMZ вот моя функция. Где кусок кода взят в комментарий - это старый код, который ищет по кол-ву прыжков. Я извиняюсь, что расписано так убого, но мне правда нужна помощь.
Аноним 04/11/18 Вск 20:02:20 #303 №1289740 
Делаю задачку "сверху вниз", как "поднять" вывод текста после нескольких "\n" ? Что бы следующая строка выводилась справа от предыдущей а не справа и снизу
Аноним 04/11/18 Вск 20:07:03 #304 №1289748 
>>1289740
А не пробовал выводить каждый символ каждого предложения построчно? Ну то есть "кошка любит молоко" выводилось сначала к, потом л, потом м, дальше \n и следующая буква. Лично я таким способом делал но не доделал
Аноним 04/11/18 Вск 20:26:39 #305 №1289755 
>>1289748
можно попробовать конечно, но придётся переписывать саму суть кода. Спасибо
Аноним 04/11/18 Вск 21:18:30 #306 №1289763 
Аноны, подскажите пожалуйста, как добавить на страницу интерактивные кнопки? Читаю про всякие $_GET $_FORM, но не могу понять как этим пользоваться (читай - у меня нихера не работает). В мануале этого нет. Где это можно прочесть? Молю
Аноним 04/11/18 Вск 22:12:36 #307 №1289794 
>>1281709
Тольятти опять протёк?
Аноним 05/11/18 Пнд 06:36:33 #308 №1289923 
Почему у меня padLeft из учебника выдает ошибку? Uncaught Error: Call to undefined function padRight(). Тип я ее задавать должен или что?
Аноним 05/11/18 Пнд 06:40:34 #309 №1289924 
>>1289923
А, понял, дико извиняюсь. Мне почему то показалась, что это стандартная функция
Аноним 05/11/18 Пнд 09:41:44 #310 №1289947 
54295124p0.png
Какой ЖС фрейморк учить симфонидауну? В ЖС тред не посылайте, там токсичность.
Аноним 05/11/18 Пнд 11:32:42 #311 №1289974 
Иду на собеседования для вакансии, где требуется "знать основы PHP".
Какие вопросы могут задать?
Аноним 05/11/18 Пнд 11:33:40 #312 №1289976 
>>1289947
Это элитный рнр-тред, катись нахуй отсюда со своим ебаным ЖС.
Аноним 05/11/18 Пнд 12:11:00 #313 №1289993 
>>1289373
Анон, для начала прочти о том, как следует оформлять код. Когда смотришь на твое решение задачи, вообще отпадает желание в чем-то разбираться. Как минимум:
1. Поставь пробел между операторами (=/>/</==).
2. Поставь фигурные скобки в операторах условия (if/elseif/else).
3. До и после строки, где ты определяешь функцию или класс нужно оставлять один пробел.
4. Фигурные скобки, определяющие начало тела функции либо класса, ставятся на следующей строке.
5. Убери лишние пробелы и табы
Ознакомься с гайдлайнами по оформлению PHP-кода:
1. https://www.php-fig.org/psr/psr-1/
2. https://www.php-fig.org/psr/psr-2/
Помни, анон, код больше читается, нежели пишется. Даже если ты пишешь решение задачки, код которой увидит и забудет небольшое количество анонимусов с двача, все-равно не ленись и пиши его аккуратно!
Аноним 05/11/18 Пнд 12:23:53 #314 №1289998 
>>1289947
Начни с React/Redux. Попробуй написать проект, который на основе какого-нибудь публичного API выводит списки, где есть пагинация или постраничная навигация, а при нажатии на какой-либо элемент из списка перенаправляет на более детальную страницу об элементе используй react-router. Вот список открытых API:
https://github.com/toddmotto/public-apis
Если хорошо умеешь в верстку, на grid/flexbox с sass создай структуру проекта, если нет, можно использовать react-bootstrap или material UI.
Для начала, только средствами React компонентов, попробуй написать простой конвертер валют или вывести табы с днями недели и погодой. А затем приступай к более сложному проекту, в котором надо управлять состоянием здесь вступает в игру redux .
Экосистема довольна обширная, и походу дела необходимо будет много нового узнать.
После react/redux vue/vuex дается легко. в процессе ознакомления с js, поглядывай в сторону typescriprt. Насчет Angular ничего сказать не могу.
Аноним 05/11/18 Пнд 12:49:47 #315 №1290010 
>>1281726
Какая разница, что у тебя на домашнем компьютере?
>>1282306
А почему бы не делать сортировку по баллам дефолтно, если не задан параметр sort_by? Это намного логичнее, чем заниматься подстановкой параметров в ссылки.
>>1282527
Посмотри за Flux, его реализовали в React/Redux например.
>>1283377
Во-первых, студентам один год дают бесплатно, во-вторых можно всегда взять VSCode и настроить. Мне в компании хотели лицензию выдать, но я имаксер.
>>1289947
Лучше всего React/Redux, ибо порог вхождения минимален.
>>1289183
Slim/Silex.
Аноним 05/11/18 Пнд 13:16:03 #316 №1290019 
>ибо порог вхождения минимален.
Анон, не будь таким снобом.
Аноним 05/11/18 Пнд 13:33:48 #317 №1290027 
>>1289998
>Начни с React/Redux
Так и думал.
>Если хорошо умеешь в верстку
Вообще не умею.
Аноним 05/11/18 Пнд 16:05:55 #318 №1290132 
>>1289947
reactjs + material component
Аноним 05/11/18 Пнд 17:30:24 #319 №1290163 
>>1289993
Спасибо,учту, а есть чего по самому коду?
Аноним 05/11/18 Пнд 21:47:24 #320 №1290275 
image.png
Аноны, прошу вас, помогите. Какого хуя это не работает?
//Функции выравнивания
function padRight($string, $length)
{
$padRight = str_pad($string, $length, " ", STR_PAD_RIGHT);
return $padRight;
}
function padLeft ($string, $length)
{
$padLeft = str_pad($string, $length, " ", STR_PAD_LEFT);
return $padLeft;
}

// Заголовок таблицы
echo padRight('Сотрудник', $col1) .
padLeft('Часы', $col2) .
padLeft('Ставка', $col3) .
padLeft('З/п', $col4) . "\n\n";


Оно выравнивает данные, но не выравнивает шапку. Это пиздец какой-то, очко горит блять
Аноним 05/11/18 Пнд 22:02:30 #321 №1290281 
>>1290163
что у тебя в соl1 и т.д. приходит то?
Аноним 05/11/18 Пнд 22:18:17 #322 №1290292 
>>1290010
> Во-первых, студентам один год дают бесплатно
Даже не один, можно продлевать лицензию по мере перехода с курса на курс. Например у меня в сумме лицензия с 2014-го по 2019-й, и как только закончится - сразу куплю, оно того стоит. Ещё у них там скидки появляются (друг купил PHPStorm за полцены в день дружбы лол: https://blog.jetbrains.com/blog/2018/07/30/celebrate-this-friendship-day-with-jetbrains-and-unwrap-your-presents/ )

>>1289947
А как не быть токсичным, если ты сам себя дауном называешь? И зачем тебе распыляться на два фронта, пиши себе бекенд, в чём проблема? Или работодатели не могут отдельно фронта нанять?

>>1290027
Без вёрстки сможешь только туду-списки по туториалам делать. Сейчас в моде styled components (подход когда обеспечения модульности вёрстку кладут рядом с JS кодом), для разработки на фронтенд фреймворке нужно уметь в вёрстку:
- https://www.styled-components.com/
- https://vuejs.org/v2/guide/single-file-components.html
Аноним 05/11/18 Пнд 22:31:12 #323 №1290300 
Почему в, например, цикле
foreach ($hours as $hour){
if ($hour > 40){$hour += 10;}
}
Переменная $hour увеличивается, а при вардампе вне цикла она остается прежняя? И как с этим бороться кроме как тупой перестановкой внутри цикла (это же целая строка!)?
Аноним 05/11/18 Пнд 23:23:34 #324 №1290322 
>>1290275

Тут случайно нет ответа на твой вопрос? https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
Аноним 05/11/18 Пнд 23:29:06 #325 №1290331 
>>1290292
> https://www.styled-components.com/

Мне не нравится. Что мешает верстку для компонента класть в отдельный CSS файл? Их подход:

- по производительности очень плох
- способствует загромождению шаблонов стилями
- не взаимодействует нормально с devtools
Аноним 05/11/18 Пнд 23:30:57 #326 №1290333 
>>1290300

$hour это не элемент массива. Это переменная, в которую копируется значение из текущего элемента массива. От того, что ты её изменишь, в массиве ничего не поменяется. Где ты прочел, что так можно делать?

Мануал: http://php.net/manual/ru/control-structures.foreach.php
Аноним 05/11/18 Пнд 23:48:53 #327 №1290348 
>>1289998

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

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

Опять же, прежде чем учить SASS, надо освоить CSS. Так как SASS это препроцессор для CSS.

Кстати, ты, видимо, хорошо разбираешься во фронтенде? Не хочешь глянуть нашу задачу на SPA - она ведь несложная? А что что-то никто ее до сих пор не решил (( https://github.com/codedokode/pasta/blob/master/js/spa.md

Заметь, кстати, это та задача, где SPA нужен и приносит пользу. В отличие от всяких дурацких TODO списков и других типичных задач, которые проще сделать без SPA, на формах и PHP, и где реакт это оверкилл.
Аноним 05/11/18 Пнд 23:55:37 #328 №1290354 
>>1289998

То есть, я имею в виду, в любом случае, сначала надо освоить основы верстки (у нас в шапке, кстати, есть задания), а потом уже браться за флексбокс, и тд. Реакт можно начинать изучать и параллельно, но без знания верстки им много не сделаешь.
Аноним 06/11/18 Втр 00:32:56 #329 №1290405 
Без названия.jpg
Мой первый код,поздравьте меня.

<?php
error_reporting (-1);
echo "Бросаем кубик\n";
$random= mt_rand(1,6);
echo "Выпало $random "; / Я молодец :) /
?>
Аноним 06/11/18 Втр 00:33:25 #330 №1290407 
>>1290331
> по производительности очень плох
Но это ведь не инлайн стили, там в итоге один css файл собирается. Не вижу причин для проседаний.

> способствует загромождению шаблонов стилями
Стили находятся не в шаблоне, а в компоненте. В случае с Vue - это отдельный .vue файл, в случае с реактом будет просто вёрстка вверху файла. Компоненты обладает высоким cohesion (зацеплением?), из-за чего их очень удобно переиспользовать.

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

Из недостатков отмечу, что не работает emmet синтаксис для написания стилей, так как IDE не видит стили внутри JS кода (но это просто плагин для реакта нормальный не сделали, для Vue сделали).

> Что мешает верстку для компонента класть в отдельный CSS файл?
Тоже хороший вариант. Я хотел акцентировать внимание на том, что вёрстка во фронтенд фреймворках идёт бок-о-бок с JS кодом и её обязательно нужно знать.
Аноним 06/11/18 Втр 00:56:05 #331 №1290427 
>>1290407

>> не взаимодействует нормально с devtools
> Там есть соурсмапы, так что всё тоже самое.
Нет, там будут в HTML-коде CSS-классы вроде x76gdydsv, которые невозможно читать. Плюс, sourcemaps это зло: они часто глючат, требуют усилий по их поддержке, могут быть не той версии, итд. Лишняя возня. Плюс, при попытке отредактировать что-то в devtools они отключаются.
Аноним 06/11/18 Втр 02:55:33 #332 №1290470 
Аноны, как заставить пхп свистеть пердеть и двигаться? Потихоньку начал еще читать вложенный учебник JS, но при прочтении создается ощущение, будто я все это уже видел. Хочу кнопки нажимать и смотреть как это работает, а не в код вбивать свои переменные.
Аноним 06/11/18 Втр 02:59:11 #333 №1290471 
>>1290470
>Хочу кнопки нажимать и смотреть как это работает
"php -a" в консоль и играйся сколько влезет
Аноним 06/11/18 Втр 08:18:16 #334 №1290496 
>>1289740
А ты придумай алгоритм.
Аноним 06/11/18 Втр 09:47:24 #335 №1290510 
>>1283303
VScode
Аноним 06/11/18 Втр 10:47:31 #336 №1290527 
>>1290292
>И зачем тебе распыляться на два фронта
---> >>1289176
Аноним 06/11/18 Втр 10:51:08 #337 №1290530 
>>1290527
>
Хуёвый работодатель, чо. У нас фронт и бек - отдельные люди со специализацией.
Аноним 06/11/18 Втр 12:46:15 #338 №1290570 
>>1290471
А чтобы в браузере это было?
Аноним 06/11/18 Втр 13:09:57 #339 №1290580 
>>1290570
repl.it
Аноним 06/11/18 Втр 15:45:43 #340 №1290635 
Хочу спарсить сайт. Юзаю file_get_contents, выдаёт страницу-заглушку типа "реквест не может быть выполнен бла-бла-бла". Похоже, на сайте стоит что-то типа клаудфлары.
Как обойти? UserAgent-заголовки пробовал подменять - нихуя.
Аноним 06/11/18 Втр 15:50:58 #341 №1290637 
Screenshot1.png
>>1290635
Вот такую хуйню выдает вместо требуемой страницы, короче говоря. На других сайтах тестил - всё норм.
Аноним 06/11/18 Втр 16:03:32 #342 №1290643 
>>1290637
Дебил, иди на хуй.
Аноним 06/11/18 Втр 17:23:08 #343 №1290686 
>>1281608 (OP)
F


class phone
{
public $names = array(
Pavel' => '12345',
'Rita' => '11223',
'Egor' => '22334',
'Masha' => '33445',
'Lev' => '44553',
'Varya' => '55443');

function getNumberByName(){
echo $names['Pavel'];
}
}
$obj = new phone;
$obj->getNumberByName();
Аноним 06/11/18 Втр 17:23:27 #344 №1290687 
>>1290686
Дорогой анон, почему не работает?
Аноним 06/11/18 Втр 17:28:39 #345 №1290689 
>>1290687
Потому что $names у тебя не переменная, а поле объекта.
Почему, в таком случае, ты обращаешься к нему как к переменной?
Аноним 06/11/18 Втр 21:29:17 #346 №1290865 
Ребята, посоветуйте книг по теории по php что бы знать за память и все такое ...
Аноним 07/11/18 Срд 06:47:58 #347 №1291065 
>>1290865
php 7 в подлиннике
Аноним 07/11/18 Срд 11:43:18 #348 №1291131 
>>1290580
Хватит издеваться, мне правда интересно. Я сделал простенькую задачку опа про вопросы через ООП, которые надо вводить или выбирать ответ, написал под это функцию создания объекта и прочие прелести и понял, что хуле я как лох вбиваю все сам в переменную и смотрю результат, если моя программа сама может все сделать, только скажи, даже переменную сгенерирует. Хочется оформить все в пользовательский интерфейс. Читаю учебник js и чувствую, что я это уже где-то видел. Хочется уже программами срать а не в алфавит играться
Аноним 07/11/18 Срд 12:48:17 #349 №1291150 
Может у кого-нибудь есть на примете простенькое(или нет, главное чтобы было рабочим и можно было от него оттолкнуться) приложение по управлению почтовыми сервисами?
В духе посмотреть входящие, отправленные, отправить новое.
С меня тонна нефти
Аноним 07/11/18 Срд 17:06:28 #350 №1291256 
>>1290405
ты действительно молодец, держи в курсе
Аноним 07/11/18 Срд 23:32:27 #351 №1291497 
Объясните мне зачем нужен parent::, как им пользоваться, что за self (почему не this как в других источниках?)? У меня ниче не циклится и работает как часы.
Аноним 08/11/18 Чтв 15:18:41 #352 №1291752 
учу с нуля, совсем нуб, встал на третьем задании из учебника в шапке

https://ideone.com/sY6axO

подскажите что я делаю не так (возможно что все не так)
Аноним 08/11/18 Чтв 16:37:57 #353 №1291781 
Пыханы, есть одна сущность, назовем ее КОНКУРС.
Так вот, на конкурс записываются люди.
Нужно сделать рассылку по участникам конкурса с новостями, правилами и прочей инфой.
Как бы вы организовали это?

Вариант 1:
Таблица contest_mail, где будет contest_id, text, subject, targeting. В поле targeting будут записываться параметры: возраст, регион, статус на сайте, и в момент отправки писем, получатели по этим параметрам будут отбираться динамически.
Но как не проебаться, и не выбрать одного и того же человека дважды, если слать письма пачками штук по 100? Пока идея такая: SQL запрос с определенной сортировкой и записью последнего выбранного user_id, который дальше подставлять в этот SQL запрос, чтобы выборка начиналась с него.

2 вариант: все то же самое, только сделать дополнительную таблицу: contest_mail_recipient. Куда в момент сохранения параметров рассылки сразу делать записи, кому и какую рассылку следует отправить. Но минус в том, что при каждом сохранении рассылки куча записей будут удаляться/вставляться. Алсо, если после сохранения получателей, набегут еще человек 100 в конкурс, то они как получатели запишутся только при новом сохранении рассылки.

Так вот, какой метод предпочтительнее: динамический или статический?
Аноним 08/11/18 Чтв 17:21:21 #354 №1291793 
>>1291752
https://ideone.com/ejM0XM

все сделал, заработало

проверьте пожалуйста все так?
натыкайте носом в косяки
Аноним 08/11/18 Чтв 19:20:12 #355 №1291856 
Untitled.png
Проверьте.
Emails - https://ideone.com/K5xlAn
Опечаточник - https://ideone.com/T9lkRz
Grammar Nazi - https://ideone.com/092o3K
Grammar Nazi Next - https://ideone.com/NU9Zee
Shift - https://ideone.com/L4JUTk
Ideone mb_strtoupper не опознаёт, так что вот результат на пике
Аноним 08/11/18 Чтв 19:56:51 #356 №1291888 
За сколько по времени можно обучиться , что бы зарабатывать денюшку? не как хобби, а как работа
Аноним 08/11/18 Чтв 23:00:48 #357 №1291996 
>>1281608 (OP)
Где я не прав?

<?php

error_reporting(-1);

echo "Lets start the game!\n";

$human1 = mt_rand(1,6);

$human2 = mt_rand(1,6);

$robot1 = mt_rand(1,6);

$robot2= mt_rand(1,6);

echo "Human got $human1 and $human2, robot got $robot1 and $robot2\n";

if (($human1 == $human2) || ($robot1 == $robot2)) {

echo "Double! Greatest luck you ever had!";
exit ();

if (($human1 + $human2) > ($robot1 + $robot2)) {

echo "Human got ($human1+$human2), robot got ($robot1+$robot2), Human won!\n";

}

elseif (($human1+$human2) < ($robot1+$robot2)) {

echo "Human got ($human1+$human2), robot got ($robot1+$robot2), Robot won!\n";

}

}

elseif (($human1+$human2) == ($robot1+$robot2)) {

echo "Human got ($human1+$human2), robot got ($robot1+$robot2), Draw!\n";

}


}



?>
Аноним 08/11/18 Чтв 23:04:50 #358 №1292000 
>>1291793
Неплохо, но как бы сделать без твоего
$compSum = ($compDice1 + $compDice2);
?
Аноним 09/11/18 Птн 02:03:03 #359 №1292062 
image.png
image.png
Аноним 09/11/18 Птн 02:25:36 #360 №1292071 
>>1291888
3-6 месяцев с нуля, если в день сидеть >4 часов
Аноним 09/11/18 Птн 07:11:39 #361 №1292103 
>>1291131
На данном этапе обучения, тебе нужно сконцентрироваться на понимании самих конструкций, что такое объект, что такое поля, методы. Увидеть как объекты взаимодействуют между собой. Чтобы это понять достаточно командной строки. Затем тебе надо будет решить задачу про компанию Вектор (здесь тоже придется обойтись лишь командной строкой). Только потом приступай к использованию php для написания веб-приложений, тогда ты поймешь, как сделать пользовательский интерфейс при помощи форм, получить от пользователя данные, использовать их и отобразить результат.
>я как лох вбиваю все сам в переменную и смотрю результат, если моя программа сама может все сделать, только скажи, даже переменную сгенерирует
Цитируя Мартина Фаулера:
Всякий раз, когда возникает соблазн что-то распечатать, используя print, или написать отладочное выражение, напишите тест вместо этого.
>Читаю учебник js и чувствую, что я это уже где-то видел
Ошибочное чувство, если ты уже это видел, сможешь объяснить в чем разница между this на php и this на js?
Аноним 09/11/18 Птн 07:38:27 #362 №1292106 
>>1291497
>Объясните мне зачем нужен parent::
https://phpbooktest2.ga/l1/pasta.html Раздел "Наследование Классов".
>что за self (почему не this как в других источниках?)
self - ссылка на текущий класс
this - ссылка на текущий объект
Объекты, инстанцированые от одного класса делят между собой общие поля и методы класса, но могут иметь различные поля и методы объекта.
https://ideone.com/4kTUzx
Аноним 09/11/18 Птн 07:45:29 #363 №1292108 
>>1291996
Как ты запускаешь этот код? В уме?
Какого хуя? Аноним 09/11/18 Птн 08:54:43 #364 №1292117 
Screenshot20181109085300.png
\\ - не должно же замениться
Аноним 09/11/18 Птн 09:35:29 #365 №1292125 
>>1292117
Может надо \\\\?

https://regex101.com/
Аноним 09/11/18 Птн 09:39:24 #366 №1292126 
Пыхач, я прочитал почти всю документации к Yii2, но так и не понял, как сделать так, чтобы имя роута и имя action не совпадали. Например, я хочу, чтобы YobaController::actionPerekat вызывалось не на /yoba/perekat, а, например, на /yoba/ukritie/petekat. До этого я Laravel смотрел, там для этого специальный yaml с роутингом сделали.
Аноним 09/11/18 Птн 10:17:16 #367 №1292133 
>>1292125
Хотел написать, чтобы довены не работающие с регулярками, не писали. Но решил что это очевидно...
Аноним 09/11/18 Птн 10:49:07 #368 №1292143 
>>1292126
'rules' => [
'<controller>/ukritie/<action>' => '<controller>/<action>'
]
Аноним 09/11/18 Птн 11:06:48 #369 №1292147 
>>1292143
Это же нужно в конфиге делать, а не где-то внутри контроллера?
Аноним 09/11/18 Птн 11:16:00 #370 №1292149 
>>1292147
config/main.php
Аноним 09/11/18 Птн 11:17:26 #371 №1292150 
image.png
>>1281608 (OP)
Анон, подскажи, что не так?

Решил я значит поизучать Yii и воспользовался этим видео.
https://www.youtube.com/watch?v=0E4QKJwZok4

Скачиваю wamp, все слово в слово повторяю и на пункте инициализации библиотеки (запуска из-под консоли init.bat) получается хуита:
Ошибка """php.exe"" не является внутренней или внешней"
Прописал путь до версии ПХП - не помогло.

Что не так?
Аноним 09/11/18 Птн 11:20:03 #372 №1292152 
>>1292149
Плохо зделоли, тупо. Спасибо
Аноним 09/11/18 Птн 11:20:14 #373 №1292153 
>>1292150
Попробуй переменную с путями назвать Path и туда все пути через ; добавить
Аноним 09/11/18 Птн 11:42:33 #374 №1292161 
>>1292153
Все? Т.е. не только на ту версию php, которая сейчас юзается?
Аноним 09/11/18 Птн 11:44:26 #375 №1292163 
>>1292161
Под "все" я имею в виду остальные пути в системе, для Питона или Руби, например. А так для конкретной версии ПХП надо.
Аноним 09/11/18 Птн 11:49:34 #376 №1292165 
image.png
>>1292163
Типа того?
Аноним 09/11/18 Птн 11:51:59 #377 №1292167 
>>1292165
Ага, только 4 строчка лишняя.
Аноним 09/11/18 Птн 11:54:26 #378 №1292168 
>>1292167
Даже так не работает.
Аноним 09/11/18 Птн 11:56:04 #379 №1292169 
>>1292168
Покажи что в init.bat
Аноним 09/11/18 Птн 11:57:01 #380 №1292170 
>>1292169
https://ideone.com/kKHT8y
Аноним 09/11/18 Птн 12:00:23 #381 №1292171 
>>1292170
Попробуй компуктер перезагрузить
Аноним 09/11/18 Птн 12:37:34 #382 №1292196 
image.png
>>1281608 (OP)
Неделю назад устроился на первую свою проггерскую работу на пхп. 60к в месяц, не веб студия и не хуитрикс (Laravel юзают и Симфони, в основном пишем RESTApi и непосредственно логику всего, что не на с++), связано с документооборотом, у ребят там масштабы типа портала госуслуг - общая система авторизации и куча ништяков, используют последние технологии, кубернетс, свои фронтендеры, свой девопс, свои с++ ники на подсосе у бэкэнда, короче прямо мечта, а не работа.
Они через 2 часа позвонили с собеседования и пригласили к ним работать. Это было второе собеседование в моей жизни, с первого тоже недавно позвонили и пригласили на работу, правда предложили немного больше, но мне на втором тимлид очень понравился, заебатый чувак, поэтому отказался.

Тимлид еще удивлялся, что я понимаю ОПП, паттерны и SOLID, Dependency Container/injection и т.д., и могу запрос SQL с джоином и каунтом написать, и что у меня есть пара небольших проектиков личных.

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

Еще добавлю - те, кто планирует вкатываться в самое дно:
1) Веб студий и битрикса стало явно меньше, если учитывать то, что я видел на хедхантере год назад.
2) Вы, скорее всего, так и останетесь на этом уровне навсегда, ибо подходы у крупных фирм и у конвеера на дне - просто невероятно разные.
Аноним 09/11/18 Птн 12:41:26 #383 №1292199 
>>1292196
Еще добавлю забавный факт - на собеседовании я просил 30к, и даже думал, что много прошу, лол блять.
Встроенный пыховский сервер Аноним 09/11/18 Птн 12:44:59 #384 №1292201 
Есть какая инфа по нем? Я имею ввиду на что он годен вообще? Какое-нибудь рест-апи на нем норм писать? Или он просто для галочки существует?
Аноним 09/11/18 Птн 12:46:52 #385 №1292204 
>>1292196
>Теперь я понимаю почему меня с руками оторвать хотели, если такое, что вы тут творите - норма для начинающих.
Тред не читал, что тут творят? Алсо, ООП и паттерны - это сейчас стандарт, по факту это даже фронт энд макаки сейчас знают, а битрикса столько же, сколько и всегда - овер до хуя. Даже слишком до хуя. Хотел бы я, чтоб его было меньше. У меня бывали случаи, что меня разворачивали из-за его __НЕ__ знания (sic!).
Аноним 09/11/18 Птн 12:47:01 #386 №1292205 
photo2018-10-2214-20-43.jpg
>>1292196
Аноним 09/11/18 Птн 13:01:42 #387 №1292207 
>>1292204
>это сейчас стандарт, по факту это даже фронт энд макаки сейчас знают
Как ты ошибаешься...) ООП - это окей, паттерны - ну с натяжкой кто-то что-то там читал, но о SOLID могут сказать (с пониманием) 10% из собеседуемых (на моей практике), о написании запроса с джоином - это вообще для многих непосильная задача и самое частое оправдание - это "ну мы же на орм/active record/eloquent/что угодно пишем", блять.

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

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

Мимо мидло-синьоро ля пехепехо.
Аноним 09/11/18 Птн 13:06:11 #388 №1292208 
>>1292205
У разработчика лендингов в веб студии подгорело?
Аноним 09/11/18 Птн 15:05:19 #389 №1292273 
8697333.gif
Моя ужасная история. Сократили с работы, денег примерно было на год не работать (6 месяцев я уже проебал) и было решно вкатывать в веб. Т.к. есть товарищи жс ниньдя выбор пал первым яп учить жс. В начале дрочил кантора, точнее не дрочил, а игрался с формами попутно гугля и читая нужные мне главы. Потом начал ковырять жквери, не долго, может неделю-две, понял что этот то же жс только с МАГИЕЙ, ставишь $ и всё работает. Дальше пошёл в реакт, и сейчас ковыряю его, редуксы всякие не смотрел. Верстку особо не смотрел, никаких ледингов не верстал, верстку освоил чисто на том уровне чтобы работаь с ДОМом. Т.е. знаю пару css селекторов и основные хтмл артибуты.
Но всё чаще грусть тоска меня съедает когда я открываю hh, вакансий жунов жс без опыта почти нет, а если и есть то для этого ты уже должен быть версталой, знать препроцессоры, галпы, вебпаки, адаптивно верстать и всё вот это. Т.е. подразумевается что они больше нацелены на верстальщиков с минимальным знанием жс, которые будут верстать в реакте не забивая себе голову чем-то сложным. Т.е. вакансий нет блять. Но мне постоянно всплывают в рекомендациях вакансии жунов ПХП и требования не такие простыни, как на жс, обычно просят пхп, ларавель и сьюл и ОБУЧАЕМОСТЬ. Ну и я кароч думаю браться за пхп. Цель максимально быстро найти работу за 200-300 баксов в месяц.
Что скажете? Что посоветуете для максимально быстрого вката? Можно начинать учить сразу с фреймворка? С того же ларавеля? Нет времени пол года еще убивать на досканальное изучение ванильного пхп и т.д. Может есть какие-то убер годные курсы на пхп, платина? Помогите плиз. Или мне пиздец. Не хочу идти водителем убера работать.
Аноним 09/11/18 Птн 15:16:49 #390 №1292285 
>>1292273
>найти работу за 200-300 баксов в месяц
Лучше работай водилой за такие копейки.
Аноним 09/11/18 Птн 15:55:17 #391 №1292319 
>>1292285
спасибо, ваше мнение очень важно для нас.
Аноним 09/11/18 Птн 15:56:59 #392 №1292321 
>>1292273
>обычно просят пхп, ларавель и сьюл и ОБУЧАЕМОСТЬ
Пхп - ООП, MVC, паттерны, SOLID. Желательно: spl, генераторы, ссылки.
Laravel - eloquent, middleware, request, policies, doctrine, blade, webpack+npm
SQL - индексы, оптимизация запросов(explain/slow_query_log), джоины, типы данных, ключи, связи

Это чисто база, с которой тебя возьмут на джуна.
Т.е. ты меняешь шило на мыло. В любом случае знать нужно дохуя везде.
Аноним 09/11/18 Птн 16:00:17 #393 №1292325 
>>1292285
Ну реально блять, за 300 баксов пердолить пхп это ебанизм.
У нас дворники в два раза болше имеют. Они метут асфальт метлой.
Аноним 09/11/18 Птн 16:00:23 #394 №1292326 
>>1292273
Уже месяц пытаюсь вкатиться.
За это время выучил/подтянул
JS
C#
NodeJs
Java
jQuery
React
Yii
Linux
Сейчас ещё БД надо и с линуксом углубиться.
Если повезет, возьмут в контору с зп 30к.
Аноним 09/11/18 Птн 16:03:24 #395 №1292332 
>>1292326
>PHP, C#, Java, JS
Ты долбаеб? Тебя никуда не возьмут, если такой аркестр в резюме засунешь, определись конкретно с языком.
>30k
Слишком мало, тебя скорее не возьмут, потому-что ты за еду готов работать, а не потому-что ты тупой.
Аноним 09/11/18 Птн 16:07:31 #396 №1292335 
>>1292332
>Тебя никуда не возьмут, если такой аркестр в резюме засунешь
Почему? PHP и JS почти всегда стеком идут. Да и Java/C# (идентичные на 90%) тоже к вебу подходят

>Слишком мало, тебя скорее не возьмут, потому-что ты за еду готов работать, а не потому-что ты тупой.
Не, я не дурак. Я ж в резюме 40 написал! Это в вакансии 30 предлагают.
Аноним 09/11/18 Птн 16:19:07 #397 №1292354 
>>1292335
Работодатель не дурак. Он понимает, что если ты учишь 3 разных языка - то ты в каждом разбираешься на хуевом уровне.
Аноним 09/11/18 Птн 16:21:05 #398 №1292355 
>>1292354
Так я на стартовые позиции!
Да и сами они в резюме подобное пишут...
Аноним 09/11/18 Птн 16:22:54 #399 №1292357 
>>1292355
Потому-что резюме пишутся так:
- Ой, ребят, нам нужно нового проггера нанять, че в требованиях писать?
- Да накидай, чтоб программирование знал, ну там всякие алгоритмы, про язык нпиши
>Программирование - pascal, delphi, php, c++, c#, java, javascript...
Аноним 09/11/18 Птн 16:24:31 #400 №1292360 
image.png
>>1292357
Там, где я жду собеседования так и есть
Аноним 09/11/18 Птн 16:26:32 #401 №1292361 
>>1292360
Ну на собеседовании тебя про них и не спросят. Просто hr (тупая бабища) понакидала знакомых ключевых слов. Может оказаться, что это вообще не php собеседование.
Аноним 09/11/18 Птн 16:28:14 #402 №1292364 
>>1292361
А как тогда правильно в собеседовании указать?
Типа, я ж только в тегах написал, с чем знаком.
Аноним 09/11/18 Птн 16:28:24 #403 №1292365 
>>1292360
Интересный язык Py.
Аноним 09/11/18 Птн 16:28:55 #404 №1292366 
>>1292365
Python же!
Аноним 09/11/18 Птн 18:17:03 #405 №1292434 
Аноны, кто любит решать задачки? Поломайте голову, если хотите:

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

Предложите алгоритм или реализацию.
Аноним 09/11/18 Птн 18:18:25 #406 №1292435 
>>1292434
Предлагаю пытать раскаленным паяльником разработчиков таких фич. Только хочешь вкладку закрыть, так тебе на весь экран прилетает НИУХАДИТИ ПЛИС((9, это выглядит жалко и раздражает, не делойте так.
Аноним 09/11/18 Птн 18:24:55 #407 №1292438 
>>1292434
совсем блять охуели
показываешь красивое уникальное предложение сразу
???
профит
а теперь нахуй путешествуй
Аноним 09/11/18 Птн 18:30:03 #408 №1292442 
>>1292364
Пиши то, чем конкретно будешь заниматься. Т.е. нахуй выкидывай про Java и про C#. То, что ты человек-швейцарский нож сыграет только в минус в итоге. Тимлиду нужен человек, который любит один язык и изучает его, а не распыляется на хуй знает что, причем PHP и Java/C# - очень разные вещи и знать сразу два подобных языка на хорошем уровне - сложно, как минимум потому-что у них абсолютно разные задачи и подходы.
Аноним 09/11/18 Птн 19:29:29 #409 №1292479 
image.png
помогите пожалуйста, тут написано что выполняем операцию которая хранится в $op, но как мне ее выполнить или достать оттуда?
Аноним 09/11/18 Птн 19:38:21 #410 №1292487 
Вроде кидали чат в телеге сего треда, киньте еще раз
Аноним 09/11/18 Птн 20:24:25 #411 №1292516 
>>1292479
if ($op == ' '){
} elseif...
Я так решал. Если операция первая, то значение пустое и тогда я откладывал номер в результат, оп задавал. Ну и так далее
Аноним 09/11/18 Птн 20:26:53 #412 №1292518 
>>1292516
ну а как ты выполнял само умножение/сложение? до меня это не доходит
Аноним 09/11/18 Птн 21:00:19 #413 №1292531 
>>1292516
не, там логично все как в коде у ОПа, надо просто подумать.
Аноним 10/11/18 Суб 00:29:02 #414 №1292604 
Здрасти.
Мне нужно вот это:
echo file_get_contents('.passwd');
Перевести в non alphanumeric вид, типа того:
$___="\\$___";

Заранее спасибо.
Аноним 10/11/18 Суб 00:48:45 #415 №1292613 
image.png
>>1292479
Только слишком сильно не обоссывайте.
https://ideone.com/kW3eWB
Аноним 10/11/18 Суб 00:50:05 #416 №1292614 
image.png
>>1292613
Бля, картинка не та приклеилась.
Аноним 10/11/18 Суб 01:12:02 #417 №1292622 
>>1292434
Это джаваскрипт, а не пхп. На пыхе я никогда не смогу это определить
Аноним 10/11/18 Суб 01:32:47 #418 №1292627 
>>1292622
$a=readline("Вы хотите уйти со страницы? Y/N");
$a=strtoupper($a);
if $a='Y' { vigodnoe_predlojenie(); }
else { break; }
Аноним 10/11/18 Суб 01:39:21 #419 №1292631 
340-413

Ты просто пишешь if/elseif для каждой операции по типу:

if ($op == '+') {
$result += $number;
} elseif ($op == '-') {
$result -= $number;
} else {
неправильная операция $op;
}

Или что-то другое непонятно? Уточни тогда.

>>1292434

Ну ок, не хотите это, поломайте голову над задачками про ООП:

- ООП-Будильник: https://phpclub.tech/pr/res/1232710.html#1263399
- ООП-Гостиница: https://phpclub.tech/pr/res/1082507.html#1097078

>>1292321

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

>>1292207

Еще лучше спрашивать, "а зачем тут нужна стратегия, если можно if поставить вместо нескольких классов?" - это почти любого выбьет.
Аноним 10/11/18 Суб 01:39:54 #420 №1292632 
>>1292479

Ты просто пишешь if/elseif для каждой операции по типу:

if ($op == '+') {
$result += $number;
} elseif ($op == '-') {
$result -= $number;
} else {
неправильная операция $op;
}

Или что-то другое непонятно? Уточни тогда.

>>1292434

Ну ок, не хотите это, поломайте голову над задачками про ООП:

- ООП-Будильник: https://phpclub.tech/pr/res/1232710.html#1263399
- ООП-Гостиница: https://phpclub.tech/pr/res/1082507.html#1097078

>>1292321

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

>>1292207

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

Аноним 10/11/18 Суб 01:40:15 #421 №1292634 
>>1292201

Информация есть в мануале http://php.net/manual/ru/features.commandline.webserver.php

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

Немного про него у написано у меня тут: https://github.com/codedokode/pasta/blob/master/soft/web-server.md#%D0%B2%D0%B5%D0%B1-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80

Рест-API ты пишешь на PHP, а запускать можно с любым сервером - хоть с встроенным, хоть с нгинкс.

>>1292196

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

>>1292150

После смены PATH надо либо перезагрузить систему, либо разлогиниться/залогиниться.

>>1292117

В случае с бекслешами, проблема в том, что они интерпретируются в 2 местах:

- сначала PHP разбирает код и заменяет \\ на \
- затем эта строка передается движку регулярок и он уже интерпретирует последовательности с бекслешами

Чтобы увидеть, что получит движок регулярок, используй echo:

echo '\\\[ab]'; // выведется \\[ab] что понимается в регулярке как "ищи бекслеш, а далее идет a либо b"

У тебя явно ошибка в регулярке, чтобы написать "искать бекслеш", надо написать 4 бекслеша подряд:

echo '\\\\'; // выведется \\ что воспринимается в регулярке как "ищи 1 бекслеш"
Аноним 10/11/18 Суб 01:45:18 #422 №1292638 
>>1292133

С таким настроем лучше вообще ничего не писать.

>>1291497

Давай начнем с определений, прочти очень внимательно:

- класс объекта - это класс, который был указан при создании объекта в new: $a = new Child; // тут это Child
- "окружающий" класс - это класс, в коде которого использовано слово $this, self, итд (это название я сам придумал, не знаю, как это назвать. Статический контекст?).
- окружающий метод - метод, в котором использовано слово $this, self, итд

Также, пусть у нас есть такая цепочка классов: предок Grandparent (G) -> его наследник Parent (P) -> его наследник Child(C) (т.е. Child extends Parent, Parent extends Grandparent).

$this используется для обращения к обычному полю или обычному методу того же самого объекта. Поле или метод ищутся по цепочке наследников, начиная с класса объекта, и заканчивая самым древним предком (C -> P -> G)

$this->x = 1;
$this->y();

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

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

parent, self, static используются для указания на статическое поле, статический метод, или обычный метод в предке с тем же названием, что и окружающий. Допустим, код ниже написан в классе P и вызывается из объекта класса C:

parent::x() - обычный или статический метод x ищется от предка окружающего класса вглубь (G)
self::x() - статический метод x в окружающем классе или его предках (P -> G)
static::x() - статический метод x ищется от класса объекта к предкам (C -> P -> G)

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

Примеры обращений к статическим полям:

self::$x = 1;

Опять же, приватные поля/методы ищутся только в окружающем классе.

Не запутал?
Аноним 10/11/18 Суб 01:45:37 #423 №1292639 
>>291131

Тебе достаточно изучить основы HTML и HTML-формы. Вот урок, где есть пример передачи параметров в скрипт для его запуска и просмотра результатов в браузере: https://github.com/codedokode/pasta/blob/master/soft/web-server.md#%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0-%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2-%D0%B2-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82

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

Но старайся не смешивать логику программы с логикой ввода/вывода данных. Их надо разнести отдельно.

>>1291996

У тебя неправильно стоят фигурные скобки. Должно быть так:

if (условие 1) {
действия в этом случае;
} elseif (условие 2) {
...
} else {
...
}

Либо так (хуже):

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

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

Изучи внимательно, как работает if.

Аноним 10/11/18 Суб 01:46:16 #424 №1292640 
>>1291856

> Emails - https://ideone.com/K5xlAn
Задача была достать email из строки с текстом (где есть email и посторонние слова), а не из массива. Так что пока не то.

>Опечаточник - https://ideone.com/T9lkRz
Ты просто выделяешь все латинские буквы. Но надо искать случаи, когда слово состоит из букв обоих алфавитов, а если слово полностью на русском или полностью на английском, то это нормально.

>Grammar Nazi - https://ideone.com/092o3K
Тут ты скопипастил if 5 раз. А можешь без копипасты (подсказка: используй цикл по массиву правил)?

> "/\s+(а|но)/ui"
это правило сработает на слово "ночь".

> нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
Это правило у тебя не проверяется.

>Grammar Nazi Next - https://ideone.com/NU9Zee
Те же замечания, что к предыдущей задаче.

>Shift - https://ideone.com/L4JUTk
Неплохо, но можешь сделать, чтобы многоточия и другие группы знаков препинания не разбивало бы пробелами?

>>1291793

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

В else условие не пишут.

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

else ($anonSum == $compSum); {

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

if (...) {
...
} else {
// Это воспримется не как условие, а как действие для else
($anonSum == $compSum);
}

// Это не часть if, а просто сгруппированные команды
{
echo "Ничья, Победила дружба!\n";
exit();
}

Аноним 10/11/18 Суб 01:46:33 #425 №1292641 
>>1290686

Надо писать $this->names

Имя класса пишут с большой буквы.

Класс надо назвать не Phone, а PhoneList.

>>1290635

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

Также, ответ не похож на ответ от cloudflare и у тебя может быть просто ошибка.
Аноним 10/11/18 Суб 02:18:17 #426 №1292651 
Интересно Гитхаб дискриминирует пользователей винды.

Ставим в FF User-Agent Mozilla/5.0 (X11; Arch Linux; Linux x86; rv:52.3.0) Gecko/20100101 Firefox/52.3.0 и заходит на гитхаб - все ок.

Меняем там ОС на винду - Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.3.0) Gecko/20100101 Firefox/52.3.0 - появляется сообщение о неподдерживаемом браузере и отключается JS с кучей полезного функционала (по сути писать даже комментарии нельзя).

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

Это мне напоминает историю, когда Гугл постоянно ломал поддержку Оперы в своих продуктах, и это лечилось заменой User-Agent.
Аноним 10/11/18 Суб 02:40:17 #427 №1292656 
>>1292651
>Firefox/52.3.0
С разморозкой!
>Firefox/63.0
Аноним 10/11/18 Суб 02:46:16 #428 №1292659 
>>1292656

Так почему они банят ФФ 52 под виндой, но не банят под линуксом? Тебе не кажется, что логичнее банить малочисленных линуксоидов?
Аноним 10/11/18 Суб 03:29:53 #429 №1292664 
>>1292659
Ты против меньшинств? В php-треде?
Аноним 10/11/18 Суб 05:16:49 #430 №1292670 
»1292103
Не смогу конечно. Как раз сейчас делаю задачу по вектору, жжения в жопе от ООП не ощущаю. Единственное что - создаётся ощущение, что я делаю что-то не так. Пока не буду выкидывать код(т.к. он не дописан), но распишу что он из себя представляет. Надеюсь что Добрый Анон скажет где я проебался.
У меня объект компания, в котором лежит инфа о всех департаментах. От него зависит объект департамент, в котором записан лидер и название департамента . Далее работник, в котором вся инфа о работнике и дофига методов для тестов правильности заполнения, методов установки переменных, метод рассчёта, отладочный метод и прочее. Все, естественно, запривачено, а методы выше защищены, методы департамент и компания абстрактные. Конец. А отдельно живут функции создания объектов, создания разметки, массив с работниками который называется рекруты (я решил дать каждому работнику ещё и имя, хоть и условное, поэтому есть большой массив рекрутов с желаемым департаментом, именем и т.д.), функция распаковки массивка с последующей упаковкой объектов в массив, функция подсчета общих цифр по департаментам и, естественно, небольшой код, который запустит все это дерьмо. И вот когда я начал писать функцию подсчета общего числа работников, зп и прочего, у меня возникло чувство, что я что-то делаю не так. С одной стороны, это можно было запихнуть в объект департамента, а общий итог - в объект компании. С другой стороны департамент и компания - это абстрактные классы, а значит вызвать или создать объект из них я не смогу.
Подскажи, добрый Аноне, правильно ли я делаю?
Аноним 10/11/18 Суб 05:19:08 #431 №1292671 
>>1292670
Забыл еще написать, что у меня дохера комментариев, в которых обозначается что где есть. Ну, что есть, почти над каждой функцией я писал зачем она, а некоторый код, чтобы не выкидывать, я пихал в коммент и помечал что это вообще и откуда оно. Еще одна причина моего не особого желания выкладывать код. Он очень большой, в итоговом варианте вместе с массивом рекрутов и комментариями строк 300
Аноним 10/11/18 Суб 05:33:27 #432 №1292672 
>>1292671
И да, я столкнулся со вполне очевидной проблемой - не могу найти общую сумму т.к. все свойства объектов я сам же и защитил. Ну все, теперь я потерялся
Аноним 10/11/18 Суб 05:56:45 #433 №1292673 
>>1292672
>Доктор, у меня геморой, но я не буду его показывать, потому что я стесняюсь. Вооооот... Я сейчас его нарисую на бумужке!
Аноним 10/11/18 Суб 11:39:47 #434 №1292722 
>>1292631
>"а зачем тут нужна стратегия, если можно if поставить вместо нескольких классов?"
Да вроде этот вопрос обычно обкашливается в любой статье про этот паттерн, нет?
Аноним 10/11/18 Суб 11:41:19 #435 №1292726 
>>1292722
Хотя вообще, да. Норм вопрос. Как раз и солид затронет и в целом мышление человека.
Аноним 10/11/18 Суб 11:52:09 #436 №1292732 
Посоны, что там с дот ком баблом 2.0? Скоро уже или еще поживём?
PHP FRAMEWORK Аноним 10/11/18 Суб 11:52:49 #437 №1292733 
timthumb.php.jpeg
Работаю с пыхой уже давно. Сам язык хорошо знаю. Для сайтоделия использую Laravel. Чет захотелось покачать свои скилы и обуздать какой-нибудь новый фреймворк.

Что посоветует анон?

Пару лет назад постоянно на слуху был yii2, сейчас чето о нем слышу все меньше.

Часто слышу: Symfony и Zend, может задрочить что-то из этого? Еще давно мечтаю, но никак руки не доходили посмотреть на Slim - простой фреймворк, удобный для написания REST-API, стоит на него обратить внимание?
Аноним 10/11/18 Суб 11:59:44 #438 №1292738 
>>1292733
Странно. Те, кто действительно давно работают - в курсе, что Symfony и Laravel - это 2 доминанта. Laravel - для всего, Symfony - для энтерпрайза. Yii2 постепенно умирает, еще с тех пор, как их главный свалил.
Аноним 10/11/18 Суб 13:12:38 #439 №1292762 
>>1292738
> Laravel - для всего, Symfony - для энтерпрайза
Лараёб незаметен.
Аноним 10/11/18 Суб 14:50:53 #440 №1292835 
>>1292762
>top1 фреймворк PHP в мире
>ЛАРАЕБ ЫЫЫЫЫ РРРРЯЯЯЯЯЯЯЯЯЯЯ

Я лишь констатирую факт рынка, писал я и на Yii2, и на ларе, сейчас на проекте с Silex и Symfony работаю, пилим микросервисы со своим OAuth.
Аноним 10/11/18 Суб 14:56:05 #441 №1292840 
>>1292835
>>1292738
Двачую. Ларавел - это тот-же симфони, только немного обрезанный и "разболтанный", т.е. не такой строгий и с меньшими требованиями для макаки. Он даже построен на компонентах Симфони, лол, о чем речь?

>>1292762
Долбаеб детектед.
Аноним 10/11/18 Суб 14:59:14 #442 №1292842 
>>1292738
>Те, кто действительно давно работают - в курсе
это те, кто в конфах и тредах давно срется. У меня из-за работы хуй время есть даже разобраться что сейчас топчик.

Начальнику похуй. Клиент платит за то, что я пилю? Збс, а стек сам выбирай, что потребуется - то и юзай. Благо деньжатами не обижает, но времени рил нету. Я относительно недавно выкроил вемечко, чтобы обуздать некоторые свистоперделки седьмой пыхи
Аноним 10/11/18 Суб 15:02:17 #443 №1292844 
>>1281608 (OP)
Здравствуйте, товарищи программисты. Я начинающий. Не могли бы вы мне помочь понять, что делает эта функция? mysqli_fetch_array()
В гугле как то непонятно.
И почему в конце mysqli стоит буква i?
Аноним 10/11/18 Суб 15:06:03 #444 №1292847 
>>1292762
Не понял бугурта. Ларавел - это упрощенный Симфони, но без платной поддержки для энтерпрайза. А Симфони тем и ценится для большого бизнеса, что они покупают пакет платной поддержки, причем нехуевый такой, сравнимый с майкрософтовским. И при любой проблеме - они пинают саппорт и те фиксят всё, что угодно в кратчайшие сроки, в том числе туда входят и аудиты ПО и много чего еще интересного.
А с Laravel ты получаешь гулькин хуй, документацию и stackoverflow, ну и лишь надежду на то, что твои программисты сами смогут решать проблемы фреймворка и тратить на это время.

По рейтингам Laravel находится в топ 1 по миру. Дальше идет symfony. Yii2 к примеру еле догоняет по рейтингам Codeigniter.

>>1292842
>Начальнику похуй. Клиент платит за то, что я пилю? Збс, а стек сам выбирай, что потребуется - то и юзай.
Так если ты макака - то смысл вступать в спор о фреймворках? Для тебя лучшим решением может быть даже CMS. А лучше шли нахуй такого работодателя, повышай квалификацию и найди нормальную работу. У нас в компании разработка начиналась еще с 5.5 версии пыхи. И постепенно шли в ногу со временем. Сейчас осталось немного легаси с 5.6, которое активно выпиливается и переводится на 7.1, плюс есть докер и большие планы на кибернетс. Мой личный совет - вали с этого говна с "заказчиком", иначе можешь там надолго завязнуть.
Аноним 10/11/18 Суб 15:09:25 #445 №1292849 
>>1292844
Ничего. Забудь их нахуй, и если кто-то их будет упоминать не в контексте шутки - шли его тоже нахуй. Для белых людей уже давно есть PDO.
Аноним 10/11/18 Суб 15:17:01 #446 №1292859 
>>1292842
>Я относительно недавно выкроил вемечко, чтобы обуздать некоторые свистоперделки седьмой пыхи
Ты уже должен был по дефолту на ней сидеть. Поддержка 5.6 заканчивается через полтора месяца, лол блять.
Аноним 10/11/18 Суб 15:33:10 #447 №1292872 
>>1292849
Бляха муха, почему всё так сложно? Вроде только разобрался в одном, тут оказывается что это нахуй не надо, надо пользоваться другим. Щас опять пол дня учить как это работает....
Аноним 10/11/18 Суб 15:35:48 #448 №1292877 
>>1292872
Всё работает одинаково, забей.
Главное не забудь где доки.
Аноним 10/11/18 Суб 15:37:33 #449 №1292882 
>>1292872
Не сложно. Просто процедурный стиль никому нахуй не нужен сейчас, а встроенный в PHP PDO реализует унифицированный интерфейс и из коробки поддерживает основные БД, а с доп модулями - вообще все.
Аноним 10/11/18 Суб 15:39:41 #450 №1292884 
>>1292877
PDO сейчас уже обязателен по дефолту. Функции типа mysql_* уже давно deprecated и в скором времени вообще будут из языка удалены.
Аноним 10/11/18 Суб 15:42:34 #451 №1292887 
>>1292884
Я просто говорю, что учить-пол-дня там нечего.
Аноним 10/11/18 Суб 15:44:02 #452 №1292888 
>>1292887
Для новичка много чего - от prepared до транзакций (я в курсе, что они есть в SQL). Много чего на самом деле, интерфейс у пдо богатый.
Аноним 10/11/18 Суб 15:53:40 #453 №1292897 
Хелп!
По старому надо было сделать вот это:
while ($row = mysqli_fetch_array($result)) {
$publications[] = new NewsPublication;
}

как это сделать с помощью пдо?
Аноним 10/11/18 Суб 15:58:46 #454 №1292902 
>>1292897
Тебя в гугле забанили?
Достаточно ввести "pdo mysqli fetch array". А вообще. Забей хуй пока на код, иди и читай про ООП, про SQL и про PDO. Зачем ты сразу пытаешься использовать то, что даже не ебешь, как работает?
Аноним 10/11/18 Суб 17:17:19 #455 №1292946 
Блять нахуй я разобрался с этим пдо!!!!111 Мб я не так уж и плох как о себе мню!
Аноним 10/11/18 Суб 17:56:24 #456 №1292972 
>>1292946
Красава, уже решил на что 300к/нс тратить будешь?
Аноним 10/11/18 Суб 18:29:20 #457 №1292995 
>>1292972
Я сомневаюсь, что 5к/мес смогу делать, если честно.
Аноним 10/11/18 Суб 18:35:47 #458 №1293003 
>>1292995
Ну а вобще, если я смогу делать 20к/мес, это будет просто рай. Считайте я живу с мамкой и папкой, буду въябывать на фрилансе...иии что еще нужно для счастья, если не надо стоять в пробках, общаться с мерзкими людьми в офисах и тому подобное? Это просто предел мечтаний, аноны
Аноним 10/11/18 Суб 19:06:59 #459 №1293034 
>>1292840

Но там ведь все на статических методах ... Хотя в Симфони тоже почему-то до сих пор не могут отказаться от хранения реквеста в контейнере. Трудно из программиста выбить привычку хранить все в глобальных переменных.
Аноним 10/11/18 Суб 20:55:36 #460 №1293137 
>>1293003
Хз, на первой работе 60 получал сначала. 20к мес - это смешно даже для погромца в мухосрани.
Аноним 10/11/18 Суб 20:57:17 #461 №1293139 
>>1293034
>Но там ведь все на статических методах
Что? Фасады - инжектятся, все остальное тоже инжектится, и никакой статики.

>Хотя в Симфони тоже почему-то до сих пор не могут отказаться от хранения реквеста в контейнере.
Не вижу ничего плохого, контейнеры юзаются не только в пыхе, но и в большинстве других языков.
Аноним 10/11/18 Суб 21:04:26 #462 №1293141 
>>1293137
Я про фриланс имею в виду. Мне много не надо....
Аноним 10/11/18 Суб 22:36:25 #463 №1293208 
>>1287151
ОП, вот мои еще проверь пожалуйста.
ТЕЛЕГРАМ Аноним 11/11/18 Вск 01:28:44 #464 №1293315 
У вас есть конфа телеговская?
Аноним 11/11/18 Вск 01:35:06 #465 №1293320 
Сап двач. Может кто знает какие-то книги про погромирование в целом? Стэк я учу понемногу, но не всегда понимаю как лучше написать и т.п.
Вот например два варианта кода в контроллере
if ($request->isValid()) {
...
return new Response($payload, 200);
} else {
return new Response($errors, 400);
}

или же

if ( !$request->isValid()) {
return new Response($errors, 400);
} ...elseif(...){}
else {
return new Response($payload, 200);
}

Есть ли вообще разница?
Аноним 11/11/18 Вск 04:25:12 #466 №1293366 
IMG20171223155405140.jpg
Как у вас тут лампово, сегодня вечером вкатываюсь.
Аноним 11/11/18 Вск 07:26:28 #467 №1293372 
как же лень js учить пиздец
Аноним 11/11/18 Вск 08:36:41 #468 №1293375 
>>1293320
Нафига после ретурн ставить элс, сам подумой.

if (! $хрень1) {
return
}
if (! $хрень2) {
return
}
if (! $хрень3) {
return
}
Аноним 11/11/18 Вск 08:47:17 #469 №1293378 
>>1293372
А зачем пхп программисту жаба скрипт?
Аноним 11/11/18 Вск 08:54:22 #470 №1293379 
Стикер
>>1293378
Чтобы писать микросервисы на ноде
Аноним 11/11/18 Вск 10:24:34 #471 №1293399 
71507285p0master1200.jpg
Короче, работу в моем мухосранске искать бесполезно. Начну, тогда уж, в понедельник тестхаб писать.
Аноним 11/11/18 Вск 11:11:23 #472 №1293410 
>>1293315
Есть другая конфа для вкатывальщиков
Аноним 11/11/18 Вск 11:23:24 #473 №1293412 
>>1293410
А эта чем тебя не устраивает?
Аноним 11/11/18 Вск 13:02:23 #474 №1293472 
Мне очень тяжело читать официальную документацию. Есть какие нибудь ресурсы, где всё описано для дибилов, на подобии прекрасных, на мой взгляд, уроков этого треда?
Аноним 11/11/18 Вск 13:19:57 #475 №1293491 
Когда можно начинать выкладывать свой говнокод? У меня нет никаких практических реализаций работающих сайтов, но есть решения небольших задачек.
Возможно, мне хотелось бы, чтобы анон заценил и ткунл меня носом в говно. Так вот, где публиковать, что читать по этому поводу, есть ли вобще в этом смысл? Краем уха слышал про гитхаб.
Аноним 11/11/18 Вск 13:23:20 #476 №1293496 
>>1293315
php2ch
Аноним 11/11/18 Вск 13:25:03 #477 №1293497 
>>1293399
Анимешник, го в телегу.
Аноним 11/11/18 Вск 13:27:47 #478 №1293499 
>>1293472
Дебильно и на русском языке

https://www.youtube.com/watch?v=Mg3iNP6miCE&list=PLpY_9m7gHQDhnuePAb3UN1XSih9kFXjG0
Аноним 11/11/18 Вск 13:29:35 #479 №1293500 
>>1293491
Если ты решаешь задачки ОПа, то я думаю стоит выкладывать свои поделки начиная со списка студентов.
Аноним 11/11/18 Вск 13:33:43 #480 №1293502 
>>1293500
Задачки опа я решил давно. С горем пополам правда. Теперь я делаю более практичные вещи, типо вывода нужных элементов из бд на страницу и всё такое.
Аноним 11/11/18 Вск 14:55:40 #481 №1293551 
>>1293502
Скорее всего он имел в виду задачки типа
https://github.com/codedokode/pasta/blob/master/student-list.md
Аноним 11/11/18 Вск 18:24:47 #482 №1293685 
>>1293496
Все. Меня выгнали тамошние каклы
Аноним 11/11/18 Вск 19:18:27 #483 №1293707 
>>1293685
>Начал срач за JS в конфе PHP
>Начал срач про хохлов в конфе PHP

>Меня выгнали тамошние каклы
Аноним 11/11/18 Вск 19:39:04 #484 №1293716 
>>1293707
Просто школодаун порвался от того, что ему сказали, что фотошоп - не программирование и решил уйти с чата, мол пока меня не кикнут (ато ему неприятно это слышать) он не вернется - всем было похуй, потом пришла его хохло-шлюха и как и подобает устроила майдан во имя этого ЧСВшного долбоеба.

Срач я вообще не начинал. Просто сказал, что дизайнер != программист и с хохлами не общаюсь. Остальное - бугурт обиженок
Аноним 11/11/18 Вск 20:10:23 #485 №1293730 
>конец 2018
>до сих пор не знать, что в конфах сидят либо какие-то мегауспешные охуенные челы (шанс 1%) либо долбоебы-вниманиебляди (шанс 99%)
Аноним 11/11/18 Вск 20:19:18 #486 №1293736 
>>1293730
хз. Большая пхпшная конфа состоит вроде из адекватов, которые как и положено погромистам предрасположены и устойчивы к хардкорным шутейкам
Аноним 11/11/18 Вск 20:48:28 #487 №1293752 
>>1293716
Иди со своим битриксом работай, долбаеб.
Аноним 11/11/18 Вск 20:57:05 #488 №1293761 
>>1293752
Каво? А это ты тот обучатель вкатывальщиков? Как там твоя занудная конфа толерантных геев поживает? Вкатываетесь друг в друга? Докер осилил или что ты там не мог обуздать?
Аноним 11/11/18 Вск 20:59:46 #489 №1293765 
>>1293761
>>1293763

Долбаеб, мы твой гитхаб посмотрели и поржали над твоими дополениями для битрикса. Долбаеб еще что-то там вякает про js...
Аноним 11/11/18 Вск 21:05:01 #490 №1293768 
>>1293765
Лол, но ведь я не работаю с битриксом.
А на гитхабе пара высеров, которым овер год. Среди которых нет битрикса, но зато есть пара годных ботов. Например бот рассылки сообщений по авито с интерфейсом, антикапчей, ЛК и пр. Сомневаюсь, что кто-то из вашей гомо конфы способен написать что-то подобное. Писал я это больше года назад и сейчас бы писал по другому, но что забавно, что меня пытался обоссывать 3х месячный вкатывалищик.
Аноним 11/11/18 Вск 21:12:00 #491 №1293774 
>>1293768
>>1293765

Прекращайте флуд. Хвастаться скриптами для рассылки спама можно в каком-нибудь другом треде.
Аноним 11/11/18 Вск 21:47:30 #492 №1293810 
>>1293774
>Двач
>Прекратите флудить!

))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
Аноним 11/11/18 Вск 21:57:23 #493 №1293819 
>>1293768
Ты какой-то ебанутый.
Аноним 11/11/18 Вск 21:59:00 #494 №1293821 
>>1293774
>Прекращайте флуд
Вся суть этих конф кстати.
Как только начинается какой-то спор, что нормально впринципе, особенно в тематических чатах, для того они и существуют. Так сразу админа рвет, что его гомосексуальное болото потревожили и блочит несогласных.
Аноним 11/11/18 Вск 22:08:17 #495 №1293829 
Ребят, надо сверстать сайт-визитку быстро и разместить на хостинге(посоветуйте/желательно,чтобы сервер размещался в германии). Есть ли гайды для дурака как я? Или надо 3-4 месяца изучать php+ html/css.
Аноним 11/11/18 Вск 22:19:05 #496 №1293833 
>>1293829
Это задачка подстать программистам. Тут в конфе какраз сидят хтмлные прогеры, помогут:
>>1293496
Аноним 11/11/18 Вск 22:28:56 #497 №1293842 
>>1293821
Нет, ты просто ебанашка обоссаная.
Конфы для того и нужны что они тематические, а ты пришел яйцами трясти и разводить срач.

мимо сторонний наблюдатель
Аноним 11/11/18 Вск 22:32:02 #498 №1293844 
>>1293821
>Заходишь в конфу PHP
>Начинаешь ныть, как же ты ненавидишь блядский JS, и что JS - это вообще не программирование
>Тебя просят пройти нахуй, ибо конфа про PHP
>Начинаешь агриться на хохла и нести хуйню про порошенко и хохлов в целом
>Получаешь бан
>РРРРРРРЯЯЯЯЯЯЯЯЯЯЯ АДМИН ПОДСОСЫ ГЕИ 3х МЕСЯЧНЫЕ ВКАТЫВАЛЬЩИКИ, БОЛОТО БЛОЧАТ НЕСОГЛАСНЫХ

Ты прям реально какой-то шизик, это уже даже не смешно.
Аноним 11/11/18 Вск 22:45:57 #499 №1293850 
>>1281608 (OP)
ОП, пора делать перекот.
Аноним 11/11/18 Вск 22:46:29 #500 №1293851 
>>1293844
>Начинаешь ныть, как же ты ненавидишь блядский JS, и что JS - это вообще не программирование
Не говорил такого. Говорил, что фронтенд - это дизайнерство, где программирование используется для дизайнерства. Вообще про жс ничего не говорил толком.

>Тебя просят пройти нахуй, ибо конфа про PHP
Конфа про пхп, а мне начали рассказывать, что я не прав и хтмл - это программирование. А еще кинули 3д модельку и сказали глянь как красиво = программироание

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

Пиздлявая ты макака
Аноним 11/11/18 Вск 22:48:16 #501 №1293853 
>>1293851
Твоя шизофрения прогрессирует, ты уже сам придумываешь прошлое и веришь в него, кажись. Жесть. Любой человек может зайти в конфу, пролистнуть историю и увидеть, что ты пиздишь. Не стыдно?
Аноним 11/11/18 Вск 22:52:01 #502 №1293855 
>>1293853
Так зайди и пролистни. Каково это жить в манямирке?
Аноним 12/11/18 Пнд 01:00:09 #503 №1293920 
>>1293850

Нет, рано. Мы обычно еще несколько дней или недельку сидим в бамплимите. Треды тут тонут очень медленно, и много не провереных задач. Так что подождем.
Аноним 12/11/18 Пнд 08:08:24 #504 №1293987 
>>1293920
>Мы обычно еще несколько дней или недельку сидим в бамплимите
Нахуя?
Аноним 12/11/18 Пнд 10:03:07 #505 №1294008 
>>1293987
Дочитай фразу, шизик.
Аноним 12/11/18 Пнд 14:04:44 #506 №1294146 
2121212.png
Вы чего? Какие 49 лет до миллиона, когда анону каждый год будет капать +1000 рублей к основному депозиту в десять тысяч рублей?
Аноним 12/11/18 Пнд 15:00:39 #507 №1294199 
>>1294146
Не 1000, а 10% от предыдущей суммы. Первый месяц - 1000р, потом - 1100р, 1210р, и т д
Аноним 12/11/18 Пнд 15:34:33 #508 №1294234 
>>1294199
> Первый месяц - 1000р, потом - 1100р, 1210р, и т д
Какой нахуй первый месяц? Ты ёбаная жертва ммм и кэшбери!!! У тебя в условии 10% ГО ДО ВЫХ. Это в месяц менее 100₽, со второго года уже от 11к надо считать и так далее.
Аноним 12/11/18 Пнд 15:49:11 #509 №1294248 
Анон, студия разработки сайтов ищет людей в свой коллектив для работы над проектами. Свободный график, свободный выбор задач без конкуренции, все онлайн. Для участия необходимо знание технологий веб-разработки на минимальном уровне и готовность пользоваться гуглом. Подробности телега @cg002
Аноним 12/11/18 Пнд 15:52:39 #510 №1294253 
>>1294248
Ахахахха ну и галера. Оплата 300кк/пикосекунду два раза в месяц?
Аноним 12/11/18 Пнд 16:54:40 #511 №1294287 
>>1294199
Не, програмирование - это не моё
Аноним 12/11/18 Пнд 17:08:26 #512 №1294302 
>>1294248
Че ж стек не написали?
Аноним 12/11/18 Пнд 17:17:49 #513 №1294312 
image.png
>>1294302
>Че ж стек не написали?
>знание технологий веб-разработки на минимальном уровне и готовность пользоваться гуглом
Стэковерфлоу же.
Аноним 12/11/18 Пнд 18:19:45 #514 №1294375 
>>1292640
Исправленное:
emails -https://ideone.com/QSOmHS
Grammar Nazi - https://ideone.com/kcqacc
Grammar Nazi Next - https://ideone.com/3wddIK
Над shift и опечаточником пока думаю.
Новое:
Yoda speak - https://ideone.com/RkU2vP
Числа прописью - https://ideone.com/pbxcf4
Аноним 12/11/18 Пнд 19:00:57 #515 №1294403 
>>1281608 (OP)
Аноны, поясните, пожалуйста, за регулярные выражения

Выражение такого вида:
if(preg_match("~Жепа~", "Жепа")){
echo "zbs";
}

Распечатает zbs, потому что прег матч вернет 1.
Но если я во второй аргумент подставлю Жепа123, то скрип тоже сработает. Как сделать, чтобы он не сработал?
Аноним 12/11/18 Пнд 20:28:18 #516 №1294447 
>>1294403
>скрип тоже сработает
>Как сделать, чтобы он не сработал?
Ошибку сделай. Например вместо if напиши hui
Аноним 12/11/18 Пнд 20:36:38 #517 №1294455 
>>1294403

Почитай про ^ и $. Регулярка по умолчанию не требует полного совпадения со строкой, достаточно, чтобы она совпадала с кусочком строки.
Аноним 13/11/18 Втр 01:27:42 #518 №1294621 
Не уверен что пишу в правильный тред, но тем не менее прошу совета бекендеров. Не совсем php-related.

Есть один сайт, он высоконагруженный поэтому работает на нескольких серверах, балансировка через round-robin dns, то есть пользователь по сути попадает на случайный. База mysql, один мастер пара слейвов. Есть разные штуки которые хотелось бы кешировать в мемкеше, но проблема в том, что когда данные инвалидируются (например обновилась запись в базе) то кеш надо инвалидировать на всех серверах на которых они могли быть добавлены в мемкеш. Как в принципе решается эта проблема?
Аноним 13/11/18 Втр 02:19:17 #519 №1294638 
programmist.jpg
>>1294621
>, то есть пользователь по сути попадает на случайный. База mysql, один мастер пара слейвов. Есть разные штуки которые хотелось бы кешировать в мемкеше, но проблема в том, что когда данные инвалидируются (например обновилась запись в базе) то кеш надо инвалидировать на всех серверах на которых они могли быть добавлены в мемкеш. Как в принципе решается эта проблема?

много как ! желательно сеньером с опытом ;)

1. кластер мемкешей\редисов отдельный, куда конектятся "несколько серверов", так же все эти сервера могут быть соеденены в мастер-слейв мемкеш кластер ( да, такое практикуется )
2. избегать инвалидности. все сервера с кешем юзают апи, которое при обновлении данных в бд не просто обновляет кеш у себя на сервере, а так же делает все операции на удаленных серверах.
3. мемкеш пхпшный позволяет давать команду группе мемкеш серверов ( почитай доку ). бывают проблемы с проходимостью соединений, решается разными способами
4. сделать отложенное обновление кеша, когда спец тулза раз в минуту обновляет мемкеш везде. очень удобно когда обьем данных в мемкеше измеряется гигабайтами, и изменение одной записи ведет к длинным запросам и выгрузке большого куска данных

5. не юзать round robin, есть более удобные механизмы. определять принадлежность юзверя по куке к примеру, это умеют делать балансеры

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

зы. если деления по гео нет - проблема с херовой архитектурой. но так часто бывает.
когда прожект начинает жить на 8-10 серверах каждый разраб начинает жалеть что не придерживается принципа модульности. одну жирную тушу тяжело сапортить, намного проще побить на сервисы типа чат, топ-10 и подобные, тяжелым дать выделенный сервер, легкие поселить на один сервер.
когда чат становится "жирной тушей" начинать делить его на более мелкие части и т.д.
Аноним 13/11/18 Втр 03:11:57 #520 №1294656 
>>1294638
Спасибо за такой подробный ответ!
>много как ! желательно сеньером с опытом ;)
Ну, все сеньеры ведь когда-то учились и набирались опыта, вот и я.
Аноним 13/11/18 Втр 03:39:49 #521 №1294664 
>>1294621

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

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

Алсо, я бы смотрел на редис - это как мемкеш, только с кучей наворотов.
Аноним 13/11/18 Втр 03:41:27 #522 №1294665 
>>1294638

> возможно прокатит выгружать раз в 5 минут измененные данные в кеш с серва с бд.

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

Аноним 13/11/18 Втр 04:24:45 #523 №1294668 
>>1294638

> одну жирную тушу тяжело сапортить

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

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

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

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

> намного проще побить на сервисы типа чат, топ-10 и подобные

Только проблему географической распределенности это не решает никак.
Аноним 13/11/18 Втр 04:25:04 #524 №1294669 
>>1294375

> emails -https://ideone.com/QSOmHS
Уже лучше, но тут есть небольшой подвох. Ты дампишь весь массив matches, и если в регулярке будут круглые скобки, то там будут кроме email еще попавшие в эти скобки куски email. Надо выделить из массива результатов только email.

> Grammar Nazi - https://ideone.com/kcqacc
Ок, но ты выводишь одно и то же предложение несколько раз. Можно его вывести один раз и показать все ошибки сразу?

Также, ты можешь захотеть почитать мануал по preg_replace.

> "/\s+(а|но)\s/ui"
После "но" может быть не только пробел, но и, например, запятая, и многоточие. Лучше использовать признак границы слова.

> Grammar Nazi Next - https://ideone.com/3wddIK

Та же проблема с "но".

> "/([.?!:,])\s+/u" => "$1 "
Это вставит пробелы в многоточие. А можно ли исправить это?

> Yoda speak - https://ideone.com/RkU2vP
Хорошо, но надо бы сделать первые буквы предложений заглавными.

> Числа прописью - https://ideone.com/pbxcf4

Для числа 999011012 выдает фигню: https://ideone.com/YtpKrI

Сделай более тщательное тестирование. Когда ты делаешь какую-то задачу, ты всегда сам должен ее внимательно протестировать, так как чем раньше обнаружится ошибка, тем дешевле и быстрее ее исправить. Вот подсказка, какие числа стоит брать: 0, 1, 2, 5, 9, 11, 12, 15, 19, 91, 92, 99 и еще добавить к ним сотни. Числа, где есть миллионы, но нет тысяч или единиц

> function word($number, $words)
Надо бы ставить тайп-хинты. Тайп хинты позволяют указать, что аргумент функции должен быть определенного типа (например быть строкой, массивом или целым небольшим числом). Тайп хинт делает код понятнее (так как видно, какого типа переменная) и надежнее (так как PHP не позволит передать что-то неразрешенное и ты сразу увидишь ошибку). Также он позволяет указать тип возвращаемого значения. Используй их везде.

Мануал: http://php.net/manual/ru/functions.arguments.php#functions.arguments.type-declaration

> if ($hundred != 0 && $hundred > 99) {
Первая часть условия бессмысленна.

> if ($tensAndUnits <= 20 && $tensAndUnits > 9)
Лучше переставить условия местами для читаемости. Сначала 9, потом 20

> $resultExp .= " " . $numbers[$hundred];
Можно еще складывать слова в массив, а в конце функции его склеить. ТОгда не надо возиться с удалением лишних пробелов.

> $i = strlen((string)$number);//Считаем количество цифр
Костыльно. Почему бы тебе не воспользоваться функцией десятичного логарифма log10? Для log10(1) = 0, log10(10) = 2, log10(100) = 3 итд.

Твой костыль довольно уязвим. Например, если ему дать число 1.1, он сделает ошибку, то же самое для очень большого числа вроде 1000000000000000000000 (оно отформатируется как 1e20). Не стоит работать с числом как со строкой.

> $threeDigits = intval(floor($number / pow(10, $i - 3)));//Получаем первые 3 цифры
> $firstTwoDigit = intval(floor($number / pow(10, $i - 2)));//Получаем первые 2 цифры
Можно без этой унылой копипасты одинаковых кусков кода?

> $resultExp = preg_replace("/один\sтысяча/u", "одна тысяча", $resultExp);
Костыльно. Давай лучше с самого начала генерировать правильную форму слов.
Аноним 13/11/18 Втр 14:43:15 #525 №1294857 
4957cc90ec.jpg
>>1294669
мое, глянь позязя, ОП. Заранее пасибо.
>>1287151
Аноним 13/11/18 Втр 16:29:18 #526 №1294899 
Анончик, для чего используется это?
<?php } ?>
Аноним 13/11/18 Втр 17:22:03 #527 №1294952 
>>1294669
Исправил:
Числа прописью - https://ideone.com/yhrxPg
Yoda speak - https://ideone.com/HM3Xci (3 пик)
Grammar Nazi - https://ideone.com/V1k3eX
Grammar Nazi Next - https://ideone.com/QaRhUG
Опечаточник - https://ideone.com/JTJWb7
Вопрос: проверял Числа прописью и ввёл число 5909123000, когда хотел получить остаток вместо 909123000 возвращается 614155704. Почему? Я погуглил и PHP_INT_MAX у меня 2млрд, что больше, чем 909 млн? так что не должны же последние биты убираться или что там в подобных случаях делает яп.
По поводу GN: в одну строчку можно было, но там получается бардак, и я пока не смог догадаться не до чего лучше, чем по разному обозначать разные ошибки. Плюс ко всему, некоторые правила срабатывают на новые вставки в текст, пик 2
Аноним 13/11/18 Втр 17:22:34 #528 №1294953 
pr3.png
pr4.png
pr5.png
>>1294952
Аноним 13/11/18 Втр 18:29:05 #529 №1294987 
>>1294899
Закрывающая скобка, идущая обработчику пхп. Скорее всего в файле перемешана логика и отображение, что плохо.
Аноним 13/11/18 Втр 18:34:28 #530 №1294990 
>>1294638
>пик
Жиза.
Аноним 13/11/18 Втр 18:51:33 #531 №1294999 
>>1293320
>Есть ли вообще разница?
Нету. Просто один вариант негатив другого.
Аноним 14/11/18 Срд 05:21:13 #532 №1295232 
>>1281726
Зачем ставить, когда можно напиздеть? Всегда говорю что у меня мак дома. Никто же не прийдёт ко мне домой и не проверит. Или как ты себе представляешь? Пойдёт HR проверять к тебе что такм у тебя стоит, и если линукса нет - прямо на месте обссыт?
Аноним 14/11/18 Срд 06:37:34 #533 №1295242 
f95286b2c85ac73e030aa2ac2e272.gif
>>1294987
Спасибо.
Аноним 14/11/18 Срд 16:49:16 #534 №1295446 
>>1295232
>но напиздеть? Всегда говорю что у меня мак дома. Никто же не прийдёт ко мне домой и не проверит. Или как ты себе представляешь? Пойдёт HR проверять к тебе что такм у тебя стоит, и если линукса нет - прямо на месте обссыт?

ахахаха, тебе сука дадут мак и посмотрят как ты там lamp настроишь. а после того как ты будешь делать это в течении 2-5 дней с мануалом под рукою, обоссут и выгонят ссаными тряпками.
пиздаболов дохуя, айчар не спалит, а твои коллеги по галере быстро стуканут, нахуй им на галере такой гребец
Аноним 15/11/18 Чтв 01:39:26 #535 №1295659 
>>1295446
> lamp
> в конторе занимающейся кодингом
> lamp
> Настраивать 4 дня, когда он ставится за 2 клика
Ты ебанутый? Во первых никто на производстве ламп не юзает (ну разьве что ИП Ероха). Во вторых - мак от винды отличается только парой консольных команд. Ну и утилиты там другие - да. Но по сути VScode и там и там. Gitbach пульный, утилиты тестирования - вообще считай клоны.
Аноним 15/11/18 Чтв 02:54:25 #536 №1295684 
>>1295659
*за мат извени
Аноним 15/11/18 Чтв 03:22:19 #537 №1295691 
Блин фреймворки фреймворки...дали тестовое задание запилить что-то вроде http://preview.codecanyon.net/item/quickquiz/full_screen_preview/13641603

гуггления приводили на разные фреймворки , первый из которых silex я изучал дня 2 пока не вкурил, что он не поддерживается уже год.. потом был pyrocms.com...на гитхабах во всех репозиториях комментарии по getting started в стиле ультра-минимализм. Забивают поиск своим не упершимся в хуй гениальными Rock высерами.
Вот это чудо у кого нибудь получилось оживить https://github.com/formers/former ? - а рейтинг зашкаливает у чувака. У этой Cупер-Хуйни - pyrocms.com половина страниц в демо: 500. Или может я совсем необучаемое быдло. Просто интересно фреймворки кому-нибудь реально облегчали жизнь?

Аноним 15/11/18 Чтв 08:45:12 #538 №1295737 
Снимок экрана 2018-11-15 в 8.40.25.png
>>1295691
>что он не поддерживается уже год..
Это тебе голоса в голове сказали?
Аноним 15/11/18 Чтв 10:48:18 #539 №1295769 
images.jpg
Дратути. К вам прибыла очередная макака. Вопрос: какую редакцию начинать изучать. php5 или php7? В чем принципиальная разница?
Аноним 15/11/18 Чтв 10:54:33 #540 №1295771 
>>1295769
>очередная макака
Исходя из твоего вопроса, ты еще не макака даже, а так.

>php5 или php7?

5.6 еще актуален и какое-то время останется, тк много на нём написано говна, которое требует поддержки, доработки.
ПРИНЦИПИАЛЬНОЙ разницы нет, особенно для новичка. Основные конструкции ничем не отличаются.
Главная фишка пхп 7 это производительность, которая взлетела чуть ли не в два раза, всё остальное это улучшение ооп, новые операторы типа <=>, типизация.
Аноним 15/11/18 Чтв 10:59:29 #541 №1295775 
>>1295771

Ясно, спасибо. Буду сходу в 7й вкатываться.
Аноним 15/11/18 Чтв 12:14:30 #542 №1295797 
Какие технологии и фреймворки сейчас востребованы, за что готовы платить деняки на фрилансе?
Аноним 15/11/18 Чтв 12:27:53 #543 №1295799 
Аноны, я нуфажина
Приобрел свой бесплатный хостинг, учусь по видеоурокам. Там сказали не запариваться по поводу настройки веб сервера и настроить .htaccsess как сказал он. Вот настройки:
RewriteEngine On
RewriteBase /MVC/ /у меня много папок на хостинге, конкретно в этой я учусть делать mvc/

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^(.*)$ index.php

Все ок, все работает, кроме того, что не подгружаются стили. В чем может быть проблема?
Аноним 15/11/18 Чтв 12:34:14 #544 №1295804 
>>1295799
>Все ок, все работает, кроме того, что не подгружаются стили
Что в консоли пишет браузер?
Аноним 15/11/18 Чтв 12:53:02 #545 №1295817 
>>1295804
Пишет не удалось загрузить таблицу стилей hostname.com/MVC/templates/default.css
Аноним 15/11/18 Чтв 13:02:06 #546 №1295823 
>>1295817
Заработало! Я нахуевертил с путями.
Аноним 15/11/18 Чтв 13:07:11 #547 №1295825 
>>1293320
СИКП, ХТДП, совершенный код.
Лучше пиздуй на Хекслет, там тебя научат (если хочешь учиться)
Аноним 15/11/18 Чтв 13:17:28 #548 №1295832 
>>1295737
Значит костылик запилили .. временный.. Потому как я читал июньские посты нескольких людей что ВСЕ

Как установить вот эту приблуду https://github.com/anomalylabs/button_block-extension в свой проект?
Без Ларавеля она не заработает же..
Аноним 15/11/18 Чтв 13:19:33 #549 №1295833 
>>1295797
Я тоже нуб, промудохался с фреймворками и решил пока это поизучать
https://github.com/bradtraversy/php_rest_myblog
Аноним 15/11/18 Чтв 13:51:52 #550 №1295848 
>>1295833
Чо это такое, зочем нужно?
Аноним 15/11/18 Чтв 14:01:33 #551 №1295851 
>>1295832
composer require 'anomaly/button_block-extension'
Аноним 15/11/18 Чтв 15:30:24 #552 №1295872 
Есть вопрос по работе с таймзонами в MySQL и Doctrine.
В проекте используется подход с конвертацией времени в UTC на стороне Doctrine: https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/cookbook/working-with-datetime.html#handling-different-timezones-with-the-datetime-type

Проблемы начинаются тогда, когда нужно группировать данные по дате. Данные в БД сконвертированы в UTC, но пользователю нужно показать данные, сгруппированые с учётом его таймзоны. Использовать функцию convert_tz у MySQL? В таких приложениях нужно ли просить пользователя указывать свою таймзону где-то у себя в настройках или нам, как разработчикам, нужно самим угадывать его таймзону? Какие вообще стандартные практики при разработке приложений, которыми будут пользоваться люди с разными таймзонами? Было бы круто, если бы ОП добавил урок на эту тему в репозиторий на гитхабе.
Аноним 15/11/18 Чтв 15:31:56 #553 №1295874 
>>1295851
А зачем в кавычках?
Аноним 15/11/18 Чтв 15:36:07 #554 №1295877 
>>1285899
Зачем платить за курсы, если нет свободных денег?
Да и тем более, большинство информации есть в свободном доступе, просто на курсах все удобно распределено, ну или типа того
Все равно придется самому писать многие вещи и все самому постигать
https://nnm-club.me тут можешь чекнуть курсы, не только от лофтскул

Удачи
Аноним 15/11/18 Чтв 17:30:00 #555 №1295909 
>>1285899
https://ru.hexlet.io/?ref=104929
рефссылочка.
Отзывы найдешь в интернете.
Самый адекватный ресурс.
Аноним 15/11/18 Чтв 22:08:18 #556 №1296030 
https://ideone.com/VssKNl

Только начал изучать, у ОПа в учебнике задача с айфоном. Вопрос: можно ли делать, так как у меня? Всё вроде сходиться, по всем примерам. И да, я не заморачивался с переменными, как у ОПа, а просто наебашил матьимачехи.
Аноним 16/11/18 Птн 00:40:09 #557 №1296086 
https://ideone.com/E1A6CC
Влетел ещё с одним, долго голову ломал, всё так?
Аноним 16/11/18 Птн 17:21:12 #558 №1296297 
527-557

>>1296086

> for ($i=0;$i<9;$i++) {
> $massivWord = $allWords[$i];

Для перебора массива лучше использовать foreach, а то у тебя при изменении списка слов надо считать его длину вручную. А "\n" можно было точно так же вставить в массив.

> echo "$poem";
Кавычки тут не нужны: echo $poem; В кавычки помещается текст (можно с переменными), а если у нас одна переменная, то ей кавычки не нужны.

>>1296030

> (($credit/100)3);
Проценты лучше вынести в переменную. Во-первых, будет по названию понятно, что это за число, во-вторых, менять будет проще.

> $realPrice=$realPrice+1000+(($credit/100)3);
> $credit=$credit+1000+(($credit/100)*3);
Тут почти копипаста. Общую часть стоит вынести в отдельную переменную.

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

>>1295872

> Данные в БД сконвертированы в UTC, но пользователю нужно показать данные, сгруппированые с учётом его таймзоны.

Да, придется преобразовывать дату в запросе. Стоит глянуть, не повредит ли это производительности запроса.

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

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

Также, желательно писать, в каком часовом поясе время. Ну и протестировать все это тщательно.

Насчет определения. В HTTP-заголовках эта информация не передается. Определить смещение от UTC (на компьютере пользователя) можно кодом на JS (и сохранить в куку), но при первой загрузке страницы время еще неизвестно и потому можно угадывать его по GeoIP.
Аноним 16/11/18 Птн 17:22:03 #559 №1296298 
>>1295833

Обрати внимание, что там есть проблемы:

- в начале каждого контроллера иет копипаста, выставляющая хедеры: header('Access-Control-Allow-Origin: *'); ...
- кстати, изучи, что каждый из них делает, не копируй бездумно
- здесь нет проверки на ошибку декодинга JSON: $data = json_decode(file_get_contents("php://input")); Надо проверять, что в $data не null.
- при ошибке удаления это сообщается текстовым сообщением. Но это неудобно проверять программно тому, кто вызвал API. Надо при ошибке как-то сигнализировать, например, HTTP-кодом ошибки или менять вид JSON на {"error": "Cannot delete"}

Также, изучи основы HTTP (у меня тут есть урок https://github.com/codedokode/pasta/ ). Ну и если ты делаешь REST API, изучи, что это такое.

> $this->id = htmlspecialchars(strip_tags($this->id));
Это бессмысленный набор функций. Автор не знает, как правильно обрабатывать данные от пользователя и сует все функции, про которые слышал.

> public function __construct($db) {
Тут не хватает тайп-хинта

Весь код выложен в публично доступную папку. Надо бы его переделать, чтобы доступны снаружи были только контроллеры в /api/, а не все. Так безопаснее.

> // Print error if something goes wrong
> printf("Error: $s.\n", $stmt->error);
Это непраивльно. При ошибке автор выводит сообщение в HTTP-ответ. То есть приложение, которое будет отправлять запрос к этому API, увидит это сообщение. Но оно ведь не обладает интеллектом и прочесть его не может. А разработчик, наоборот об ошибке не узнает.

Это надо переделать. Ошибки должны писаться в лог, а в HTTP-ответе надо отдавать код ошибки 5xx.

Также, API не документировано. Я советую изучить Swagger и документировать с его помощью.

> // Get Single Post
> public function read_single() {
...
> $stmt->bindParam(1, $this->id);

Сделано дебильно. Почему нельзя передавать id прямо в функцию как аргумент? Зачем вместо очевидного варианта сделана передача через поле? Я скажу, почему. Автор не знает ООП, но пытается изображать ООП-код.

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

Также, ты можешь, используя комментарии из задачи про студентов, сделать блог сам - только правильно.
Аноним 16/11/18 Птн 17:23:10 #560 №1296299 
>>1295769

Используй PHP7 (зачем старье использовать?), но прочти любую статью про отличия PHP7 от PHP5.

>>1295691

> первый из которых silex я изучал дня 2 пока не вкурил, что он не поддерживается уже год
Есть Slim, тоже микрофреймворк.

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

Если тебе сложно даются фреймворки, это может быть из-за слабого знания теории. Надо знать ООП, MVC, DI, паттерны работы с БД, шаблонизацию. Пользоваться композером. Ну и читать документацию, а не только уроки Getting started. Если у тебя есть пробелы, то тут есть уроки по этим темам: https://github.com/codedokode/pasta/

>>1294952

> Числа прописью - https://ideone.com/yhrxPg
> (int $number = 0, array $words)
Значения по умолчанию помещают в конец списка, иначе это мало смысла имеет (тебе все равно придется указывать $number).

> function word(int $number = 0, array $words)
У функций можно указывать тип возвращаемого значения: function something(): string { ... }

> function digitsToWords(int $number, array $numbers, bool $isFemale){
Не очень логично, что тут передается $numbers. Разве нам понадобится когда-то менять написание цифр? Если нет, то незачем их и передавать, пусть они будут заданы в этой или другой функции.

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

> $i = intval(log10(abs($number))) + 1;//Количество цифр = log10(n) + 1;
Можно было вынести это в отдельную функцию для определения количества цифр в числе.

> $threeDigits = getDigits($number, $i - 3);
> $number = getRemainder($number, $i - 3);
> $resultExp[] = digitsToWords($threeDigits, $numbers, $isFemale);
> $resultExp[] = word($threeDigits, $denomination);
А это нельзя поместить в цикл из 3 шагов, а не копировать 3 раза?

> Я погуглил и PHP_INT_MAX у меня 2млрд, что больше, чем 909 млн?
В PHP есть 2 типа чисел: int и float. Int для целых небольших чисел, float - дял любых, но у него ограничена точность (~8 значащих цифр в 32-битной версии и ~15 в 64-битной). При выходе за пределы int PHP автоматически конвертирует число в float.

Число 5 млрд в 32-битной версии будет сохранено как float, в чем легко убедиться:

echo PHP_INT_MAX ."\n";
echo 5909123001;
echo "\n";

Я сделал похожий код, но удлинил число для 64-битной версии: https://repl.it/repls/BriskVerticalMetadata

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

При этом, конечно, 900 млн в 600 млн превратиться не могут - теряются только цифры в конце числа.Дай маленький пример кода, в котором происходит ошибка, и попробуем разобраться (я пробовал подставить 5 млрд на ideone, и там все работает).

Проблема, впрочем, может быть вот тут: $number % pow(10, $i)

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

Есть даже баг-репорты по этому поводу: https://www.google.com/search?q=site%3Abugs.php.net+php+modul%D0%BE+with+float+&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA

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

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

Если ты хочешь работать с числами, которые больше предела int, то надо отказаться от обычных операций и использовать расширение PHP для больших чисел:

- http://php.net/manual/ru/ref.bc.php
- http://php.net/manual/ru/book.gmp.php

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

> Yoda speak - https://ideone.com/HM3Xci (3 пик)
Ок, верно.

Grammar Nazi - https://ideone.com/V1k3eX

> "/(\s+(а|но))[\s,.:?!]/ui"
Здесь можно было использовать \b для определения границы слова, но так тоже можно.

> "[$1]",
Точно не $0 ?

Так, в остальном верно.

Grammar Nazi Next - https://ideone.com/QaRhUG

> "/[,]?\s+(но)/ui" => ", $1",
Здесь он поставит запятую перед "ночь".

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

Опечаточник - https://ideone.com/JTJWb7

Ок, неплохо, но регулярки лучше было не передавать в функцию, а вставить в нее. Так как вряд ли эта функция будет вызываться с другими регулярками.
Аноним 16/11/18 Птн 17:23:39 #561 №1296300 
Дорогие друзья, начал изучать сей великолепный яп, но поскольку я новый новичок нюфаг, возникли некоторые вопросы уже на этапе задачи с вложением в банк и процентами.
Получилось как то так. https://ideone.com/fG6dOx
Кажется что я обосрался и посчитать все не в теле цикла, а в условии, или нет?
И еще не понял как выводить в эчо обычную строку и переменную приведенную в тип интеджер в одних кавычках, не юзая точку
Аноним 16/11/18 Птн 19:34:38 #562 №1296391 
Анончики, нужда для облегчения работы цикличных действий приспичила и решил я по изучать работу с API с помощью JavaScript, и сразу же проглотил немытого хуя.

Как оказалось, работать с ним без серверного языка можно только с того же домена, на котором ты и исполняешь скрипт, то есть чтобы JS получил данные с внешнего домена, нужно чтобы на этом домене было прописано разрешение в заголовке для таких работ, но хуй там. Все костыли что я опробовал не работают, все выдают No 'Access-Control-Allow-Origin' header is present on the requested resource.

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

Знаю что для начала мне нужно будет прописать в самом коде <?php header('Access-Control-Allow-Origin: *'); ?> чтобы таки разрешить к нему доступ из вне, теперь я не пойму как организовать проксирование.

Например ссылка на API http://site.ru/api.json?token=224&user=1488 я создаю на локальном сервере файл proxy.php и обращаюсь к нему с нужного мне сайта из JavaScript с помощью XMLHttpRequest() например так http://localhost/proxy.php?token=224&user=1488 и он возвращает мне JSON с выше указанного API, подскажите пожалуйста как такой костыль реализовать, это у меня будет как-бы такой локальный JavaScript помощник для парсинга APIда благословит вас аллах

Ну или подскажите как таки наебать ограничение Cross-Origin Read Blocking (CORB) в браузере
Аноним 16/11/18 Птн 20:25:44 #563 №1296411 
>>1296391
Попробовать нормальный язык?
Аноним 16/11/18 Птн 20:33:33 #564 №1296414 
>>1296297
> Да, придется преобразовывать дату в запросе. Стоит глянуть, не повредит ли это производительности запроса.

Используется MySQL, на индексы такую группировку c конвертацией таймзоны можно положить? Слышал, что в PostgreSQL есть функциональные индексы, помогут ли они в этой ситуации?
Аноним 16/11/18 Птн 21:01:16 #565 №1296423 
Почему я такой тупой? Подскажите, пожалуйста, что не так.
https://ideone.com/phlsVk
Аноним 16/11/18 Птн 21:03:42 #566 №1296425 
>>1296423
Господи, какой же я мудак, всё нашёл, невнимательно пример с выводом функции прочитал, думал она может работать так, как у меня.
Аноним 16/11/18 Птн 21:10:37 #567 №1296428 
>>1296423
https://ideone.com/phlsVk
переделал.
Аноним 16/11/18 Птн 21:33:22 #568 №1296437 
>>1296391

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

При этом никаких ограничений, которые есть в браузере, не будет.

Ты по моему переусложняешь все.

Ну и другой вариант - если ты знаешь JS, ты можешь установить Node.js и запустить JS-скрипт в консоли, без браузера и HTML. И он там тоже может работать хоть годами.

А, еще третий вариант. Ты можешь отключить в браузере проверку этих заголовков - это делается по-разному для разных браузеров. И тогда твой код сможет слать запросы куда угодно.
Аноним 16/11/18 Птн 22:28:59 #569 №1296453 
>>1295771
>5.6 еще актуален и какое-то время останется
Он актуален останется только у долбаебов. Через месяц с хуем заканчивается его поддержка.

Аноним 17/11/18 Суб 01:37:01 #570 №1296524 
>>1296437
не учи долбоебов, еще не хватало чтобы появились на виндах какие пхп скрипты запускающиеся из консоли. брр

>>1296453
девочка моя, мне временами попадаются переходные варианты кода работающего на продакшне и там ацкая смесь 4 и 5й версии. проекты более чем успешные и работают, а если работают - не трогай. допиши че просят и оставь. ебланов которые хотят сразу переписать все на 7ку ( 5.4, 5.5, 5.6 ) обычно шлют нахуй, это показатель отсутствия скила
Аноним 17/11/18 Суб 01:58:38 #571 №1296528 
>>1296411
>>1296437
Такая ситуация, нужно именно из браузера находясь на любом сайте с помощью JavaScript парсить содержимое json на другом сайте и добавлять его в нужные места на том сайте на котором я нахожусь в данный момент, от сюда и пришло в голову из-за ограничений
в браузерах создать PHP скрипт который бы проксировал все эти запросы и пропуская через себя отдавал с локалхоста в браузер, а благодаря строчке <?php header('Access-Control-Allow-Origin: *'); ?> браузер уже не будет возникать, так понятно? Просто я хуй знает что писать в этом php файле для подобной задачи
Аноним 17/11/18 Суб 02:38:10 #572 №1296536 
https://pastebin.com/vkjkqyM2
Подскажите гуру php, как можно убрать нахуй этот preg_replace и сделать задачку через регулярку? Ответственно заявляю, я парень упёртый и ебался N-ое кол-во часов(что бы не насмехались не буду говорить сколько), но так и смог правильно настроить $regexp.
Аноним 17/11/18 Суб 04:54:39 #573 №1296548 
image.png
>>1296536
https://pastebin.com/xbVUiG4u
На толчке пришло озарение.
Аноним 17/11/18 Суб 08:04:17 #574 №1296556 
Бля, аноны, а нормально ли просто писать к каждой функции в классе static и пользоваться ей без создания объекта, если он не нужен? Или пацаны обоссут?
Аноним 17/11/18 Суб 09:36:01 #575 №1296561 
https://repl.it/@underbottom/repeat4
https://repl.it/@underbottom/repeat3
https://repl.it/@underbottom/repeat2
https://repl.it/@underbottom/repeat1
Как в этой проге (https://repl.it/@underbottom/exam-after-chapter) лучше сделать замену?
Аноним 17/11/18 Суб 09:36:55 #576 №1296562 
>>1296556
Хз, если объекту не нужна какая-то инициализация, то можно в принципе. С другой стороны если пишешь на статиках, то фактически не пользуешься ООП и долбишь функциональщиной. Все же ООП это не только и не столько классы, как подход к разработке.
Я иногда конфиг в статик загоняю - удобно.
Аноним 17/11/18 Суб 09:56:45 #577 №1296566 
>>1296556

А зачем тебе тогда классы? Пиши просто функции.
Аноним 17/11/18 Суб 10:29:34 #578 №1296575 
>>1296524
> ебланов которые хотят сразу переписать все на 7ку ( 5.4, 5.5, 5.6 ) обычно шлют нахуй, это показатель отсутствия скила

Что за ерунду ты несёшь? Желание обновится с 5-го PHP на 7-й абсолютно логично как минимум потому, что для PHP 5 скоро перестанут даже security fix'ы выпускать, молчу про улучшение производительности. Если у вас настолько хрупкая система без CI и тестов, где каждый боится лишний раз код поправить, руководствуясь принципом "работает - не трогай", говорит лишь о вашем непрофессионализме. Либо у вас настолько простая система, где не нужны ни тесты, ни зависимости с composer, ведь они тоже обновляются и редкий пакет будет работать с PHP 5.4<. А если не обновлять - опять дыры в безопасности.
Аноним 17/11/18 Суб 10:34:04 #579 №1296578 
>>1296562
>>1296566
Бля реально посмотрел на свой код. Сижу как даун пишу якобы ООП, а на деле получается, что это обычные функции обернутые в классы. Пиздец.
Аноним 17/11/18 Суб 10:39:45 #580 №1296581 
>>1296548
>https://pastebin.com/xbVUiG4u
малаца
Аноним 17/11/18 Суб 12:07:57 #581 №1296614 
>>1296578
Иногда просто удобно сгруппировать функционал в один класс, если там одного типа функции. Но везде лепить такое не стоит - точно обоссут.
Аноним 17/11/18 Суб 14:17:44 #582 №1296682 
1386872995213.jpg
Как задать тайп-хинтинг для метода, чтобы он возвращал массив объектов?

function huy (): MyObject[] {}
Эххх, почему пхп такой конченый...

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

Что за язык блять, ни структур данных, нихуя...
Вот что бывает, когда языки, создававшиеся дурачками для лулзов внезапно становятся основой индустрии. Жабаскрипт в то же болото
Аноним 17/11/18 Суб 14:20:03 #583 №1296685 
>>1296578
>>1296556
Это хуево, на самом деле.
Скажу больше - практически никогда не следует использовать статические методы.
Максимум - как дополнительный конструктор.

Статический метод - неявная инъекция зависимости, что приводит к связности кода.
Надо все на объектах хуярить, даже если экземпляр класса будет вообще 1, все равно.
Аноним 17/11/18 Суб 14:23:21 #584 №1296687 
>>1295769
>изучать php5
>шел 2018-й год, все обсуждали смерть пхп как такового
>изучу-ка я засохшее говно мамонта
Еще бы кобол учил
Аноним 17/11/18 Суб 14:24:23 #585 №1296688 
>>1296524
>девочка моя, мне временами попадаются переходные варианты кода работающего на продакшне и там ацкая смесь 4 и 5й версии.
А кто виноват, что ты работаешь в веб студии/на индусском фрилансе/битриксе? У нас обновление версии - это не событие, а стандартная процедура. На легаси 5.6 сейчас осталось очень мало кода, который активно апдейтится.

>ебланов которые хотят сразу переписать все на 7ку ( 5.4, 5.5, 5.6 ) обычно шлют нахуй, это показатель отсутствия скила
Ну да. Лучше остаться на полностью abandoned версии без security fix'ов, без поддержки с хуем во рту. Чем спокойно и без проблем обновиться на более позднюю. Мы сейчас не в 2004, обновление происходит максимально просто и безболезненно, если ты изначально не писал быдлокод.
Аноним 17/11/18 Суб 14:26:17 #586 №1296690 
В пхп вообще собираются добавлять нормальные структуры данных?
Чтобы я мог писать конструкции вида HashMap<Vector<String>, double>?
Или так и будем до 2050 на array хуярить?
Аноним 17/11/18 Суб 14:51:52 #587 №1296703 
Если в интерфейсе метод объявлен без возвращаемого тайп-хинта, я могу в дочернем классе задать конкретный тайп-хинт?
Аноним 17/11/18 Суб 14:56:53 #588 №1296707 
Screenshot108.png
>>1296703
Короче да. Если интерфейс не содержит объявления возвращаемого типа, дочерний метод может возвращать что хочет.
(А не необъявленное любое значение, как у интерфейса)
Аноним 17/11/18 Суб 15:21:29 #589 №1296727 
>>1296575
это твое желание - обновится. кода может быть много ( 2-3 мб).

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

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

я посмотрю как ты клиенту скажешь: вай дарагой, давай все все перепишем, а то мне лень разбираться в этом вот говне.
а это его хлеб, который кормит средней руки конторку, и на хую он вертел всяких вась с предложениями ценою в десятки тыс баксов
Аноним 17/11/18 Суб 15:25:25 #590 №1296728 
>>1296707
Вот же язык-ублюдок, а.
При этом если не задать тип в аргументе метода, но задать в дочернем классе - похапе сблевнет ошибку.
То что в возвращаемом значении на это похуй его не ебет
Аноним 17/11/18 Суб 15:34:00 #591 №1296733 
>>1296728
Ты долбаеб? Такое поведение во всех языках с нестрогой типизацией. Ты нахуя хочешь целостность системы разъебать только ради того, чтобы удобнее было?
Аноним 17/11/18 Суб 15:51:41 #592 №1296739 
>>1296682
>Не смог осилить элементарную вещь
>Это язык виноват а не я!
Давай без этого.
Аноним 17/11/18 Суб 15:54:37 #593 №1296741 
>>1296733
Не агрись, это очередной неосилятор. Везде ему виноват язык, но никогда не он сам.
Аноним 17/11/18 Суб 15:57:57 #594 №1296742 
>>1296733
>>1296739
Кроме кукареков что-нибудь будет?
Аноним 17/11/18 Суб 16:01:12 #595 №1296743 
>>1296742
Ну так перестань кукарекать например.
Аноним 17/11/18 Суб 16:01:38 #596 №1296744 
>>1296742
Неосилятор порвался.
Аноним 17/11/18 Суб 16:03:59 #597 №1296747 
>>1296685
>практически никогда не следует использовать статические методы
Тогда зачем добавили эту фичу?
Аноним 17/11/18 Суб 16:05:22 #598 №1296748 
>>1296744
Ну, осиливший ты наш, расскажи как задать тайп-хинт методу на возвращение массива объектов.
Только вот не надо мне тут про нинужно, пиздуй дальше свой говнокод на пыхе писать.
Аноним 17/11/18 Суб 16:08:48 #599 №1296751 
>>1296747
Конкретно в пхп вообще бесполезно спрашивать нахуя там что как сделали. Язык изначально делал ебанько для html-страницы своего кота.
Далее эта параша раскрутилась и туда навесили еще куч говна.
Потом еще и еще, вообще нихуя не парясь о том, чтобы новое говно соответствовало старому говну. (Например, стандартная библиотека целиком состоит из неструктурированного кала, где методы принимают что угодно, выдают что угодно, обрабатывают ошибки как кто хочет, кто-то высрет null, кто-то пустую строку, кто-то исключение. Да там сука даже нотация разная).
Аноним 17/11/18 Суб 16:13:39 #600 №1296753 
>>1296747
Я не ебу зачем, я тебе говорю со своего опыта.
Что если у тебя постоянно в одном классе вызываются статические методы другого класса - то это неявное внедрение зависимости. Что порождает дохуя проблем с тем, что потом ты уже вообще хуй поймешь от чего зависит твой код. Также приводит к спутанности кода.
Все зависимости следует передавать через конструктор.
Аноним 17/11/18 Суб 16:22:56 #601 №1296755 
>>1296748
>array
>тайп-хинт
Тебе сам язык говнокодить мешает, нееет хочу говна поесть. Какой-же ты мерзкий.
Аноним 17/11/18 Суб 16:25:35 #602 №1296756 
>>1296755
array - это все что угодно блять.
Мне же нужно точно знать, что возвращает функция.
"Массив" - ну заебись теперь.

Вот поэтому пхп и говно ебаное, как и js.
В яве все правильно сделано.
inb4: пиздуй в яватред отсюда нахуй
Аноним 17/11/18 Суб 16:27:48 #603 №1296758 
>>1296751
Такие как ты неосиляторы, выплакали миллиардами постов себе статические методы.
Теперь сидят и понять не могут, собственно зачем они их просили, и как они вообще собирались это применять.
Аноним 17/11/18 Суб 16:31:17 #604 №1296760 
>>1296758
Ну я не знаю тонкостей ООП.
Опять же, раньше я без задней тупо использовал классы, в основном, как сборище функций.
Затем я понял, что это приводит к говнокоду.
Затем почитал на тему статических методов и понял, что их и правда стоит применять ОЧЕ редко.
Аноним 17/11/18 Суб 16:53:08 #605 №1296766 
>>1296748
Ну сделай свой простой тип, долбаеб. PHP предоставляет много структур данных из коробки, которыми ты можешь воспользоваться (Например iterator, и тайпхинть там хоть любой объект). Нет, ты будешь нихуя не изучив даже - ныть про то, что язык, который ты знаешь на уровне школьника - говно.
Аноним 17/11/18 Суб 16:58:47 #606 №1296768 
Screenshot109.png
Screenshot110.png
>>1296766
Ну я, кстати, накидал объект-массив, который принимает объекты только заданного в дочернем классе типа и который можно итерировать.

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

Аноним 17/11/18 Суб 17:02:50 #607 №1296769 
Синтаксический сахар туда же.
Все это говно ускоряет разработку, а значит, удешевляет ее.
Не надо тут недостатки языка за манну небесную выдавать, и, мол, так и было задумано.

Теперешние разрабы пхп может и хотели бы там все по-человечески сделать, но только обратная совместимость по пизде пойдет, вот и живем хуй знает сколько лет с тонной легаси-говнокода в стандартной библиотеке.
Аноним 17/11/18 Суб 17:05:46 #608 №1296770 
>>1296768
>который должен решаться в нормальном языке двумя символами квадратных кавычек блять возле возвращаемого типа
Ты в курсе, что в большинстве не строго типизированных языков такого дерьма нет? В чем претензия конкретно к php?
Аноним 17/11/18 Суб 17:09:18 #609 №1296771 
>>1296770
В том, что не ввели поддержку массивов типов в возвращаемом значении, хотя вроде как движутся в сторону строгой типизации
Аноним 17/11/18 Суб 17:13:52 #610 №1296773 
>>1296768
Ты что написал? Дебилойд, блять. Я же написал ИТЕРАТОР. Сука. Хули ты такой тупорылый то? В php уже есть встроенные типы данных, нахуя ты этот говнокод скинул в пикрилах? Ты можешь сделать такой класс, инстанс которого будет абсолютно идентичен стандартному массиву. Сука, как же ты заебал, ублюдок ты тупорылый. Почему ты такую хуйню творишь то?

Для долбаеба еще раз повторю ключевые слова: iterator, traversable, iteratoragregate, arrayaccess.

Если ты еще раз высрешь хуйню, которая не относится к реальности и показывает тебя со стороны лютого долбаеба, абсолютно не понимающего о чем идет речь - я с тобой больше общаться не буду, это смешно.
Аноним 17/11/18 Суб 17:17:54 #611 №1296774 
>>1296771
Ну во первых строгая типизация ненужна. Ибо говно говном. Уже TypeScript об это споткнулся.. И теперь вместо JS сообщества на нём пишут 3 с половиной аутиста.
Во вторых в 7.2 есть поддержка строгой типизации на массивы. Но подробностей не скажу. Я только описание нововведений читал.
Аноним 17/11/18 Суб 17:50:14 #612 №1296785 
>>1296773
Дебила кусок, это говно наследует \Iterator
Аноним 17/11/18 Суб 18:19:15 #613 №1296793 
>>1296785
>наследует
>интерфейс

А ты не очень умный, судя по всему. На этом, собственно, можем и закончить эту беседу. Ты так и не перестал быть тупым.
Аноним 17/11/18 Суб 18:21:26 #614 №1296796 
image.png
>>1296785
>говорит о типах данных, о том, что ему чего-то не хватает, называет язык говном
>наследует интерфейс
Аноним 17/11/18 Суб 18:27:47 #615 №1296798 
1542468464360.jpg
>>1296796
>>1296793
Да какая разница, наследует, реализует - одно говно.
Аноним 17/11/18 Суб 18:34:52 #616 №1296802 
Снимок.PNG
Аноны это опять я - аутист.
Помогите, пожалуйста, настроить .htaccess на серваке, чтобы всё перенаправлялось на index.php, но чтобы загружались стили, картинки, скрипты и шрифты.

Вот мои настройки. Подгружаются только стили.

RewriteEngine on
RewriteBase /shop

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php

На скринах то, что пишет бровузер.
Если в строке браузера написать путь непосредственно до скрипта или до картинки, то произойдет реидрект на индекс. Если написать путь до css, то он откроет css
Аноним 17/11/18 Суб 18:38:21 #617 №1296804 
image.png
>>1296798
>да какая разница
Аноним 17/11/18 Суб 18:38:39 #618 №1296805 
>>1296802
RewriteCond %{HTTP_HOST} ^site.com [NC]
RewriteRule ^(.*)$ http://site.com/$1 [L,R=301]
Аноним 17/11/18 Суб 18:48:47 #619 №1296813 
1542469724715.jpg
>>1296804
Ты ещё спроси чем абстрактный класс от интерфейса отличается
Аноним 17/11/18 Суб 18:52:07 #620 №1296814 
>>1296805
Так-с, это нужно написать вместо моих настроек или вместе с ними? На серваке лежит много сайтов, они находятся в подпапках. Данный сайт находится по адресу site.com/shop. Получается нужно писать именно site.com/shop или так как ты написал?
Я просто ваще не алё в настройке этого файла....
Аноним 17/11/18 Суб 19:10:33 #621 №1296821 
>>1296814

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

- (англ) https://httpd.apache.org/docs/current/mod/mod_rewrite.html
- http://hostgid.net/baza-znanii/-htaccess/chto-takoe-mod-rewrite.html
- https://habr.com/company/sprinthost/blog/129560/

Прочти сначала и потом возвращайся с вопросами.
Аноним 17/11/18 Суб 19:14:48 #622 №1296826 
image.png
>>1296813
>Да я не обосрался, чо ты, мы же не на экзамене
Аноним 17/11/18 Суб 19:16:24 #623 №1296828 
>>1296826
>>1296813
Да это не он обосрался, чё вы. Это просто язык неправильный. Он же не мог обосраться!
Аноним 17/11/18 Суб 19:21:15 #624 №1296830 
image.png
>>1296813
>>1296828
>Разводит говно о том, что в пхп нет нужного ему функционала типизированных коллекций
>Ему говорят, что он долбаеб и достаточно добавить тайпхинт в объект итератора и подрубить arrayaccess
>Он делает абсолютно не то, прописывая типизацию логикой отдельных классов
>Ему говорят, что он долбаеб и даже конкретнее говорят в чем проблема
>Он не понимает и высирает хуйню про интерфейс
>Пытается оправдаться, но все уже тщетно
Аноним 17/11/18 Суб 19:30:00 #625 №1296834 
>>1296768
Так ты же зеленый, хуйню написал какую-то. Зачем ты в конструкторе этот бред написал? Тебе сказали добавить тайпхинтинг, а не пересоздать свой объект итератора с нуля.
Аноним 17/11/18 Суб 19:53:10 #626 №1296844 
>>1296830
>Ему говорят, что он долбаеб и достаточно добавить тайпхинт в объект итератора
Это как блять? Покажи код
>подрубить arrayaccess
Нахуя мне arrayaccess?
Аноним 17/11/18 Суб 20:33:13 #627 №1296858 
>>1296760
>Ну я не знаю тонкостей ООП.
Инкапсуляция, наследование, полиморфизм. Это даже толсто.
ООП это когда берёшь библиотеку, наследуешся от неё, походя перепиливая под своё приложение и пользуешься.
Аноним 17/11/18 Суб 20:34:18 #628 №1296859 
>>1296769
>хотели бы там все по-человечески сделать
Мечатаю о методах через точку.
Аноним 17/11/18 Суб 21:02:29 #629 №1296866 
>>1296830
>>1296828

Это тред не для самоутверждения, а обучающий тред. Так что прекращайте флуд на тему, кто тут правильный и кто неправильный и выкатывайтесь в какое-нибудь другое место. Также, советую вам научиться выражать свои мысли нормальным языком, а не как деревенщина из /b/.
Аноним 17/11/18 Суб 21:06:36 #630 №1296868 
>>1296802

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

https://karashchuk.com/Apache/mod_rewrite_debug/

<ifModule> можно не писать, только 2 директивы. После этого перезапусти Апач, попробуй открыть сайт и посмотри логи. Если хостер не позволяет так делать, то придется установить Апач локально или в витруалке.
Аноним 17/11/18 Суб 21:18:28 #631 №1296878 
>>1296728

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

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

>>1296690

RFC есть: https://wiki.php.net/rfc/generics

>>1296688

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

>>1296682

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

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

Аноним 17/11/18 Суб 21:42:54 #632 №1296893 
>>1296685

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

>>1296747

Хороший вопрос, на самом деле.

Вообще, фич в PHP много, но не все из них стоит использовать. Например, глобальные переменные не стоит использовать в больших приложениях.

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

Использовать статические методы везде плохо, так как мы, например, не можем в таком случае создать 2 объекта с разными настройками. Или не можем создать объект, сделать с ним что-нибудь и выкинуть. Неудобно тестировать.
Аноним 17/11/18 Суб 22:38:46 #633 №1296922 
java.jpg
>>1296682
класс хинтинг через указание типов и обьектов ? ебанный насос

уважаемый, это не ява, нет жесткой типизации.

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

зы. жабу учи, и не убери нахуй руки от котоламповой пхпшчки
Аноним 17/11/18 Суб 22:48:59 #634 №1296924 
>>1296747

ох лол. singleton - гугли.
это наверное второй по популярности патерн. но у многих нубов проблемы с структурой обьектов.

статические классы появились раньше чем все навороты с екстеншинами и трейтами.
в универе не учат, но зато учат яве... херовой яве... ява очень плохо влияет на пхпшников, если углубится - есть риск вообще не понять прелести языка
Аноним 17/11/18 Суб 23:01:58 #635 №1296926 
>>1296834
>добавить тайпхинтинг, а не пересоздать свой объект итератора с нуля
Это как вообще?
Куда ты там этот тайпхинтиг будешь добавлять, не реализуя интерфейс Iterator?
Че вы мне тут втираете вообще, поехавшие?
Ты или реализуешь один из интерфейсов или идешь нахуй, другого нет. А вы говорите что есть.
Аноним 17/11/18 Суб 23:09:28 #636 №1296931 
>>1296922
>уважаемый, это не ява
Вот и плохо, все языки должны быть как ява.
Чего только стоит ее мощнейшая типизация, широкий набор структур данных из коробки (с дженериками), отличная поддержка рефлексии, многопоточность, качественная стандартная библиотека целиком на ООП, принудительная обработка ошибок через исключения, да там все охуенно.
Что из этого есть в пыхе? Да, нихуя.

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

Аноним 17/11/18 Суб 23:10:12 #637 №1296933 
>>1296924
>прелести языка
>пхп
>этих извращенцев боялись даже чеченцы.жпг
Аноним 17/11/18 Суб 23:16:49 #638 №1296936 
рецепт на 2 яичка.jpg

>>1296926

/
@param $myObject link\to\my\object
@return object link\to\another\object
/
function return_object_by_obect($myObject) {
return new anotherObject();
}


и тогда о чудо, у тебя в хинтах появится подсказка что функция как аргумент принимает обьект и даже ссылку на него даст.
а с результатом функции иде даст работать как с нужным обьектом
Аноним 17/11/18 Суб 23:19:19 #639 №1296937 
>>1296936
просто почитай документацию на phpdoc, оно реально работает без тацнев с бубном. если пишешь классы - мастхев.
читаемость кода повышает, сам же лучше будешь читать чужой код + это показывает что разраб не последнее нубло открывшее книгу "пхп за 24 часа"
Аноним 17/11/18 Суб 23:22:50 #640 №1296938 
HcUzauifvDc.jpg
>>1296931
ява самый убогий из имеющихся юзыков.

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

зы . этакая макдачка в мире кулинарии
Аноним 17/11/18 Суб 23:29:48 #641 №1296942 
1542486584628.png
>>1296936
Сука! Больной ублюдок блять! Мразь!
Причем тут твой зассаный пхпдок??
От того, что ты говна в комментах напишешь, у тебя настоящий тайпхинт не появится.
Пиздец блять, с какими дегенератами я сижу в одном тре
Аноним 17/11/18 Суб 23:42:07 #642 №1296949 
ttjts0f3h3E.jpg
>>1296942

ахахаха, от того что ты В ПРАВИЛЬНОМ формате напишешь, IDE типа пхпшторм будет генерировать хинт появится. доку жеж
ну да, варнинг сама пхпшчка не кинет

зы. всегда ржу когда нубас начинает понимать как оно работает, столько удивления на лице, куча эмоций...
Аноним 17/11/18 Суб 23:48:41 #643 №1296952 
>>1296949
Да хуле тут непонятного, манямирок уровня бэ, я этот пхппок юзал на 5-й части.
Сейчас в этом говне (в смысле указывать в пхпдоке возвращаемое значение и типы аргументов) смысла нет.

Хуею с треда, дурачки думают, какие они ебануться умные.
Аноним 17/11/18 Суб 23:55:50 #644 №1296956 
Тайпхинт нужен В ПЕРВУЮ очередь именно для того, чтобы "пых тайперрор кинул", когда, по какой-то причине, в метод будет передаваться какие-нибудь левое говно вместо того, что надо. Что в такой динамической сране как пхп постоянно бывает.

А не для того блять, чтобы к тебя в иде подсветилось.
Аноним 18/11/18 Вск 01:05:55 #645 №1296981 
image.png
Анансы, CORS не даёт забрать данные из JSON с другого домена с помощью JS, как их можно проксировать через php?

Например я посылаю GET запрос на http://mysite.ru/proxy.php?user=abu&avatar=makaka.jpg, а proxy.php пересылает его на http://egosite.ru/api.json?user=abu&avatar=makaka.jpg и отдаёт ответ мне, давая пососать CORS-у, помогите осилировать
Аноним 18/11/18 Вск 01:45:09 #646 №1296991 
>>1296952
>Хуею с треда, дурачки думают, какие они ебануться умные.

аахххахаха, нубы думают какие они пиздатые. реально, батькам платят 500к+ просто так, за то что они пхп5 знают хорошо. семерка недавно же вышла, и её знает что нуб что батька одинаково. правда же анон ?
Аноним 18/11/18 Вск 01:47:39 #647 №1296993 
>>1296981

Варианты отсюда >>1296437 не годятся?
Аноним 18/11/18 Вск 02:39:31 #648 №1297009 
>>1296949
о да шерлок, раскажи им еще как в фреймворках хинты генерятся, это надо быть последним уебаном чтобы не посмотреть как в том же симфони\вии сделали
Аноним 18/11/18 Вск 02:48:39 #649 №1297010 
>>1296866
Я вижу как он хочет обучиться. Так хочет, что кроме негативных высказываний в сторону PHP ничего и написать не мог. Будет адекватно общаться, будет адекватный ответ. А так не вижу смысла винить меня в том, что в меня негатив летит.
Аноним 18/11/18 Вск 06:52:56 #650 №1297035 
>>1296727
Что там такого изменилось с 5.4 на 7.2, что стоить будет десятки тыщ баксов? Депрекейтов было не так уж много, если не единицы. В основном изменения коснулись только PDO и работами с БД.
Аноним 18/11/18 Вск 07:10:27 #651 №1297037 
1542514224911.jpg
>>1296991
>батькам платят 500к+
Аноним 18/11/18 Вск 07:12:45 #652 №1297039 
>>1296773
>ИТЕРАТОР. Сука.
>В php уже есть встроенные типы данных
Ты интерфейс называешь типом данных?
Аноним 18/11/18 Вск 09:09:04 #653 №1297048 
>>1296924
>singleton - гугли
Синглтон прекрасно и без статиков реализуется, ох лол.
Аноним 18/11/18 Вск 10:24:57 #654 №1297066 
>>1296773
>В php уже есть встроенные типы данных
Да ладно блять? скаляры и array - вот все, что там есть.
Есть spl-расширение для структур данных и ds-расширение.
Оба сорта говна, которых из коробки нет.
Аноним 18/11/18 Вск 10:31:36 #655 №1297070 
image.png
https://repl.it/@underbottom/povtorenie1
Аноним 18/11/18 Вск 11:23:10 #656 №1297080 
>>1296437
>написать программу на нем и запустить ее из командной строки
Это я и хочу сделать, запустить на фоне скрипт на php который проксировал бы мои запросы к внешнему серверу, но не знаю что туда писать.

>>1296437
>установить Node.js и запустить JS-скрипт в консоли
Не могу в Node.js.

>>1296437
>отключить в браузере проверку этих заголовков
Опасно, любой пиздюк сможет со своего говносайта получать доступ к моим например кукам.
Аноним 18/11/18 Вск 11:38:20 #657 №1297084 
>>1296391
>И тут меня осенило, я же могу не ебаться с серверами и их арендой, а запустить сервер прямо у себя на пекарне
Поехавший. Если в кратце - затея хуйня.
Купи себе вдс за 3 доллара и не еби мозги
Аноним 18/11/18 Вск 11:39:52 #658 №1297085 
>>1296528
Расширение для браузера. Можно даже тупо скрипт для Greasemonkey и подобной хуйни.
Из расширения ты можешь вырубить cross-origin контроль.
Аноним 18/11/18 Вск 11:49:18 #659 №1297089 
Screenshot111.png
Screenshot112.png
Screenshot113.png
Насколько я конченый?
Я придумал унаследоваться от ArrayObject'а и прикрутить ему в конструктор проверку типа элементов передаваемого ему массива.
А сам тип задается в дочернем классе.

Таким образом, у меня происходит реальный контроль типа и я точно знаю, что в MessageArray будут только объекты Message.
Я могу задать тайпхинт возвращаемого значения : MessageArray и в принимающем методе быть уверенным, что в том, что мне прилетело будет то, что надо.

Но теперь другая беда. IDE не ебет, что у меня в этом месседж аррее будут только объекты Message.
При итерации через foreach() показывается какое-то говно, а не содержимое класса Message.
Что делать?
То есть, вопрос чисто про подсветку в IDE.
Аноним 18/11/18 Вск 11:57:29 #660 №1297093 
>>1297085
Точнее, ты можешь задать в настройках расширения область его действия. В том числе /, то бишь, на всех сайтах.
Аноним 18/11/18 Вск 12:35:37 #661 №1297104 
hotass.jpg
>>1297089
больной ублюдок. у тебя на 2х скринах кода вообще нет, а на оставшемся кода 1 строка.
trow... это так по пхпшному, убей себя об стену.

резюмируя: индус которому платят за обьем кода
Аноним 18/11/18 Вск 12:58:03 #662 №1297118 
В треде десант токсичных обмудков, случайно попавших в ИТ, судя по всему.
Аноним 18/11/18 Вск 13:04:01 #663 №1297127 
>>1297104
>trow... это так по пхпшному
Что ты имеешь ввиду? Подробностей не будет?
Аноним 18/11/18 Вск 13:12:27 #664 №1297138 
инженер.jpg
>>1297035
ну вообще достаточно много изменилось, взять тот же strict mode.
когда говорят что пхп стал в хуй раз быстрее, подразумевают именно строгий режим. старый говнокод будет работать примерно так же.
и если мы говорим переписать с 5 в 7. то вероятно речь идет о перепиливании под ООП, с классами там, как сейчас модно

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

>>1297066
обоже обоже обоже, не вспоминай это говно, даже не произноси в слух. может оно сдохнет само по себе если нубам не рассказывать, а то переодически появляются умники с восклицанием "посмотрите что я нашел, это гениально и решает все проблемы"
Аноним 18/11/18 Вск 13:14:56 #665 №1297140 
>>1297138
>же защита от копирования
Так объекты сами собой не копируются
Аноним 18/11/18 Вск 13:16:35 #666 №1297143 
653c8da6bcf68b0original.jpg
Почему столько поехавших именно в JS и в PHP тредах?
Почему их нет в тредах других языков?
Аноним 18/11/18 Вск 13:19:52 #667 №1297146 
>>1297084
Нахуя что-то покупать и ебаться с его настройкой, если можно запустить трёхстрочный код проксирования локально?
Аноним 18/11/18 Вск 13:20:41 #668 №1297147 
>>1297143
Скорее всего тупо потому, что тут и там народу больше. Ебанутые - величина статистическая.

>>1297138
>без статика ты не получишь сингтон
Шизик, выкатись.
Аноним 18/11/18 Вск 13:21:06 #669 №1297149 
>>1297140

ну это, как же...

$a = $b = new myobj();
$a->a = 1; $b->a = 2;

а в сингтоне так не прокатит.
myobj::$a = 1 и как ты его не копируй там всегда будет 1. в этом смысл
Аноним 18/11/18 Вск 13:21:09 #670 №1297150 
>>1297085
Извини братишка, но я правда не ебу как писать расширения для браузера, а те что есть в магазине расширений, отключают эту проверку на всех сайтах, что я думаю не есть хорошо.
Аноним 18/11/18 Вск 13:21:29 #671 №1297151 
>>1297138
Ну хз. Вообще весь мой код который я писал в 2010 работает на 7 версии. Я даже не подозреваю что там можно переписать.
> вероятно речь идет о перепиливании под ООП, с классами там, как сейчас модно
Как-то притянуто за уши. Тем более что это вообще не несёт никаких профитов клиенту. Разьве что местные эстеты будут на код фапать.
Аноним 18/11/18 Вск 13:22:12 #672 №1297153 
>>1297147
>>1297143

я как понял пикча ваш автопортрет
Аноним 18/11/18 Вск 13:22:19 #673 №1297154 
>>1297149
>$a = $b = new myobj();
>$a->a = 1; $b->a = 2;
Ну и в чем проблема, ты скопировал ссылку на объект. Объект у тебя 1.
Аноним 18/11/18 Вск 13:22:58 #674 №1297155 
>>1297150
Скрипт для гризманки напишет любой долбоеб. Достаточно знания жс и все. Там все очень просто.
Аноним 18/11/18 Вск 13:23:45 #675 №1297158 
>>1297143
Только в JS треде. Самые токсичные кстати тоже там. Жаэе на VG не настолко токсишные дети сидят. Почему тут поехавшие? Очевидно кто-то кинул ссылку в JS трад и оттуда набежало. Так то мы вообще самые культурные на борде.
Аноним 18/11/18 Вск 13:26:17 #676 №1297161 
>>1297153
Нихуя ты ответочки кидаешь. В предыдущих постах тыкал, тут на "Вы". Сноб с раздвоением личности?
Аноним 18/11/18 Вск 13:27:16 #677 №1297162 
15423390154070 (1).jpg
>>1297161
Аноним 18/11/18 Вск 13:28:12 #678 №1297163 
>>1297154
вот этого непонял, поясни плс.

после манипуляций обьекта стало два ( ну да, он имеет одно имя )
а два их потому что у каждого свой набор атрибутов, они не идентичны.
по канону это не синглтон, синглтон всегда существует в одном варианте
Аноним 18/11/18 Вск 13:28:28 #679 №1297164 
Еще что поражает, что в том, что в этом треде: долбоебы, выучившие язык по гайду в шапке 3 месяца назад и написавшие мувисерчер мнят себя сверхспециалистами по нему и пытаются хуесосить "нубов", сами таковыми и являясь.

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

Спрашиваешь про какие-то более абстрактные глобальные вопросы - никто даже не догоняет о чем вообще речь, видят только то, что написано на экране, а не то, к чему это ведет в глобальном смысле.
Зато кукареков просто миллион. Ну не знаешь ты нихуя - не пизди блядь, сиди и скроль дальше.
Аноним 18/11/18 Вск 13:28:36 #680 №1297165 
>>1297162
Проиграл на всю комнату
Аноним 18/11/18 Вск 13:29:47 #681 №1297167 
>>1297155
Хорошо, что же за такая волшебная команда есть в JS, которая заставит браузер игнорировать Access-Control-Allow-Origin?
Аноним 18/11/18 Вск 13:30:54 #682 №1297168 
>>1297164

Алё /ph??? У нас тут ваш парень язык выучил и начал искать глобальные смыслы! Заберите его нахуй!
Аноним 18/11/18 Вск 13:33:19 #683 №1297169 
>>1297163
>после манипуляций обьекта стало два
Да нихуя, просто ссылки на один и тот же объект стало две.
>ну да, он имеет одно имя
На один объект 2 ссылки
>а два их потому что у каждого свой набор атрибутов, они не идентичны.
С чего ты это взял? Объект 1, объекты сами собой не копируются, если ты не описал для них метод __clone().

Чтобы создать копию объекта, надо вызвать clone.
$copy_of_object = clone $object;
По-дефолту clone копирует свойства объекта по своей маня-схеме, короче это хуйня. Поэтому сделали переопределяемый магический метод __clone(), в котором ты можешь задать, как корректно скопировать объект.

Если просто вызвать $obj1 = $obj2, создастся просто еще одна ссылка на один и тот же объект.

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

В яве то же самое.
Аноним 18/11/18 Вск 13:33:24 #684 №1297170 
>>1297164
>Ну не знаешь ты нихуя - не пизди блядь, сиди и скроль дальше
Вот и не пизди.
Аноним 18/11/18 Вск 13:34:12 #685 №1297172 
>>1297164
Весь "Хуесосинг" начался только когда к нам завалился парень, который начал разговор с того, какой у нас язык плохой и какие мы все тут плохие.
Я не совсем понимаю какого ответа он ожидал? Что ему тут жопу поцелуют?
Аноним 18/11/18 Вск 13:38:11 #686 №1297173 
>>1297169
Хорошо пояснил.

мимонуб
Аноним 18/11/18 Вск 13:40:22 #687 №1297174 
>>1297169
>В яве то же самое.
все встало на свои места :D спс за внимание

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

обьект не передается по ссылке, каждый раз делая $a = $myobj; ты копируешь обьект.
clone работает весьма криво.
есть вариант с $a = &$myobj; чтобы передать ссылку, но так типа некрасиво.
$a->a = 1;
$b = $a;
$b->a = 2;
echo $a->a выведет 1, что немного необычно для жаберов
даже сделав $b = $a->clone();
b будет содержать копию класса, но не ссылку на a





Аноним 18/11/18 Вск 13:42:23 #688 №1297177 
Screenshot114.png
>>1297174
>>1297173
http://sandbox.onlinephpfunctions.com/code/579d44d0b09bc22be0199fff6e980559baff3a0a

а потом эти люди втирают мне, что у меня кода на скриншотах мало и поэтому я даун
Аноним 18/11/18 Вск 13:43:50 #689 №1297178 
клиенты.jpg
>>1297174

обьясни это симфони блядям, и за одно почему их говно жрет по 50-100 метров памяти на запрос. мимокрокодил
Аноним 18/11/18 Вск 13:48:37 #690 №1297181 
>>1297177
>>1297169
умничка
Аноним 18/11/18 Вск 13:49:34 #691 №1297182 
Screenshot115.png
>>1297177
http://sandbox.onlinephpfunctions.com/code/3dbe830008b471ece986092e6b5e3cd09e8c1f67
Вот короче полный пример.
По-дефолту clone создат объект по своим ебанутым правилам, как ему виднее.
Чтобы определить, как корректно скопировать объект - нужно переопределить функцию __clone(). Все как и в яве.
Аноним 18/11/18 Вск 13:57:40 #692 №1297186 
image.png
Блять ленивые жопы, могут только кукарекать, но никто не покажет свои навыки и не поможет.

Попытка №2.

Хочу получать данные с помощью JS из API с внешнего сайта, мне мешает это сделать CORS, хочу их получать через php скрипт.

Например я посылаю GET запрос на http://mysite.ru/proxy.php?user=abu&avatar=makaka.jpg, а proxy.php пересылает его на http://egosite.ru/api.json?user=abu&avatar=makaka.jpg и отдаёт ответ мне, вот накидал начало скрипта, что и как делать дальше? Помогите пожалуйста, я не ебу http://sandbox.onlinephpfunctions.com/code/5ed07ca56b6cd6904aa7c77973ad498480dffab4
Аноним 18/11/18 Вск 14:06:07 #693 №1297193 
>>1297186
На, должно быть как-то так. На этой хуйне не работает, но на сервере должно работать.
http://sandbox.onlinephpfunctions.com/code/73f97a42dcd93a339a7ef339db7fa0a51bcb5de9

А вообще лучше бы js-скрипт для гризманки написал и не ебал мозги.
Аноним 18/11/18 Вск 14:08:09 #694 №1297195 
>>1297193
Можно даже так:
http://sandbox.onlinephpfunctions.com/code/12bf757bd5175a6bb48c15862d08986f592f18d1
Аноним 18/11/18 Вск 14:12:25 #695 №1297198 
>>1297195
Блять, функцию дефолтных параметров забыл.
http://sandbox.onlinephpfunctions.com/code/c51aaed2b0a0dbfc150c135f927dac782187bbce

Ну короче тебе надо просто взять данные из get-запроса юзера, отправить их на другой сайт и выдать юзеру ответ.
Аноним 18/11/18 Вск 14:20:01 #696 №1297201 
>>1297193
>>1297195
>>1297198
Чёто ты перемудрил, можно просто добавить echo file_get_contents($url);
Аноним 18/11/18 Вск 14:39:22 #697 №1297205 
>>1297186
Короче вот что получилось http://sandbox.onlinephpfunctions.com/code/f7988df94a5a425a77e934cd9ab048238eafef00
Как обработать ошибку 404? Чтобы он выдавал не Warning, а нужный мне текст?
Аноним 18/11/18 Вск 15:22:35 #698 №1297218 
>>1297201
Можно и так.
Пока не надо делать POST или PUT запросы
Аноним 18/11/18 Вск 15:43:33 #699 №1297226 
>>1297218
Что ха PUT запросы? Дай моар инфо?
Аноним 18/11/18 Вск 15:47:00 #700 №1297227 
>>1297218
Не, только get, простейшие запросы к api, а не подскажешь как обработать ошибку в proxy.php и вернуть нужным мне текст, если я например отправлю параметр которого нет и внешний сервер пришлёт мне 404, сейчас proxy.php присылает html код с описанием ошибки мне прямо в js, js от такой хуйни просто ломается
Аноним 18/11/18 Вск 16:00:20 #701 №1297230 
>>1297182
это потому что ты хеловордишь, даже в доке по обьектам на оф сайте можно найти что-то типа

class A { public $foo = 1;}
function go($obj) { $obj->foo = 2;}
function bo($obj) {$obj=new A;}

$e = new A;
go($e);
bo($e);
echo $e->foo - 2, хотя ожидается 1

проблема решается есть сделать так
function bo(&$obj) {$obj=new A;}
это называется - передача обьекта по ссылке.

http://sandbox.onlinephpfunctions.com/code/7b312b4f1167a027f14fd4f218c70e28f9f3dcc9
вот пример если угодно, мы имеем в реале 3 копирования обьекта, 2 раза на new и один раз на передаче в функцию, но эту передачу реализует пхпшчка немного специфично

Аноним 18/11/18 Вск 16:16:37 #702 №1297235 
1388412261493.gif
>>1297230
В смысле блять.
public function bar(A $bar)
{
$bar = new A;
}

Что блять на этом этапе происходит? Какого хуя значения различаются? Откуда еще один объект взялся?
Или тип в метод можно передать объект, по ссылки, взаимодействовать там с ним (и он будет изменен снаружи), но записать в эту ссылку новое значение нельзя?
И тип ссылка внутри метода доступна ридонли?
Аноним 18/11/18 Вск 16:28:36 #703 №1297240 
Screenshot116.png
Screenshot117.png
Интересная хуйня.
1. В интерфейсе тайпхинт вернуть Test1.
2. В методе тайпхинт тоже на Test1.
3. Но возвращается потомок Test1 - Test2. Метод работает.

Далее переменная имеет таки тип Test2.
И это заебись, хорошо что так.

Но при этом в потомке наследника интерфейса нельзя переопределить тайпхинт на потомка, хотя по сути это все равно еще будет Test1.
Аноним 18/11/18 Вск 18:48:17 #704 №1297298 
4oZ4WUHiz8s.jpg
>>1297240
тож самое с атрибутами, попробуй сделать в дочернем классе
getTest($a) - выкинет ворнинг, но не упадет.
фишку добавили в пхп 5.4 и в бете падало в фатал ерор как у тебя на скрине, аноны лютовали потому как много говнокода перестало работать.
выло столько народа, что аж специально добавили E_STRICT который подавлял ошибку.


Аноним 18/11/18 Вск 21:52:04 #705 №1297394 
pr3.png
pr4.png
>>1296299
Банкомат - https://ideone.com/zFMkHm
Калькулятор - https://ideone.com/fEyLF1
Числа прописью - https://ideone.com/i79CX9
>Ты можешь проверить, попробовав поделить с помощью % большие числа (проверь).
Да, я проверил, и в нём проблема
>> "[$1]",
>Точно не $0 ?
Да, $0, ошибся
>> "/[,]?\s+(но)/ui" => ", $1",
>Здесь он поставит запятую перед "ночь".
Добавил в конце \b
>>1292640
>>Shift - https://ideone.com/L4JUTk
>Неплохо, но можешь сделать, чтобы многоточия и другие группы знаков препинания не разбивало бы пробелами?
https://ideone.com/SR7U45
(пик 2)
Аноним 18/11/18 Вск 21:54:01 #706 №1297395 
>>1297394
Забыл ещё
Алфавит - https://ideone.com/sONOGY
Аноним 18/11/18 Вск 22:02:24 #707 №1297397 
Аноны, вот функция:
trim($_SERVER['REQUEST_URI'], '/shop')

Вот URI запрос: /shop/product

Функция почему то возвращает roduct
Внимание вопрос: втф? Почему возвращается roduct, а не product?
Аноним 18/11/18 Вск 22:14:53 #708 №1297401 
>>1297397
Я понял, функция вырезает символы, а не строку. Если в запросе написать /shop/op, то функция вернет пустую строку. Хм, как же вырезать /shop/ из начала запроса?
Аноним 18/11/18 Вск 22:19:25 #709 №1297403 
>>1297401
Я понял! С помощью str_replace. Обожаю пиздеть сам с собой. Всем спасибо!
Аноним 18/11/18 Вск 22:51:52 #710 №1297414 
>>1297403
Таков этот тред пидорасов, никто нихуя не умеет, только на словах, приходится ебаться часами или вообще неосилять
Аноним 18/11/18 Вск 23:09:42 #711 №1297420 
>>1297414
лол
Аноним 19/11/18 Пнд 00:14:34 #712 №1297448 
08154266s.jpg
>>1297414
какой упоротый нуб
Аноним 19/11/18 Пнд 02:49:00 #713 №1297482 
561-711

Хватит флудить

>>1297414

Неправда. Напиши вопрос, и рано или поздно на него ответят.

>>1297401

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

>>1297395

Какой-то круг у тебя кривоватый. Надо было, конечно, коэффициенты подобрать.

> intval(round(cos(deg2rad($angle)) * $radius)
Внутрь round надо было заключить все выражение, а не его часть, так как у тебя из-за умножения целого числа на 2 получается, что шаг будет 2 знакоместа (letterX будет всегда четный).

> foreach ($row as $letter){
> echo $letter;
Можно использовать implode.

>>1297394

> Банкомат - https://ideone.com/zFMkHm

> examination (
Имя функции принято начинать с глагола, делатьЧтоТо().

> checkATM(
Название не отражает, что делает функция. Что значит "проверить банкомат"? Проверить на что? Надо было назвать функцию "есть ли купюры". Также, для выдачи и не требуется, чтобы все купюры были на месте - если нам нужно выдать 5000, то достаточно одной 5000-ной купюры.

> return (($sumInATM - $sum) >= 0) ? true : false;
Оператор >= возвращает true/false, потому можно просто писать return $sumInATM >= $sum

> //Проверяет, может ли банкомат выдасть купюры, и если не может, выводит причину
Это плохо, что функция часть результата возвращает, а часть выводит. Было бы логично и причину тоже возвращать. Можно сделать 2 варианта:

- возвращать массив из 2 элементов (bool + string)
- возвращать текст ошибки либо null, если ошибки нет

> function integer
Название не говорит о сути функции.

> for($i = 3; $i >= 0; $i--){
Здесь лучше не вписывать 3, а вычислять ее из размера массива. А еще лучше - отсортировать массив по убыванию номинала и использовать foreach вместо тяжелочитаемых индексов.

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

> if($moneyATM[$keys[$i]] >= $paper[$keys[$i]]){
Тут можно использовать min/max

> function currency()
Тут в функции нет проверки в конце, что мы всю сумму выдали. Может быть такое, что денег достаточно, но купюр для выдачи требуемой суммы нет (например: есть 5000-е, а надо выдать 1500).

Вот пример, где программа дает неверный ответ: https://ideone.com/aq9u1O

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

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

> Калькулятор - https://ideone.com/fEyLF1

> $number = "";
> $op = $char;
Это повторяется 2 раза, можно было не копипастить.

Если в выражении нет операций, выдается 0: https://repl.it/repls/CoarseAlarmedProcedurallanguage

А так, верно.

> Числа прописью - https://ideone.com/i79CX9

> {//Возвращает первые цифры для переданного числа
Комментарий обычно пишут над функцией, а не справа от скобки.

>(floor($number % pow(10, $i))
floor не имеет смысла, так как % возвращает int

> $firstDigits = getFirstDigits($number, ($amountOfDigits % 3 != 0) ? $amountOfDigits - $amountOfDigits % 3 : $amountOfDigits - 3);
Тяжело читать такое длинное выражение, надо было вынести аргумент в переменную.

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

> https://ideone.com/L4JUTk
> if(preg_match("/^[^.?!]/u", $fixedString[$i]) && preg_match($pattern, $fixedString[$i + 1])
Здесь есть риск что элемента $i + 1 не существует и будет ошибка. Было бы лучше ставить пробел не после, а перед текущим предложением, при условии, что оно не состоит из одного знака препинания. Или так нельзя?

Аноним 19/11/18 Пнд 02:49:39 #714 №1297483 
>>1297240

Вообще, если ты интересуешься наследованием в ООП, то тебе стоит почитать про принцип Лисков (там, где это описано простыми словами), а заодно можешь глянуть ковариантность/контрвариантность: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B8_%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%B0%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) - но там может оказаться сложновато разобраться. Английская версия статьи поподробнее.

Принцип Лисков говорит, что в код, работающий с базовым классом, можно передать объект класса-наследника, и ничего не должно сломаться; наследника можно использовать вместо предка.

Потому:

- типы аргументов можно расширять, но не сужать (=они контрвариантны)
- типы возвращаемых значений можно сужать, но не расширять (=они ковариантны)

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

- https://bugs.php.net/bug.php?id=72442

Увы, нужен RFC, голосование и желающий исправить проблему.

>>1297298

Добавление аргумента нарушает совместимость и принцип Лисков.

>>1297235

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

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

У тебя нет передачи по ссылке. Она обозначается символом &. Переменная $bar в функцию передается по значению (копируется). Мануал про ссылки: http://php.net/manual/ru/language.references.php

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

Для простоты представь, что объект создается где-то в памяти, а в переменную сохраняется его уникальный номер (указатель). Новые объекты создаются только операторами new/clone, а остальные операторы (знак равенства) просто копируют номер объекта:

$a = new A; // Создали объект #1
$b = $a; // В $b скопировался указатель на объект #1, она указывает на тот же объект
$b = new A; // Cоздали объект #2 и записали указатель в $b
$c = clone $b; // создали объект #3 и записали указатель в $c

func($a); // Передали в функцию номер объекта из $a (#1)

У тебя при вызове функции в $bar передается номер какого-то объекта, и в копии переменной внутри функции он заменяется на другой номер.
Аноним 19/11/18 Пнд 02:50:10 #715 №1297485 
>>1297227

Надо в такой ситуации выдавать ошибку 404 с помощью header(). А в идеале еще и HTTP-заголовки полученные передавать.

>>1297226

https://ru.wikipedia.org/wiki/HTTP#Методы

Точное определение метода смотри в RFC (англ): https://tools.ietf.org/html/rfc2616#section-9.6

>>1297205

в коде ошибки!

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

Во-вторых, прочти мануал по file_get_contents и узнай, как получить код ответа и заголовки ответа, которые желательно передать в неизменном виде клиенту.

А, в мануале это не написано (баг, надо бы зарепортить). Ну держи тогда ссылку с информацией: http://php.net/manual/ru/reserved.variables.httpresponseheader.php

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

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

> Хочу получать данные с помощью JS из API с внешнего сайта, мне мешает это сделать CORS, хочу их получать через php скрипт.

Тебе нужно именно из браузера, со страницы сайта их отправлять? Не проще написать PHP скрипт и из него слать? Или расширение на JS?
Аноним 19/11/18 Пнд 02:50:33 #716 №1297486 
>>1297174

> обьект не передается по ссылке, каждый раз делая $a = $myobj; ты копируешь обьект.
Неверно. Ты копируешь "указатель" (можно считать, порядковый номер)

> clone работает весьма криво
Нормально он работает.

>>1297169

> В любой метод передается объект не по значению, а по ссылке.
Это неточно. Передача по ссылке явно указывается символом &. Если его нет - переменная передается по значению, но для объекта это будет не сам объект, а его "номер" или "указатель".

Объекты в PHP передаются точно так же, как в Java, C#, JS.

> Объект 1, объекты сами собой не копируются, если ты не описал для них метод __clone().
Оператор clone работает, даже если этого метода нет.

>>1297167

В расширении можно запрашивать любые URL в обход CORS, как я помню. Описание: https://developer.chrome.com/extensions/xhr

>>1297163

Объекты создаются только через new/clone, потому там один объект, просто указатель на него записан в две переменных.
Аноним 19/11/18 Пнд 02:50:59 #717 №1297487 
>>1297146

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

>>1297089

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

Потому ArrayObject надо оборачивать:

class MessagesList implements ArrayAccess, ...
{
private $list;

...
$list = new ArrayObject(...);
...
}

Твоя задача решается дженериками, которых в PHP нету. Как безвыходный вариант, можно использовать идею с абстрактным методом (можно сделать не getType(), а supports(object $x)), но тогда придется отказаться от тайп-хинтов.

> То есть, вопрос чисто про подсветку в IDE.

Используй doc-комментарий @var: https://intellij-support.jetbrains.com/hc/en-us/community/posts/207025175-Using-to-phpdoc-to-specify-that-a-variable-represents-an-object-class

>>1297070

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

> [а-яё0-9a-z,.?!:;]+
Ты хотел написать "любой символ, кроме пробела"? Тогда надо использовать \\S

> $hui = preg_replace($regexp,"$1$3$5",$hui);
> $hui = preg_replace($regexp,"$1$3$5",$hui);
Почему повторяется 2 раза? Нужен как минимум комментарий.

> $l++;
> if (($letter==".")|($letter=="?")|($letter=="!")) {
> $letters[$l]=mb_strtoupper($letters[$l]);
Здесь есть риск, что элемента $l + 1 может не существовать. Лучше сделать переменную "предыдущий символ", и проверять ее.

А еще лучше - использовать preg_replace_callback.

Расстановку пробелов - нельзя ли было сделать там же, где и удаление пробелов?
Аноним 19/11/18 Пнд 02:51:40 #718 №1297488 
>>1297010

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

>>1296561

https://repl.it/@underbottom/repeat4

> str_replace("зде","сде",$changedText);
Это сломает слово "везде".

> ="/([^,а-я])(а|но)\\s/u";
Это сработает на слово "ночь".

https://repl.it/@underbottom/repeat3

> \\+
Внутри квадр. скобок спецсимволов всего 4: ] ^ - \ и плюс можно не экранировать. А вот минус - желательно.

> while ($count!=0) {
> $count--;
Можно было через implode/array_column вывести без цикла.

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

https://repl.it/@underbottom/repeat2

Ок, верно.

https://repl.it/@underbottom/repeat1

> $number[0]=str_replace("7","8",$number);

Обращение к строке как к массиву не всегда работает. Например, если в начале будет стоять символ, кодирующийся несколькими байтами, то этот код приведет к появлению невалидной последовательности байт. Подробнее: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

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

Также, программа не находит явные ошибки, например: 84951a234567 она считает правильным номером, как и 7 234 5678901. Проверь внимательно список номеров, и убедись, что все неправильные номера помечаются как неправильные.

https://repl.it/@underbottom/exam-after-chapter

Твоя программа срабатывает на все латинские символы (пример https://repl.it/repls/DifferentOccasionalPatch ). Но надо, чтобы она срабатывала на слова, состоящие из смеси двух алфавитов.

> $changedText=str_replace("y","у",$changedText);
> $changedText=str_replace("k","к",$changedText);
Лучше использовать strtr() и массив замен. Причем замену надо делать только в проблемных словах. Потому можно разбить текст на отдельные слова и проверять по одному, либо колдовать с preg_replace_callback.
Аноним 19/11/18 Пнд 02:52:26 #719 №1297489 
>>1296578

Если хочешь поучиться ООП, у нас есть задачки, там ты статическими методами не решишь их:

- ООП-Будильник: https://phpclub.tech/pr/res/1232710.html#1263399
- ООП-Гостиница: https://phpclub.tech/pr/res/1082507.html#1097078

>>1296548

Не надо копипастить куски регулярки. Ты можешь поместить выражение в круглые скобки и задать число повторов: (....){x}

Квантификаторы (+, звездочка, ?, {}) применяются к символу перед ними, но если поставить их после круглых скобок то они уже применяются ко всему выражению в скобках.

> ^(\\+|8)[\\s-()]*(7)?
Тут проблема: не гарантируется, что после + будет семерка. Надо перенести семерку внутрь скобок.

>>1296428

https://ideone.com/phlsVk

> $homo=countPercent(40000,1.04,500,"Homocredit");
У тебя функция ничего не возвращает (в ней нет return), и в переменную запишется null. Сохранять и выводить его нет смысла.

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

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

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

> if ($amountDebt >= 5000) {
> $amountDebt -= 5000;
5000 надо вынести в переменную для читаемость и простоты изменения.

Также, if можно заменить на min/max.
Аноним 19/11/18 Пнд 02:52:50 #720 №1297490 
>>1296414

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

> Слышал, что в PostgreSQL есть функциональные индексы, помогут ли они в этой ситуации?
Нет, они рассчитаны на ситуацию, когда ты применяешь функцию к значению поля: f(time). А у тебя есть еще неизвестный в момент создания индекса параметр - таймзона: f(time, tz)

В WHERE индексы можно использовать, если правильно постаивть преобразование:

WHERE time BETWEEN CONVERT... AND CONVERT...

>>1296300

> И еще не понял как выводить в эчо обычную строку и переменную приведенную в тип интеджер в одних кавычках, не юзая точку
Это эхо же (произносится [ˈekəʊ] или [ˈɛkoʊ]): https://en.wiktionary.org/wiki/echo#English

echo "Текст $variable текст";

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

Для округления лучше использовать round - он мощнее.

> $deposit<= 1000000;
При достижении ровно миллиона цикл продолжать не надо.

10 процентов лучше бы вынести в переменную для понятности и простоты изменения.
Аноним 19/11/18 Пнд 08:08:46 #721 №1297521 
>>1297483
О, спасибо за подробный ответ!
Аноним 19/11/18 Пнд 08:28:26 #722 №1297524 
>>1297483
>типы возвращаемых значений можно сужать, но не расширять (=они ковариантны)
Вот тут не понел. Как это - сужать типы возвращаемых значений?
Аноним 19/11/18 Пнд 08:32:20 #723 №1297526 
>>1297485
Лол. Анон, все что ты описал, ему предлагали много постов назад.
И библиотека нормальная для запросов и экранирование параметров там было и жс-расширение.
Но беда в том, что чел совсем нюфаг и не осиливает
Аноним 19/11/18 Пнд 08:55:30 #724 №1297532 
>>1297487
>Проблема с ArrayObject в том, что данные в него можно передать не только через конструктор, но и через методы.
Фигасе, о том, что туда данные можно и через методы передать я и забыл.
Таким образом может существовать объект, в котором будут данные другого типа.
>А ставя в них ограничения, ты нарушаешь принцип Лисков.
Это да. Даже не думал об этом. Код, работающий с ArrayObject, будет ожидать, что сможет нормально работать и с его потомком, а это не так.
Короче не нужно в потомке ломать обратную совместимость с базовым классом.
>Потому ArrayObject надо оборачивать:
То бишь, самому реализовать все нужные интерфейсы?
Аноним 19/11/18 Пнд 09:28:24 #725 №1297537 
>Устанавливать пока что ничего не требуется, разве что редактор кода вроде Sublime Text 3, Notepad++, Visual Studio Code, Netbeans PHP или PhpStorm (с ним будет удобнее).

Котаны, подскажите нубу. Что из этих редакторов имеет возможности визуал студио для шарпа визуал студио. Т.е. сам дописывает названия операций, подсказывает функции из подключенных файлов. Ну вы понели. А то после шарпа как-то не привычно все руками набирать
Аноним 19/11/18 Пнд 09:41:19 #726 №1297540 
Screenshot118.png
>>1297487
Так по идее тогда любые доп-проверки аргументов метода нарушают принцип Лисков?

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

Но это все же слишком идеальный манямир, так не получится писать.
Аноним 19/11/18 Пнд 09:55:20 #727 №1297543 
>>1297482
>str_replace вырезает эту подстроку в любом месте, а не только в начале строки.
Если надо только по краям строки обрезать, то лучше использовать trim().
Вообще, похоже, что он роутер собирает. В сети куча гайдов, но надо сюда припереться с такими нубскими вопросами.
Аноним 19/11/18 Пнд 10:07:40 #728 №1297547 
>>1297482
>Лучше всего - регуляркой
Регулярки лучше вообще не втыкать пока не возникнет такой ситуации, когда без них никак, тк они довольно медленные.

Аноним 19/11/18 Пнд 10:10:43 #729 №1297548 
>>1297524
>Как это - сужать типы возвращаемых значений?
Если функция работает с какими-то свойствами объекта, то и в потомке этого объекта эти свойства будут присутствовать - их не выкинешь из класса.
Думаю, он это имел ввиду.
Аноним 19/11/18 Пнд 10:16:53 #730 №1297552 
>>1297537
Кажется netbeans умеет
Аноним 19/11/18 Пнд 10:19:43 #731 №1297554 
>>1297537
Если проблемы нет с оперативой (хотя бы 8гб имеется), то phpstorm это лучшее что есть. Он умеет всё что ты перечислил и гораздо больше.
Аноним 19/11/18 Пнд 10:34:01 #732 №1297560 
10517955.jpg
Не хочу показаться нетактичным, и не подумайте ничего такого, заранее извиняюсь, но все таки не могу понять, почему мои задачи игнорят? Я уже три раза попросил, просто в мой мозг уже начинает всякое лезть. Еще раз простите.
>>1287151
>>1293208
>>1294857
Аноним 19/11/18 Пнд 10:42:38 #733 №1297562 
>>1281608 (OP)
if(!defined("MIRROR")){die("Hacking attempt!");}
if(!@mysql_connect("127.0.0.1", "en_gmb", "S8aHq4aN")){
die("Error connect!!!");
}
if(!@mysql_select_db("en_gmb")){
die(mysql_error());
}
}else{
if(!defined("MIRROR")){die("Hacking attempt!");}
if(!@mysql_connect("localhost", "gmb", "S8aHq4aN")){
die("Error connect!!!");
ПАМАХИТЕ!!!!!!
на елсо выдает ошибку, пхпмайадмин, ишрался с рутами и локалхостами нихуя не помогло. ЧЯДНТ???
Аноним 19/11/18 Пнд 11:17:21 #734 №1297573 
>>1297562
>ПАМАХИТЕ!!!!!!
Это что вообще за кусок говна и для чего он нужен?
По-нормальному установить соединение с бд религия не позволяет?
PDO использовать? Отлавливать исключения? Не городить говно из else if ?
Аноним 19/11/18 Пнд 11:23:55 #735 №1297574 
>>1297524

Здесь сужать - значит указывать наследника типа. Если метод в классе-родителе возвращает A, то метод в наследнике в теории может возвращать B (B extends A). Но по факту в PHP это пока не работает.
Аноним 19/11/18 Пнд 11:24:43 #736 №1297576 
>>1297573
крч дали сайт сиди грызи его без какой-либо инфы, развернул xampp пытаюсь локально запустить, перерыл все файлы сайта нашел это это вроде как часть кода отвечающая за конетк к бд, и как бы тут локальная версия встает, базы в пхпмайдмин импортировал, я вообще хз че тут не так.
Аноним 19/11/18 Пнд 11:25:26 #737 №1297577 
>>1297562

Попробуй убрать @ и либо смотреть логи, либо, если ты запускаешь не на продакшене, включить display_errors. Должно вывестись какое-то сообщение об ошибке.
Аноним 19/11/18 Пнд 11:26:26 #738 №1297578 
>>1297576
> базы в пхпмайдмин импортировал
Логин-пароль в коде поменял то хоть на локальные свои?
Аноним 19/11/18 Пнд 11:28:02 #739 №1297579 
>>1297578
пароля нет, логин менял я даже в пхп создал учетку с таким же именем как в коде вообще нихуя
Аноним 19/11/18 Пнд 12:31:17 #740 №1297595 
>>1297560
>мои задачи игнорят
Я свои вообще не выкладывал. Иди дальше просто - ОПу деньги не платят, чтобы он лабы наши проверял.
Выхлоп скрипта соответствует условию? Понял как работать с регулярками и языком? Катись дальше значит.
Аноним 19/11/18 Пнд 12:45:52 #741 №1297602 
>>1297576
Версия пыха какая? Говнокод старый - в новых версиях задеприкейтили msql.
Аноним 19/11/18 Пнд 12:48:40 #742 №1297603 
>>1297602
5.6.....
Аноним 19/11/18 Пнд 12:55:23 #743 №1297607 
>>1297579
Ошибку то какую выдает?
Аноним 19/11/18 Пнд 12:56:25 #744 №1297609 
>>1297607
неа( просто ошибка соединения
Аноним 19/11/18 Пнд 12:57:17 #745 №1297610 
>>1297603
>5.6
Говорят, что с 5.4 надо было скатываться. Хотя я толком не знаю - через PDO пишу.
Вообще глянь:
С какой ошибкой валится, на каком моменте? Поотключай подавление ошибок и измени строки на выводе ошибок - будешь знать хоть где отваливается.
Аноним 19/11/18 Пнд 13:30:18 #746 №1297618 
>>1297610
версия поддерживает некоторые страницы работаю а вот при запуске идекса вылазет эта залупа
Аноним 19/11/18 Пнд 14:05:53 #747 №1297637 
Господа, прошу посоветовать самоучитель по CSS и HTML, так как в гугле и ютубе их огромное количество, то глаза разбегаются, с чего же стоит начать.
Аноним 19/11/18 Пнд 14:06:56 #748 №1297638 
>>1297637
аштмл академия вроде как годнота
Аноним 19/11/18 Пнд 14:20:35 #749 №1297647 
>>1297618
>вылазет эта залупа
Какая залупа? Что именно пишет? Процитируй.
Аноним 19/11/18 Пнд 14:24:14 #750 №1297649 
>>1297638
Мне не зашла эта годнота - слишком много внимания мелочам уделяется.
Да и в пизду эту вёрстку - я у мамы погроммист.
Аноним 19/11/18 Пнд 14:24:39 #751 №1297651 
Безымянный.png
>>1297647
Аноним 19/11/18 Пнд 14:40:40 #752 №1297661 
>>1297651
if(!defined("MIRROR")){die("Hacking attempt!");}
if(!@mysql_connect("127.0.0.1", "en_gmb", "S8aHq4aN")){
die("Error en_gmb connect!!!");
}
if(!@mysql_select_db("en_gmb")){
die(mysql_error());
}
}else{
if(!defined("MIRROR")){die("Hacking attempt!");}
if(!@mysql_connect("localhost", "gmb", "S8aHq4aN")){
die("Error gmb connect!!!");

Вот этот скрипт скопипасти и запусти. Результат выложи.
Аноним 19/11/18 Пнд 14:45:07 #753 №1297664 
Безымянный.png
>>1297661
Аноним 19/11/18 Пнд 14:47:13 #754 №1297667 
>>1297664
if(!defined("MIRROR")){die("Hacking attempt!");}
if(!@mysql_connect("127.0.0.1", "en_gmb", "S8aHq4aN")){
die("Error en_gmb connect!!!");
}
if(!@mysql_select_db("en_gmb")){
die(mysql_error());
}
}else{
if(!defined("MIRROR")){die("Hacking attempt!");}
if(!@mysql_connect("127.0.0.1", "gmb", "S8aHq4aN")){
die("Error gmb connect!!!");

Теперь через этот попробуй.
Аноним 19/11/18 Пнд 14:51:33 #755 №1297670 
Безымянный.png
>>1297667
Аноним 19/11/18 Пнд 14:55:54 #756 №1297674 
>>1297670
Должно работать с последним скриптом.
Аноним 19/11/18 Пнд 15:08:22 #757 №1297677 
>>1297548
Да при чем тут члены класса и тип возвращаемого значения функции?
Это совсем разные вещи
Аноним 19/11/18 Пнд 15:29:14 #758 №1297683 
>>1297649

Что не понравилось?
Аноним 19/11/18 Пнд 16:00:59 #759 №1297694 
>>1297560
>>1293208
>>1287151

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

Опечаточники: https://www.ideone.com/XKbY9H
Можно было упростить себе жизнь, и просто определять язык по первой букве или по тому, букв какого алфавита больше. Так как в задаче по сути требуется просто искать слова, состоящие из букв 2 алфавитов, и точности определения языка не требуется.

> return 0;
> } else {
> return false;

Не очень удачный выбор, так как false и 0 легко спутать, если использовать == вместо ===. Лучше было выбрать варианты 0, 1, 2 или -1, 0, 1. Или строки 'ru', 'en', null. Или даже завести константы с понятными именами (вроде LANG_RUSSIAN).

> preg_replace("/{$word}/ui", $fixedWord, $text);
Лучше было использовать str_replace, а то если в слове есть спецсимволы, то они будут интерпретированы как часть регулярки.

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

Shift: https://repl.it/repls/RequiredColorlessUnits

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

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

Yoda Speak: https://repl.it/repls/SalmonGoldenExpertise

Верно.

Числа прописью: https://repl.it/repls/TrustyNegativeJavabytecode

> if ($lastDigit == 0) {
> return $word5;
Это можно было не писать, там ведь в конце в else это значение возвращается.

> if (($ten = floor($tensAndUnits / 10) * 10) != 0)
Не очень хорошая идея совмещать if и присваивание, ухудшает читабельность.

А так, верно.

Калькулятор: https://repl.it/repls/StingyLargeState

Тут тоже все верно.
Аноним 19/11/18 Пнд 16:20:11 #760 №1297700 
>>1297683
Подача и детализация.
Хотя могу и придираться - мне легче говнокод вордпресса, который перемешан с хтмл, разобрать, чем по мишеням из CSS стрелять - какие-то совершенно ебанутые конструкции там. Излишне это, лучше формы учили бы править - учили на реальных задачах, а не на выдуманных.
Аноним 19/11/18 Пнд 18:58:40 #761 №1297780 
>>1297674
вот и я хз
Аноним 19/11/18 Пнд 20:45:05 #762 №1297828 
>>1297574
Ок, понял, спасибо
Аноним 20/11/18 Втр 01:19:47 #763 №1297952 
Анончики, требуется помощь с задачей ОПа.
>Дан текст, который по идее должен быть номером телефона в виде 8-(911)-506 56 56 (т.е. человек может ввести не только цифры, но и скобки, минусы, может что-то еще). Но в реальности, пользователь может вместо номера написать что угодно. Напиши скрипт для проверки правильности введенного номера («8(911)-506 56 56» — правильный номер, «8-911-50-656-56» — правильный, «89115065656» — правильный, «02» — неправильный, «89115065656 позвать Люду» — неправильный).

ссылка на саму базу телефонов - https://regex101.com/r/qF7vT8/3
Что я накрутил - ([\s\-()]\+7|8)([\s\-()][0-9]){10}$. Не ищет номер с пробелом между + и 7. Очевидным решение будет написать \s* между ними и тогда всё заработает, но сомневаюсь, что это правильное решение.
Буду очень благодарен.
Аноним 20/11/18 Втр 01:20:28 #764 №1297954 
Безымянный.png
Допустим, я хочу сделать простенькую игру с сервером на пхп. Это означает, что нужно курить веб сокеты?

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

Пикрелейтед.
Аноним 20/11/18 Втр 03:00:59 #765 №1297979 
>>1297952
^([\s\-()](\+[\s\-()]7|8))([\s\-()]*[0-9]){10}$
Я видимо изобрёл велосипед, но это работает, но такое ощущение, что можно проще.
Аноним 20/11/18 Втр 05:23:44 #766 №1297995 
>>1297979
>>1297952
Не рекомендую особо заострять внимание на регулярках. У опа они конечно хорошие, но в итоге у вас всё сведётся к тому, что вы её нагуглите и поставите в проект.
Аноним 20/11/18 Втр 05:33:47 #767 №1297996 
>>1297995
Просто интересно. ОП сказал:
>Ты можешь поместить выражение в круглые скобки и задать число повторов: (....){x}

Я так и не допер как. Либо у всех плохо с регуляркой и я вздохну спокойно, либо я безнадёжен.
Аноним 20/11/18 Втр 06:04:27 #768 №1298000 
>>1297487
https://repl.it/@underbottom/povtorenie1 - (исправление пробелов и заглавные буквы) было тяжело, но я разобрался, как работает preg_replace_callback. Видимо на первых порах тяжело вычленять и усваивать инфу из мануала(либо я тупой). Я очень перемудрил с регуляркой и поэтому приходилось 2 раза прогонять, что бы успловия подошли. Сейчас вроде лаконично. Подтянул знания по регулярке и теперь понимаю более-менее, что к чему.
https://repl.it/@underbottom/repeat4 - поправил недочёты.
https://repl.it/@underbottom/repeat3 - Исправил. Я перемудрил.
https://repl.it/@underbottom/value-credit - долго думал, как реализовать вычисления наименьшей цены. Оказалось min сравнивая массивы берёт только валью нулевой строки.(пытался ставить миллион дней результат не поменялся).
https://repl.it/@underbottom/ExcitingUnimportantExperiments - переделал регулярку, уверен, что нужно не так. Но вроде работает.
https://repl.it/@underbottom/repeat1 - переделал регулярку и способ решения.
https://repl.it/@underbottom/exam-after-chapter - опять перемудрил. Исправил.

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




Аноним 20/11/18 Втр 08:00:36 #769 №1298008 
>>1297996

Ок, вопросы:

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

Если нет, поищи ответы, например, тут в мануале: http://php.net/manual/ru/reference.pcre.pattern.syntax.php

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

Теперь возьмем такую задачу: найдите в тексте последовательность 1 или более чисел, разделенную запятыми. Пример текста: "в 1923, 1934, 1935 годах". Программа должна найти "1923, 1934, 1935".

Как ее решить регуляркой? Попробуем пойти "снизу вверх", от простого к сложному.

Напишем выражение для того, чтобы найти любое число. Число - это 1 или более любых цифр. Напиши это выражение, если не догадался, то ответ: "Любая цифра" в регулярке записывается как \d или [0-9]. "1 или более" повторение задается добавлением после нее квантификатора "плюс". Получается, ...

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

число (пробелы , пробелы число) *

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

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

"Число" - это выражение, которое мы составили выше. "пробелы" - 0 или более пробелов - это \s*. Собрав все вместе, получим ответ.

Попробуй решить эту задачку.
Аноним 20/11/18 Втр 08:26:54 #770 №1298014 
>>1297637
CSS: The missing manual
Аноним 20/11/18 Втр 09:29:04 #771 №1298037 
>>1297540
>любые доп-проверки аргументов метода нарушают принцип Лисков?
Бам вопросу!
Аноним 20/11/18 Втр 10:29:11 #772 №1298052 
>>1298037

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

Но здесь другая ситуация. У нас нет кода, заточенного на работу с базовым классом и потому не требуется совместимости. У нас задача - создавать контейнеры для разных типов данных (имитировать generic types). И потому мы можем от принципа Лисков отступить.
Аноним 20/11/18 Втр 10:30:31 #773 №1298054 
>>1298008
1) Напишу, как я понимаю это. Квантификаторы - условия задаваемые выражению внутри скобок. Например: ^[0-9] - строка начинается с цифры, [\d]$ - строка заканчивается на цифру, [0-9]? - может встретиться цифра.
2) Фигурные скобки. Внутри них задаётся число повторений от n до m. Например, {3,5} - от 3 до 5 или {0,} - от 0 до бесконечности.
3) Круглые скобки - объединяют набор символов и квантификаторов в один элемент(тупая формулировка наверное). Например: (\S+[.?!]) - найдёт последнее слово в предложении с знаком препинания. Так же ими можно манипулировать с текстом. допустим:
preg_replace("/(\S+[.?!])\s([\S])/", "$1$2",$text); - уберёт пробел между концом предложения и началом следующего.

задачка. Число находим вот так [\d]+. Найти число с запятой [\d]+(\,\s)
.
Аноним 20/11/18 Втр 10:36:18 #774 №1298057 
>>1298054
>[\d]+(\,\s)*
быстрофикс

Аноним 20/11/18 Втр 11:59:54 #775 №1298091 
6546.jpg
Попробую последний раз сделать список студентов. Если не получится, то хуй знает че делать. На псевдоООП почти сделал студентов и половину файлообменника. Ваще не ебу, как это работает. И зандстру ебаного, или как там его, почитал и много видеороликов посмотрел, один хуй не понял ниче. Я могу там классы сделать, наследования и прочую залупу, но как из этого сайт сварганить вообще не понимаю. Открыл один видеоролик, в котором мужик то ли блог делает, то ли еще какую залупу, так у него там для вывода какой-то хуеты 5 или 6 файлов, куча классов ебаных. Одно в другой входит, ретурны хуюрны, трейты, селф зис, хуис. Как будто магия вуду блядь, специально долбоебов отсеивать. Мне очень нравится писать говнокод, как я умею и что сам хочу. А когда я открываю какие-то патерны для работы с базами данных, шаблонизаторы-хуянизаторы, какие-то ооп мутанты на миллиард классов, то мне сразу хуево становится, от того, что я нихуя не понимаю. Есть тут такие же дауны как я?
Аноним 20/11/18 Втр 12:24:40 #776 №1298105 
>>1298091

Ты тут не смотрел пример кода? https://github.com/codedokode/pasta/blob/master/arch/mvc.md

ну и это можно глянуть: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md

Классы добавляются по мере необходимости. Надо загружать/сохранять сущности в БД - делаем класс, надо генерировать URL - делаем класс, и тд. Если не нужен - то не делаем.

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

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

Наверно ролик рассчитан на тех, кто изучил теорию про эти классы?
Аноним 20/11/18 Втр 12:37:27 #777 №1298113 
>>1298091
Ты удивишься, но твои мысли верны - незачем писать избыточный код, я до ооп еще не дошел, но мне это очевидно. Однако, есть же определенные зарекомендовавшие себя методики - и почему бы их не придерживаться. Я как ньюфаг отдаленно понимаю зачем нужон MVC.
Аноним 20/11/18 Втр 12:48:30 #778 №1298120 
>>1298105
> public function __construct(PDO $pdo) { ... }
>(PDO $pdo)
Тут у нас что именно передаётся? Просто коннект к БД?
Для одного коннекта надо целый класс пилить? Чёт писанины много получается.

мимовкатывальщик
Аноним 20/11/18 Втр 12:57:50 #779 №1298128 
>>1298091
идешь на кодбезикс, потом на хекслет.
становишься погромистом через год.
Аноним 20/11/18 Втр 12:59:37 #780 №1298129 
>>1298052
>У нас нет кода, заточенного на работу с базовым классом
Так любой код, работающий с ArrayObject, будет ожидать, что сможет работать и с его потомком. Даже если сейчас такого нет, может появится в будущем. И вовсе не факт, что это я его напишу.
Может у кого-то будет годная библиотека для работы с ArrayObject, а тут этот чел смотрит: "Опа, что это тут у нас? Да это же потомок ArrayObject! Я смогу с ним работать с помощью той либы, что работаю с обычным ArrayObject'ами."
Передает объект, а ему: "Соси хуй, быдло".
Нехорошо так делать, теперь я это понял.

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

Теоретически тут может помочь закрытое наследование. Типа когда класс фактически наследуется от базового, но все его унаследованные методы становятся закрытыми, вне зависимости от настроек в базовом.
Тогда внешний код не будет знать, что класс является потомком какого-то другого.
Вроде в плюсах есть что-то такое.
Но звучит как-то бредово, не даром такой хуйни нигде почти нет.
>и потому не требуется совместимости. У нас задача - создавать контейнеры для разных типов данных (имитировать generic types).
Очень рад, что ты понимаешь, что я пытаюсь сделать, не то что здешние школьники.
>И потому мы можем от принципа Лисков отступить.
Ну вот хуй знает, ты меня прям с этим принципом озадачил.
Аноним 20/11/18 Втр 13:01:58 #781 №1298131 
>>1298091
П - проектирование приложения.
Все учат классы половчее пилить, но никто не учит как оно должно взаимодействовать изнутри и как это распланировать ещё до всякого кода. Опытные - умею, а новички ебутся.
Самого заебало.
Аноним 20/11/18 Втр 14:12:14 #782 №1298161 
1443183024463.png
>>1298131
Рад, что ты меня понимаешь, анончик. Седня постараюсь продумать все и составить пошаговый план, а завтра уже начну свою пятую или шестую попытку написать студентов.
>>1298105
>Ты тут не смотрел пример кода? https://github.com/codedokode/pasta/blob/master/arch/mvc.md
>ну и это можно глянуть: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
Я кучу раз уже читал твои статьи.
>Наверно ролик рассчитан на тех, кто изучил теорию про эти классы?
Я до просмотра этого ролика, посмотрел серию видосов от этого же автора по ООП. Ниче охуеть нового не узнал. От того, что я в сотый раз услышу "объект - это экземпляр класса" или еще раз послушаю про инкапсуляцию полиморфизм наследование, ничего не изменится. Я вроде бы все это понимаю в теории, но полноценно использовать на реальном проекте не получается. Наверное, плохо стараюсь. Единственное, что я не понимаю, это исключения, всякие try catch. твой урок по ним уже читал. Как будто после каждого пука их вставляют.
Аноним 20/11/18 Втр 14:23:49 #783 №1298180 
>>1281608 (OP)
Подскажите плз, как отнять от одной даты другую, если одна получена в базе данных через функцию now(), а вторая -- date("Y-m-d H:i:s")?
По итогу они имеют один и тот же вид, но date_diff не работает
Аноним 20/11/18 Втр 14:28:51 #784 №1298182 
>>1298091
>Попробую последний раз сделать список студентов. Если не получится, то хуй знает че делать. На псевдоООП почти сделал студентов и половину файлообменника.
Ну охуеть теперь, написал полторы строки кода и чего-то ждёт.
Чтобы реально догнать, для чего нужно городить все эти тонны абстракций и какую роль играют паттерны - надо реально на своем опыте столкнуться с проблемами, которые они решают.
Чтобы ты, глядя на свой код, подумал: "Аааах блять, а вот если бы я сделал так-то и так-то, сейчас все нормально было бы". И потом в следующем проекте сделать уже правильно.
Этого из книжек не почерпнешь. Ты просто не поймёшь какие проблемы решает тот или иной подход, да и какие проблемы вообще бывают.

Чужие шишки не болят.
Короче набивай потихоньку свои 10к часов.
Аноним 20/11/18 Втр 19:49:03 #785 №1298339 
Пиздос, а ларавел так сможет? За 23 минуты?
https://www.youtube.com/watch?v=OaDhY_y8WTo
Аноним 20/11/18 Втр 20:19:26 #786 №1298363 
Пишу круд, отнаследовался от PDO. Всё на неймспейсах.
Зачем и почему он пытается искать PDO в этих неймспейсах? Он что, теперь вообще каждый класс будет искать там, даже встроенные? Что за наркомания?
Мне теперь ещё одного наследника этого PDO описывать, чтобы положить в конструктор? Нельзя по-нормальному зделоть, чтобы сразу работало, без сотен строк костылей?
Аноним 20/11/18 Втр 20:30:38 #787 №1298373 
>>1298363
Просто указывай корневой неймспейс при обращении:
\PDO
Аноним 20/11/18 Втр 20:31:42 #788 №1298374 
>>1298363
А ещё он начал искать класс исключений в неймспейса.
Всё отвалилось, короче.
Аноним 20/11/18 Втр 20:32:15 #789 №1298376 
>>1298373
Спасибо.
Аноним 20/11/18 Втр 20:53:52 #790 №1298388 
Исключения вроде починил, но PDO он продолжает упрямо скармливать загрузчику классов.

Строка:
class DataBase extends \PDO

Выдаёт:
Fatal error: Uncaught exception 'Exception' with message 'Unable to open Core/Lib/PDO.php.' in C:\OSPanel\domains\mvc.loc\core\lib\Helpers.php:15 Stack trace: #0 [internal function]: Helpers::ClassLoader('Core\\Lib\\PDO') #1 C:\OSPanel\domains\mvc.loc\core\lib\DataBase.php(39): spl_autoload_call('Core\\Lib\\PDO') #2 C:\OSPanel\domains\mvc.loc\index.php(25): Core\Lib\DataBase->__construct('conf/db.ini') #3 {main} thrown in C:\OSPanel\domains\mvc.loc\core\lib\Helpers.php on line 15
Аноним 20/11/18 Втр 21:22:32 #791 №1298406 
15365982899230.jpg
>>1298388
Всё понял - в каждой ссылке на класс надо указывать, а у меня там понаписано.

Алсо, у меня теоретический вопрос:
Делаю микрофреймворк для изучения MVC и не понимаю как там должна работать обработка полученных данных.
Вот я через контроллер вызвал модель и выдал всё это на шаблон. Например форму заполнения. Как теперь мне поступить с полученными данными? Просто вызвать нужный метод модели?
Понимаю, что вопрос нубский, но хотелось бы делать "как надо", а не "как получится".
Аноним 21/11/18 Срд 00:53:51 #792 №1298548 
>>1298120

PDO это встроенный в PHP класс (точнее, не в PHP, а в расширение pdo). Его описывать не требуется,он уже есть.

Он представляет соединение с БД. Разве не логично, что мы передаем соединение с БД в класс, которому надо работать с базой данных? Как иначе-то?

>>1298129

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

> Так любой код, работающий с ArrayObject, будет ожидать, что сможет работать и с его потомком.

Тем не менее, мы намеренно отказываемся от соблюдения принципа Лисков тут, чтобы реализовать имитацию generic types. А если мы не используем наследование от ArrayObject, то такой проблемы вообще нет.

> Лучше самому реализовать нужные интерфейсы.

Можно и так.

>>1298131

1) почитайте мой урок по MVC
2) решите задачки про ООП-гостиницу или ООП-будильник
3) почитайте мой урок по DI, паттернам работы с БД
4) решите задачку про студентов
5) поизучайте фреймворки и подумайте, зачем там использованы такие-то классы и применен такой-то подход

Вот так примерно у вас и появится представление (может быть).
Аноним 21/11/18 Срд 03:29:06 #793 №1298639 
>>1298161

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

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

Я, наоборот, не понимаю, чего тут сложного. Нам надо как-то представить Студента в коде - делаем для него класс. Надо сохранять/загружать их из БД - делаем для этого класс StudentTableDataGateway (описан в уроке про работу с БД). И, может, нам понадобится еще класс с вспомогательными методами для генерации URL. Вот и все, задача про студентов решена. Какой еще полиморфизм? Оставь его авторам учебников по ООП или разбери компонент Form в Symfony, чтобы увидеть его использование.

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

> Единственное, что я не понимаю, это исключения, всякие try catch.

Если функция или метод не может выполнить свою задачу или дать точный, актуальный ответ - она выбрасывает исключение. Пример: функция расчет цены после скидки выбрасывает исключение, если ей передать скидку меньше 0% или больше 100%. Заодно можно выкинуть исключение при передаче отрицательной цены:

function calcPriceAfterDiscount(float $price, int $discount = 0): float
{
if ($discount < 0 || $discount > 100) {
throw new \InvalidArgumentException("Discount must be between 0 and 100, $discount given");
}

if ($price < 0) {
throw ....;
}

return ...
}

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

Ловить исключения нужно гораздо реже, обычно вообще не требуется. Если вдруг это нужно, то можно использовать свой класс исключений, чтобы ловить только такой тип исключений и никакие другие. Пример с этой функцией выше. Допустим, мы принимаем данные для расчета из формы и при ошибке хотим отобразить понятный текст. Мы заменяем в примере выше станждартное исключение \InvalidArgumentException на свой класс CalcPriceException, который надо описать. А затем пишем код:

$price = floatval($_GET['price'] ?? 0);
$discount = intval($_GET['discount'] ?? 0);

try {
$result = calcPriceAfterDiscount($price, $discount);
echo "Результат: $result\n";
} catch (CalcPriceException $e) {
echo "Ошибка: {$e->getMessage()}\n";
exit(0);
}

Но, как я написал выше, ловить исключения требуется редко.
Аноним 21/11/18 Срд 03:29:49 #794 №1298640 
>>1298180

А ты мануал точно читал? В мануале написано:

> date_diff — Псевдоним DateTime::diff()

Переходим к классу DateTime:

> public DateInterval DateTime::diff ( DateTimeInterface $datetime2 [, bool $absolute = FALSE ] )

Эта функция работает с объектами, реализующими DateTimeInterface, а не строками.

>>1298363

А зачем наследоваться от PDO? Что тебя в нем не устраивает?

> Зачем и почему он пытается искать PDO в этих неймспейсах?
Ты урок или мануал по нейсмпейсами точно прочел? Там описано черным по белому, как работают неймспейсы.

Неймспейс это просто часть полного имени класса. То есть, сокращенное имя это SomeClass, а полное - SomeNamespace\SomeClass.

Если в начале файла стоит конструкция namespace X, то по умочанию все имена классов относятся к этому неймспейсу, то есть если ты пишешь new Y\Z(), то имеется в виду класс X\Y\Z.

PDO находится к корневом нейсмпейсе и его полное имя PDO, но в коде перед ним надо кое-что писать, чтобы PHP не подумал, что он в текущем неймспейсе. Перечитай мануал внимательно, в частности про ключевое слово namespace.

Вот это, например:

- http://php.net/manual/ru/language.namespaces.fallback.php
- http://php.net/manual/ru/language.namespaces.importing.php

Или мой урок по неймспейсам.

> Мне теперь ещё одного наследника этого PDO описывать, чтобы положить в конструктор? Нельзя по-нормальному зделоть, чтобы сразу работало, без сотен строк костылей?

Надо перечитать внимательно мануал.
Аноним 21/11/18 Срд 03:30:26 #795 №1298641 
>>1298388

Зачем вообще наследоваться от PDO?

>>1298406

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

Работа с формами тоже описана у меня в отдельном уроке. Если у нас для формы написан отдельный класс, и мы хотим максимум ООП, то это может выглядеть так (допустим, речь о редактировании товара):

$data = new Product;
$form = new ProductForm($product);

if (метод запроса POST) {

// Разбирает пришедший запрос и проверяет на CSRF
$form->parseRequest($_POST);
$errors = $form->validate();

if (!$errors) {
сохраняем $product в БД;
редиректим;
return;
}

вызываем шаблон, передавая ему $data, $form, $errors.

Если мы хотим поменьше ООП, то можно, например, не делать ProductForm:

$data = new Product;
$this->parseRequest()

if (метод запроса POST) {

// Разбирает пришедший запрос и проверяет на CSRF
$this->parseRequest($data, $_POST);
$errors = $productValidator->validate($product);

if (!$errors) {
сохраняем $product в БД;
редиректим;
return;
}

....

Не забудь про защиту от CSRF при работе с формами.

Также, я дополнил урок по формам, советую перечитать: https://github.com/codedokode/pasta/blob/master/forms.md
Аноним 21/11/18 Срд 05:09:10 #796 №1298653 
https://repl.it/@underbottom/words-out-of-digits - Числа прописью.
Аноним 21/11/18 Срд 05:11:44 #797 №1298654 
>>1298653
Ещё подскажите, как лучше находить решения для поставленных задач. Я переношу на лист бумаги и вроде получше. Кто как справляется?
Аноним 21/11/18 Срд 09:18:37 #798 №1298694 
Если по мануалу опа я не смог в MVC - я сильно тупой? (Это мой третий проект с MVC, остальные получались неплохо, а сейчас не могу понять что от меня требуется).
Аноним 21/11/18 Срд 09:31:18 #799 №1298700 
>MVC
Хуйня. Трех компонентов недостаточно для полноценного описания.
Постепенно будут возникать куски кода, которые к моделям не отнесешь, но они повторяются в разных контроллерах.
Поэтому нужен еще один компонент
Аноним 21/11/18 Срд 11:06:19 #800 №1298781 
>>1298339
Неудобный вопрос? Никто не может ответить?
Аноним 21/11/18 Срд 11:09:51 #801 №1298784 
>>1298781
Нам 22 минуты смотреть, чтобы тебе что-то доказывать? Скажи, ты ебанутый?
Аноним 21/11/18 Срд 11:45:00 #802 №1298814 
>>1298784
Ок, кто поумнее, по крайней мере подумает о переходе с php на ruby.
Аноним 21/11/18 Срд 13:00:06 #803 №1298857 
>>1298814
открыл, увидел, что отключены комменты и статистика. Послал тебя нахуй.

мимогений
Аноним 21/11/18 Срд 13:20:27 #804 №1298867 
>>1298814
Иди нахер со своими срачами и "Руби хороший, дрочу на руби." 5 пишу на руби, язык как язык. Вот только на PHP фриланса в 20 раз больше. Я даже не преувеличиваю, а скорее преуменьшаю. А для рубиста работу найти капец сложно. Так что нет. Руби -это как C++, вроде и элитно, а в тоже время - говно без задач.
Аноним 21/11/18 Срд 14:16:23 #805 №1298910 
>>1298867
Я не срача ради, а для тех, кто пытается вкатиться. Конечно они начинают с php. Так вот, если php им не заходит, то пусть попробуют что-нибудь другое.
Аноним 21/11/18 Срд 14:18:58 #806 №1298914 
>>1298910
Я не против. Создай тред и гайд как наш самый лучший в мире ОП. Создай тред где ты будешь помогать к ньюфагам и к тебе подтянутся. А так у рубистов весьма токсичное сообщество. А каждый раз что я ндваче в рубитреде что-то спрашивал - получал ответы которые выставляли меня тупым. Согласись не очень мотивирует?
Аноним 21/11/18 Срд 14:26:11 #807 №1298925 
>>1298914
потому что не надо сидеть в треде рубистов, а смотреть то, что говорят о языке и сообществе его основатели и погуглить что там с рельсами в 2к18, также есть конфа в телеге
Аноним 21/11/18 Срд 14:34:06 #808 №1298935 
>>1298925
>потому что не надо сидеть в треде рубистов, а смотреть то, что говорят о языке...
Чел, ТЫ ТО НАМ ТОГДА ЗАЧЕМ?
Аноним 21/11/18 Срд 14:41:21 #809 №1298947 
>>1298935
Жопой читаешь?
>>1298910

На этой ноте покидаю вас.
Аноним 21/11/18 Срд 14:43:48 #810 №1298949 
>>1298947
>Жопой читаешь?
Оскорбления пошли. Ну и токсик же ты.
Аноним 21/11/18 Срд 14:51:48 #811 №1298958 
>>1298947
Ну-ка ткни меня где ты писал зачем ты тут? А то, пока я не вижу.
Аноним 21/11/18 Срд 16:14:14 #812 №1299036 
>>1298814
Щас бы переходить с говна на засохшую мочу
Аноним 21/11/18 Срд 16:39:02 #813 №1299056 
Вкатился к вам после 3х месяцев Си (мой первый язык). Пока идёт просто, хочу сразу узнать какая самая сложная тема в пхп для новичков, в Си до меня ооочень долго доходило что такое указатели и как с ними взаимодействовать, но потом пришло просветление и обучаться стало легче.
Аноним 21/11/18 Срд 16:47:09 #814 №1299057 
Всем привет, я новенький , начал изучение с книги Брета Маклафлина, все правильно сделал? спасибо за внимание.
Аноним 21/11/18 Срд 17:32:04 #815 №1299096 
('SELECT id, name, price, is_new FROM product WHERE status = 1 AND category_id = ' . $categoryId . ' ORDER BY id LIMIT ' .self::SHOW_BY_DEFAULT . ' OFFSET ' . $offset);

Аноны, что не так?
Аноним 21/11/18 Срд 17:33:29 #816 №1299098 
>>1299057
Здарова, я тоже новенький. Я вот че понял. По сути знания самого языка, самого синтаксиса не так важны, как знания алогоритмов, умения гуглить решение твоей задачи, т.к. почти все решения уже есть в интернетах. Обоссыте если не прав.
Аноним 21/11/18 Срд 18:38:06 #817 №1299145 
>>1299098
>По сути знания самого языка, самого синтаксиса не так важны, как знания алогоритмов
А на каком языке ты собираешься эти алгоритмы описывать, если знания синтаксиса не важны? Его вообще не знать, а понимать надо. Подсознательно.
Аноним 21/11/18 Срд 18:46:34 #818 №1299153 
Ой, ребяяяят, а почему тредик мертвый? :>(
Аноним 21/11/18 Срд 18:58:19 #819 №1299163 
>>1299153

Что значит мертвый? Флуд идет без перерывов.
Аноним 21/11/18 Срд 19:02:30 #820 №1299165 
>>1299163
прекрасно тогда.
Аноним 21/11/18 Срд 19:07:48 #821 №1299169 
>>1299096
хелп....

Вот ошибка
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '-6' at line 1
Аноним 21/11/18 Срд 19:42:41 #822 №1299187 
>>1299169

LIMIT/OFFSET отрицательные наверно. Сдампь, какой запрос получается и проверь.

Также, твой код надо срочно переделать - в нем, похоже, завелась SQL инъекция: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md
Аноним 21/11/18 Срд 19:45:54 #823 №1299189 
>>1299187
Я только учусь на своем тестовом хостинге. Дампил, получается нормальный запрос. Я хз че ему не нравится. Только что узнал о плейсхолдерах, сейчас буду читать.
Спасибо за инфу по инъекциям, почитаю.
Аноним 21/11/18 Срд 20:22:59 #824 №1299222 
>>1299189

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

> near '-6'

То есть в запросе есть где-то число -6. Как-то ты не так дампишь.

Аноним 21/11/18 Срд 20:31:35 #825 №1299225 
>>1299222
У него в переменную что-то не то попадает скорее всего.
Аноним 21/11/18 Срд 21:23:19 #826 №1299240 
>>1299225
SELECT id, name, price, is_new FROM product WHERE status = 1 AND category_id = 1 ORDER BY id LIMIT 6 OFFSET 6
Вот дамп запроса. Числа положительные
Аноним 21/11/18 Срд 23:00:37 #827 №1299292 
>>1299240
>LIMIT 6 OFFSET 6
Вот тут поиграйся и ошибки глянь.
Аноним 21/11/18 Срд 23:10:38 #828 №1299297 
Screenshot762.png
Анон.
Почему сайт ideone нормально жрет дробилку строк типа \n, а когда запускаю тот же код на своем серве (использую WAMP) нихуя не так?
Дело в том, что в пакете в WAMP идет пхп версии 5, а на ideone уже 7 или что?
Аноним 21/11/18 Срд 23:23:33 #829 №1299306 
>>1299297
Вроде от операционки зависит, или сервера.
Аноним 21/11/18 Срд 23:44:36 #830 №1299318 
>>1299297
Если в браузере то добавь в начало скрипта:
header('Content-Type:text/plain');
Если в консоли не работает попробуй
echo 'my string' . PHP_EOL;
Аноним 21/11/18 Срд 23:56:16 #831 №1299325 
>>1299318
> header('Content-Type:text/plain');

Вот это помогло. Спасибо.
А то качать линухс пошел уже.
Аноним 22/11/18 Чтв 00:07:47 #832 №1299335 
>>1299325
>А то качать линухс пошел уже.
Это как лечить зубную боль гильотиной. PHP_EOL есть.
Аноним 22/11/18 Чтв 08:20:14 #833 №1299413 
2018-11-22 081951-Window.png
Подскажите за PHPStorm. Установил новую версию и теперь при попытке открыть работу в браузере выскакивает ошибка 404 not found. Как фиксить?
Аноним 22/11/18 Чтв 10:45:21 #834 №1299450 
>>1299413
>при попытке открыть работу в браузере
Подробнее. Что ты открываешь в браущере? Какой сайт? Причём тут шторм? Ты ставил Опенсервер? Каким образом открываешь? Телепатов среди нас нет.
Аноним 22/11/18 Чтв 12:19:22 #835 №1299496 
>>1299413

Да, опиши пожалуйста последовательность действий, что ты вводил в адресную строку раньше, что делаешь сейчас, в какой папке код и тд.
Аноним 22/11/18 Чтв 12:27:15 #836 №1299499 
>>1299450
Чем опенсервер лучше xammp'а?
Аноним 22/11/18 Чтв 12:28:02 #837 №1299500 
>>1299499
xampp
быстрофикс*
Аноним 22/11/18 Чтв 12:29:00 #838 №1299501 
>>1299499
>лучше
Всмысле лучше? Это сборка PHP + Апач. Вопрос впринципе некоректен. Это как если бы ты спросил чем вилка лучше другой вилки.
Аноним 22/11/18 Чтв 12:42:49 #839 №1299506 
>>1299501
Потому что несколько раз видел срачи на тему, что лучше ставить. Решил уточнить.
Аноним 22/11/18 Чтв 12:46:29 #840 №1299508 
>>1299506
Со стороны уроков в инете, все преподаватели сидящие на винде савят OS. Кто на маке - XAMPP либо свою сборочку. Но по сути ты будешь писать код и разницы не заметишь.
Аноним 22/11/18 Чтв 13:33:33 #841 №1299530 
Анончики, покажите ваши решение с задачей на палиндром
Аноним 22/11/18 Чтв 13:54:51 #842 №1299543 
>>1299225
Ты был прав. Там и правда где то затесался минус, но где - я не понимаю до сих пор.
Аноним 22/11/18 Чтв 14:29:13 #843 №1299564 
https://ideone.com/AbXtmY правильно ли я решил задачу со школьником взявший кредит на айпад?
Аноним 22/11/18 Чтв 14:29:54 #844 №1299566 
dump.PNG
Аноны, это опять я.
Почему дампы выводятся дважды, причем показывают они разную информацию?
Аноним 22/11/18 Чтв 14:41:45 #845 №1299575 
bdsm.jpg
>>1299506
ничто не лучше, а срачи только от тупости.

опенсервер и xampp это оболочки, которые устанавливают и настраивают окружение для вебдевелопера.

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

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


Зы. часто бывает проблема что прожект не стартует или багает потому что пхп или апач настроены на проде специфично, и нубас начинает срать кирпичами, кричать что винда говно, надо ставить бубунту и там все из коробки. это тоже от тупости, такие крики - звоночек для ПМа что он работает с неадекватным нубом, не желающим разбираться ( а разработка не для таких человеков )
Аноним 22/11/18 Чтв 15:05:46 #846 №1299594 
А где еще можно общаться о программировании?
Аноним 22/11/18 Чтв 16:03:29 #847 №1299626 
>>1299594
в /b/, очевидно.
Аноним 22/11/18 Чтв 16:06:13 #848 №1299630 
>>1299594
В /ch есть тред конфы с какими- то ИТишниками.
Возможно, с ними можно поговорить о сабже.
Аноним 22/11/18 Чтв 16:07:51 #849 №1299633 
>>1299594
@php2ch
Тележенька.
Аноним 22/11/18 Чтв 16:57:29 #850 №1299652 
>>1299543
Могут быть проблемы с лимитом\смещением?
Игрался с этим:
>LIMIT 6 OFFSET 6
Цифры менялись в ошибке?
Аноним 22/11/18 Чтв 17:02:29 #851 №1299655 
>>1299652
игрался. Цифра не менялась, т.к. лимил это константа. Константа задана как 6. В ошибке она почему то минус шесть.
Аноним 22/11/18 Чтв 17:04:02 #852 №1299657 
>>1299655
Я щас буду весь метод переписывать.
Аноним 22/11/18 Чтв 17:06:36 #853 №1299658 
image.png
>>1299657
Молодец. Но картинку ты забыл - держи.
Аноним 22/11/18 Чтв 17:10:26 #854 №1299659 
>>1299657
Лучше не бегать от проблем в этом случае - больше узнаешь.
Аноним 22/11/18 Чтв 17:24:13 #855 №1299665 
https://repl.it/@underbottom/ATM - банкомат.
https://repl.it/@underbottom/smart-ATM -головоломка.
Аноним 22/11/18 Чтв 18:23:59 #856 №1299694 
image.png
Двач, почему так текст пидорасит? Я менял кодировку, менял русские буквы на английские, только тогда получилось что-то, но php код не открывался. После того как я закрыл и открыл блокнот заново опять эта хуйня появилась даже с английскими буквами.

Сам я в этой всей хуйне не шарю, просто лабу надо сдать
Аноним 22/11/18 Чтв 18:30:22 #857 №1299700 
>>1299694
не актуально
Аноним 22/11/18 Чтв 20:41:04 #858 №1299766 
Screenshot780.png
Хули ему не нравится?
Аноним 22/11/18 Чтв 22:10:13 #859 №1299805 
>>1299766
Исправлено.
Тут мне помогли пацаны из: >>1299633
Аноним 22/11/18 Чтв 23:11:43 #860 №1299843 
>>1299766

Зачем ты try/catch поставил? Ты просто включить отображение ошибок не хочешь?
Аноним 23/11/18 Птн 01:14:15 #861 №1299926 
pr - Клуб изучающих PHP #105 php - Google Chrome 2018-11-23[...].png
>>1299766
Тралиш лалок или криворук?
Аноним 23/11/18 Птн 01:19:36 #862 №1299929 
>>1299926
Ну и ещё у тебя
$db - new PDO
а надо
$db = new PDO
Аноним 23/11/18 Птн 01:46:40 #863 №1299946 
>>1299926
>>1299929
Я быстро печатаю и невнимателен, от сюда и большая часть моих обосрамсов.
Аноним 23/11/18 Птн 07:37:56 #864 №1299983 
>>1299946
Удобно устроился. Вместо дебаггера постишь на харкач, чтобы анон таои косяки фиксил. Не юзай нано, поставь нормальную IDE с подсветкой, дебаггером и прочими улучшайзерами.
Аноним 23/11/18 Птн 08:07:31 #865 №1299989 
2018-11-23 080630-Window.png
>>1299496
>>1299450

Создал обычный HTML документ и нажимал сюда для открытия документа. Из стороннего софта (сервера и т.п.) ничего не стоит. До переустановки винды все открывалось
Аноним 23/11/18 Птн 13:16:46 #866 №1300096 
>>1299983

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

>>1299989

Ты бы глянул настройки, может там PHP надо установить и прописать путь к нему или еще что-то.
Аноним 23/11/18 Птн 14:55:33 #867 №1300124 
>У Bootstrap 3 есть неприятная особенность: он ставит для всех элементов box-sizing: border-box; что может быть неудобно. Если это мешает, можно использовать 2 версию.

А чем это плохо? Ведь зачастую, box-sizing: border-box; задает расчет ширины бокса по бордеру и паддингу, позволяя избегать float drop.
Аноним 23/11/18 Птн 15:32:29 #868 №1300140 
>>1300124

По дефолту в браузере box-sizing: content-box. Теперь представь, что ты пишешь какой-то виджет, который будет использоваться на других сайтах, и неизвестно какой там content-box. Из-за таких умников тебе придется в нем явно прописывать box-sizing каждому элементу DOM.

Также, в случае картинок, где в атрибутах прописаны width/height, box-sizing при наличии padding/border приводит к искажению размеров картинки.

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

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

Что тебе и криворуким авторам бутстрапа мешает ставить box-sizing только там, где он нужен?

Аноним 23/11/18 Птн 15:57:18 #869 №1300147 
>>1300140
>Что тебе и криворуким авторам бутстрапа мешает ставить box-sizing только там, где он нужен?
Ok, учту. Спасибо за совет
Аноним 23/11/18 Птн 16:06:00 #870 №1300155 
>>1299766

просто убей себя.
1. try - catch - не пхпшная конструкция, ты просто не понимаешь что внутри. надо обрабатывать ошибки а не делать на отьебись
2. name - 40, password - 100, email - 150. рукалицо. сделай 255 везде и не еби мозг
3. $db->query, руки сломать за пробелы лишние
4. mysqli, ты нуб, и кроме как мускл ничего не будешь использовать. не нужна тебе поддержка этого всего, выкинь книжку в которой прочитал эти примеры. есть люди которые пишут книги, а есть те которые пишут код
Аноним 23/11/18 Птн 16:41:15 #871 №1300182 
Какие главные подводные камни при изучение пхп? Обо что спотыкаются большинство новичков?
Аноним 23/11/18 Птн 16:55:43 #872 №1300190 
javascript.jpg
>>1300182

тупость и лень - 99%.

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

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

с пхп на яву и фронт - легко
Аноним 23/11/18 Птн 17:00:24 #873 №1300191 
>>1299766

if ($db->query(...)){
echo $db->errorCode()
}

это явно короче чем эта ебень с try catch(e)
мимокрокодил
Аноним 23/11/18 Птн 17:16:14 #874 №1300201 
Поняв ООП в пхп, я смогу с лёгкостью понимать ООП во всех остальных языках?
Аноним 23/11/18 Птн 17:20:16 #875 №1300202 
>>1300191

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

$db->query(...)

Без try/catch.
Аноним 24/11/18 Суб 00:01:20 #876 №1300369 
Эй ты, да ты прогрессивный синьор/миддл PHP разраб
Использовал ли ты когда нибудь трейты и считаешь ли ты их применимыми в пыхе?
Аноним 24/11/18 Суб 10:06:14 #877 №1300418 
>>1300369
Трейтов лучше избегать, вместо разделения ответственности они порождают высокую связанность, тут подробнее:
- https://blog.ircmaxell.com/2011/07/are-traits-new-eval.html
- Сравнения трейтов с goto: https://habrahabr.ru/post/333398/#comment_10316684

То есть если у тебя есть какой-нибудь GoogleApiTrait.php, то это признак плохого разделения ответственности и без хаков такой тест не протестируешь.
Лучше просто класс GoogleApi.php, который через DI будет передаваться куда нужно.
Аноним 24/11/18 Суб 12:24:18 #878 №1300454 
>>1300369

Например: у тебя есть N сущностей Доктрины (ORM) и тебе хочется к ним добавить одни и те же поля, например, "дата модификации". Ты делаешь трейт "LastModifiedTrait" с полем lastModified и методами getLM/touch(). После чего инклудишь этот трейт везде, где нужно.

Хотелось бы добавить туда еще связь на пользователя, который редактировал сущность, но, похоже, это невозможно.
Аноним 24/11/18 Суб 19:36:11 #879 №1300584 
image.png
image.png
image.png
>>1281608 (OP)
Пипец я тупой, пацаны, Земля мне пухом конечно, без вопросов. Но тем не менее прошу помочь вот с чем

Хочу чтобы empty выдавал мне false, а он выдаёт true

Что мне делать? Нужно всего лишь прописать правильный путь в empty
Аноним 24/11/18 Суб 20:02:30 #880 №1300596 
image.png
>>1300584
Аноним 24/11/18 Суб 20:33:07 #881 №1300616 
>>1300584
> 2 пик
Да ты что ебанулся что ли?! Ты зачем всё засунул туда? Разбивай на функции, которые по логике будут работать. Это же пиздец какой-то.
Аноним 24/11/18 Суб 23:12:07 #882 №1300705 
>>1300616
Двачую.

>>1300584
Структурировать надо такие вещи, батенька. Ты ж сам через месяц-два охуеешь от писанины своей.
Аноним 25/11/18 Вск 00:34:43 #883 №1300730 
>>1300616
>>1300705
Фак. А ведь кода и вправду будет дохера. Попробую
Аноним 25/11/18 Вск 13:47:42 #884 №1300880 
Привет, котаны. Надеюсь, я по адресу со своим вопросом.
Пилю сайт на October CMS, и есть у меня на нём форма обратной связи. При сабмите у меня вызывается такая функция:
https://codeshare.io/jGzQ9
Как только она вызывается, я получаю exception: "Undefined variable: data"
При этом, если делать var_dump, то выводится следующее:
array(4) {
["name"]=>
String(4) "Test"
["email"]=>
String(12) "[email protected]"
["subject"]=>
String(4) "Test"
["text"]=>
String(9) "321123321"
}
null

Меня смущает этот null в конце, подозреваю, что дело как-то связано с ним. Есть какие-нибудь идеи по этому поводу?
Аноним 25/11/18 Вск 14:13:27 #885 №1300896 
>>1300880
>https://codeshare.io/jGzQ9
>catch (Exception $ex) {
> throw $ex;
>}
это че за хуйня?
Аноним 25/11/18 Вск 14:13:30 #886 №1300897 
Screenshot from 2018-11-25 14-12-25.png
ideon не компилит, получается такая ёба в терминале
https://ideone.com/73VdkK
покажите как надо было сделать
Аноним 25/11/18 Вск 16:48:57 #887 №1300977 
pyphp.png
Ваши оправдания?
Аноним 25/11/18 Вск 17:08:28 #888 №1300983 
1234.jpg
>>1298640
ООП-Будильник https://ideone.com/b3uxlv

Сделал с горем пополам, в консоли каким-то чудом всё работает.
Пожалуйста проверьте, я запутался в реализации кода проигрывания мелодии и вообще не понимаю правильно ли описаны классы. HELP!
Аноним 25/11/18 Вск 23:49:37 #889 №1301182 
>>1300418
Есть значит 10 модулей, у которых есть своя апишка, каждый модуль наследуется от одного класса, в котором свои методы тоже есть их то я и хочу открывать (делая их public с помощью трейта) для каждого модуля отдельно (по дефолту все базовые методы не смогут быть вызваны). Считается ли это примером хуевого кода?
Аноним 26/11/18 Пнд 00:49:02 #890 №1301218 
>>1281608 (OP)
ОПче, по поводу TestHub, не могу разобраться со структурой БД. Когда у вопроса может быть один вариант правильного ответа, тут понятно. А если у нас чек боксы и правильный ответ например 3 чек бокса должны быть выбраны, как сделать это в SQL?
Аноним 26/11/18 Пнд 03:23:22 #891 №1301240 
15423844286821.jpg
Вопрос по фрилансу:

Примерно 2 года работаю на клиентов, до этого был свой небольшой проект, который обеспечивал вполне.

Так вот, проблема в том, что клиентская база так себе, и дохода не хватает, плюс ко всему клиенты очень жадные и для них 1 500 - 2 000 рублей за подключение платежной системы уже "дыра в бюджете", а активно вкладывать в проект это апдейты на 8 000 рублей раз в месяц. Ну и ряд проблем с бесплатными правками, консультациями, и ТЗ написанным в три строчки за 5 минут. Как итог - неохотно с ними работать, да и денег приносит малость, как итог проблемы из-за этого.

Так вот поэтому хочу сменить клиентов, но решил разведать как сейчас на фрилансе: какие скиллы надо иметь, чтобы получать $10/ho? Сейчас плаваю на $4-6.

Работал с CMS: WordPress, DLE.
Фреймворк: Yii2
Работал с REST(-ful) API, JSON-API, настраивал REST-приложение на базе Yii2.
Фронт: HTML, CSS, jQuery.
С ООП "дружу", вряд ли на 100%-ом уровне, но интенсив Елисеева осилил, а также дополнительный материал. С базовыми паттернами, типа: фабрики, декоратора, MVC, сингелтона дружу. Сейчас закрываю дыры по ООП и собираюсь перекатываться на Lavarel.
Дополнительно немного знаний Apache, настройка роутов nginx и базовые настройки в целом. Также GIT, но обучение+небольшая практика.

В основной массе времени работал сервисами и внедрением в их функционала, в основном всё самопис.
Аноним 26/11/18 Пнд 11:47:08 #892 №1301310 
>>1301240
>клиенты очень жадные и для них 1 500 - 2 000 рублей за подключение платежной системы
Думаю - мало берёшь. Отсюда и клиенты - жадные колхозники.

>какие скиллы надо иметь, чтобы получать $10/ho?
Английский?
Аноним 26/11/18 Пнд 12:27:12 #893 №1301321 
>>1301310

Pre intermediate, хожу на курсы сейчас. Неплохо умею читать, но на слух речь воспринимаю средне, а говорить сложновато.
Аноним 26/11/18 Пнд 12:43:48 #894 №1301327 
>>1301240
Я ушел с фриланса на постоянные удаленные долгосрочные проекты.
а. не тратишь время и нервы на поиск клиента и конкуренцию с другими макаками
б. бабла в итоге больше получается, а работы меньше во всяком случае у меня
Я хз, где обитают нежадные клиенты для фриланса, возможно на уровне сарафанки в нужных кругах, но на всяких фриланс-агрегаторах их точно нет.
Аноним 26/11/18 Пнд 13:39:27 #895 №1301345 
Какой фреймворк посоветуете учить самым первым?
Аноним 26/11/18 Пнд 14:10:20 #896 №1301358 
>>1301345
Если цель расширение возможностей на рынке труда, то
Laravel -> Symfony. Если время не поджимает то Symfony -> Laravel. Yii только, если нужен под конкретную вакансию.
Аноним 26/11/18 Пнд 21:36:32 #897 №1301565 
>>1300977
Ты не берешь в расчет, что Питон - это не только веб.
Аноним 27/11/18 Втр 09:54:05 #898 №1301711 
Всем привет. Предлагают зп 60к но на ИП. Расскажите какие подводные у Ип. Спасиб.
Аноним 27/11/18 Втр 10:31:38 #899 №1301721 
>>1301711
ЗП в конверте, самодурство
Аноним 27/11/18 Втр 13:46:19 #900 №1301877 
>>1301711
Им фуллстак-макака нужна обычно. И вообще погроммист.
Обговаривай условия работы,чтобы не быть и эникеем-сисадмином, и монтажником, и фулл-программером.
Не то, чтобы это было невозможно, но не за 60к\мес.
Аноним 27/11/18 Втр 15:10:25 #901 №1301941 
Снимок.JPG
что делать, кодировка utf-8
Аноним 27/11/18 Втр 17:47:48 #902 №1302057 
Аноны, вкатываюсь с января. Вот сейчас готовы взять на работу. Там wordpress и woocommerce. Я так понимаю при работе с ними даже код не пишут?
Аноним 27/11/18 Втр 18:49:54 #903 №1302092 
>>1302057
Какие задачи решил?
мимовкатываюсь с февраля
Аноним 27/11/18 Втр 19:00:58 #904 №1302102 
>>1301941
Настраивать локаль, хули ещё тут скажешь. Файл сохраняй/конвертируй в utf-8.
Аноним 28/11/18 Срд 01:39:45 #905 №1302276 
>>1301941

Заголовок Content-Type с кодировкой либо метатег meta charset указал? Браузер не телепат, угадать кодировку не может.
Аноним 28/11/18 Срд 06:41:31 #906 №1302313 
>>1302102
>>1302276
Это встроенный в пхп сервер хуёбничает, в идеоне и опен сервере всё заработало.
Аноним 28/11/18 Срд 10:11:44 #907 №1302352 
Кодировку починил, теперь переносы строк не работают
Аноним 28/11/18 Срд 10:21:00 #908 №1302357 
>>1302352
глянь сюда
>>1299318

Аноним 28/11/18 Срд 10:28:12 #909 №1302364 
>>1302357
спасибки, всё заработало. завёл свой сайт на бесплатном хостинге, буду выкладывать свои потуги по изучению пхп http://parcifal.byethost7.com/
Аноним 28/11/18 Срд 10:29:40 #910 №1302368 
>>1301345
тот, где ты будешь создавать все папки и файлы сам. т.е слим, сайлекс
Аноним 28/11/18 Срд 11:32:57 #911 №1302394 
>>1302352

Надо добавить заголовок Content-Type: text/plain; charset=utf-8

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

Аноним 28/11/18 Срд 15:12:13 #912 №1302492 
image.png
image.png
image.png
Ананасы, подскажите по верстке.
При указании отступа в px, элементы списка уходят влево, как надо. При указании отступа в % они выходят за пределы блока, смещаясь в другую сторону.
Аноним 28/11/18 Срд 16:07:31 #913 №1302510 
>>1302492

А ты изучал алгоритм расчета размеров при использовании флексбокса?

Спецификация: https://www.w3.org/TR/css-flexbox-1/

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

У тебя сложная ситуация: размер и расположение элемента меню li зависит от размера родителя ul или nav, а размер родителя скорее всего определяется как сумма размеров детей. Увы, там не видно, какие стили использованы на nav/ul и трудно сказать точнее. Возможно, на них неудачно стили поставлены.

Также, я замечу, что у тебя отступы великоваты. 4 отступа по 20% съедят 80% ширины меню.

А еще, нет ли там каких-нибудь float, которые могут отталкивать текст?

Если не получится найти проблему, можешь выгрузить куда-нибудь код - может я гляну.
Аноним 28/11/18 Срд 16:20:12 #914 №1302515 
image.png
>>1302510
Не изучал. Спасибо за ссылку, посмотрю.
Прикрепил скрин со стилями.
Вообще, для верхней панели, у меня мало стилей задано. Логотип и nav - flex элементы. Для лого понятно - это фон. Для nav ничего, для ul - flex и выравнивание их элементов.
Аноним 28/11/18 Срд 16:53:31 #915 №1302524 
>>1302492
https://codepen.io/anon/pen/MzPmKG
Аноним 28/11/18 Срд 17:18:03 #916 №1302530 
>>1302524
Можно конечно и просто ссылки выравнивать. Только, не понятно, зачем им задан padding, если речь шла об margin. Да и если задавать ссылкам padding, то отступы тоже становятся кликабельными, что не есть хорошо
Аноним 28/11/18 Срд 20:58:16 #917 №1302631 
>>1302515

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

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

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

Ну и флексбокс надо изучить более тщательно, а не на уровне "скопировать код из статьи на хабре".

Также, сразу предупрежу, посмотри поддержку флексбокса в браузерах: https://caniuse.com/#search=flexbox (вообще, caniuse должен стать для тебя как библия). Некоторые старые браузеры не поддерживают flexbox, некоторые с багами и старую версию спецификации. Могут быть сложности потом.
Аноним 28/11/18 Срд 22:16:07 #918 №1302681 
>>1302313
Встроенный в пхп не может хуёвничать. Там хуёвничать просто нечему.
Аноним 29/11/18 Чтв 02:12:44 #919 №1302762 
енот.jpg
Я здесь новенький. Шапку читал и пробовал гуглить по своему вопросу и даже спрашивать, но четких и внятных ответов не услышал. Я хочу в процессе обучения сделать пару проектов для себя, которые возможно буду использовать затем в портфолио. Но я не могу осознать как вот должен +/- выглядить достойный проект джуниор разработчика (с точки зрения функциональности, красивости и т.д.). Если у вас есть какие-то примеры сайтов, то я буду очень рад сохранить их и в дальнейшем обращать на них внимание.
Аноним 29/11/18 Чтв 06:09:03 #920 №1302790 
>>1302762
Сначала пройди учебник десу
Аноним 29/11/18 Чтв 06:41:44 #921 №1302796 
>>1302530
>Только, не понятно, зачем им задан padding
Поменяй padding на margin.
Вопрос был в том, что
>При указании отступа в % они выходят за пределы блока
Чтобы этого не происходило, можно блок навигационной панели и лого, завернуть в container, где указывается max-width, и все это дело завернуть в header, и уже тут указывать background, тогда позиционирование элементов происходит внутри container, но bacground выходит за поля max-width.
Аноним 29/11/18 Чтв 16:59:24 #922 №1303211 
Проверьте первую часть по ООП, будьте так добры.
https://ideone.com/jiikGU
Аноним 29/11/18 Чтв 22:10:55 #923 №1303326 
$todayDate = new DateTime(date('Y-m-d'));
$tempSummDate = new DateTime(date('Y-m-d'));

$tempSummDate->sub(new DateInterval('P324M'));
$i= $todayDate->diff($tempSummDate);

В $i 26 лет 11 месяцев. Как так то ? Остальные месяцы все правильно считает а тут сука 26 лет и 11 месяцев не 27 лет сука. Я уже заебался. Кто знает чому ?
utf-8 29/11/18 Чтв 22:16:07 #924 №1303329 
сап /pr
2 день мучаюсь с кодировкой, в браузере русские символы отображаются ебучими вопросиками?????, раскоментил данную строчку в php.ini mbstring.internal_encoding = но не помогло, что делать?
utf-8 29/11/18 Чтв 23:15:10 #925 №1303350 
>>1301941
решил проблему? а то такая же
Аноним 29/11/18 Чтв 23:45:10 #926 №1303371 
>>1303329

Ты пробовал указать кодировку utf-8 в заголовке Content-Type или в HTML коде, в метатеге meta charset (погугли, что это)? Браузер не телепат и угадать кодировку не может. Та настройка, которую ты упомянул, влияет в первую очередь на работу функций в PHP, браузер про нее ничего не знает.

>>1303326

Загадка разгадана: https://repl.it/repls/AcrobaticIdolizedAutomatedinformationsystem

Если мы работаем в UTC, то все ок. Если в Europe/Moscow, то разница между 2018-12-01 и 1991-12-01 получается 26Y, 11M, 30D, и 23 часа. То есть час куда-то теряется. Поиск истории изменений в часовых поясах дает ответ: https://www.timeanddate.com/time/zone/russia/moscow?year=1991

В 1991 году Московский часовой пояс ненадолго перешел на Восточно-Европейское время, с разницей в 1 час. Потому с учетом этого разница получилась на 1 час меньше.

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

>>1303211

Молодец, верно, продолжай дальше изучать ООП.
utf-8 30/11/18 Птн 00:18:42 #927 №1303382 
>>1281608 (OP)
https://repl.it/repls/VivaciousFaithfulScandisk
оп, посмотри плз задачку про палиндром, подскажи как упростить код.
Аноним 30/11/18 Птн 00:48:31 #928 №1303390 
870-925

Аноны, нет времени, подождите день-два, может на выходных отвечу на ответы и перекачу тред.

>>1302796

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

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

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

- для блоков c position: absolute/fixed
- для случая, когда у всех предков элемента явно задана высота в пикселях или процентах.

То есть:

div.outer {height=auto}
-div.inner {height=50%}

Тут процентная высота не будет работать, так как у родительского блока (.outer) высота неизвестна. Для .inner высота будет считаться по содержимому, а правило height игнорируется.

Другой пример:

html {height=50%}
-body {height=50%}
--div.inner {height=50%}

Здесь процентная высота для .inner будет работать, так как высота всех родителей задана явно. Высота .inner в итоге будет равна высота_окна_браузера x 50% x 50% x 50% = высота_окна_браузера / 8.

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

1) для блочного позиц-я (display: block без position и float): блок займет всю ширину родителя с учетом маргинов и паддингов (алгоритм stretch-fit):

div.outer {width=800px}
-div.inner {width=auto,margin=10%}

Здесь для .inner сначала будет вычислен margin = 10% x 800 = 80px, а затем ширина будет посчитана как 800 - 80 - 80 = 640px. Как видите, все просто.

2) для float, для абс. поз. блоков, для inline-block, для таблиц: для расчета ширины используется алгоритм shrink-to-fit (или fit-content): https://github.com/codedokode/pasta/blob/master/html/shrink-to-fit.md

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

3) для таблиц: используется алгоритм из спецификации CSS
4) для флексбоксов: используется спецификация

Ссылки:

- алгоритмы расчета ширины/высоты в CSS2.2, основа основ: https://www.w3.org/TR/CSS22/visudet.html
- расчет размеров таблиц: https://www.w3.org/TR/CSS22/tables.html
- спецификация с обновлениями по авт. расчету размеров: https://www.w3.org/TR/css-sizing-3/
- флексбоксы: https://www.w3.org/TR/css-flexbox-1/

Я призываю не делать верстку наугад или по ощущениям. А продумывать, как элементы зависят друг от друга и какие схемы позиционирования будут применены.
Аноним 30/11/18 Птн 00:49:00 #929 №1303391 
>>1302762

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

>>1301218

> А если у нас чек боксы и правильный ответ например 3 чек бокса должны быть выбраны, как сделать это в SQL?

С помощью связи многие-ко-многим? Связь между Ответом на Вопрос и Вариантами Выбора.

Если ты не изучил связи 1-1, 1-M, M-N, то изучи.

То есть у нас могут быть примерно такие сущности:

- Сеанс Сдачи Теста
- Ответ На Вопрос (привязан к Сеансу и к Вопросу, содержит выбранный или введенный ответ на вопрос)
- Выбранный Вариант (привязан к Ответу и к Варианту Ответа, используется для ответов с множественным выбором)

Но тут могут быть избыточные данные. Прочти-ка еще на всякий случай урок про нормализацию: https://github.com/codedokode/pasta/blob/master/db/normalization.md

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

>>1301182

Мутная какая-то идея, конечно. А почему в разных Модулях должны быть одинаковые методы? Мне кажется, корень проблемы тут. Если метод должен быть во всех модулях, мы просто объявляем его в базовом классе. Если не во всех, то конечно можно попробовать вынести их в трейты, но возникает вопрос, откуда такая необходимость и правильно ли спроектированы твои классы?
Аноним 30/11/18 Птн 00:49:11 #930 №1303392 
А кстати, знаете ли вы, что функции и классы в php не чувствительны к регистру символов, т.е. что их можно писать хоть маленькими буквами, хоть большими, хоть в перемешку и при этом они всё равно будут работать?
Я вот хоть и работаю с php лет 10, только сегодня узнал об этом.
Аноним 30/11/18 Птн 00:49:38 #931 №1303393 
>>1300983

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

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

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

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

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

> $namesOfDaysOfWeek = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];

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

private const ALL_DAYS = [
self::MONDAY,
self::TUESDAY,
...
];

Вместо тайп-хинта DateTime лучше использовать DateTimeInterface, так как это позволяет передавать объекты DateTimeImmutable, которые являются неизменяемыми.

> Возвращает идентификатор тревоги.
А зачем ей идентификатор? Объект сам по себе уникален и не требует добавления искуственных идентификаторов.

> return clone $this->time;
Если бы ты использовал DateTimeImmutable, клонирование бы не требовалось. Кстати, у тебя в setTime() нет клонирования и можно передать объект даты, а потом изменить его без ведома твоего класса, например, поставить дату в прошлом.

Лучше сделать неизменяемую копию переданной даты.

> public function getStatus(): bool
Лучше бы назвать isActive().

> public function deleteAlarm(int $id): void
Можно было бы обойтись без id и передавать сам объект Alarm.

> $yesOrNot = null;
wasDeleted/wasFound

> public function setAlarm(int $id, ?DateTime $alarmTime, ?array $daysOfWeek, ?int $type, ?bool $status): void
Вообще, можно было бы разрешить пользователю создавать Alarm и передавать уже настроенный объект. Хотя можно и так, как у тебя, это может использоваться для введения каких-то дополнительных ограничений и проверок.

> $isEveryday = $alarm->getDaysOfWeek()[0] == Alarm::EVERYDAY;
А, нарушение зоны ответственности! Не логичнее было бы сделать метод isEveryday() в Alarm? Тогда тебе не пришлось бы полагаться на знание про элемент EVERYDAY, что он хранится в нулевом элементе массива.

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

- выпилить EVERYDAY вообще
- сделать, чтобы Alarm сам внутри себя считал, какие дни заданы, и возвращал бы массив только с днями, без EVERYDAY. То есть передать EVERYDAY в Alarm можно, а наружу его не уже возвращают.
- сделать в Alarm методы setEveryday()/isEveryday()

> $alarmTime = $alarm->getTime()->add(
> DateInterval::createFromDateString('tomorrow')
> );
Это нехорошо, ты в функции поиска, которая по логике ничего не должна менять, меняешь дату тревоги.

> // Обновляем время тревоги
> $alarm->setTime($alarmTime, new DateTime);
Это не нужно, ведь у тебя используется изменяемый объект DateTime и ты его уже поменял.

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

Вообще, мне кажется, весь findNearestAlarmTime() можно без ущерба поместить в Alarm. Непонятно, что он делает в AlarmClock.

> foreach ($alarm->getDaysOfWeek() as $dayOfWeek) {
> "next $dayOfWeek"
Здесь ты полагаешься на то, что константа имеет определенное значение. Не стоит так делать, вдруг значение поменяют на цифры?

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

> function playMelody(AlarmClock $alarmClock, DateTime $currentTime)
> $nearestAlarm = $alarmClock->findNearestAlarm(new DateTime);
Зачем тогда передавать currentTime?

> // Ожидаем минуту, из-за особенностей работы метода поиска ближайшей тревоги
> sleep(60);
А остальной код ведь тоже занимает какое-то время, допустим, 2 секунды. И получится, общее время работы функции 62 секунды. И если ее выполнять в цикле, где-то будет пропущена минута.
Аноним 30/11/18 Птн 00:50:25 #932 №1303395 
>>1300897

На ideone забыли поставить расширение mbstring, можно использовать repl.it.

> if (!function_exists('mb_ucfirst')
Эту проверку можно и не делать, так как такой функции нету.

> mb_ucfirst($str, $encoding='UTF-8')
> mb_ereg_replace('^[\ ]+', '', $str);
А почему сюда кодировка не передается? Какой тогда в ней смысл?

Также, учти что mb_ereg_replace использует немного другой диалект регулярок - Extended Posix, а не PCRE.

> mb_strlen($str)
Сюда не передана кодировка.

> function makeFirstLetterUppercase($str) {
Лучше указать, что функция работает с массивом, переименовать ее.

> [^\s]
То же что и просто \S

Мне кажется, писать [^\s] не требуется. Квантификаторы по умолчанию жадные и конструкция \s* захватит максимально возможное число пробелов.

Ну и что-то у тебя многоточие раскорежило.

>>1300880

> Меня смущает этот null в конце, подозреваю, что дело как-то связано с ним. Есть какие-нибудь идеи по этому поводу?

Если ты пытаешься обратиться к несуществующей переменной, то будет сгенерировано предупреждение и возвращен null.
Аноним 30/11/18 Птн 00:50:43 #933 №1303397 
>>1300596

8 уровней отступа - это клиника. Должно быть максимум 3-4-5.

По твоему вопросу, попробуй дампить последовательно свой JSON:

var_dump($data);
var_dump($data->players);

И так далее.

>>1300201

Да, ООП и архитектурные правила вроде SOLID, DI, YAGNI не привязаны к языку.
Аноним 30/11/18 Птн 00:51:43 #934 №1303398 
>>1303392

В Линуксе имена файлов чувствительны и при использовании автозагрузки будет ошибка.
Аноним 30/11/18 Птн 01:12:41 #935 №1303408 
>>1303398
Да ты прав. Это вообще на мой взгляд очень плохо, что функции и классы не чувствительны к регистру символов и с этим у меня возникла проблема.

Я делал небольшой фреймворк для собственного использования в своих проектах и хотел частично повторить принцип руби на рельсах с вызовом контроллеров.
Т.е. сделать так, что бы при открытии ссылки
site.com/huita запускался котроллер HuitaController,
при запуске
site.com/labuda что бы запускался LabudaController,
и так далее. И в общем всё это отлично работает, но как оказалось, если написать
site.com/HUiTa, то контроллер HuitaController всё равно запускается, а это на мой взгляд совсем не правильно, так как я хочу, что бы каждая ссылка была строго чувствительной к регистру.


А насчет автозагрузки могу только сказать, что я её не использую. Вместо этого я написал небольшую функцию, которая рекурсивно сканирует необходимую папку и загружает все имеющиеся php файлы. Т.е. в результате файлы в этой папке можно перемещать и переименовывать как захочется, а так же при необходимости перемещать файлы во внутренние папки. Возможно это замедляет обработку запроса на считанные наносекунды, так как не всё содержимое этой папки может понадобится в данный конкретный момент, но зато это очень удобно.
Аноним 30/11/18 Птн 01:30:47 #936 №1303414 
>>1299187
кококо, срочно переделать.
человек пишет же что у него проблема, он нуб. не перегревай его

>>1303408
ты ебанулся. есть стандарты оформления коды. пиши HuitaController, либо huita_controller
но тебе яйца отрежут за другие варианты нормальные разработчики. эту хуйню надо потом будет использовать возможно не только тебе, и попробуй запомни что ты там класс назвал HuI_TaCoNtTrOlLer
Аноним 30/11/18 Птн 10:12:02 #937 №1303474 
>>1302762
Я в качестве своего первого проекта запилил интернет магазин с нуля. Интернет магазин получился довольно неплохим, хоть разумеется и не дотягивает до уравня всяких амазонов и ибэев.
Аноним 30/11/18 Птн 11:44:04 #938 №1303503 
Создание простой пошаговой тайловой игры-рогалика - это хорошая идея для пет-проекта? Или это уже больше по фронту?
Аноним 30/11/18 Птн 13:04:59 #939 №1303554 
>>1303408
>рекурсивно сканирует необходимую папку и загружает все имеющиеся php файлы
>Возможно это замедляет обработку запроса на считанные наносекунды
И засирает глобальный неймспейс сотнями говна.
Решение - так себе. Почему просто не использовать неймспейсы? Они очень удобны - через простейшую функцию подключаются и показывают разработчику расположение подключаемого модуля в каждом конкретном случае что есть тру. Наиболее изящное решение, заставляющее любую макаку вроде меня писать правильно и не изобретать велосипед.

По стандартам - пиши нормально и без велосипедов. Из тебя не получится хорошего программера, если будешь писать велосипеда и игнорировать эти самые промышленные стандарты.
У вас на руби все такие велосипедисты? Тогда понятно почему не взлетает.
Аноним 30/11/18 Птн 14:23:12 #940 №1303603 
Снимок.JPG
подгружаю карточку с бд.
Титл текст и лайки.

вопрос такой. как организовать лайканье без авторизации и регистрации?

Куки наверное? что копать вообще?
Аноним 30/11/18 Птн 14:33:05 #941 №1303611 
>>1303603
цикол, не? при каждом нажатии на лукас в счётчик еденичка капает
Аноним 30/11/18 Птн 14:36:31 #942 №1303613 
>>1303611
окей. капает. в Мysql. А как сделать чтоб один юзер не накликал 100500
Аноним 30/11/18 Птн 14:39:50 #943 №1303618 
>>1303613
можешь по ип палить, пропиши в циколе что бы с одного ип- один лукос.
Аноним 30/11/18 Птн 14:42:26 #944 №1303620 
>>1303618
о мне нравится.
но это получается, нужно хранить проголосовавшие ip адреса?
Аноним 30/11/18 Птн 14:44:38 #945 №1303622 
>>1303620
я не ебу, 4 день пых изучаю:3
Аноним 30/11/18 Птн 15:12:55 #946 №1303657 
проблема.jpg
>>1303393
Мда, не думал что всё настолько плачевно.

>Лучше удалять и прошлые тревоги.
Я сломал голову пытаясь реализовать эту возможность.
Допустим у нас есть тревога на среду, пятницу и воскресенье в 15:00. Если сегодня четверг, то срабатываем в 15:00 пятницы, ну хорошо тут ничего сложного. После срабатывания удаляем тревогу, но если скрипт перезапустить он не сможет определить срабатывала ли уже тревога и снова будет ожидать ближайший день недели. Был бы рад подсказке, хотя мне кажется это невозможно. Проиллюстрировал проблему

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

Как я понял по условию задачи, будильник должен получать текущее время снаружи.
Получается, достаточно завести свойство $часы в котором будет лежать объект DateTime?
Аноним 30/11/18 Птн 15:28:46 #947 №1303666 
>>1303613
Куки глянь
Аноним 30/11/18 Птн 15:42:05 #948 №1303674 
>>1303657

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

Понятно, что в случае реального использования будет прикручено сохранение данных в файлы или в БД (если у тебя есть время и желание, можешь сделать сохранение/восстановление из файла, например, в формате JSON или CSV, или в обоих, в идеале чтобы это делалось в соответствие с принципом разделения обязанностей снаружи и не требовало никаких доработок в коде будильника).

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

То есть: если тревога активна и сейчас есть в Будильнике - она должна сработать. Если ее оттуда удалили - то не должна.

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

Или я что-то не так понял? Тогда уточни вопрос.
Аноним 30/11/18 Птн 15:45:01 #949 №1303678 
>>1303657

> Как я понял по условию задачи, будильник должен получать текущее время снаружи.
Получается, достаточно завести свойство $часы в котором будет лежать объект DateTime?


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

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

То есть время должно передаваться только в отдельные функции, а внутри будильника постоянно хранить его не надо.
Аноним 30/11/18 Птн 16:26:47 #950 №1303707 
>>1303657

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

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

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

Вот, как можно проверить выполнение требования "Тревога срабатывает только в установленное время":

Дано: Будильник, в него добавлена Тревога на все дни недели на 12:00
Если: сейчас понедельник, 12:00
То: данная Тревога срабатывает
Если: сейчас понедельник, 13:00
То: данная Тревога не срабатывает

Это можно записать в виде кода:

// Включаем функцию assert, иначе она может не работать
assert_options(ASSERT_ACTIVE, true);
assert_options(ASSERT_BAIL, true);

// Дано
$clock = new AlaramClock();
$alarm = new Alarm(12, 0, Alarm::ALL_DAYS);
$clock->addAlarm($alarm);

// Если-то
$now = new DateTime('2018-12-03 12:00:00');
$ringingAlarm = $clock->getActiveAlarmAt($now);
assert($ringingAlarm !== null);
assert($ringingAlarm === $alarm);

$now2 = new DateTime('2018-12-03 13:00:00');
$ringingAlarm2 = $clock->getActiveAlarmAt($now2);
assert($ringingAlarm2 === null);

echo "Тест пройден: Тревога срабатывает только в установленное время\n";

Функция assert(...) просто проверяет, что аргумент равен true, и бросает исключение, если это не так.

Вот такой вот код автоматически проверяет первое требование. Конечно, тут можно сказать, что он не гарантирует на 100%, что требование выполняется - мы лишь проверили время 12:00 и 13:00, а не все возможные варианты. Но тесты и не гарантируют 100% правильность. Они проверяют, что код как-то использует переданное время, а не возвращает первый попавшийся результат. Они помогают обнаруживать ошибки. Например, если ты - забудешь сделать проверку времени срабатывания, или отключишь ее, то такой тест это обнаружит.

С тестами очень легко делать рефакторинг кода: не надо бояться, что ты нечаянно сломаешь какой-то функционал.

Вот еще примеры сценариев:

Требование: Многократная тревога сработает неограниченное число раз
Дано: Будильник, добавлена многоразовая Тревога на все дни на 12:00
Если: сейчас 12:00 1 декабря, то эта Тревога срабатывает
Если: сейчас 12:00 2 декабря, то эта Тревога срабатывает
Если: сейчас 12:00 1 января, то эта Тревога срабатывает

Требование: Можно удалить Тревогу из Будильника
Дано: Будильник, добавлена Тревога на 12:00
Если: удалить эту Тревогу и запросить список Тревог, то ее в списке нет

Требование: Можно менять время срабатывания многоразовой Тревоги после добавления
Дано: Будильник, добавлена Тревога на 12:00 на каждый день
Если: сейчас 12:00, то Тревога срабатывает
Если: поменять время Тревоги на 13:00, и сейчас 12:00, то Тревога не срабатывает
Если: сейчас 13:00, то Тревога срабатывает

Требование: Нельзя добавить Тревогу с неправильным временем
Дано: Будильник
Если: попытаться добавить тревогу на 25:00, то будет выброшено исключение
Если: попытаться добавить тревогу на 12:99, то будет выброшено исключение

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

Я вижу, ты пытаешься разобраться в ООП, значит тебе наверно было бы интересно заодно и юнит-тесты поучиться делать. Если что, подробный длинный урок про автоматизированное тестирование: https://gist.github.com/codedokode/a455bde7d0748c0a351a

Автоматическое тестирование используют такие компании, как Яндекс, Гугл. Если ты хочешь ориентироваться на их уровень, а не подвальную студию Замкадинска "ООО Интернет", то стоит осваивать хотя бы юнит-тесты.
Аноним 30/11/18 Птн 16:32:04 #951 №1303711 
>>1303707
>>1303678
>>1303674
Кажется, у меня больше нет вопросов. Всё понятно, спасибо!
Пойду переделывать задачу.
Аноним 30/11/18 Птн 16:59:41 #952 №1303739 
Анончики, кто нибудь может объяснить, зачем при подключении вида в контроллере, возвращать тру?
Если не понятно объяснил, то вот взгляните пожалуйста на пример. Я никак, ну никак не могу понять в чем смысл ретурн тру в этой функции.
https://github.com/victor-zinchenko/shop.php-start.com/blob/master/controllers/CatalogController.php
Аноним 30/11/18 Птн 20:14:25 #953 №1303862 
>>1303739
Конкретно у Витька что бы call_user_func_array в Router вернул true.
Я бы ни стал тратить время на его код, там есть пара весьма пахнущих моментов.
Аноним 01/12/18 Суб 01:22:44 #954 №1304109 
http://sandbox.onlinephpfunctions.com/code/27ceda4f92a17777bc54652cdb04454d9ade39ad - накалякал вот по заданию для перевода чисел в пропись. На https://ideone.com не хочет работать, хотя на локалке и других сервисах фурычит.

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

Ну и за одно, что эта хуета от меня требует -https://ideone.com/prkZ1h ?
Аноним 01/12/18 Суб 02:21:40 #955 №1304117 
Посоны, а почему встроенные функции с андерскорами, а PSR рекомендует кэмелкайс?
Аноним 01/12/18 Суб 12:42:11 #956 №1304227 
>>1303862
Ды ебаныйврот! А на чей код тогда тратить время? Просто у него самое доступное объяснение. Всё остальное супер не понятно
Аноним 01/12/18 Суб 12:44:50 #957 №1304228 
>>1303862
Все равно не понимаю. Возвращает call_user_func_array в руотутер тру. Дальше это самое тру записывается в переменную $result. И с ней ничего не происходит, кроме операции сравнения.
Аноним 01/12/18 Суб 13:32:06 #958 №1304247 
>>1304228
Он прерывает цикл foreach https://github.com/victor-zinchenko/shop.php-start.com/blob/e4973a695f36ec367f88488e604975c843ac0e20/components/Router.php#L84
что бы не проходить остаток массива, когда нужный роут найден.
Аноним 01/12/18 Суб 14:00:05 #959 №1304261 
Screenshot from 2018-12-01 13-55-02.png
Screenshot from 2018-12-01 13-54-36.png
Есть одна странная проблема в phpmyadmin, может кто сталкивался, объясните как это работает.
Суть. На первом скрине я пишу запрос ручками и выдаёт такую ошибку, на втором скриншоте я удаляю начало запрос SELECT (звёзодчка) и нажимаю на кнопку которая опять добавляет SELECT (звезда). После этого никакой ошибки нет
WTF?!
Аноним 01/12/18 Суб 14:00:44 #960 №1304262 
>>1304261
Скрины перепутались местами
Аноним 01/12/18 Суб 14:07:03 #961 №1304265 
>>1304261
упс, вижу теперь что запрос полностью меняется, но сути проблемы всё равно не пойму, почему выдаёт ошибку?
Аноним 01/12/18 Суб 15:23:45 #962 №1304289 
>>1304117
Потому, что бардак в стране!
Пых делал много кто, отсюда разброд и шатания
Аноним 01/12/18 Суб 15:26:08 #963 №1304291 
>>1304117
Подчёркивание использую если функциональщину пишу, камелКейс - через объекты.
Аноним 01/12/18 Суб 15:29:59 #964 №1304292 
>>1304261
У тебя там 2 разных запроса.
Аноним 01/12/18 Суб 15:31:47 #965 №1304293 
>>1304265
Ему строка запроса не нравится.
Аноним 01/12/18 Суб 22:35:02 #966 №1304523 
Что-то я слишком тупой для php. Прочитал 20 раз всё и так не понял что и как сделать.
Аноним 01/12/18 Суб 22:35:47 #967 №1304524 
>>1304523
Отклеилось: https://phpbooktest2.ga/l1/conditions.html
Про задачу с курсами доллара так же.
Аноним 02/12/18 Вск 00:52:03 #968 №1304583 
>>1304523
Программирование не всем даётся (даже на пхп), поэтому если у тебя не получается решить даже такую простую задачу, то наверное тебе лучше заняться чем нибудь другим: вагоны разгружать например или в армию пойти по контракту.
Аноним 02/12/18 Вск 01:19:38 #969 №1304592 
>>1304523

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

А то так, непонятно даже, в чем именно проблема.

>>1304261

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

Также, MySQL тебе дает подсказку, в каком месте ошибка, смотри внимательно:

...to use near ''user' GROUP BY ...

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

>>1304117

PSR не дает рекомендаций по именам функций. Для методов:

> Method names MUST be declared in camelCase.

Для классов:

> Class names MUST be declared in StudlyCaps.

Имена функций в таком стиле, так как большинство стандартных функций PHP это аналоги сишных функций, и они копируют их стиль наименования. Они были добавлены когда в PHP еще не было ООП.
Аноним 02/12/18 Вск 01:20:12 #970 №1304593 
>>1304227

Я бы в дополнение посоветовал почитать наши уроки отсюда: https://github.com/codedokode/pasta/ . Там подробно разъясняется теория про MVC, DI, паттерны работы с базой данных, интерфейсы, исключения.

Кстати, в уроке про MVC есть пример кода и он в разы проще!

>>1304109

> http://sandbox.onlinephpfunctions.com/code/27ceda4f92a17777bc54652cdb04454d9ade39ad

Плохо работать с числами как со строками. Во-первых, есть математика, зачем заморачиваться? Во-вторых, это делает код ненадежнее, так как PHP может представлять большие числа в виде 1e20 и твой код будет просто выдавать ерунду при работе с ними.

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

Там два основных метода:

987 % 100 = 87
floor(987 / 100) = 9

> $count=preg_match($regexp, $number, $array);
> $string=implode('',$array);

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

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

> function formAndMerge ($array)
> {
> global $number;
Вот это плохая идея. Ты ведь можешь просто передать $number через аргументы, напрямую, но вместо этого решил пойти обходным путем. Чтобы вызвать твою функцию, мы должны как-то догадаться поменять глобальную переменную, и только потом вызывать твою функцию, то есть мы должны писать:

gloabl $number;
$number = 123;
formAndMerge(...);

Вместо того, чтобы писать просто:

formAndMerge(123, ...);

Вот посмотри, неужели первый вариант удобнее? Какие у него преимущества?

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

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

У тебя это не соблюдается. Я пытаюсь изучить эту функцию, не прочитав остальной код:

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

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

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

/** 
* Принимает на вход целое число от 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

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

Имя функции начинается с глагола, в виде сделайЧтоТо().

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

> foreach ($array as $key=>$value)
Названия переменных ничего не говорят. Что значит value? Любая переменная хранит в себе какое-то значение.

> function wordShapeSelection($magnitude1, $magnitude2)
Непонятно, что надо передавать функции.

> $regexp1='/1[0-9]$/ui';
> $regexp2='/[^1]?[2-4]$/ui';
Тут можно использовать математику.

> function smallNumberToText($parts)
Непонятно, что надо передавать в функцию.

Код этой функции излишне усложнен. Смотри, как можно делать намного проще:

слова = пустой массив;
если (число >= 100) {
берем число сотен;
берем соответствующее ему слово и кладем в массив слов
}

если (2 последних цифры >= 20) {
берем число десятков;
....
}

в конце просто склеиваем массив слов в строку.

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

На ideone не установили расширение mbstring, и mb-функции там недоступны. Используй другие сайты вроде https://repl.it/languages/php - он даже без рекламы.
Аноним 02/12/18 Вск 06:26:20 #971 №1304636 
Снимок.JPG
>>1304523
тащемто ничего сложного нет, это просто нужно запомнить
Аноним 02/12/18 Вск 07:33:57 #972 №1304642 
Поясните как правильно это сделать, я конечно сделол, но говнокод лютый, боюсь в приличном месте меня за такое обоссут
https://ideone.com/dXxJDD
Аноним 02/12/18 Вск 08:37:34 #973 №1304647 
Что именно значит в вакансии - отличное знание ООП.
Что КОНКРЕТНО полразумевается? что нужно знать и уметь?
Аноним 02/12/18 Вск 11:58:57 #974 №1304676 
>>1304647
Если ты не понимаешь - значит у тебя хуевое понимание ООП. В гугле забанили?
Аноним 02/12/18 Вск 12:31:19 #975 №1304686 
>>1304647
Базовые принципы ООП.
Реализация ООП в PHP 5, 7.
SOLID, YAGNI, KISS etc
DI.
MVC.
Паттерны проектирования.
Сразу предупреждаю, если просто заучить наизусть определения и не иметь практики и приличного понимания, это обнаружат на собеседовании за пару вопросов.
Аноним 02/12/18 Вск 13:57:51 #976 №1304721 
Два вопроса:
1) Как можно узнать, с использованием какого фронт/бэк фреймворка написан сайт? Хочу просто посмотреть сайты на ангуляре/реакте/ларавеле/симфонии/и т.д.
2) А вообще, может ли быть сайт написан с использованием и бэк-фреймворка и фронт-фреймворка, например на yui2/react?
И в дополнение ко второму, третий: а что вообще делает js-фреймворк? Про php-фреймворки мне понятно, там реализуется MVC на стороне сервера. А вот из описаний js-фреймворков не особо понимаю их назначение.
Аноним 02/12/18 Вск 15:38:25 #977 №1304801 
>>1304721
Чувак, ты такую хуйню написал, йобана. Иди на завод, программирование - не твоё. Я не шучу. Ты абсолютную чушь написал, про MVC вообще орнул.
Аноним 02/12/18 Вск 16:37:28 #978 №1304833 
>>1304801
Ну так просвети меня, как оно на самом деле.
Аноним 02/12/18 Вск 17:21:30 #979 №1304857 
>>1304721
> Как можно узнать, с использованием какого фронт/бэк фреймворка написан сайт?

Точно определить не получится, но есть специальные расширения для браузера, которые по кускам HTML и JS kkкода пытаются "угадать" фронтенд и бекенд фреймворки, например Wappalyzer: https://www.wappalyzer.com/
Например, он задетектил, что GitHub написан на Ruby On Rails, что новый Reddit использует React. Если ты на основе этих данных хочешь выбирать фреймворк, то в этом смысла нет, так как сейчас все популярные фреймворки позволяют сделать примерно одно и то же, вопрос лишь в профессионализме разработчика.

> А вообще, может ли быть сайт написан с использованием и бэк-фреймворка и фронт-фреймворка, например на yui2/react?

Конечно. На бекенде может быть только JSON API, а на фронте всё остальное. Может быть комбинация - бекенд отдаёт HTML тоже, но интерактивные части сделаны на JS-фрейморке. SPA фрейморк не единственный способ создать приложение без перезагрузки страницы, есть ещё pjax, GitHub до сих пор так и работает.

> что вообще делает js-фреймворк?

Предоставляет удобные абстракции для написания SPA - приложений, работающих без перезагрузки страницы. То, что на jQuery писать сложно и неудобно. То есть ты сам поймёшь, когда тебе нужен JS-фрейморк, когда лапшу из jQuery/чистого JS поддерживать станет проблемно. Примеры приложений, в которых уместно использование JS-фреймворков - Trello, SoundCloud, VK. Или вот такое: https://github.com/codedokode/pasta/blob/master/js/spa.md
Аноним 02/12/18 Вск 18:42:53 #980 №1304897 
>>1304857
Спасибо за подробное объяснение.

>Если ты на основе этих данных хочешь выбирать фреймворк
Но выбрать таки что-то нужно. А я даже не могу выбрать, фронт или бэк. Прям как задача про два стула.
Аноним 02/12/18 Вск 18:44:03 #981 №1304899 
>>1304833
Зачем? Это основы. Если ты не смог их понять - то толку от объяснения не будет никакого.
Аноним 02/12/18 Вск 19:50:55 #982 №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"?

>>1304721

> использованием какого фронт...
Открой HTML-код страницы и посмотри, JS код ведь виден на стороне браузера. Также освой Developer Tools в браузере (Ctrl + Shift + I), с помощью которых можно изучать содержимое страницы.

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

Но проще по моему просто зайти в документацию фреймворка или Гугл и найти список там:

- гугли "Symfony sites"
- https://madewithlaravel.com/

> А вообще, может ли быть сайт написан с использованием и бэк-фреймворка и фронт-фреймворка, например на yui2/react?

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

> а что вообще делает js-фреймворк?

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

Ты можешь почитать описание Ангулар, например: https://angular.io/guide/architecture

Чтобы его понять, надо знать хотя бы такие вещи, как MVC, DI.
Аноним 02/12/18 Вск 19:52:56 #983 №1304935 
>>1304801

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

>>1304897

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

>>1304647

Вот, кстати, у нас есть задачи для проверки своих знаний ООП:

- ООП-Будильник: https://phpclub.tech/pr/res/1232710.html#1263399
- ООП-Гостиница: https://phpclub.tech/pr/res/1082507.html#1097078

>>1304642

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

Вместо $rand_keys я бы сразу брал нужное слово строчкой вроде

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

А так, верно.
Аноним 02/12/18 Вск 19:53:39 #984 №1304936 
>>1303613

Сделать голосование платным.

>>1303503

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

- браузер отправляет запрос
- PHP скрипт запускается, загружает откуда-то (файлы, БД) состояние игры
- делает изменения
- сохраняет состояние
- отправляет данные в браузер
- завершается

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

Однако, если ты хочешь, чтобы игра была многопользовательская, то тебе все равно придется хранить состояние на сервере. И сохранять его придется, чтобы при падении сервера достижения бы не терялись. Тогда стоит сделать JS-клиент игры + API на сервере.

Вообще, обычно для игр все же пишут игровые демоны. Это серверная программа, часто на языках вроде Си или Го для максимальной производительности, которая держит состояние игры в памяти. Однако, можно использовать Node.JS или PHP в виде демона, в "неумирающем" режиме на ReactPHP. Её логика работы такая:

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

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

Общее описание разных серверных архитектур: https://gist.github.com/codedokode/ffd520440a970c07c1c6

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

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

Если ты не хочешь многопользовательский режим, то пиши просто в браузере на JS, а на сервере сделай только сохранение/загрузку данных игры.
Аноним 02/12/18 Вск 19:54:10 #985 №1304938 
>>1303408

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

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

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

Есть PSR-4 и композер, не надо заниматься изобретением велосипеда с квадратными колесами.

>>1303382

> https://repl.it/repls/VivaciousFaithfulScandisk

Ошибка 404, код не открывается.
Аноним 02/12/18 Вск 21:18:02 #986 №1304994 
>>1304686
спасибо
Аноним 02/12/18 Вск 21:22:25 #987 №1304997 
чет не пойму как распарсить джейсон.
приходит такая хуйня.
{"channel":{"id":532400,"name":"House","latitude":"0.0","longitude":"0.0","field1":"Temp_indoor","created_at":"2018-07-04T11:10:55Z","updated_at":"2018-12-02T17:38:27Z","last_entry_id":7},"feeds":[{"created_at":"2018-12-02T18:13:40Z","entry_id":7,"field1":"26.00000"}]}

как полуить 26.00000 из этого хлама?
Аноним 02/12/18 Вск 21:36:55 #988 №1305008 
$x = json_decode($str);
echo $x->feeds[0]->field1;
или
$x = json_decode($str, true);
echo $x['feeds'][0]['field1'];
Аноним 02/12/18 Вск 21:37:17 #989 №1305009 
>>1305008
>>1304997
Аноним 02/12/18 Вск 21:44:10 #990 №1305011 
>>1305008
спасибо, сработало
Аноним 02/12/18 Вск 21:48:18 #991 №1305013 
>>1305008
поясни только, мы делаем декода джейсона.
получаем объект Х, а не массив. в нем обращаемся к полю feed[0] вот это уже не понял. Фидс тоже объект? и в объекте фидс поле фиелд1?
Аноним 02/12/18 Вск 21:58:26 #992 №1305019 
>>1305013
feeds массив объектов. в ячейке ноль объект и у него поле field1.
смотри var_dump или дебагером что бы ориентироваться что json_decode отдаст.
Аноним 02/12/18 Вск 22:14:04 #993 №1305031 
аноны, помогите пж с задачкой про исправление регистра текста и пробелами после знаков препинания
>разбиваем текст на массив предложений с помощью preg_split. Каждое предложение пропускаем через функцию, делающую первую букву заглавной.

После того как я разбил строку по предложениям, и каждое предложение лежит в массиве, как с помощью функции поменять регистр 1 буквы в каждом эл-е массива? Ещё я не совсем понимаю как обращаться к элементу массива в preg_split`e чтоб он принимал элемент как строку>>1304938

https://ideone.com/V6Rxdg
Аноним 02/12/18 Вск 23:28:55 #994 №1305072 
>>1305019
если фидс массив, почему мы обращаемся через -> ??? как к полю класса
Аноним 02/12/18 Вск 23:49:30 #995 №1305083 
>>1305072
feeds массив
feeds[0] объект.
Аноним 03/12/18 Пнд 00:01:43 #996 №1305087 
Про Laravel написано "Does NOT work on Shared hosting plans". Что это значит? Что ему нужно такого, что нет на простом хостинге?
Аноним 03/12/18 Пнд 00:30:26 #997 №1305101 
>>1305031
https://repl.it/@askarpro24/VivaciousFaithfulScandisk
Регистр поменял, теперь вопрос как вернуть из функции массив?
Аноним 03/12/18 Пнд 06:56:33 #998 №1305173 
как отключить warning при не-передаче в функцию какого-то параметра? Warning</b>: Missing argument 2 for

php 7

Аноним 03/12/18 Пнд 06:56:51 #999 №1305174 
>>1305173
При этом не отключая остальные варнинги. Мне просто не нужен конкретно этот тип варнингов
Аноним 03/12/18 Пнд 06:58:52 #1000 №1305175 
Как пишутся сложные парсеры на php?

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

Что является проблемой - отследить перечень перенаправлений, модификацию кук в процессе перенаправлений, особенно, если на сайте присутствует много js или не дай бог технологии посложнее/запросов десятки и в каждом необходимо разобраться

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

Какие есть средства, позволяющие проанализировать цепочку запросов до получения конечного результата, в идеале сами генерирующие код, либо сильно облегчающие генерацию кода на php? На ум приходят браузерные плагины, но я таких не знаю
Аноним 03/12/18 Пнд 07:34:21 #1001 №1305178 
1.JPG
2.JPG
зачем писать сложную программу как на первом скрине, если можно ограничиться вторым вариантом?
Аноним 03/12/18 Пнд 08:48:02 #1002 №1305187 
>>1304936
Значит плохая идея для пет-проекта по бэку, в фронт углубляться я пока не хочу, учу php пока что по твоим ссылкам.
Аноним 03/12/18 Пнд 11:55:13 #1003 №1305240 
>>1305178
Потому что цель упражнения написать простой алгоритм, а не изучить встроенные функции PHP. Палиндром часто спрашивают на собеседованиях.
Аноним 03/12/18 Пнд 12:19:36 #1004 №1305246 
>>1305178

А твоя программа на втором скриншоте работающая? Ну-ка проверь ее на строчке "А роза упала на лапу Азора" в utf-8.

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

Урок: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
Аноним 03/12/18 Пнд 12:53:37 #1005 №1305253 
Очень сильно хочется стукнуть ОПа за КАРТИНКИ с ТЕКСТОМ и КОДОМ в гайде.

Какой бамплимит на этой доске? Перекат будет?
Аноним 03/12/18 Пнд 12:56:49 #1006 №1305255 
>>1305253

Да, погоди, сегодня постараюсь перекатить.

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

Если тебе во что бы то ни стало хочется копировать, то освой библиотеку вроде Tesseract или используй сайт с бесплатным OCR.
Аноним 03/12/18 Пнд 15:48:52 #1007 №1305333 
>>1304593

Спасибо за развернутый комментарий

Посмотри, вот "работа над ошибками":

https://repl.it/repls/MisguidedAnotherAggregators
Аноним 03/12/18 Пнд 15:56:15 #1008 №1305337 
>>1305333

Фикс. Рабочая ссылка:

http://sandbox.onlinephpfunctions.com/code/186a40867c9e06eeb73536f3192efd94ffabb77e
Аноним 03/12/18 Пнд 17:00:40 #1009 №1305359 
>>1305337

> Принимает на вход текстовую форму числа,
> наименование величины, начальное число в цифровом формате,
> номер элемента массива

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

Также, непонятно, почему "текстовая форма числа" передается в виде массива. Это явно не отдельная независимая законченная функция, а просто вырезанный откуда-то кусок кода (из spellNumber, я так думаю). Это объясняет, откуда берется $arrayKey.

> Принимает на входе число от 0 до 999 и
> номер элемента массива (для определения степеней числа)

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

echo selectWordform(123, ['рубль', 'рубля', 'рублей'])
echo selectWordform(123, 'рубль', 'рубля', 'рублей')

Так мы получаем универсальную функцию, работающую с любыми словами.

Ну или хотя бы заменить arrayKey на wordNumber и написать, что это номер склоняемого слова от 0 до N.где 0 - это ..., 1 - это ... итд.

В функции getWordForm() слишком сложные if, их можно было бы упростить, перестав и убрав вложенность.

> if ($isFemale==1 && $lastDigits<3)
> {
> $units=$lastDigits;
> $words[]=$femaleSpelling[$units];

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

> Принимает на вход целое число от 0 до 10^12,
> разбивает его на части по 3 цифры с конца

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

> if($number!=0)
> {
> ... много кода ...
> }
> else
> {
> $result='(0) рублей';
> }

Тут лучше перевернуть if:

if ($number == 0) {
return ...;
}

... много кода ...

> $count=preg_match($regPart, $number, $onePart);
> $threeDigit[]=$onePart[0];
Тут проще использовать математику, для отщепления 3 последних цифр. Хотя твой вариант относительно работающий, так все же будет чище.

> foreach ($threeDigit as $key => $value)
foreach ($groups as $group)

> $combineElements=array_reverse($combineElements);
$parts

> $wordForm[]=getWordForm ($value, $key);
Непонятно, зачем тут использован массив.
Аноним 03/12/18 Пнд 17:01:14 #1010 №1305360 
>>1305187

Видимо, да. Вообще, текстовую игру на PHP можно было бы запускать в консоли в режиме диалога (где она бы работала постоянно), но в Windows сложности с отображением utf-8 в консоли... это впрочем можно решить перекодировкой с помощью http://php.net/manual/ru/book.outcontrol.php

Не хочешь консольную текстовую игру? Я могу подсказать, как можно сделать цветные буковки (гугли последовательности ANSI. Увы, они не работают в нативной консоли до Windows 10, но работают в сторонних эмуляторах терминалов вроде mintty из Cygwin).

Впрочем, это к бекенду мало имеет отношения.

>>1305175

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

>>1305173

Не надо так. Надо передавать все требуемые параметры или задать им значения по умолчанию.
Аноним 03/12/18 Пнд 17:01:37 #1011 №1305361 
>>1305101
>>1305031

> for($i=0;$i<count($dividedLine);$i++){
Используй foreach

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

$result = [];
foreach ($sentences as $sentence) {
$result[] = fn($sentence);
}

Примерно как у тебя и сделано.

Есть еще array_map(), смотри мануал, он позволяет обойтись без цикла в 1 строчку.

ucfirst не работает, смотри урок: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md

> Ещё я не совсем понимаю как обращаться к элементу массива в preg_split`e чтоб он принимал элемент как строку

Как взять элемент из массива? $array[0] например.

>>1305087

Не знаю. Установка какой-нибудь Node.JS может быть? Надо смотреть док-ю.
Конец треда Аноним 03/12/18 Пнд 17:39:52 #1012 №1305373 
Поезд дальше не идет. Переходите в новый тред: >>1305368 (OP)
comments powered by Disqus

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