«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Клуб изучающих PHP #106 Аноним 2018/12/03 14:34:44  №1305368 1
php-noob-1.png (33, 500x500)
500x500
cat-cafe-osaka.jpg (157, 1024x683)
683x1024
welcome-to-php.png (188, 853x480)
480x853
imoto-cosplay.jpg (59, 400x539)
539x400
Брр, холодно-то как. Но даже это нас не остановит. Тут мы, несмотря ни на что, изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки, печем печенье и даже делаем простые сайты! Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

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

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

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

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

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

С чего начать

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

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

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

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

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

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

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

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

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

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

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

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

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

Что почитать

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

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

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

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

- Почему PHP? Потому что вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а открой http://rghost.ru/6bfCY9lfl и получи личную немного устаревшую оффлайновую копию сайта (можно читать хоть на андроиде без интернета)
- Что надо знать чтобы найти работу - разработчику: PHP, SQL, HTML/CSS, JS, ООП, Git, композер, MVC, фреймворк. Верстальщику - HTML/CSS, JS, jQuery. У нас в треде были люди, которые практически с нуля учились и смогли найти работу.
- Что будут спрашивать на собеседовании если 0 опыта - гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- Можно подробнее про поиск работы, собеседования - нет, ОП писать не будет, но может кто из анонов захочет рассказать. Поищите тред перезвонивших, а также раздел /wrk/
- Сколько времени надо изучать все это? - все зависит от тебя, но не меньше 6-8 месяцев
- Нужен ли ООП, фреймворки, MVC, git, composer? — Да, однозначно. Посмотри любую вакансию.
Аноним 2018/12/03 14:38:49  №1305372 2
grammar.png (56, 500x644)
644x500
neko-girl.jpg (435, 600x900)
900x600
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть. Если каждый будет оформлять код как хочет, будет бардак.

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

>>1305442

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

>>1305584

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

>>1305599

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

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

И, кстати, сайт для проверки знаний, наш TestHub: https://gist.github.com/codedokode/8733007 .
Ответы: >>1306050 >>1306121 >>1306130
Аноним 2018/12/04 22:14:33  №1306047 45
>>1305609

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

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

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

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

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

>>1305614

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

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

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

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

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

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

>>1305810

Давайте спокойнее. И в учебнике ОПа про mb_ereg, по моему, ничего нету.
Аноним 2018/12/04 22:14:59  №1306048 46
>>1305713

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

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

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

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

>>1305754

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

>>1305776

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

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

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

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

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

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

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

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

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

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

>>1305840

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

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

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

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

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

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

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


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

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

React Router так же обрабатывает роуты на серверной части помимо самого express'а. Поэтому для express'а нет никакого смысла ставить обработчик на каждый роут. Как можно заметить роут для '/' и для '/somewhere' имеет абсолютно идентичный код. Так может для рендеринга просто поставить обработчик с регулярным выражением для всех роутов '/.*', а сверху перезаписать отдельные для POST (если такие потребуются) и для API?
Ответы: >>1306737 >>1329861
Аноним 2018/12/05 09:59:19  №1306323 57
Ответы: >>1306331
Аноним 2018/12/05 10:23:12  №1306331 58
>>1306323
И не буду, ничего интересного не нашёл.
Ответы: >>1306341
Аноним 2018/12/05 11:15:57  №1306341 59
>>1306331
Ну правильно, хули ожидать от человека без собственной фантазии.
Ответы: >>1306343
Аноним 2018/12/05 11:17:59  №1306343 60
>>1306341
Ну так зачем кидать идеи человека без собственной фантазии?
Аноним 2018/12/05 11:18:22  №1306344 61
screencap.gif (954, 611x377)
377x611
/web совсем помер. Спрошу сдесь.

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

https://ideone.com/YZhoeC

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

https://ideone.com/Kj2GBG
Версия с тестами, выглядит не так стильно но работает. Ну эмм, я пошел делать вектор.
Ответы: >>1311510 >>1313228 >>1314975
Аноним 2018/12/09 07:21:03  №1308417 127
Ответы: >>1331368
Аноним 2018/12/09 08:08:37  №1308429 128
ОП, глянь "Гостиницу" мою, если будет время:
http://sandbox.onlinephpfunctions.com/code/bf265b1dcfaab38559a459812aa03f0c5583fc7b

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

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

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

Аноним 2018/12/09 15:32:42  №1308667 133
Из предыдущего треда:

>>1299665

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>>1299989

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

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

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

>>1299566

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

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

>>1299564

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

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

>>1299056

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

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

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

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

>>1298653

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


>>1298000

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

> (а|но\s)

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

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

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

Ок, верно.

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

В общем, сильно переусложнено.
Ответы: >>1308853
Аноним 2018/12/10 00:47:03  №1308853 140
Аноним 2018/12/10 00:47:30  №1308854 141
>>1297954

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

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

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

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

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

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

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

>>1297532

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

>>1293491

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

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

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

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

>>1292670

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

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

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

Можно.

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

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

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

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

>>1292613


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

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

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

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

Команда

$op;

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

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

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


>>1308429

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

class Element
{
abstract public function getPinCount();
}

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

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

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

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

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

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

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

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

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

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

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

3 + x

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

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

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

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

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

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

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

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

Сделать:

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

Ответы: >>1310156
Аноним 2018/12/12 13:05:05  №1310156 180
Ответы: >>1310161
Аноним 2018/12/12 13:13:14  №1310161 181
>>1310156
нет. Строку поиска регулярки составил вот в конструкторе. А что дальше делать хз.
Ответы: >>1310162
Аноним 2018/12/12 13:16:14  №1310162 182
Ответы: >>1310169
Аноним 2018/12/12 13:42:42  №1310169 183
>>1310162
ну оно заменит полностью найденое совпадение, а мне надо добавить прост слово к совпадению.
Ответы: >>1310170
Аноним 2018/12/12 13:53:47  №1310170 184
>>1310169
напиши регулярку, которая будет искать слово пообедать рядом с датой и замени его на залупа пообедать
Ответы: >>1310171 >>1310191
Аноним 2018/12/12 13:54:55  №1310171 185
>>1310170
или можно просто заменить слово пообедать на залупа пообедать, без регулярок, че ты мозги ебешь
Аноним 2018/12/12 14:18:13  №1310176 186
ЛАдно, пытался просто объяснить, чекните мое говно, почему оно не работает?
https://ideone.com/34FAk8
Ответы: >>1310199
Аноним 2018/12/12 14:24:31  №1310177 187
>>1310137
Сосу свои классы и радуюсь жизни.
Ответы: >>1310179
Аноним 2018/12/12 14:26:17  №1310179 188
>>1310177
А теперь глотни ка двойной массив который нахуй не нужен.
Ответы: >>1310181
Аноним 2018/12/12 14:28:12  №1310181 189
EeES3qxvWBU.jpg (52, 960x540)
540x960
Аноним 2018/12/12 15:06:37  №1310191 190
>>1310170
Думал это легко сделать, но не тут то было, хыыы, придется массивы городить
Ответы: >>1310199
Аноним 2018/12/12 15:24:00  №1310199 191
>>1310176
>>1310191

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

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

Алсо почему у тебя авторайзер занимается аутентификацией? Почитай про разницу между авторизацией и аутентификацией: https://stackoverflow.com/a/6367931
Ответы: >>1310590
Аноним 2018/12/12 19:00:17  №1310305 193
JS задачки душные какие-то. Сижу третий час вдупляю в 4-ое
Аноним 2018/12/12 20:42:32  №1310349 194
1342240872894.jpg (51, 600x729)
729x600
>>1305368 (OP)
Как то тут уютно у вас, господа. Пожалуй пополню ваши ряды. Всем добра.
Ответы: >>1310397
Аноним 2018/12/12 21:08:28  №1310371 195
Че, поцоны, говорят пыха-то мертвый язык.
Ответы: >>1310423 >>1310446
Аноним 2018/12/12 22:03:51  №1310397 196
Аноним 2018/12/13 02:08:53  №1310423 197
>>1310371
На нём говорили древние?
Аноним 2018/12/13 04:10:27  №1310433 198
LlStdLGp.png (10, 949x79)
79x949
Почему не работают примеры из книг? Это уже не первый раз такое, и вот сегодня нашел такой вот самоучитель например

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

первый жи код

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

нормально не работает!Ни на сервере(у меня сайт есть), ни в онлайн интерпритаторе. Может кто-нибудь объяснить почему. Буду благодарен.
Ответы: >>1310437
Аноним 2018/12/13 04:38:14  №1310437 199
>>1310433
Потому, что пример нужно выполнить в консоли, через php-cli.
Ответы: >>1310445
Аноним 2018/12/13 04:53:22  №1310445 200
>>1310437
спасибо , анон . Еще бы узнать можно ли это как то запустить на сервере? Ну реалньо, смотрю , полезная вроде книга, но даже первый код не запускается
Ответы: >>1310447 >>1310449
Аноним 2018/12/13 04:54:29  №1310446 201
Аноним 2018/12/13 04:55:54  №1310447 202
>>1310445
> даже первый код не запускается
фейспалп.жпг

Ты сначал с консолью разберись
Ответы: >>1310450
Аноним 2018/12/13 05:10:29  №1310449 203
Ответы: >>1310451
Аноним 2018/12/13 05:11:03  №1310450 204

>>1310447

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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



Ответы: >>1310471 >>1310491
Аноним 2018/12/13 06:00:11  №1310471 212
Аноним 2018/12/13 06:00:58  №1310474 213
>>1310464
но мне интересно применение на сервере

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

<?php


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


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

echo "Connected successfully";

$result = mysql_query( "SHOW DATABASES");




?>

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

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

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

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


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

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

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

And also

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

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

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

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

Ответы: >>1310650
Аноним 2018/12/13 13:14:35  №1310650 220
Аноним 2018/12/13 13:52:32  №1310672 221
image.png (782, 958x570)
570x958
Сап.Подскажите, как сделать нечто подобное? По сути я вывожу информацию из бд в нужный блок/блоки, но как это сделать в цикле?
Ответы: >>1311081
Аноним 2018/12/13 14:11:22  №1310676 222
>>1309754
Надеюсь успел ответить, и мой ответ дойдет до тебя.

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

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

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


Однако.

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

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

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

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

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


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


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

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

и

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


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

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

сделать одним куском?
Ответы: >>1310958 >>1310984
Аноним 2018/12/14 07:10:51  №1310946 230
не вот эту проверку
Аноним 2018/12/14 07:12:29  №1310948 231
Аноним 2018/12/14 07:39:35  №1310958 232
>>1310945
Должно выйти через array_map.
Аноним 2018/12/14 08:29:08  №1310976 233
Снимок.PNG (171, 1359x662)
662x1359
>>1305368 (OP)
Аноны, я почти доделал движок по видеоурокам.
Но блять где то в коде я сделал дамп сессии и теперь не могу его найти ааааааа
Вот что делать?
Ответы: >>1310978 >>1310979 >>1311044
Аноним 2018/12/14 08:37:37  №1310978 234
>>1310976

из консоли:

grep -rni "var_dump" *

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

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

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

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

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

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

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

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

Жирным выделил то что является собственно php-кодом внутри твоего html кода. Надеюсь макаба не испортит разметку
Аноним 2018/12/14 13:38:43  №1311098 245
Снимок.PNG (13, 624x198)
198x624
Ну и чего ты добился, ОП-хуй?
Ответы: >>1311327
Аноним 2018/12/14 14:25:03  №1311131 246
13925547362135986208.jpg (153, 1000x1094)
1094x1000
Недавно закончил свой первый проект на Yii2. Потратил довольно много свободного времени. Над описанием я особо не старался и комментарии к методам есть на русском языке, не бейте.

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


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

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

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

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

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

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

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

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

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

SHOW GRANTS FOR 'username'@'localhost';

или

SHOW GRANTS FOR CURRENT_USER;

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

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

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

//в smallNumberToText:
$translatedNumber = "";
foreach ($result as $num){
$translatedNumber = $translatedNumber . ' ' . $spelling[$num];
}
return $translatedNumber;
Ответы: >>1312425
Аноним 2018/12/16 21:42:18  №1312403 296
Ответы: >>1312405 >>1312406
Аноним 2018/12/16 21:46:58  №1312405 297
>>1312403
Пробежался по статейкам. Так там используется display, в задании сказано, что без него нужно делать. Или я просто тупой
Ответы: >>1312408
Аноним 2018/12/16 21:49:41  №1312406 298
>>1312403
Бля, работает. Спасибо большое
Аноним 2018/12/16 21:59:43  №1312408 299
>>1312405

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

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

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

Ответы: >>1312412 >>1312498
Аноним 2018/12/16 22:41:16  №1312412 301
Ответы: >>1312414
Аноним 2018/12/16 22:55:28  №1312414 302
Ответы: >>1312416 >>1312417 >>1312419
Аноним 2018/12/16 22:59:22  №1312416 303
>>1312414

Ты умеешь работать с XML и массивами в PHP? Если нет, то иди читай теорию, так как невооруженным глазом видно, что строка в XML.
Ответы: >>1312419 >>1312421
Аноним 2018/12/16 23:00:01  №1312417 304
>>1312414

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

>>1312416
>XML
Там json, как я видел.
Ответы: >>1312421
Аноним 2018/12/16 23:15:45  №1312421 306
Аноним 2018/12/16 23:49:10  №1312425 307
>>1312400
>$result = numberToText(421);
>$text = smallNumberToText($result,0);
>echo $text;
спасибо, теперь разобрался как вызывать функции чтобы они массив возвращали
Аноним 2018/12/17 09:08:00  №1312498 308
>>1312410

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

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

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

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

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

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

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

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

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

>vagrant up

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

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

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

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

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

if () {
...
}

x();

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

trait LastEditLogger requires SomeBaseClass, SomeInterface, SomeOtherTrait.

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

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

function x(SomeTrait $y)

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

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

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

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

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

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

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

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




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

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

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

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

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

Моё личное мнение, JS для проектов на таких помойных фреймворках обладает таким же низким уровнем вхождения. А промисы и коллбэки, это не конкретная специфика JS и есть в любом языке. Понимание этого зависит от твоего общего уровня программирования. Коротко говоря, моя мысль заключается в том, что ты можешь изучить и JS, и это так же легко как html/css для твоего выбранного уровня.
Ответы: >>1314106 >>1314117
Аноним 2018/12/20 13:38:23  №1314106 409
Снимок3.JPG (23, 418x413)
413x418
Ответы: >>1314107
Аноним 2018/12/20 13:40:41  №1314107 410
>>1314106
А что в массивах находится показать? Пожалуйста, старайся выдать максимальное количество информации о своей проблемы за один пост, дабы не разводить флуд.
Ответы: >>1314108
Аноним 2018/12/20 13:43:26  №1314108 411
Ответы: >>1314133
Аноним 2018/12/20 14:19:02  №1314117 412
>>1314104
>Моё личное мнение, JS для проектов на таких помойных фреймворках обладает таким же низким уровнем вхождения.
Там весь Джай Асс - прикрутить Джай Куэри и поназначать селекторы для эффектов. Где там программирование вообще? Мартышки отлично справляются тыкая наугад.
Уровень ПХП там точно такой же.

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

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

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

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

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

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


Подсказка:

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



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

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


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


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

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


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

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


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


Можешь свободно задавать любые вопросы если они появились.
Ответы: >>1314135 >>1314368
Аноним 2018/12/20 14:57:39  №1314135 415
>>1314133
>и закрываешь эту строку </tr>*
Опечатался.
Аноним 2018/12/20 15:13:38  №1314141 416
Аноним 2018/12/20 20:20:31  №1314312 417
>>1313537
Решилось комментированием строки
#AddDefaultCharset windows-1251
в конфиге денвера
Аноним 2018/12/21 01:45:16  №1314364 418
Как передать свойство с одного класса в метод другого класса? Только статик?
Ответы: >>1314426 >>1314444
Аноним 2018/12/21 03:56:39  №1314368 419
Снимок.JPG (23, 827x376)
376x827
>>1314133
Слава аллаху отзывчивому анону, не знал что так можно делать, только сейчас узнал о функции array_combine
Ответы: >>1314972
Аноним 2018/12/21 08:18:11  №1314425 420
mb problem.jpg (84, 776x856)
856x776
Ответы: >>1314972
Аноним 2018/12/21 08:29:19  №1314426 421
>>1314364
Статические сущности - корень зла.
Ответы: >>1314454 >>1314454 >>1314623
Аноним 2018/12/21 08:58:22  №1314444 422
>>1314364

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

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

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

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

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

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

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

>>1314810
>не перезвонят
мне похуй, хуже веб-макаки профессии нет
Ответы: >>1314819 >>1314855 >>1314895
Аноним 2018/12/21 21:38:07  №1314819 440
Ответы: >>1314820
Аноним 2018/12/21 21:51:58  №1314820 441
Ответы: >>1314821
Аноним 2018/12/21 21:56:46  №1314821 442
>>1314820
Это вообще шениально - называть людей неизвестной тебе профессии уёбками и макаками.

>б-г миловал
Веб от тебя.
Ответы: >>1314822
Аноним 2018/12/21 21:58:26  №1314822 443
>>1314821
>Это вообще гениально
А ты подумой почему среди айтишнегов нет гениев? Тотоже!
Аноним 2018/12/22 03:51:47  №1314855 444
Аноним 2018/12/22 08:52:35  №1314886 445
Анон, а как сделать фон и поверх него блок с тем же фоном только без «зетмнения», как на пике?
Ответы: >>1314894 >>1315179
Аноним 2018/12/22 09:13:34  №1314894 446
>>1314886

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

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

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

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

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

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

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

>>1314454

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

>>1314425

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

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

>>1314368

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

>>1313537

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

Ответы: >>1315175 >>1315866
Аноним 2018/12/22 12:59:56  №1314973 450
>>1313959

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

>>1314098

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

>>1313508

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

>>1313451

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

> DTO

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

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

Может.

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

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

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

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

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

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

$x->onDataReceived(...)

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

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

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

Да, можно.

>>1313426

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

>>1313401

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

>>1313247

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

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

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

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

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

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

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

> if ($object == $alarm) {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответы: >>1315851
Аноним 2018/12/24 09:10:46  №1315851 476
>>1315838

htaccess настроил как в документации?
Ответы: >>1315857 >>1315955
Аноним 2018/12/24 09:31:55  №1315857 477
Аноним 2018/12/24 10:04:33  №1315865 478
Аноним 2018/12/24 10:11:31  №1315866 479
>>1314972
>PREG_MATCH_OFFSET возвращает смещение в байтах
Спасибо за развернутый ответ!
Аноним 2018/12/24 10:20:36  №1315868 480
>>1314973
>Сервис ради такой простой задачи, как добавить пару полезных функций - это оверкилл. Плюс, сервис не имеет доступа к внутреннему состоянию контроллера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Буду благодарен за подсказки. Возможно я ещё не дорос до уровня на котором стоит пытаться вникать в паттерны?
Ответы: >>1318743 >>1319267
Аноним 2018/12/24 21:37:35  №1316154 485
Анонушки, есть такой массив $key, в котором такие данные

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

[1] => $10 000 investment opportunities

[2] => $10 000 to invest

[3] => $1000 investment ideas

)

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

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

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

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

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

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

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

<url>

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

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

<changefreq>monthly</changefreq>

<priority>0.8</priority>

</url>

<url>

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

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

<changefreq>monthly</changefreq>

<priority>0.8</priority>

</url>

</urlset>

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

echo $myShittyCode;

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

или получать имя ключа функцией key() . тут нужно будет читнуть мануал по массивам
*/
Ответы: >>1316175
Аноним 2018/12/24 22:53:28  №1316175 488
14572086925030.jpg (81, 604x604)
604x604
>>1316170
Спасибо большое! Сделал твой вариант в виде html и сделал xml по этому коду: gist.github.com/artlung/210438

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


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

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

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

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

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

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

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

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

Заведи новую переменную, в нее помести результат умножения и эту переменную подставляй в строку. В строку нельзя вставлять выражения.
Ответы: >>1318405 >>1318420
Аноним 2018/12/29 14:40:50  №1318405 517
>>1318404
>В строку нельзя вставлять выражения.
Очень жаль. Спасибо.
Аноним 2018/12/29 14:48:31  №1318406 518
Grade-Middle.png (76, 730x738)
738x730
В два треда закинул, сюда тоже закину
Ну что, погроммисты, можете сдать грейд на мидла?
Ответы: >>1318502 >>1318647 >>1318654
Аноним 2018/12/29 15:39:52  №1318420 519
Ответы: >>1318436 >>1318503
Аноним 2018/12/29 16:23:58  №1318436 520
>>1318420
Въебал бы тебе за щеку за тупые выебоны на детской теме. Кодер из тебя дерьмо, если ты экономишь переменные в ущерб читабельности.
Ответы: >>1318503
Аноним 2018/12/29 20:43:47  №1318502 521
>>1318406

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

Замечание справедливое - можно подставить результат выражения в строку через конкатенацию (я бы добавил скобки, чтобы не гадать о приоритетах выражений), но, увы, если его подавать в такой манере, то впечатление производится крайне негативное. Давайте вести себя культурнее.
Ответы: >>1318518
Аноним 2018/12/29 21:26:46  №1318518 523
>>1318503
>Давайте вести себя культурнее.
Да я, вроде, старался в стиле поста ответить. Но ты прав, пожалуй.
Аноним 2018/12/30 03:54:21  №1318575 524
Ответы: >>1318678
Аноним 2018/12/30 08:33:35  №1318633 525
В пыхе можно замутить нормальные дженерики каким-нибудь расширением?
Есть rfc, но это лишь бумажка для подтирания жопы, которой уже подтерлись.
Нужен какой-то реальный рабочий код или мод языка
Ответы: >>1318783
Аноним 2018/12/30 09:19:50  №1318647 526
grade-junior.png (71, 751x772)
772x751
grade-senior.png (99, 742x846)
846x742
Ответы: >>1318654 >>1319214
Аноним 2018/12/30 09:31:47  №1318654 527
>>1318406
>>1318647
Какая-то хуита. Вообще ничего нет про виртуализацию/контейнеризацию и системы деплоя.
Нихуя нет про сети кроме "http протокол".
При этом вопросы по БД на более высоком уровне, чем требуется при разработке 95% говносайтов.
При этом еще и чисто под SQL заточены, судя по всему.
Я уж молчу про отсутствие требований знаний структур данных и алгоритмов.

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

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

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

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

и удаление
nameserver: 127.0.0.53
из:
/etc/resolv.conf
Аноним 2018/12/30 10:47:11  №1318682 530
Screenshot10.png (16, 979x169)
169x979
Насколько я конченый?
Ответы: >>1319268
Аноним 2018/12/30 12:06:20  №1318705 531
>>1318656
>область видимости члена класса
Какого ещё члена? Ты класс объявляешь или объект этого класса? И причём тут наследование?
Ничего не понятно из твоего поста.
Ответы: >>1318708
Аноним 2018/12/30 12:13:01  №1318707 532
>>1318656

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

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

private члены класса видны только в нем. Если ты хочешь расширить область видимости, надо брать в базовый класс protected, а в наследнике делать public.
Аноним 2018/12/30 13:07:24  №1318727 535
Screenshot11.png (3, 455x78)
78x455
Почему я не могу задать в возвращаемом тайпхинте сразу дочерний класс?
При этом фактически я возвращаю дочерний и далее из метода возвращается полноценный дочерний объект.
Но если задать тайпхинт на дочерний, пых падает с фатал-еррором.
Ответы: >>1318734
Аноним 2018/12/30 13:47:21  №1318734 536
Ответы: >>1318750
Аноним 2018/12/30 14:30:46  №1318743 537
>>1316130
Up!
Снимаю все вопросы, кроме.

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

Объект профессии не имеет смысла в системе без объекта сотрудника, получается его нужно создавать внутри конструктора сотрудника? Композиция, так кажется это называется.
Ответы: >>1319267
Аноним 2018/12/30 14:56:52  №1318750 538
Ответы: >>1319268
Аноним 2018/12/30 17:13:55  №1318783 539
>>1318633
Дженериков нет и не будет. Даже если будут, всё перечёркивает динамическая натура PHP, так как проверки типов происходят в рантайме, то есть эффект "скомпилировалось - значит работает" недостижим в PHP. Есть статические анализаторы, поддерживающие дженерики, например psalm, phpstan, phan: https://github.com/phan/phan/wiki/Generic-Types

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

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

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

Code MUST use 4 spaces for indenting, not tabs.

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

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

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

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

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

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

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

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


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

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

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

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

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

Сайт ОПа например представляет собой HTML-страницы с небольшой обвязкой на PHP (для вывода меню, подвала, ссылок итд), слепленной за один вечер.
Ответы: >>1319332
Аноним 2018/12/30 20:25:00  №1318899 545
Двощь, дай совета!
Мне каждый шаг цикла нужно записывать процент от суммы кредита, чтобы в конце посчитать потраченную сумму общую. Как мне это сделать?
https://ideone.com/l2f86A
Ответы: >>1319199 >>1319266
Аноним 2018/12/30 21:25:24  №1318938 546
И ещё вопрос.
Почему переменная $number увеличивается всего на 1?
https://ideone.com/3f1uxG
Ответы: >>1318940 >>1318941
Аноним 2018/12/30 21:29:44  №1318940 547
>>1318938
>https://ideone.com/3f1uxG
Потому что рост анона больше только по сравнению с Семеном, а остальных меньше.
Ответы: >>1318942
Аноним 2018/12/30 21:30:22  №1318941 548
>>1318938
Тут уже я просто затупил. Элементарно не так значения переменных сравнивал.
Ответы: >>1318942
Аноним 2018/12/30 21:31:09  №1318942 549
Ответы: >>1319266
Аноним 2018/12/31 12:36:19  №1319120 550
Оп, спасибо за то что ты делаешь. Зашел сюда, так как 2 года назад, я работал в мухосране, за 20к и постояно душила нехватка денег, неинтересная работа и я решил попробовать что то изменить, перекатившись в ит. И выбор пал на php, благодаря твоему сайту и твоей постоянной помощи. Сейчас же хоть все проблемы и не ушли, но у меня уже нет проблем, с тем что не хватает денег или я не вижу своего будущего. Работаю мидл php девелопером, учу низкоуровневый язык и проблемы с острой нехваткой денег или самореализацией отпали. Все началось с тебя, так что огромное тебе спасибо.
Ответы: >>1319165
Аноним 2018/12/31 13:53:57  №1319165 551
>>1319120
пили кулстори, мотивируй
Ответы: >>1319167
Аноним 2018/12/31 13:54:33  №1319167 552
Аноним 2018/12/31 15:18:39  №1319199 553
Аноним 2018/12/31 16:11:37  №1319214 554
>>1318647
Все изи, как-то даже не густо, но вот по бд накрутили лишнего помоему, обычно эти тонкости мало кто знает до реального опыта проблем. + nosql обязательно, хотя бы парочку популярных на общем уровне.
Аноним 2018/12/31 16:55:29  №1319223 555
С наступающим, программисты! ОПу огромное, человеческое спасибо помощь и терпение к тупости ньюфагов.
Аноним 2018/12/31 20:07:23  №1319266 556
448 - 555, 247 - 369

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

>>1318942

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

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

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

$count = 0;

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

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

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

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

>>1318899

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

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

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

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

>>1316130
>>1318743

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

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

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

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

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

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

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

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

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

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

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

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

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

Хорошо.

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

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

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

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

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

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

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

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

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

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

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

>>1318708

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

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

class Parent
{
protected $x = 5;
}

class Child extends Parent
{
public $x;
}

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

>>1318682

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

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

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

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

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

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

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

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

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

>>1317102

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

>>1316313

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

>>1316164

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

>>1316084

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

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

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

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

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

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

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

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

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

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

>>1315498

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

>>1312807

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

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

>>1312701

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

>>1312528

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

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

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

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

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

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

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

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

$text = numberToText(125);

То есть это:

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

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

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

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

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

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

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

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

>>1311770

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

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

>>1311658

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

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

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

>>1311196

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

>>1311141

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

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

>>1311135

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

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

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

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

Внимание, охуительный в