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

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

 Аноним 21/01/19 Пнд 05:53:29 #1 №1331378 
php-noob-01-new-year.png
cat-cafe-osaka.jpg
cat-sad.jpg
imoto-cosplay.jpg
Ну что, у кого-то начался рабочий год, у кого-то - учебный. А мы по-прежнему изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки, печем печенье и даже делаем простые сайты! Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.

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

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

Предыдущий тред был тут: >>1305368 (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? — Да, однозначно. Посмотри любую вакансию.
Аноним 21/01/19 Пнд 05:54:24 #2 №1331380 
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть. Если каждый будет оформлять код как хочет, будет бардак.

Если тебе лень выравнивать код руками, закачай его на 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
Аноним 21/01/19 Пнд 05:57:50 #3 №1331382 
Напомню себе проверить: 16/01/19 >>1328089 https://github.com/asdasdasdasddasasdasdas/StudentList

Кроме этого, я в прошлом треде ответил на все вопросы, проверил все задачки. Зайдите и посмотрите, если вы что-то спрашивали: >>1305368 (OP)

Если вас пропустили, напомните о себе в этом треде.
Аноним 21/01/19 Пнд 06:05:20 #4 №1331383 
АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
Аноним 21/01/19 Пнд 06:24:09 #5 №1331384 
Как новичок должен относиться к людям, которые пишут, что ООП это антипаттерн и он должен самоискорениться из мира проектирования програмного обеспечения?
Аноним 21/01/19 Пнд 06:50:06 #6 №1331389 
>>1331384
Никак. У этого молодца просто работы нет, вот и путается под ногами.
Аноним 21/01/19 Пнд 07:03:35 #7 №1331392 
>>1331389
Хочешь сказать, что ООП и паттерны это самое важное в программировании, верх мастерства разработчика?
Аноним 21/01/19 Пнд 07:05:38 #8 №1331394 
>>1331392
Тащемта, разговор не про программирование, а про проектирование ПО.
Аноним 21/01/19 Пнд 07:06:57 #9 №1331396 
>>1331394
Хорошо, хочешь сказать ООП и паттерны это верх мастерства проектирования ПО?
Аноним 21/01/19 Пнд 07:14:07 #10 №1331397 
>>1331384
В том виде, в котором это существует сейчас - да, антипаттерн, дешевый понт, не являющийся чем-то выдающимся, хотя адепты поют об обратном. Современное ООП и паттерны - не более чем лозунги, а кто им следует - не более чем сектанты. Потому что оно ничего выдающегося из себя не представляет, с точки зрения грамотного инженера, но хайп такой огромный, как будто это лучшее изобретение человечества.
Аноним 21/01/19 Пнд 07:26:21 #11 №1331400 
>>1331397
Так никто и не говорит про современное оопэ, где пишут процедурный код в классах. Я лично читаю старые книжки 20 века и черпаю идеи оопэ оттуда. Вот это действительно годнота, вот тогда реально умели люди программировать.
Аноним 21/01/19 Пнд 07:34:59 #12 №1331402 
>>1331397
>>1331396
КАКАЯ НАХУЙ РАЗНИЦА, КТО КАК ПИШЕТ???

Люди, программисты, составляют договоренности по написанию кода. Так рождаются конвенции. Им нравится так писать, здесь нет правильного или неправильного подхода, как у врачей, здесь царит полная свобода действий.
А всякие сектанты, как вы, навязываете людям, которым удобно писать в стиле ООП, свою маниакальную идею отказа от современного ООП в угоду хуй пойми чему. Что вы забыли в треде языка, который может писать любыми способами? Идите в джаву и сисярп навязывайте свое мнение этим лохам, у которых в основе языка уже ООП-подход.
Аноним 21/01/19 Пнд 07:41:12 #13 №1331404 
Вот если я допустим занимать одно временно фронт и эндом, то что мне нужно учить?
Аноним 21/01/19 Пнд 07:44:56 #14 №1331405 
Кто-нибудь совмещает с основной работой? Если да, то как, удачно? Кто-то уже ушёл со своей специальности на кодера?
Аноним 21/01/19 Пнд 07:48:16 #15 №1331406 
>>1331402
Ну попробуй откажись от активрекорда или датамапера или или адаптеров в любой dbal или фасадов в ларавеле, от декораторов которые используются повсюду, от эвентлисенеров.
Аноним 21/01/19 Пнд 07:51:23 #16 №1331407 
>>1331406
По-русски можно? Ненавижу проггеров за то, что они смешивают инглиш и русиш. Учись, блять, разговаривать на русском, а не на неологизмах.
Аноним 21/01/19 Пнд 07:54:01 #17 №1331409 
>>1331404
Аноним 21/01/19 Пнд 07:54:57 #18 №1331410 
>>1331400
Идея ООП изначально была глупой. Алан Кей же был биологом, и еще очень любил громкие высказывания, якобы он все понимает лучше других. В математике насколько мне известно он ничего не открыл. Из этого следует, что у него была прочная профессиональная деформация в сторону биологии. Биология имеет мало общего с техническими науками, и инженерией. Но Кей все равно решил скрестить бульдога с носорогом. И насколько мне известно не реализовал свои громкие заявления. Его модель ООП так и осталась никому не известной, но из-за него появились другие модели, которые еще более провальны.

Поэтому книги по ООП, старые или новые, априори содержат в себе чепуху. Так как сама идея чепуха, а реализация еще хуже. И не стоит забывать, что ООП на классах не единственная модель. Есть еще прототипное ООП из языка Self, и якобы тру-модель из языка Smalltalk, которая потом (в Smalltalk-80 и далее, а может чуть раньше) тоже была сильно извращена.
Аноним 21/01/19 Пнд 07:57:32 #19 №1331411 
>>1331402
Разница в том, что грамотного инженера сразу видно по темам, которые его интересуют. Если интересуется паттернами и ООП, значит априори кодер без знаний математики, без желания осваивать науки, без способности отличать хорошее от плохого. Человек вроде тебя, громкие истерики с матами, нежелание учиться, и т.д. и т.п.
Аноним 21/01/19 Пнд 08:04:06 #20 №1331412 
>>1331406
Что ты сказать хотел? То что есть некий activerecord не означает, что ООП и паттерны это центр вселенной. Подходы могут быть и другие, не основанные на ООП, на объектах, и т.д. Ты цепляешься за слова, не понимая их сути. Ведь что такое объект? Вопрос не простой. Кто сказал, что объект это экземпляр класса? В ФП языках функции - объекты.

То есть, пересматривая ООП, нужно пересматривать и все термины. Потому что они уже как паразиты.

То что ты пишешь, можно назвать "Гради Буч головного мозга". Красивые термины, много слов, а смысла под ними никакого. Просто заучил и все. Это глупость, антинаучно, не может инженер быть таким, как обезьяна повторять одно и тоже. Он должен уметь мыслить.
Аноним 21/01/19 Пнд 08:04:25 #21 №1331413 
>>1331410
Да давайте в пхп треде филиал рентв устроим! Идея ООП глупая. Альберт Эйнштейн мошенник. Древние гиперборейцы умели летать в стратосфере. Как лечить геморрой огурцами...
Аноним 21/01/19 Пнд 08:08:39 #22 №1331415 
>>1331410
Обезвоженный вариант твоего поста: "мне не нравится ООП".

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

>>1331411
Я вообще считаю, что программа (любая) должна иметь одну точку входа и одну точку выхода. Программа должна выполняться построково, линейно, без гото и прочей мешанины классов. Программа, которая находится в одном файле и каждая строчка выполяется последовательно - это идеальная программа. А то, как разрабатывают современные разрабы это спагетти ебаное, в котором разбираться придется не один месяц.
Аноним 21/01/19 Пнд 08:10:01 #23 №1331416 
>>1331415
Да ладно его кормить. Он тут уже черт знает сколько времени подвывает круглосуточно.
Аноним 21/01/19 Пнд 08:13:46 #24 №1331419 
>>1331416
Покушать-то я сам хочу.
Аноним 21/01/19 Пнд 08:15:27 #25 №1331421 
Друзья, как закрепляете пройденный материал? И заучиваете ли вы наименования команд?
Аноним 21/01/19 Пнд 08:46:47 #26 №1331431 
>>1331415
>Если бы идея ооп была говном, она бы уже давно провалилась, как ты выразился.
Все наоборот. Глупые идеи всегда выстреливают, потому что умных людей, хорошо понимающих науку и инженерию единицы. Кто отвергнет ООП? Школьники, кодеры без образования? Только тот кто понимает математику, науку, и инженерию. Таких очень мало. Кто использует ООП? Все кому не лень. Но у них у всех есть общая черта, они не знают и не понимают математику. Так как не понимают математику, то не понимают и науку с инженерией в целом.

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

Математики и инженеры начала, середины, и немного конца 20-го века, были последними кто мог создавать шедевры. Делать вещи простые, компактные, функциональные, но без лишнего. Как пример Лямбда-исчисление Чёрча, и комбинаторная логика Шейнфинкеля-Карри. Кто из современных кодеров додумался до подобной идеи? Никто. Все только плодят бездумно лишние абстракции. Да еще и гордятся этим, задирают нос, думая что они умные.
Аноним 21/01/19 Пнд 08:50:06 #27 №1331432 
>>1331415
>Я вообще считаю, что программа (любая) должна иметь одну точку входа и одну точку выхода. Программа должна выполняться построково, линейно, без гото и прочей мешанины классов. Программа, которая находится в одном файле и каждая строчка выполяется последовательно - это идеальная программа.
Не идеальная. Как тогда быть с параллельностью, если все линейно и построчно? В математических вычислениях нет течения времени, нет хранимого изменяемого состояния. А ты предлагаешь подход противополжный, где состояние будет постепенно изменяться, моделируя ход времени. Такие программы трудно параллелить, они ограничены по возможностям.
Аноним 21/01/19 Пнд 08:50:36 #28 №1331433 
>>1331431
>Лямбда-исчисление Чёрча, и комбинаторная логика Шейнфинкеля-Карри
бесполезная хуета как впрочем и вся маняматика.
Аноним 21/01/19 Пнд 09:05:30 #29 №1331441 
>>1331432
В математике нет параллельности. Соответственно, нет времени, которое бы эту параллельность имитировала.
>нет хранимого изменяемого состояния
Для этого и была придумана динамическая память.

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

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

Ну это вообще ПУШКА. Ты похоже не выспался совсем.
Аноним 21/01/19 Пнд 09:11:03 #30 №1331444 
>>1331433
Вот так определяются быдло-кодеры.
Аноним 21/01/19 Пнд 09:14:05 #31 №1331447 
>>1331441
Любое математическое вычисление можно распараллелить. Так как нет течения времени. Время не имитирует параллельность. Время течет едино, как оно может быть параллельным? Наоборот, когда есть течение времени как в императивных и ООП программах, становится сложно выполнять параллельные вычисления. А так как архитектура компьютера без параллельного выполнения не может уже выдать больше мощности, программы приходится параллелить.
Аноним 21/01/19 Пнд 09:16:07 #32 №1331449 
>>1331441
>Для этого и была придумана динамическая память.
Что? О какой памяти идет речь? Я говорил о том, что изменяемое состояние не позволяет параллелить, и приносит много других ограничений. Это решается очень просто, декларативными языками программирования, а все манипуляции с состоянием происходят на уровне уже процессора, после трансляции кода из декларативного языка.
Аноним 21/01/19 Пнд 09:18:43 #33 №1331451 
>>1331441
>Глупые идеи выстреливают не потому что все люди долбоебы, а потому что эта идея этим долбоебам подходит. Ведь почему сейчас все пользуются ООП? Потому что эти паттерны решают задачи большинства людей.
Вот именно, большинство это просто пользователи. Они пользуются не задумываясь. Создать свое они не могут, они не умеют этого делать. А других создателей уже нет. За последние годы ничего не создано нового. Все основы Computer Science были заложены в 20-ом веке. Те кто формировал CS уже умерли, либо уже не у дел.
Аноним 21/01/19 Пнд 09:19:46 #34 №1331452 
>>1331441
>Ну это вообще ПУШКА. Ты похоже не выспался совсем.
Покажи что в математике является лишним. Это та сфера, где все создано и используется для решения задач. Ничего лишнего. В отличие от программирования.
Аноним 21/01/19 Пнд 09:30:42 #35 №1331457 
>>1331447
Ты понимаешь принцип параллелизма? Это значит, что программа начала выполняться в одной точке, из которой вызвались еще две программы, например, подключение к двум базам данных, а может и не из этой, а из другой программы, и пока эти процессы не завершатся, программа не продолжит выполнение. Это два процесса, которые могут зависеть друг от друга, а могут и не зависеть. И вторая программа может ждать первую, когда она завершится. Вопрос времени налицо.

>>1331449
> говорил о том, что изменяемое состояние не позволяет параллелить
Зачем по-твоему процессору кэш? Он ведь так же распараллеливает задачи и хранит временные данные, которые изменяются.

Аноним 21/01/19 Пнд 09:44:27 #36 №1331459 
>>1331433
>бесполезная хуета как впрочем и вся маняматика.
Если бы не было математики, не было бы и программирования. Не было бы Лямда-исчисления, скорее всего не было бы и работ Тьюринга. Несколько математиков (Тьюринг, Чёрч, и другие) конкурировали между собой, поэтому родилось несколько фундаментальных основ программирования и вычислительной техники. Не будь конкуренции, у нас бы не было компьютеров.
Аноним 21/01/19 Пнд 09:57:40 #37 №1331460 
>>1331441
>>1331447
>>1331449
>>1331451
>>1331452
>>1331457
>>1331459
Дебилов и шизиков полон тред.
Все же пыхыпы - это диагноз и приговор, вот и очередная иллюстрация.
Аноним 21/01/19 Пнд 09:59:26 #38 №1331461 
>>1331457
Ты все запутываешь. Изменяемое состояние на уровне кода программы не позволяет просто и эффективно распараллелить. Потому что данные нужно как то синхронизировать. Если состояния нет, то и синхронизировать ничего не нужно. Поэтому ФП сейчас пошло в мейнстрим. Все ФП языки позволяют легко параллелить программы.

Причем тут кэш процессора? Кэш не параллелит, и не для этого вообще создан и используется.
Аноним 21/01/19 Пнд 10:05:29 #39 №1331464 
>>1331461
Нахуй иди.
Аноним 21/01/19 Пнд 10:05:33 #40 №1331465 
>>1331460
Еще один быдло-кодер определился. С чего ты взял что я пишу на PHP? Это для начала, второй вопрос, чем PHP хуже других языков? Язык это инструмент. Грамотный инженер может писать код с помощью любого инструмента. Быдло-кодеру дай даже самый лучший инструмент, все равно он будет быдлокодить.

Не инструменты красят инженера, а инженер инструменты. Вот дадут тебе самый лучший язык, что изменится? Ты же так и будешь чепуху писать, называть всех дибилами, и писать говнокод.
Аноним 21/01/19 Пнд 10:06:29 #41 №1331466 
>>1331464
Еще один порвался. Измельчал нынче программист. Даже позицию свою отстоять не может.
Аноним 21/01/19 Пнд 10:08:17 #42 №1331467 
>>1331465
>С чего ты взял что я пишу на PHP?
>чем PHP хуже
Пыходебил ну совсем не палится, ох лол.
Аноним 21/01/19 Пнд 10:08:27 #43 №1331468 
>>1331461
>Изменяемое состояние на уровне кода программы не позволяет просто и эффективно распараллелить.

Я тебе об этом и пишу. Есть два состояния: до распараллеливания и после него. В первом случае данные рассекаются на потоки и обрабатываются программой, во втором - данные синхронизируются и образуют единое целое. Такой принцип работает в видеокартах, например, и в ЦП.
А кэш нужен для того, чтобы эти переходные значения хранить. Я и не говорил, что кэш параллелил что-то.
Аноним 21/01/19 Пнд 10:10:07 #44 №1331470 
>>1331468
>Есть два состояния: до распараллеливания и после него.
А вот этот - обычный шизик.
Аноним 21/01/19 Пнд 10:10:21 #45 №1331471 
>>1331467
>>1331466
>>1331465
>>1331464
Идите Танненбаума почитайте, дети.
Аноним 21/01/19 Пнд 10:11:54 #46 №1331472 
>>1331467
Я могу писать почти на любом языке. Когда я был таким как ты, мне тоже не нравился PHP. В основном потому что такие как ты его поливают грязью. С опытом, увидев много других языков, я понял что язык это инструмент, и можно писать и на PHP в том числе. Все зависит не от инструмента, а от того кто его использует.

Назови 3-5 хороших языков по твоему мнению.
Аноним 21/01/19 Пнд 10:12:59 #47 №1331473 
>>1331471
>это замшелое говно для ограниченного быдла
Ясно.
Аноним 21/01/19 Пнд 10:13:41 #48 №1331474 
>>1331468
Ты говоришь об императивной модели, а я о декларативной. В ней все под другому. Посмотри на математические вычисления. В них в принципе нет состояния, а значит и синхронизации. Можно распараллелить любой кусов вычисления.
Аноним 21/01/19 Пнд 10:13:52 #49 №1331475 
>>1331472
>Я могу фантазировать на сосаке
Поправил эту мечтательную маню.
Аноним 21/01/19 Пнд 10:14:56 #50 №1331476 
>>1331474
Это ты, гнида, хаскель форсила?
Аноним 21/01/19 Пнд 10:17:06 #51 №1331477 
>>1331475
Вали нахуй отсюда, если бы ты знал что-то кроме жиквери и фреймворка пыховского, то ты бы тоже умел писать на всех языках. Ибо все языки, как бабы - одинаковые.
Аноним 21/01/19 Пнд 10:19:22 #52 №1331478 
>>1331468
Зачем вообще смотреть на процессор? Есть ОС, которая дает абстракции процессов и прочего, есть язык программирования, который дает языковые абстракции. На этих уровнях нужно решать задачи. А на уровне процессора пусть решает ОС и компилятор.
Аноним 21/01/19 Пнд 10:23:15 #53 №1331481 
>>1331477
>КУДАХ БАБАХ КУКАРЕКУ
Ясно.
Аноним 21/01/19 Пнд 10:31:17 #54 №1331484 
>>1331478
Напрямую ты, конечно, не повлияешь на работу процессора, но сможешь сильно упростить ему жизнь, если оптимизируешь свой код. Компилятор - машинка простая, она все переведет в инструкции для проца, а ебстись с утечками какими-нибудь тебе. Поэтому важно знать работу проца, ящитаю.

>>1331474
Я тебя понял. Мне как раз декларативная и не нравится тем, что там нельзя снаскоку понять, что происходит и сколько памяти затребует программа. При кажущейся краткости кода, куча неоптимизированных рекурсий может запросто засрать всю память. Собственно, как и циклы в импере, поэтому циклы - зло. Но зато более изящно решаются некоторые задачи, матан твой тот же самый.
Аноним 21/01/19 Пнд 10:32:36 #55 №1331485 
>>1331484
>там нельзя снаскоку понять, что происходит
Просто ты тупой пыхыпыдаун
Аноним 21/01/19 Пнд 10:41:47 #56 №1331488 
>>1331484
Вот есть к примеру Haskell. На нем легко писать параллельные программы. И не нужно ни о чем заботиться, потому что всю грязную работу делает компилятор.
Аноним 21/01/19 Пнд 10:44:23 #57 №1331490 
>>1331488 - >>1331476
Хаха, угадал.
Аноним 21/01/19 Пнд 10:45:13 #58 №1331491 
>>1331460 FS@UR
Аноним 21/01/19 Пнд 11:03:45 #59 №1331503 
>>1331488
Писать функциональный код можно на любом языке.
Как сказано - "программист на Фортране может написать программу на Фортране на любом языке программирования".
Первый язык определяет все. Поэтому ты мне тут и доказываешь, что функциональщина лучше ООП, с чего и начался наш спор, собственно.
Аноним 21/01/19 Пнд 11:04:29 #60 №1331505 
>>1331490
Ничего ты не угадал. Это пример декларативного языка с возможностью легко писать параллельный код. Еще один пример Erlang.
Аноним 21/01/19 Пнд 11:10:13 #61 №1331508 
>>1331503
На Фортране нельзя. В нем нет даже рекурсии (раньше не было, сейчас может и есть). Писать можно, если в языке есть ФВП хотя бы. Только этот код все равно будет сложно параллелить. Так как транслятор языка не ориентирован на это.

ООП создавали люди далекие от науки. Поэтому имеем то что имеем. Сравнивать его с ФП глупо, потому что ФП имеет математический базис, и очень долгую историю, фактически почти 100 лет. По сравнению с этим ООП детская поделка.
Аноним 21/01/19 Пнд 11:12:37 #62 №1331509 
099.gif
>>1331508
>ФП имеет математический базис
Аноним 21/01/19 Пнд 11:17:51 #63 №1331510 
>>1331488

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

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

Алсо, https://habr.com/ru/post/315152/
Аноним 21/01/19 Пнд 11:18:16 #64 №1331511 
>>1331508
Ты же понимаешь, что делать интернет-магазин на ФП это все равно что ездить на работу на ламборгини? Не тот это язык, чтобы пилить программы с простыми вычислениями %%и даже без оных%. Людям, далеким от науки, нужен был подход, который бы решал их задачи бизнеса. Вот они и придумали классовый подход для решения этой задачи. Они не были математиками, они высрали все, что смогли. И ты, инженер, сравниваешь себя с ними. Не стыдно?
Аноним 21/01/19 Пнд 11:30:53 #65 №1331515 
>>1331509
Ах, ты оказывается даже не знал, что ФП основано на математических моделях. Конечно, откуда быдло-кодер может это узнать.
Аноним 21/01/19 Пнд 11:39:30 #66 №1331521 
>>1331511
Об этом я и говорил. Что в программную инженерию поналезли все кому не лень, и лепят кривые поделия с умным видом. А потом школьники, и прочие битарды, с не менее умным видом рассуждают об ООП, и пишут что математика не нужна, Лямбда-исчисление говно, и тому подобное. Смешно на это смотреть.

>>1331510
Не нравится не читай. Причем тут Haskell? У некоторых как будто мозг деревянный. Им про фундаментальные основы говоришь, они не понимают без примеров. Приводишь в пример какой то язык, начинают беситься что язык не тот. Ты вообще хоть что нибудь понял из того что прочитал? Haskell пример умного транслятора. Просто пишешь параллельный декларативный код, а транслятор его переводит в императивный.
Аноним 21/01/19 Пнд 11:42:42 #67 №1331526 
>>1331521

Прекрасно, пишите декларативный код на любом языке, с или без ооп, только без флуда на 50 постов.
Аноним 21/01/19 Пнд 11:43:27 #68 №1331528 
Няши, у меня вордпресс генерирует в одну определённую страницу неизвестный Javascript код. Мне нужно сделать правку в этом коде, но я не пойму, откуда он берётся. Когда захожу в окно редактирования страницы в самом ВП, то его там нет, файла с таким содержимым я тоже не нашел (смотрел с wp-content/themes... и wp-included.
Сам ньюфаг в вордпрессе, взял задание на JS, а заказчик не сказал, что у него сайт на ЦМС.
С меня няши :з
Аноним 21/01/19 Пнд 11:49:53 #69 №1331541 
>>1331511
С одной стороны это так, но с другой это выглядит чепухой. Если есть более совершенный подход, то его нужно использовать. Чем лучше решение тем лучше для всех. Если кто-то говорит, что нужно использовать более кривой подход, то он кто вообще? Получается уже наоборот, чем хуже тем лучше. Как я уже писал в одном из тредов, что подход ООП именно такой, чем хуже тем лучше. И вы все ему следуете, при этом пишите глупые детские шуточки про математику, Лямбда-исчисление, ФП языки.
Аноним 21/01/19 Пнд 12:02:03 #70 №1331551 
>>1331521
>Об этом я и говорил. Что в программную инженерию поналезли все кому не лень, и лепят кривые поделия с умным видом.

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

>>1331541
>Как я уже писал в одном из тредов, что подход ООП именно такой, чем хуже тем лучше

Я помню тебя.

> И вы все ему следуете, при этом пишите глупые детские шуточки про математику, Лямбда-исчисление, ФП языки.

Ты ебаный фанатик, который везде насаждает ФП. Оно может и лучше во многом, но точно не для клепания сайтиков с их ебучей вариативностью. Иначе это будет та же самая мешанина.
Аноним 21/01/19 Пнд 12:27:16 #71 №1331567 
ajax-loader.gif
Доброго дня, вкатываюсь в тред успешных людей.
Хочу рассказать свою историю.
Программист, уже 23 года, заканчиваю профильный вуз.

Ранее пробовал искать работу на c#, но не прошел собес на джуна, к которому очень готовился, и перепутал паттерных. Меня не взяли. Потом было одно тестовое задание, но я не успел поднять asp.net mvc, и не смог его сделать.

Сейчас я работаю на php + html + js, пишу под один популярный шаблон магазинов, не важно. Делаю я это бесплатно, проект долгий, как закрою наверное заплатят.
Мне интересен веб, я прошел курсы по html + js, но из - за того что в моей работае эти почти не используется, я почти все уже забыл.

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

Вот так и сижу на тухлом стартапе с обещаниями золотых гор, и забываю то что знал ранее.
Сейчас хотя бы пишу дипломы на c# подзаказ, надеюсь смогу оплатить арендное жилье.
Аноним 21/01/19 Пнд 12:31:54 #72 №1331572 
>>1331528
Аноним 21/01/19 Пнд 12:37:44 #73 №1331577 
>>1331528
Аноним 21/01/19 Пнд 12:41:01 #74 №1331581 
>>1331567
Ну, скореллирую со своей историей.
>Ранее пробовал искать работу на c#, но не прошел собес на джуна
Я поначалу тоже на шарпе наяривал. Да и сейчас иногда. Но в моей мухосрани вообще такого не было и я пошел на первую же попавшуюся пхп галеру, как только деньги позарез стали нужны.
В будущем и на нем поработал, но немножко, и на других направлениях. Главным в итоге все равно бекенд остался, причем язык не важен, просто вакансий пруд пруди именно на пхп. Да и душа к нему лежит немного.
>Делаю я это бесплатно, проект долгий, как закрою наверное заплатят.
Тут смотри, как ты знаешь людей с которыми работаешь, и если что указывай авторство на интеллектуальную собственность, а не просто жди оплаты. А лучше всегда так делай, если не составлял договоров.
>мне высылают тестовое, я думаю что меня все равно не возьмут и не делаю его.
Делал тестовые в кучу разных контор, когда уже с более зрелым опытом работу повкуснее искал. С тебя не убудет, особено раз ты безработный по факту и не сильно устаешь. Делай, что сможешь, и забей. Потом их вообще не будут спрашивать, байки потравишь с техническим специалистом в конторе и вакансия твоя.
>Сейчас хотя бы пишу дипломы на c# подзаказ
Как-то раз я за конченный диплом заломил цену, которую студентики не смогли потянуть - как же меня обосрали, ууух. А так тоже мелочью по несколько часиков балуюсь. Это скорее отдых, чем работа.
28, помидор с зп 250к.
Аноним 21/01/19 Пнд 12:42:33 #75 №1331584 
>>1331528
Поиском по файлам попробуй найти.
Аноним 21/01/19 Пнд 12:50:13 #76 №1331593 
>>1331567
Поныть можно в соседнем перезвоним-треде, тут люди решают задачи и идyт к ycпeхy.
Аноним 21/01/19 Пнд 12:53:28 #77 №1331602 
До сих пор не совсем понимаю нужду в интерфейсах и абстрактных классах.
Может кто oбъяснить на примерах?

Это просто как шаблон реализовав по которому класс, oн тoчнo будет верно работать?
Аноним 21/01/19 Пнд 12:56:16 #78 №1331608 
Вопрос: Куда выкладывать решение js задачек?
Аноним 21/01/19 Пнд 12:59:54 #79 №1331611 
>>1331608

jsfidle, codepen, jsbin

Аноним 21/01/19 Пнд 13:07:44 #80 №1331617 
Есть ли возможность конструировать объявление namespace динaмически? Из строки например?
Или можно ли как-то сделать, чтобы неймспейсы по дефолту задавались в сooтветствии с путем к файлу, а не в глобал пихались?
Аноним 21/01/19 Пнд 13:11:46 #81 №1331619 
Анон, как пользовaтьcя sublime text? Я вот скачал, установил и все. Написать я в нем могу, а как запустить этот скрипт?
Аноним 21/01/19 Пнд 13:12:52 #82 №1331622 
>>1331581
>>1331567
Я вот как почитaю подoбные посты, что-то неуютно становиться.
мимо-студент-20 лвл
Аноним 21/01/19 Пнд 13:13:44 #83 №1331623 
>>1331617

Нельзя. Каждый класс относится к какому-то неймспейсу и это определяется еще до выполнения кода.

Что значит "в глобал пихaлись"? Ты ничего не путаешь?

Если тебе тяжело руками писать неймспейсы и use, поставь плагин к редактору, который это делает.
Аноним 21/01/19 Пнд 13:18:38 #84 №1331629 
>>1331623
Тут дело в версионирoвании модулей.
Неймспейсы меняются абсолютно везде при создании новой версии, руками можно прaвить, но это пиздец долго и шанс накосячить ебливый.
Аноним 21/01/19 Пнд 13:21:48 #85 №1331638 
>>1331619
Редактор для редактироания кода, а не запуска скриптов. Запускать скрипт надо из консоли:

рhр d:\tеmр\1.рhр

Почитай пасту про консоль из ОП поста.

Также, можно настроить саблайм чтобы он по какой-то кнопке запускал PHP, гугли как именно.
Аноним 21/01/19 Пнд 13:22:39 #86 №1331640 
>>1331567
И я вкачусь. Студент-мeханик ИTТ, 23 гoда. Заканчиваю магистратуру по направлению механика. Год проработал на заводике инженером-исследователем, думал пойти в науку, но что то совсем не идет у меня это дело. Все время хотел вкатиться в айти, но только начав изучать какой нибудь ЯП через день - два желание пропадало.
У вас тут уютненько в тредике, буду пытаться сделать студентиков!
Аноним 21/01/19 Пнд 13:27:21 #87 №1331647 
>>1331617
Объявление - нет. Использование можно, рефлексия работает с зарегестрированными автозагрузчиками. А вообще изза автозагрузки можно вообще на неймспейсы не ориентироваться (не делай этого, просто как пищу для размышлений дал).
>а не в глобал пихались
Они не пихаются. Ну вернее пихаются конечно, директивы же, но автозагрузку по стандартам можно как угодно извратить. Делать так не надо, но он же об этом спрашивал.
>>1331629
А вот тут я тебя понял. Я писал костылик для версий для одного проекта. Смена версий не была частой конечно, но нужно было сделать обратную совместить, то есть не терять код. Тут нихуя не поделаешь. Только оставить код прошлой версии позади например в другом неймспесе, а продолжать работать уже в новом.
Аноним 21/01/19 Пнд 13:33:23 #88 №1331658 
>>1331647
>А вот тут я тебя понял. Я писал костылик для версий для одного проекта.


Типа когда версия апнулась и изменилась какая-нибудь мелочь и старые версии приложений начинают отваливаться, пока не обновятся? У нас старые версии затребовали оставлять на случай этого кaк раз. Старые приложения работают со старым апи, обновятся - работают с новым. Как-то так.
Аноним 21/01/19 Пнд 13:35:12 #89 №1331661 
>>1331629

Что значит версионирование модулей? Тебе надо в одной программе иметь 10 копий одного класса? Ты явно делаешь что-то не так.

Заменить нeймспейс в большом количестве файлов можно также функцией "поиск/замена" в твоем редакторе кода.

Но я ни разу с таким не сталкивался и интуиция подказывает мне что ты делаешь что-то неправильно. Какое еще версионирование, наркоман?
Аноним 21/01/19 Пнд 13:35:33 #90 №1331662 
>>1331658
Да, именно для этого. Бывает и хуже. Например когда между версиями меняется схема хранилища, а надо и то и другое держать. В таких ситуациях та еще война идет между разработчиками и менелджерами. Первые опнимают, что проще плюнуть и заставить обновляться, вторым важно не потерять стареньких клиентов, которые или не умеют обновляться, или принципиально не хотят. Но так то все решаемо, просто не по красоте.
Аноним 21/01/19 Пнд 13:41:46 #91 №1331666 
>>1331658
Версионирование API это другое дело. Обычно в API действительно используют версию в URL, например:

/api/v2/cities

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

Если же речь о классах, и ты пишешь например библиотеку, то надо тоже сделать несколько версий библиотеки - наример lib1 для старых приложений и lib2 для новых, не стоит пытаться объединить это в одной универсальной библиотеке.
Аноним 21/01/19 Пнд 13:47:36 #92 №1331672 
>>1331666
У меня было по другому. Определенное апи - это точка входа и логика только в этой части приложения. Но ее надо соотнести с прошлыми, чтобы не было и там и там поломок. И с соседними, где логика немного отличается и должна адаптироваться под общую схему. Копировать в такой ситуации было не вариант, хранилище на любое количество и тип приложений было одно - только выкручиваться оставалось.
Аноним 21/01/19 Пнд 13:49:32 #93 №1331674 
В Yii/Yii2 нет возможности сгенерить миграцию по мoдели?
Аноним 21/01/19 Пнд 13:51:09 #94 №1331675 
>>1331602
Ну смотри, допустим у тебя в приложении есть форма логина, пишешь для нее класс.
Затем тебе понадобилась форма регистрации, пишешь для нее класс.
Тут замечаешь, что добрая половина методов и свойств первой и второй формы совпадает.
Если ты быдлокодер и тебе нaсрать на качество твой работы, ты так и оставишь, тем более что ты никогда не писал приложение с более чем 2-3 формами.
Но если ты ответственный программист, то догадываешься, что копипастить куски кода из одного класса в другой наверное неправильно. Тем более что в серьезных приложениях родственных классов будет не 2-3, а десятки-сотни.
Пишешь абстрактный класс, который содержит в себе все общее, что есть у классов форм, называешь AbstractForm.
Наследуешь LoginForm и RegisterForm от AbstractForm, в них прописываешь только уникальные для данного класса свойства и методы.

Что касается интерфейса, то это набор требований к классу, то есть буквально мы пишем: "у всех классов, которые имплементируют данный интерфейс, должен быть определенный функционал (метод), неважно как они будут реализованы, но они должны быть". Пример не знаю какой привести.
Вот чувак приводит пример со столами https://toster.ru/q/10682
>Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.
Обрати внимание, что Rollable (с колесиками) может быть не только стол, но и стул, кровать, то есть совершенно другие типы объектов. Метод roll() будет у них всех реализован по-разному, поэтому мы не используем тут абстрактный класс типа НечтоКатящееся. Тем более что один класс может реализовывать множество интерфейсов, а абстрактный класс можно унаследовать только один. Стол должен быть одновременно с колесиками и складывающимся. Мы не можем создать абстрактный класс НечтоКатящееся, затем НечтоСкладывающееся, и создать класс Стол наследующий оба абстрактных класса. Да и не для этого они придуманы, класс всегда описывает объект, а интерфейс функционал. Абстрактный класс это обобщенное описание категории объекта, допустим стол, или стул, или кровать. От него наследуем уже какую-то конкретную разновидность, например СтолПисьменный расширяет АбстрактныйСтол реализует Складывающийся интерфейс.
А можно и оба интерфейса, пусть стол будет Складывающийся и Катящийся.
Затем создаем класс КроватьДвуспальная расширяет АбстрактнуюКровать реализует Катящийся интерфейс.

Короче абстрактный класс это обобщение, чтобы не копипастить общие методы и свойства по всем классам-наследникам, мы их группируем в одном классе.
Интерфейс это описание функционала, один класс может реализовывать множество интерфейсов. И один и тот же интерфейс может быть использован множеством классов.
Интерфейс не имеет реализации, он только декларирует, что у класса обязан быть определенный метод, а реализация может быть какая угодно, нас это не интересует, она инкапсулирована внутри.
Аноним 21/01/19 Пнд 14:00:01 #95 №1331683 
>>1331411
>кодер без знаний математики
О, я смотрю ты опытный разработчик! Можешь прояснять новичку какая глубина знаний математики требуется пхп/веб разрабочику? С первого взгляда кажется, что можно обойтись арифметикой из начальных классов. Хотелось бы услышать развернутый ответ от специалиста.

>паттернами и ООП
Но ведь почти в каждой вакансии их указывают в требованиях?!
Аноним 21/01/19 Пнд 14:01:17 #96 №1331685 
>>1331675
Спасибо
С абстрaктным классов всё ясно.

Ну а для чего и когда используют и стоит использовать интерфейс, я так и не понял особо?
В том случае когда мы не знаем какой объект ожидать и хотим что бы это был хотя бы наследник интерфейса?
Аноним 21/01/19 Пнд 14:08:47 #97 №1331687 
Короче, по-моему я слишком тупой для математики даже элементарной.

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

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

Ну окей, решил, пусть до 9 умножается включительно. Написал цикл:

for ( $a = 1; $a <= 9; $a++) {
\techo "должно быть произведение двух чисел $a и $a = \n";
}

И вот тут моё слабоумие даёт о себе знать. Я не понимаю, как мне впихнуть в цикл произведение этих чисел.
Аноним 21/01/19 Пнд 14:10:13 #98 №1331689 
>>1331685

тут ответа нет? https://github.com/codedokode/pasta/blob/master/php/interfaces.md

Интерфейсы реализуют, а не наследуют. Интерфейс это набор требований (требований, чтобы был определенный метод с определенным функционалом).
Аноним 21/01/19 Пнд 14:15:01 #99 №1331692 
>>1331683
>какая глубина знаний математики требуется пхп/веб разрабочику?/
Логика и здравый смысл нужны. Математика бонусом идет в любом деле, но фанатизм в таком виде - это минус уже. Заебали ваши срачи, тем более с этими пастами, котоыре я еще лет 5 назад видел. Только тред перекатили и уже все засрано бессмысленной эзотерической хуйней о том, как один обиженный приперся толсто потроллить, а ему решили все ответить. Тред в несущественных спорах о вкусах превратился.
Аноним 21/01/19 Пнд 14:17:47 #100 №1331693 
>>1331692
Ну вообще-то это реальные люди. Я лично с ним спорил.
Аноним 21/01/19 Пнд 14:19:02 #101 №1331694 
>>1331687
Бля, я догадался, что произведение надо просто в цикл засунуть, и что так тоже можно.

Ну может я и не такой уж и слабоумный.
Аноним 21/01/19 Пнд 14:21:15 #102 №1331695 
>>1331685
Чтобы показать что класс относится к данной группе или имеет данное свойство. Ну анон привел пример выше, интерфейсом Rollable мы можем пометить классы, которые можно катать.

Ну или если попробовать придумать более серьезный пример, например в какой-нибудь соцсети можно ставить лайки фотографиям, постам и пользователям. Классы, которые описывают эти сущности (Photo, User, Post), можно пометить интерфейсом Likeable. Допустим в этом интерфейсе определены 2 метода: добавить лайк (addLikeFrom(User $user)) и убрать лайк (removeLikeFrom(User $user)). Каждый класс может реализовать эти методы по своему, лишь бы они были реализованы.

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

function setLikeTo(Likeable $object)
{
...
}

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

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

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

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

Интерфейсы позволяют объединять не связанные наследованием классы.

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

ООП в первую очередь делался для больших проектов, где очень много кода. Без соблюдения правил ООП код станет настолько запутанным, что любые правки будут вызывать ошибки и будет уходить много времени на их исправление. В коде на 100 или 1000 строчек конечно это не заметно. А например, код ОС андроид содержит тысячи классов (хоть они и не на PHP, а на Яве, но ООП там примерно такой же).

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

Если ты не уверен где надо применять интерфейсы, не применяй их пока.
Аноним 21/01/19 Пнд 14:29:33 #103 №1331698 
>>1331683
Требуется для чего? Смотря какие у тебя цели. Я не смотрю на требования. Мне интересно изучать в глубину и ширину. Чтобы не было областей, где я не понимаю что происходит. Это влечет за собой изучение математики, физики, и много чего еще. Просто изучай то чего не знаешь.

Не знаешь архитектуру компьютера, - изучай. Не знаешь как работает процессор, - изучай. Алгоитмы, базы данных, математика, физика, машинное обучение, etc, - изучи это. Изучай то, что тебе нужно. А если изучать только то, что требуют, типа ООП, паттернов, то будешь расти не так как тебе нужно, а как хочет кто-то другой. Это очень ограниченное обучение получится. Потому что в какой-нибудь веб-студии создают сайты из говна и палок, и не хотят ничему учиться. Если следовать требованиям вакансий, то можно научиться какой-нибудь ерунде, про которую кто-то придумал, что она очень важна. Нужно мыслить своей головой.
Аноним 21/01/19 Пнд 14:30:32 #104 №1331699 
>>1331685
Аноним 21/01/19 Пнд 14:30:59 #105 №1331700 
>>1331687
Циклы не имеют отношения к математике. В математике нет даже изменяемых переменных. В мперативном программировании все не так как в математике.
Аноним 21/01/19 Пнд 14:32:16 #106 №1331703 
>>1331685
Вообще, в ООП много средств, которыми ты задаешь правила работы со своим классом:

- с помощью тайп хинтов ты указываешь что надо передать на вход функции
- с помощь конструктора ты определяешь обязательные аргументы, без которых не создать объект
- с помощью public/protected/private ты определяешь, какие методы откудa можно вызывать и инкапсулируешь данные внутри объекта
- с помощью abstract методов ты определяешь правила наследования от данного класса
- с помощью интерфейсов ты помечаешь классы

Важно пользоваться всеми этими возможностями правльно. Их мы изучаем в задачах про Вектор и кошки-мышки.
Аноним 21/01/19 Пнд 14:41:06 #107 №1331713 
>>1331703
Хм. Но дело в том, что у ОПа в главе про OОП нет этой информации и предлагается решать их не зная всего этого
Аноним 21/01/19 Пнд 14:43:12 #108 №1331714 
В перл есть заебательский оператор "my", а что в php?
Аноним 21/01/19 Пнд 14:45:36 #109 №1331718 
>>1331714
И что он делает?
Аноним 21/01/19 Пнд 14:48:53 #110 №1331723 
>>1331718
Он идет в паре с "usе strict;"

Позволяет oбъявлять переменные только явно "my $result", и избежать ошибки типа "return $reslt;". Сегодня решил попробовать пых, мне такого очень не хватает.
Аноним 21/01/19 Пнд 14:50:34 #111 №1331725 
>>1331695
>То есть интерфейс это что-то вроде договоренности
Захотелось добавить, что часто для описания подобной "договоренности" используется слово "контракт". На самом деле повседневное совершенно дело встретиться с тонной контрактов хоть в пхп, хоть в джаве, хоть где либо еще. Просто ремарка, чтобы увидев контракты репозиториев каких-нибудь не было остолбенения.
Аноним 21/01/19 Пнд 14:54:10 #112 №1331727 
>>1331723
>мне такого очень не хватает
Там надо добавить error handler - функцию для обработки ошибок. И по ошибке "встретилaсь необъявленная переменная" что-нибудь сделать, например, выбросить исключение.
Но не надейся там особо. Ни один из динамических языков лучше от этого не станет. Проверено уже.
Бложек Аноним 21/01/19 Пнд 15:07:03 #113 №1331738 
hdwallpapers.top780.jpg
Увидел на странице рекламу:

> Как установить игру?
> На компьютер или телефон. Смотрите прямо в поиске Яндекса! 0+
> yandex.ru/Игры_на_Яндексе
(ссылка кстати не работает)

Не удержался от того, чтобы кликнуть - происходит переход на hxxps://yandex.ru/set/games_minecraft/4?from=adwords_gdn_games&utm_source=google&utm_medium=gdn&utm_campaign=Games_Russia&utm_term=&utm_content=ideone.com&gclid=CI-w4dqt9MoCFSUMcwody9MKQw

На этой странице написано:

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

То есть реклама - полный обман:

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

Вот такая реклама ничем не отличается например от тех, кто размещает фальшивые кнопки "скачать" на файлообменнике или фальшивые видео, при клике по которым тебе пишут что надо скачать "кодек". Разница только в том что к таким обманным методам прибегает "белая" компания. Видимо сомнительные метoды распространения вредоносных программ настолько эффективны что даже яндекс не может от них удержаться.
Аноним 21/01/19 Пнд 15:15:54 #114 №1331745 
d5bbedb232.png
Возник вопрос по студентам. Каким образом лучше проверять переданные через форму данные?

Я вижу такой сценарий:

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

В правильном ли я направлении думаю?
ОПРОС Аноним 21/01/19 Пнд 15:18:23 #115 №1331749 
Аноны, а просто любопытно, как вы читаете тред?

- заходите на главную, ищетe тред, переходите в него?
- сохраняете в закладкти?
- просто держите открытым постоянно и обновляете (я так делаю)

И как находите ответ на свою задачу если ОП часто их проверяет только несколько дней спустя, и за этой время успевают запостить 300-400 постов?
Аноним 21/01/19 Пнд 15:19:10 #116 №1331750 
>>1331745
>Перед тем как передать форму на сервер проверяем её жсом и если есть ошибки - выводим их
Правильно, первая линия обороны так сказать, фактически иллюзорная, но лучше пусть будет, чем нет.
>выводим их, если нет данные идут в контроллер, который создает модель с переданными значениями
И в том и другом случае ты валидируешь все от а до я, как минимум не менее тщательно, чем на фронте.
>Если значения неправильные, у сеттеров модели выбрасываются исключения, которые мы перехватываем в контроллере.
Это от твоих предпочтений зависит. Кто исключения кидает на такую мелочевку и ловит их потом по иерархии. А кто составляет стек ошибок. Результат один и тот же. Выводить не обязательно. Что с ними делать решать тебе и под конкретный этап разработки.
Аноним 21/01/19 Пнд 15:20:27 #117 №1331752 
>>1331749
>просто держите открытым постоянно и обновляете
Автообновление есть.
Аноним 21/01/19 Пнд 15:20:39 #118 №1331754 
>>1331738
>Видимо сомнительные метoды распространения вредоносных программ настолько эффективны что даже яндекс не может от них удержаться.
Что забавно, яндекс накладывает санкции на сайты с подобным видом монетизации.
Аноним 21/01/19 Пнд 15:37:34 #119 №1331762 
>>1331749
Добавлен в избранное двача.

Обязательно добавляю в сообщение с решением какое-нибудь ключевое слово (чаще всего название задачи), по нему нахожу свой пост и ответы к нему. Если задачу нужно переделывать, ваш ответ сохраняю в ворд-файл, чтобы не искать каждый раз.
Аноним 21/01/19 Пнд 15:40:09 #120 №1331763 
>>1331738

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

Интересно, все эти люди, кто в Яндексе или Гугле работают, они наверно гордятся тем, какие они умные, как они с закрытыми глазами могут нейросеть на Хаскелле написать (не то что эти крудописатели на PHP), но затем они идут на работу придумывать, как обмануть неискушенного пользователя и заставить установить их программу или ввести свои данные и согласиться на слежку, сохраняя при этом видимость свободного выбора (а также, как обойти GDPR, сохраняя видимость его соблюдения). Обе компании по сути зарабатывают на слежке и монетизации собранных данных.
Аноним 21/01/19 Пнд 15:45:31 #121 №1331765 
>>1331750
>И в том и другом случае ты валидируешь все от а до я, как минимум не менее тщательно, чем на фронте.

class Controller
{
// Получается где-то тут, перед передачей в модель нужно валидировать $name, $email?

try {
$model = new Model($name, $email);
} catch () {
// Что-то делаем
}
}
Аноним 21/01/19 Пнд 15:50:49 #122 №1331769 
>>1331745

Стандартный вопрос: урок читал? Там есть алгоритм (хотя ты можешь сделать и свой): https://github.com/codedokode/pasta/blob/master/forms.md

> Перед тем как передать форму на сервер проверяем её жсом
Хватит HTML5 валидации.

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

Есть такой вариант, когда в модель встроена валидация, но он имеет недостатки. Что, если для проверки уникальности email надо обратиться к БД? Где ты возьмешь объект для работы с БД в модели?

Потому выгоднее может быть сделать отдельный сервис-валидатор и в нем метод валидации:

$studentValidator = new StudetnValidator(...);
$errors = $studentValidator->validate($model);

Использование исключений не позволяет передать несколько ошибок.
Аноним 21/01/19 Пнд 15:52:10 #123 №1331771 
>>1331765
Контрллер валидирует только инупт, потом слой модели валидирует данные.
Например контроллер чекает что передано число больше 0, а модель уже валидирует на это число от 2 до 25. Конкретизируй отвественность, сначала контроллер, который ловит самые грубые ошибки, потом модель, которая ловит логические ошибки. Во всяком случае контроллер спокойно число от строки отделит, и многие другие вещи сделает без привязки к бизнес логике, а модель добьет остальное. (Модель в это случае не датакласс или активрекорд, не путай)
Аноним 21/01/19 Пнд 16:13:44 #124 №1331784 
Короче, я нихуя не понял, что я сделал, но вышла такая херня в первой задачке, в циклах, там где каждый год на 10% сумма росла до миллиона.

<?php

for ( $a = 10000; $a < 1000000; $a = $a + $c ) {
\t$c = $a * 0.1;
\t$dayZ = $dayZ + 1;
\techo "идёт $dayZ год, и размер суммы составляет $a рублей, а вкладчику стукнуло уже N лет\n";
}

?>

А как сделать, чтобы ещё и года от 16 отсчитывались вперёд?
А то я сам не понял как сделал, чтобы отсчёт лет был, а вот года чёт не выходит.
Аноним 21/01/19 Пнд 16:14:14 #125 №1331785 
>>1331769
>>1331771
Немного прояснилось, спасибо!
Аноним 21/01/19 Пнд 16:16:00 #126 №1331787 
>>1331784
Ой, извините, сейчас нормально сделаю.

https://pastebin.com/kLh6XnG6
Аноним 21/01/19 Пнд 16:20:45 #127 №1331789 
>>1331465
Опять этот коммивояжёр с обострением шизоидного артрита. Втирал за лямбду, посоны, или нет ещё?
Аноним 21/01/19 Пнд 16:22:31 #128 №1331793 
>>1331465
>Не инструменты красят инженера, а инженер инструменты.
Лол. Нормальные люди инструментами пользуются. Нах их надо красить? Тебе их цвет не нравится?
Аноним 21/01/19 Пнд 16:25:32 #129 №1331794 
>>1331789
>Математики и инженеры начала, середины, и немного конца 20-го века, были последними кто мог создавать шедевры. Делать вещи простые, компактные, функциональные, но без лишнего. Как пример Лямбда-исчисление Чёрча, и комбинаторная логика Шейнфинкеля-Карри. Кто из современных кодеров додумался до подобной идеи? Никто. Все только плодят бездумно лишние абстракции. Да еще и гордятся этим, задирают нос, думая что они умные.
#мюслиДушевнобольных
Аноним 21/01/19 Пнд 16:46:18 #130 №1331808 
Ларавел-герои, поясните за такую штуку.
Делаю простое CRUD приложение типа блог
$post->body - тут хранится текст одной записи блога.

Вот у меня есть в Blade шаблоне строчка:
{{$post->body}}
Она выводит текст. В случае, если в туда записаны html-теги, они тоже выведутся как текст, однако если записать так:
{!!$post->body!!}
То текст вернется с учетом разметки.

Объясните, в чем цимес и теория стоящая за этими двумя записями? (ну с восклицательными знаками и без)
Аноним 21/01/19 Пнд 16:53:33 #131 №1331813 
>>1331793
Не делай вид что не понял. Хорошо, не инструмент украшает программиста, а программист инструмент. В умелых руках и PHP становится нормальным инструментом. А говно-кодеру дай самый лучший язык, все равно говнокод получится.
Аноним 21/01/19 Пнд 16:57:57 #132 №1331815 
>>1331813
Зачем бы программисту украшать инструменты?

Ну и говнокодерами были все программисты. Кто был, кто есть. Тебе то что от этого, шизик?
Аноним 21/01/19 Пнд 17:13:34 #133 №1331835 
>>1331815

Хватит флудить.
Аноним 21/01/19 Пнд 17:20:10 #134 №1331846 
>>1331835
Я не флудю
Аноним 21/01/19 Пнд 17:37:44 #135 №1331872 
>>1331835
Я бампаю.
Аноним 21/01/19 Пнд 21:45:53 #136 №1332067 
Поясните пожалуйста за некоторые моменты MVC.

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

У меня должен быть один view с текстовым полем и кнопкой, откуда информация передаётся в контроллер, контроллер передаёт параметр в model, там выполняется запрос к апи. А вот дальше я не знаю, как это должно работать. Создавать ещё одну модель, куда будет передаваться джсон и который будет записывать инфу в БД через элоквент? Или всё делать в одной модели? Как правильно, памагити!!111
Аноним 21/01/19 Пнд 21:57:22 #137 №1332081 
И почему в оппосте не рекомендуют Атом? Мне очень понравился...
Аноним 21/01/19 Пнд 22:00:47 #138 №1332082 
>>1331359
бамп вопросу
Аноним 21/01/19 Пнд 22:03:28 #139 №1332084 
>>1332081
Игра мне тоже понравилась. Действительно почему бы в оппосте не поддержать отечественного производителя!
Аноним 21/01/19 Пнд 22:12:38 #140 №1332089 
>>1332067
Ты должен решать проблемы применением паттернов, а не умножать их. Даже так - ты должен решить проблему, а паттерн нужен, чтобы объяснить другим как ты ее решил. В твоем ларавеле даже есть возможность сразу в роуте вьюху прописать. Т.е ты не обязан всегда MVC в голове держать.
Аноним 21/01/19 Пнд 22:19:25 #141 №1332092 
>>1332089
Тогда что мне делать конкретно в моем случае? С мвц или без него, мне важно понять как правильно в этом конкретном случае.
Аноним 21/01/19 Пнд 22:22:18 #142 №1332093 
>>1332092
И в чем тогда смысл вопроса? Лепи чтобы работало. :)
Аноним 21/01/19 Пнд 22:38:35 #143 №1332101 
>>1332089
ООП головного мозга. Паттерны наше все.
Аноним 21/01/19 Пнд 22:41:52 #144 №1332103 
>>1332093
Чтобы работало я слепил бы на коленке в одном пхп файле. Но я собираюсь выкладывать в общий доступ, а значит моя задача сделать ПРАВИЛЬНО (я уже третий раз повторяю это слово, а не слово АБЫ РАБОТАЛО). Если не можешь помочь, то зачем овтетчаешь?
Аноним 21/01/19 Пнд 22:42:17 #145 №1332104 
>>1332092
В программировании нет правильного или неправильного. Это творческая профессия. Твори.
Аноним 21/01/19 Пнд 22:44:42 #146 №1332106 
>>1332103
>моя задача сделать ПРАВИЛЬНО
Ты выбрал не ту профессию значит. Иди в физику или химию, хотя и там есть элемент творчества, особенно в химии.

Лучше говорить не правильное решение, а приемлемое. Любое решение приемлемо, если оно хотя бы работает. А дальше его можно улучшать постепенно. Эволюция.
Аноним 21/01/19 Пнд 22:46:11 #147 №1332107 
>>1332106
>>1332104
Я и так физик (точнее механик), а мвц учу ради своего маленького проекта. И как я должен его учить, если я запутался, а ответ мне дать не могут?
Аноним 21/01/19 Пнд 22:55:29 #148 №1332112 
15092480576060.webm
Что заставляет лютей юзать 1 мадженту? Это же лютая лапша из хрен пойми по какому принципу построенного наследования, кучи блять конфигов и шаблонов, которые немногим лучше xslt.
Разбираться в этом всем аду особенно трудно, когда у тебя нет никаких контактов с тимой (особенно физических), которая около 2 лет своими руками возводила дополнительные круги ада, в которых на одну страницу приходится по 200 запросов к базе, а в половине из них не меньше 3 джоинов. А в довесок ко всему еще нашлась функция, которая почти в каждый из них добавляла джоин по селекту в котором был еще один джоин и один left join , который тоже блять по селекту в котором еще(!) один джоин.
А самый пиздец в том, что это все в тырпрайз версии. Столько платить за цмс и сотворить с ней такое. Просто пиздец, никогда такой хуйни не видел.
Аноним 21/01/19 Пнд 22:57:53 #149 №1332115 
>>1332107
короче сове
1. делаешь штобы работало
2. (опционально) переделываешь, шоб было красиво/быстро
3. (опционально) идёшь нахуй из профессии
Аноним 21/01/19 Пнд 22:59:13 #150 №1332117 
>>1332115
в треде снай
Аноним 21/01/19 Пнд 22:59:48 #151 №1332119 
>>1332107
Тебе же говорят, не бывает правильного и не правильного в программировании. Это сугубо творчество. Делай как понимаешь сам. Если тебе сказать делай так или так, то ты ничему не научишься. Кто просто повторяет, становится макакой. Учись думать. Принимать решения. Пробовать разные варианты. Для инженера это самое главное.

Спроектировать, собрать, найти слабые места и улучшить, - вот работа программиста-инженера.
Аноним 21/01/19 Пнд 23:05:54 #152 №1332127 
>>1332067
Я бы создал дополнительный класс, что-то вроде components/ApiHelper, передавал бы в него параметр, после чего он возвращал json который уже через модель записывался в базу.
Аноним 21/01/19 Пнд 23:09:25 #153 №1332130 
>>1332127
Для чего там класс, если это можно сделать одной функцией?
Аноним 21/01/19 Пнд 23:16:11 #154 №1332138 
>>1332130
Разделение ответственности. Работа с апи может меняться и обрастать дополнительным функционалом. Или потребоваться в другом контроллере.
Аноним 21/01/19 Пнд 23:23:02 #155 №1332146 
>>1332138
А почему это нельзя сделать, когда придется разделить ответственность за дополнительный анал?
Аноним 21/01/19 Пнд 23:26:32 #156 №1332148 
>>1332138
А что функция это не разделение ответственности? Ее можно сделать универсальной. СИКП почитай. Ты предлагаешь преждевременную оптимизацию. Это overengineering чистой воды. Сразу видно почерк адепта ООП. Использую, да по-больше, но не знаю зачем.
Аноним 21/01/19 Пнд 23:33:03 #157 №1332156 
15159267633140.webm
>>1332146
Потому что в твоем случае все обрабатываемые аналы считаются обычными. Условие для создания их как дополнительных не срабатывает.
>>1332148
Да ты же поехавший. Лапшу по всему проекту собирать потом легче будет? Очередной препод-теоретик их техникума в ебенях с нулем опыта пришел повыебываться.
Аноним 21/01/19 Пнд 23:43:34 #158 №1332171 
B0JfbCnIYAAeEHO.png
>>1332156
Очередной ООПэшник порвался. Слабенькие вы какие-то.
Аноним 22/01/19 Втр 00:03:22 #159 №1332180 
>>1332127
Спасибо.
Аноним 22/01/19 Втр 00:07:21 #160 №1332184 
>>1332180
Молодец! Теперь у тебя будет на каждый пук по классу, которые даже инстанцировать не нужно.
Аноним 22/01/19 Втр 00:43:01 #161 №1332208 
так шо тут у нас? ооп нинужно? найс, 30 лет уже это слысу, но всё равно ооп еще здеся. а знаете почему? я заню почему, но вам не скажу)) ибо вы эгоисты, а ооп не для эгоистов придуман, а для командных работников
Аноним 22/01/19 Втр 01:21:04 #162 №1332216 
>>1332184
Я благодарю не за содержание, а за тот факт, что он единственный ответил по делу. А хорош его совет или нет мне предстоит ещё определить.
Аноним 22/01/19 Втр 02:26:41 #163 №1332251 
CodeIgniter 4 уделывает все фреймворки.
Аноним 22/01/19 Втр 08:04:44 #164 №1332326 
>>1332148
>Ты предлагаешь преждевременную оптимизацию
Класс наваять для этих дел - минутное дело. Зато потом голова болеть не будет, собирая всё это дело в одном месте.
Аноним 22/01/19 Втр 09:31:53 #165 №1332365 
Почему у нас, пхпшников, нет такого набора модных и гламурных книжечек, как у рубистов??

Как можнo выучиться красивому коду без современных и структуированных книжек на английском от профессионалов?
Аноним 22/01/19 Втр 09:36:06 #166 №1332374 
>>1332365
И еще, правильно ли я понимаю что похапе устаревшая бекэнд штука для связи с БД формочек, обычный информационный(редкообновляемый) сайт можно написать без нее, верно?
Аноним 22/01/19 Втр 09:41:35 #167 №1332379 
>>1332374
>похапе устаревшая бекэнд штука
считай, што пыха это хуета, которой ты рулишь протоколом хттп напрямую. врядли это когда-нибудь устареет
Аноним 22/01/19 Втр 10:50:56 #168 №1332413 
>>1332379
Так есть же асинхронный node.js
Аноним 22/01/19 Втр 12:15:47 #169 №1332451 
>>1332413
Напиши мне на своей ноде или ещё на чём запрос к стороннему API, да так чтобы ты потом не кричал НУ АНИ ДАЛЖНЫ СНАЧАЛА СПЕЦИАЛЬНА В НАСТРОЙКАХ РАЗРЕШИТЬ МНЕ ТЯНУТЬ ИНФОРМАЦИЮ С ДЖАВАСКРИПТА!!1.
Аноним 22/01/19 Втр 13:55:21 #170 №1332499 
>>1332451
>к стороннему API
если опенсорс, то особых проблем возникнуть не должно
https://aws.random.cat/meow
Аноним 22/01/19 Втр 14:12:17 #171 №1332502 
>>1332499
Это что такое? Ты с кошечками развлекаешься? Чому на локалхосте не норм?
Аноним 22/01/19 Втр 14:24:58 #172 №1332504 
>>1332502
на локалхосте вполне норм, пока девелопишь и тестишь
а в продакшн выкатывать куда? тоже на локалхост?
ведь задача например - написать самый крутой аппликэйшн с котиками и утонуть в море говна бабла
Аноним 22/01/19 Втр 15:48:51 #173 №1332561 
>>1332499
Код где, который я скопирую и вставлю в ноду, которую ты привёл в пример? Давай мне код, я его продублирую у себя, вставлю свою ссылку чужого апи и мы чекнем как оно работает (никак) и сколько строк занимает в сравнении с пхп (овердохуя).
getNthOrEqualIdFromThisOnTheRightByStatusChannelbotIdAndMessageSource Аноним 22/01/19 Втр 16:05:06 #174 №1332576 
Screenshot43.png
Кажется у меня проблема.
Я не знаю как коротко называть методы.
Это уже совсем пиздец какой-то блять.
Что делать? Как бы вы назвали этот метод?

Просто убрать ByStatusChannelbotIdAndMessageSource нельзя, ибо там и по другим критериям методы есть.
Аноним 22/01/19 Втр 16:07:13 #175 №1332577 
>>1332576
А я то думал это у меня длинные названия. Теперь спокоен.
Аноним 22/01/19 Втр 16:16:46 #176 №1332589 
>>1332576
Впринципе тебе было бы удобнее билдер критериев иметь, чем городить эти обертки с детальным описанием в названии.
С билдером мог бы сделать например
$builder->nthOrEqualFrom(...params)->right()->byStatus(status)->byMessageSource(source)->get();
и это более переиспользуемый и гибкий вариант. Правда я понятия не имею насколько это реально у тебя по коду реализовать.
Аноним 22/01/19 Втр 16:20:49 #177 №1332594 
>>1332589
Как такое сделать? Как паттерн называется?
Аноним 22/01/19 Втр 16:22:04 #178 №1332598 
>>1332576
А нахуя вообще вливать всю суть в название метода?
Бери пример с си-блядей. Они буквально несколько (1-3) букв берут от слова и разбивают его _. Да, это может показаться трудночитаемым, но в си все функции из stdlib хуевочитаемые да и нахуй не нужны, но у тебя же ЕБАНЫЙ ВЕБШТОРМ, навел мышкой на метой и у тебя уже документация подсветилась.
Аноним 22/01/19 Втр 16:29:24 #179 №1332606 
>>1332594
Билдер и называется, только придется фантазию проявить. Примеры и объяснения по учебнику не для таких ситуаций. Наверняка видел аналоги в виде QueryBuilder всяких. Суть та же.
Аноним 22/01/19 Втр 16:43:56 #180 №1332628 
>>1332606
Вообще я знаю паттерн, (но забыл название, лол), который позволяет создавать цепочки вызовов методов типа как ты выше написал. Если вкратце, суть в том, чтобы возвращать $this везде.

Но вообще это уже какая-то ORM нахуй получается, в рот я ебал еще и орм на коленке писать тут, совсем говноедство какое-то будет, никто блядь не поймет потом мой код
Аноним 22/01/19 Втр 16:47:00 #181 №1332631 
>>1332628
Что-то типа такого?

$foo = () => $var1 => $var2 => $var3;
Аноним 22/01/19 Втр 16:50:16 #182 №1332635 
>>1332628
Ну вот в твоей ситуации это как бы билдер критерии для метода getNthOrEqualFromThis. Вариантов много, вон аж 6 параметров, один из которых массив. Делаешь class ShittyBuilder {
private $id;
private $otherParam;
private $otherOtherParam;
// other params

public function byId($id) {$this->id = $id; return $this;}
// other methods
public function fetch() {
return $someInstance->getNthOrEqual($allYourParams);
}
}

Вот тебе и билдер конкретно для того страшного метода с кучей параметров. Как ты понимаешь это на коленке и сделать можно лучше во много раз, просто как пример что тут нет ничего сложного. Полноценная орм и прочее, кстати, тоже пригодились бы. Раз у тебя ее нет можешь взять да доктрину подтянуть, там много чего есть.
Аноним 22/01/19 Втр 16:56:59 #183 №1332642 
>>1332635
Тогда придется на тонны других методов тоже отдельные классы писать? Это же просто ебанутся как долго.

Насчет орм и доктрины - да. В следующий раз, пожалуй и буду их юзать. Сейчас уже нет смысла тонны кода переписывать на нее.
Аноним 22/01/19 Втр 16:59:34 #184 №1332643 
>>1332642
Ну как посмотреть. Вот у тебя есть метод getNthOrEqualFromThis. Первая же обертка над ним получилась с длиннющим именем. А таких оберток, судя по количеству параметров, может быть до ебаной жопы. Помоему лучше уж один раз сделать даже самый глупенький билдер и дергать через него, чем делать 100500 длиннющих методов вместо этого каждый раз. Сам же сказал, что есть и другие критерии к нему, значит проблема не в одном только том конкретном методе.
Аноним 22/01/19 Втр 17:00:06 #185 №1332644 
>>1332365
Зато у нас есть неплохая официальная документация и отличный тред в котором полно зелени.
Аноним 22/01/19 Втр 17:03:32 #186 №1332647 
мыслитель.jpg
>>1332643
Но тогда это будет практически эквивалентно прямым запросам в БД, только через обертку.
Инкапсуляция, мам...

Нужно создать несколько методов с выборками по определенным критериям, а не просто разрешить ебать таблицу в рот и жопу как хочешь.
Аноним 22/01/19 Втр 17:06:06 #187 №1332648 
>>1332598
А мне нравится это сишное iInterfaceName и всякое подобное. Коротко и понятно, главное контекст знать.
Аноним 22/01/19 Втр 17:10:52 #188 №1332651 
>>1332647
А через эти методы типа только в писечку ебешь, но никак не в рот и жопу как содомит какой-то? Чтобы полноценно выбрать решение надо разобраться в причинах, которые привели к той обертке, а не только на метод имени Льва Толстого посмотреть.
Аноним 22/01/19 Втр 17:11:52 #189 №1332653 
>>1332647
Дьявол на пикче?
Аноним 22/01/19 Втр 17:38:27 #190 №1332676 
>>1332651
>А через эти методы типа только в писечку ебешь, но никак не в рот и жопу
Ну вообще да, в том и смысл!
Аноним 22/01/19 Втр 17:43:01 #191 №1332677 
>>1332676
Я как-то не вижу этого. Обертка с именем на целый фанфик по сути прячет всего 1.5 реальных параметра, притом сама целых 5 принимает. И реально спрятанный параметр всего лишь бул. Судя по всему есть еще и вторая такая, где _is_less тру. Шо так ебать можно, шо эдак.
Аноним 22/01/19 Втр 17:46:04 #192 №1332680 
>>1332576

У тебя еще в phpdoc лишние @param, которые не несут никакой информации и которые стоит убрать.

getNeighbourId/getNthId. Насчет bystatus... - это же явно можно назвать короче. Например, getNthIdByBotAndSource
Аноним 22/01/19 Втр 17:47:33 #193 №1332681 
>>1332643
По-моему, лучше вообще писать такой код, чтобы не опускаться до оберток.
Аноним 22/01/19 Втр 17:51:30 #194 №1332683 
>>1332589

Выше дали совет про билдер.

А если неохота делать билдер, можно сделать передачу массива:

findNthId(['source' => ...., 'botId' => ...]);

или сделать объект-фильтр (отличие от билдера: билдер создает объект, фильтр ничего не создает):

$filter = new TgFilter;
$filter->bySource(...);
findNthId($filter);

или

findNthId(byTgFilter()->withSource(...)->withBotId(....));
findNthId(TgFilter::create()->withSource(...)->withBotId(....));

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

Для примера, поиск элементов в клиенте Селениум от фейсбука: https://github.com/facebook/php-webdriver

$element = $driver->findElement(WebDriverBy::id('element id'));

Аноним 22/01/19 Втр 17:54:15 #195 №1332685 
>>1332576

Также, возможно эту функцию просто стоит по другому назвать? Вроде getSimilarMessages или как-то так?
Аноним 22/01/19 Втр 17:58:48 #196 №1332688 
>>1332683
Впринципе то, что я ему предложил больше похоже на фильтр как раз. Запомню это название, а то хуйню одну другой назвал.
Аноним 22/01/19 Втр 18:20:17 #197 №1332703 
Фреймворк yii2. Такая проблема: в верстке используется более свежая версия jQuerty, чем в фреймворке. В ассете отключаю jQuery, которая идет с вёрсткой - верстка корректно работает (меню сворачивается в бургер и работает), но не работает валидация от Yii. Делаю наоборот - верстка перестает корректно работать, но валидация отрабатывает своё. Какими путями можно решить эту штуку?
Аноним 22/01/19 Втр 19:00:34 #198 №1332726 
>>1332703

Правильнее всего переделать верстку на использование jQ от Yii. Либо мучаться с jQuery.noConflict(), загружая 2 копии библиотеки и используя в верстке приватную копию.
Аноним 22/01/19 Втр 19:20:45 #199 №1332734 
>>1332703
Залезть в исходники фрейма и поменять жиквери на более зрелую, либо переписать верстку.
Аноним 23/01/19 Срд 10:48:45 #200 №1333137 
Недавно столкнулся с проектиком на php 4. Ну как проектиком. Там весь код был в нескольких файлах. Забавно было то, что в одном из них я нашел аццкую смесь из всех языков веба. В index.php был php с подготовленными sql запросами, html, css в head и js в скриптовых тегах. И задумался, как же раньше было лампово, ни тебе стандартизаций, ни тебе менеджеров, которые наставляют писать по тз. Программистов вообще считали элитой своих наций. Никто не понимал, что они делают. Когда же все стало меняться? Я не помню этот момент. Но руку к этому приложили большие корпорации со своими стажировочками и пиаром высоких технологий среди масс. Ублюдки.
Аноним 23/01/19 Срд 11:27:28 #201 №1333158 
Почему PhpStorm
1. Игнорит все SPL-исключения. Тупо все что унаследовано от двух главных SPL-классов исключений LogicException и RuntimeException - игнорится.
2. Имеет глубину сканирования исключений равную единице.
Если в методе, который вызывается у тебя в методе кидается исключение, ты об этом не узнаешь.

Я нашел как это все включить, но блядь, какого хуя они так сделали по-дефолту?
Аноним 23/01/19 Срд 11:29:56 #202 №1333161 
>>1333158
Учись писать без исключений, это плохая практика кодирования.
Аноним 23/01/19 Срд 11:39:16 #203 №1333172 
>>1333161
Пошел нахуй с такими идеями блядь.
Без исключений ему писать. Говножоры ебаные.
Половина стандартной библиотеки и все новые ее функции кидают исключения, а они НУ ЭТО БЕЗ ИСКЛЮЧЕНИЙ ЕБАШЬТЕ))0)

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

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

КИДАЕШЬ ИСКЛЮЧЕНИЕ В МЕТОДЕ ПРИ НЕКОРРЕКТНОЙ СИТУАЦИИ
@
ОБЕЗЬЯНА-ПРОГЕР ВЫРУБИЛ ВСЕ ИНСПЕКЦИИ В IDE И ЛОВИТ ВСЕ ЭКЗЕПШЕНЫ ГОЛОЙ ЖОПОЙ
@
- НУ МАМ, ПОЧЕМУ ПАДАЕТ, ВОТ ЖЕ КЛЯТЫЕ ГОВНОКОДЕРЫ! НАДО БЕЗ ИСКЛЮЧЕНИЙ ПИСАТЬ!
Аноним 23/01/19 Срд 11:41:21 #204 №1333173 
>>1333172
Вот и пиши на своем крестоговне, а в божественном PHP исключения ненужны.
Аноним 23/01/19 Срд 11:43:00 #205 №1333175 
>>1333173
Метод возвращает значение типа int. Возникает ошибка, из-за которой невозможно возвратить корректное значение.
Как ты сообщишь об ошибке?
А если в методе могут возникнуть 3 разные ошибки?
Аноним 23/01/19 Срд 11:44:07 #206 №1333177 
>>1333175
А ты не пиши с ошибками.
Аноним 23/01/19 Срд 11:47:59 #207 №1333179 
>>1333172
Так а нахуя ты сравниваешь божественные кресты с богомерзким похапэ? Если бы у пыхи был компилятор, то разрабы идеи заморочились бы немножко и сделали по умолчанию чуть иначе, в глубоким уровнем сканирования исключений. Но тебе, мудаку, дали интерпретатор и отсутствие ебли с исключениями, а тебе не нравится. Что за хуйня? Это программисты? Делаешь, как лучше, а им не нравится.

Если у тебя программы на пхп падают, то это уже твои кривые руки виноваты, видать, не из плеч растут, а из жопы. Писать программы надо сначала на бумажке карандашиком, а потом уже ручками своими корявыми в идэе лезть.
Аноним 23/01/19 Срд 11:50:19 #208 №1333180 
>>1333179
>на бумажке карандашиком
Дедуля, тебе к земле уже привыкать пора.
Выключай кудахтер и сходи исповедуйся.
Аноним 23/01/19 Срд 11:53:44 #209 №1333182 
>>1333177
Двачую. Правильно методы проектируй, чтобы не было ошибок. Для тебя придумали операторы условий, чтобы отдавать некорректное значение.
Аноним 23/01/19 Срд 11:54:58 #210 №1333185 
>>1333180
Мне 23 года, дедуля.
Аноним 23/01/19 Срд 11:55:28 #211 №1333186 
>>1333179
Иди на бумажке карандашиком найди все исключения, которые может высрать некий говнокод, с которым ты должен работать, написанный не тобой.
От этого могут зависеть бизнес-процессы на дохуя денег, а IDE, несмотря на то, что может их все найти, не делает этого.

Самое смешное что ты даже не понимаешь причину, по которой жопбрейнс ограничили глубину сканирования исключений в пыхе и почему в яве она не ограничена.
Аноним 23/01/19 Срд 11:58:24 #212 №1333188 
>>1333182
>>1333177
Вы реально конченые или тралите?

Задача: спроектировать метод, который принимает на вход html-файл и возвращает содержимое его тега <titile>.

ВНЕЗАПНО (никогда такого не было и вот опять) некие кривожопые говнокодеры передали в ваш метод несуществующий файл, не html-файл, некорректный html-файл, анус пса, небо, аллаха и хуй знает что еще.
Что будете делать?
Аноним 23/01/19 Срд 11:59:49 #213 №1333189 
>>1333185
Значит ты простой пыхыпыдебил - разновидность обычного наследственного дебила особой вонючести.
Впрочем, все вы такие.
Аноним 23/01/19 Срд 12:02:01 #214 №1333191 
>>1333188
Лично я тралю
Уж не знаю насчет идиотика >>1333182
>принимает на вход html-файл
>Что будете делать?
Ебальник вскрою дегенерату, осмелившемуся мне подобное дерьмо затирать.
Аноним 23/01/19 Срд 12:04:45 #215 №1333193 
>>1333188
Заюзаю либу для парсинга невалидных файлов.
Нет, не поделюсь, иди исключения обрабатывай.
Аноним 23/01/19 Срд 12:06:16 #216 №1333195 
>>1333189
Пошел нахуй. Еще я буду париться, что там мне какие-то верстальщики насували в iostream, раз по их вине прошла ошибка, им и исправлять.
Аноним 23/01/19 Срд 12:06:20 #217 №1333196 
>>1333193
>либу для парсинга невалидных файлов
Ага, написанную такими же кончеными дебичами, что и ты, которая при невозможности распарсить файл высрет тебе что-то string:"NE MOGU RASPARSIT! OSHIBKA!"
Аноним 23/01/19 Срд 12:08:22 #218 №1333198 
>>1333195
>Еще я буду париться
ПРОД УПАЛ
@
СЫЧЕВ С РАЗБИТЫМ ЕБАЛОМ И БЕЗ ПОСЛЕДНЕЙ ЗАРПЛАТЫ ИЩЕТ РАБОТУ
Аноним 23/01/19 Срд 12:08:43 #219 №1333199 
>>1333196
Да ладно, признайся, что исключения нужны только в строго типизированных языках, а в пыхе эта фича нахуй не сдалась.
Аноним 23/01/19 Срд 12:10:09 #220 №1333202 
>>1333198
В согласованной разработке, где каждый знает, что делает, прод не падает. У тебя был печальный опыт работы, я смотрю.
Аноним 23/01/19 Срд 12:11:21 #221 №1333203 
>>1333199
>НИНУЖНА
As expected.
Дебилы, дебилы never change.
Аноним 23/01/19 Срд 12:11:51 #222 №1333204 
>>1333199
Пыха и есть строготипизированный в последних версиях, с подключением, маня. Или ты там еще без тайпхинтов лапшедерьмо пишешь?
Хотя что от такого ебача ожидать
Аноним 23/01/19 Срд 12:12:18 #223 №1333205 
>>1333202
>ВРЕТИ
>НЕТ ТЫ
Да у нас тут ПЫХЫПЫБИНГО, хаха.
Аноним 23/01/19 Срд 12:12:55 #224 №1333206 
>>1333204
>тайпхинтов
Хуйня и ненужно.
Аноним 23/01/19 Срд 12:18:32 #225 №1333212 
nobrain2.jpg
>>1333206
Аноним 23/01/19 Срд 12:19:33 #226 №1333214 
>>1333205
>>1333204
>>1333203
Надеялся на норм срач, а вы только на переходы на личности способны. Ни капли сути по теме. А ты дебил, а ты маня, а ты хуево пишешь, а ты еще хуевее, тут тебе капсболд, тут бомбанулей. Вот бы еще разок сюда зашел тот анон из начала треда, было бы весело.
Аноним 23/01/19 Срд 12:21:44 #227 №1333215 
>>1333214
>на личности
Не льсти себе, дебилушка, ну какая у тебя личность - сплошные спиномозговые рефлексы и обиженный скулеж.
Типичный пхпшник, хаха.
Аноним 23/01/19 Срд 12:22:16 #228 №1333216 
>>1333214
Постите сами смешное
Аноним 23/01/19 Срд 12:24:25 #229 №1333217 
>>1333215
Не льщу.

>>1333216
Я?
Аноним 23/01/19 Срд 12:27:12 #230 №1333223 
>>1333217
>Не льщу.
Это правильно, дебилушка.
Самокритика - это хорошо.
Аноним 23/01/19 Срд 12:30:39 #231 №1333228 
>>1333223
Так ты согласен со мной насчет ненужности исключений?
Аноним 23/01/19 Срд 12:31:56 #232 №1333229 
>>1333228
>насчет ненужности
Конечно же ты не нужен.
Никому вообще даже себе самому
Аноним 23/01/19 Срд 12:33:05 #233 №1333231 
>>1333229
Раз у тебя кончились параметры аргументы, я приму это за "да".
Аноним 23/01/19 Срд 12:35:03 #234 №1333234 
>>1333231
>эти маняфантазии
Все, пыхыпыдаун окуклился в агонии бессильной обиды
Аноним 23/01/19 Срд 12:39:13 #235 №1333239 
В каких случаях следует кидать RuntimeException а в каких LogicException?
В чем семантический смысл каждого из них?
Аноним 23/01/19 Срд 12:50:09 #236 №1333249 
>>1333239
Иди уже нахуй, идиотик.
Аноним 23/01/19 Срд 12:55:50 #237 №1333263 
Иногда бывают такие ситуации, когда происходит какая-то дичь, которая никогда не должна происходить.
Например, есть ланг-файл формата key=value.
Класс, отвечающий за мультиязычность пытается найти такой-то ключ, но его там не оказывается.
Такая хуйня является фатальным недостатком программы и возникает, если прогер забыл внести ключ в ланг-файл.
При таком раскаладе дальнейшее выполнение программы вообще не имеет смысла, ибо она как бы недоделана.

Какое исключение я должен кинуть в этом случае?

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

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

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

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

Не помню точно, но да, опять в этой яве исключение RuntimeException можно не ловить, что является исключением (лол) из общей ситуации, где ты обязан ловить все.
То есть если метод генерит такое исключение это как бы знак того, что все, пизда, приехали.
Аноним 23/01/19 Срд 13:53:36 #238 №1333326 
>>1333239
>>1333263
Экшепшены не нужны, это уже сказал тот, что выше.
Аноним 23/01/19 Срд 13:54:19 #239 №1333330 
https://pastebin.com/AGuEC61g

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

Где обосрался?
Аноним 23/01/19 Срд 13:54:52 #240 №1333332 
>>1333330
На лекции.
Аноним 23/01/19 Срд 14:12:12 #241 №1333346 
berserk-ep-12-english-dub-hd.jpg
10
http://jsfiddle.net/8w256gev/3/ - тута не понял как выравнять сноску [..] относительно строки, абсолют или флоат ее смещает вверх, и еще можно ли ее через флоат как-то сделать? Кароче что-то я намудрил кажется.
11
http://jsfiddle.net/rmouc3aj/ - тут доп.пункт подсветка по фокусу с клавы - фокус и при нажатии делается, есть focus visible но он только в лисе.
Аноним 23/01/19 Срд 14:21:21 #242 №1333352 
>>1333346
Пошел нахуй.
Аноним 23/01/19 Срд 14:40:15 #243 №1333365 
>>1333352
Счастливого пути, сообщи как доберешься.
Аноним 23/01/19 Срд 14:41:54 #244 №1333369 
>>1333365
Нахуй послан.
Аноним 23/01/19 Срд 14:46:03 #245 №1333373 
>>1333369
И кто же тебя так?
Аноним 23/01/19 Срд 15:03:21 #246 №1333383 
>>1333373
Соси хуй.
Аноним 23/01/19 Срд 15:21:11 #247 №1333392 
изображение.png
>>1333383
Аноним 23/01/19 Срд 20:24:02 #248 №1333533 
download.png
Объясните, пожалуйста, разницу между переопределением метода и его перегрузкой в наследовании. И где это может пригодиться. Объясните так, чтобы даже чайник понял.
Аноним 23/01/19 Срд 21:36:16 #249 №1333580 
>>1333330
Автор этой дрисни репортин ин.
Поставленная задача решена : форма стала пропускать на страничку только пользователей, что присутствуют в бд.
https://pastebin.com/wbJNMKaP - решение.

1)Насколько критичны ошибки уровня notice? Речь идет о коротких именах переменных после подключения к субд.

2)Очень коротко: насколько целесообразно в показателях "эффективность/затраченное время" вникать в это сейчас (непонятный ответ на вопрос: " почему решение с mysqli_num_rows() не сработало?".
>Поведение mysqli_num_rows () зависит от того, используются ли буферизованные или небуферизованные наборы результатов. Для небуферизованных наборов результатов mysqli_num_rows () не будет возвращать правильное количество строк, пока не будут получены все строки в результате.


Аноним 24/01/19 Чтв 00:53:44 #250 №1333681 
Бамп из закреплённого.

Как в хтмл прописать путь до другого диска? Апач лежит на диске С, нужно иметь доступ к изображениям с диска Е (удаленный). Все что нагуглил -- нужно идти от корня сервера, но нихуя не получается изображение вывести через img src.
Аноним 24/01/19 Чтв 01:15:01 #251 №1333692 
>>1333681

Веб-сервер обычно отдает картинки только из корневой папки и подпапок. Может, тебе проще сделать отдельный виртуальный хост и сделать его корнем папку на e: (например: основной - http://site.dev, картинки - http://images.site.dev).

Если хочется извернуться и обойтись одним хостом, то велкам в документацию Апача по роутингу: https://httpd.apache.org/docs/2.4/urlmapping.html

Директива Alias явно подойдет. Учти, что кроме директивы Alias, надо еще дать Апачу доступ к той папке директивой Require в блоке Directory (там есть пример).

Не давай доступ к лишним папкам, проверяй правила.
Аноним 24/01/19 Чтв 01:17:02 #252 №1333694 
>>1333681

А, если ты имел в виду, что Апач установлен на диск C, а надо корнем сайта сделать папку на e:, то хватит DocumentRoot + Require в Directory. Если не работает - включи лог ошибок и посмотри, что в него пишется при попытке открыть какой-то URL.
Аноним 24/01/19 Чтв 10:58:34 #253 №1333787 
15483064845860.jpg

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

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

Но все это ебатория. Вопрос - есть ли вариант проще с пика перейти на бутстрап?

Алсо вы вообще также делаете через слайсы (ну или просто чекая размеры в ПС слоях, кому как удобно) или уже какие-то другие, более автоматизированные способы есть?
Аноним 24/01/19 Чтв 12:34:51 #254 №1333833 
1051332.jpg
Коль скоро у двачеров обед, а есть они любят прям за пекой, то вот вам блиц-опрос с собеседования, которое я не прошел, устраиваясь пхп-джуном в одну известную контору в моем городе:

1. Сколько ключевых слов зарезервировано языком, что это за слова?

2. Что значит слово “инициализация”?

3. Какие унарные и бинарные арифметические операции вы знаете?

4. Какой оператор используется для перехода к следующей итерации цикла?

5. Как правильно организовать доступ к полям класса?

6. Дайте определение понятию “конструктор”.

7. Что такое сигнатура метода?

8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.

9. Чем отличается переопределение метода от перегрузки?

10. Можно ли объявить метод абстрактным и статическим одновременно?

11. Можно ли перегрузить static метод?

12. Что будет, если единственный конструктор класса объявлен как final?

13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
Аноним 24/01/19 Чтв 13:00:18 #255 №1333852 
>>1333833
Что ещё спрашивали, задачи какие давали? Сам проекты свои какие показывал? Что из задач опа решал?
Аноним 24/01/19 Чтв 13:07:44 #256 №1333860 
>>1333833
Ой, да пошли они нахуй. Отвечаю, что га все эти вопросы готов дать ответ с гуглом под рукой, потому что и в работе его юзаю. Какой смысл в зазубривании.
Аноним 24/01/19 Чтв 13:29:25 #257 №1333871 
>>1333833
>Сколько ключевых слов зарезервировано языком, что это за слова?
Без знания этого факта нельзя софт писать, да?
>Что значит слово “инициализация”?
Предварительная подготовка.
>Какие унарные и бинарные арифметические операции вы знаете?
Из бинарных and, or, xor, not. Но вообще это хуета.
>Какой оператор используется для перехода к следующей итерации цикла?
Continue;
>Как правильно организовать доступ к полям класса?
Поля позакрывать, как границу при СССР, доступ через сеттеры-геттеры, как у чекистов принято.
>Дайте определение понятию “конструктор”.
Инициализация и запуск объекта. Внезапно.
>Что такое сигнатура метода?
В душе не ебу.
>Расскажите об особенностях класса с единственным закрытым (private) конструктором.
Бесполезная херня, если кроме этого закрытого конструктора там ничего нет.
>Чем отличается переопределение метода от перегрузки?
Понятия не имею.
>Можно ли объявить метод абстрактным и статическим одновременно?
А зачем?
>Можно ли перегрузить static метод?
Статик метод этож вроде глобал функции. Не знаю.
>Что будет, если единственный конструктор класса объявлен как final?
Не пользовался.
>Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
Х.з.

Вопросы как-то совсем из другой плоскости, как по мне. Всегда говорят - учите технологии, а не синтаксис. А тут спрашивают хуйню, которую нагуглить за 10 минут можно.
Аноним 24/01/19 Чтв 13:30:24 #258 №1333872 
>>1333860
Так логика в том, что ты можешь дать ответы на эти вопросы без гугла. Иначе зачем их тебе задавать?
Аноним 24/01/19 Чтв 13:32:58 #259 №1333875 
>>1333833
>Сколько ключевых слов зарезервировано языком, что это за слова?
Не, ну можно на месте в уме посчитать все, что вспомнишь, однако это какойто сюр. Ниодин вменяемый человек число ключевых слов в голове не держит, это полностью бесполезная информация.
Аноним 24/01/19 Чтв 13:34:30 #260 №1333876 
>>1333872
>Так логика в том, что ты можешь дать ответы на эти вопросы без гугла.
Тебя в лесу работать посадят, среди медведей?
Аноним 24/01/19 Чтв 13:40:05 #261 №1333879 
>>1333871
>Без знания этого факта нельзя софт писать, да?
Нет. Вдруг ты назовешь свойство ключевым словом?
>Предварительная подготовка.
Неверно.
>Из бинарных and, or, xor, not. Но вообще это хуета.
Арифметических, а не логических.
>Continue;
Молодец.
>Поля позакрывать, как границу при СССР, доступ через сеттеры-геттеры, как у чекистов принято.
Молодец.
>В душе не ебу.
Это классика, это надо знать.
>Бесполезная херня, если кроме этого закрытого конструктора там ничего нет.
Молодец.
>Понятия не имею.
Классика.
>А зачем?
Нужно.

Иди кароч мат.часть учи.
Аноним 24/01/19 Чтв 13:41:24 #262 №1333880 
>>1333879
>Иди кароч мат.часть учи.
Иди нахуй - я в лесу не работаю.
Аноним 24/01/19 Чтв 13:47:20 #263 №1333885 
>>1333879
>Вдруг ты назовешь свойство ключевым словом?
Вы там в блокнотах до сих пор разрабатываете?
>Неверно.
Что не мешает мне пользоваться ей. Я учебники не пишу и знать мне это необязательно.
>Арифметических, а не логических.
Как бы пользоваться ими я тоже умею, без красивых слов.
>Это классика, это надо знать.
Понадобится - узнаю. Это не такая сложная для восприятия информация. Впрочем, как и всё остальное.
Вопросы, судя по всему, ждун и писал. Я-то ожидал, про MVC, паттерны, покажите ваш код и т.д., а тут детсад.
Аноним 24/01/19 Чтв 13:47:46 #264 №1333886 
>>1333879
>Нет. Вдруг ты назовешь свойство ключевым словом?
Меня вот эта формулировка бесит. Ну понятно вопрос чекает что там претендент помнит, а может и вовсе знает. Почему бы просто не спросить "перечислите все ключевые слова пхп, которые знаете", а не начать вопрос с "сколько ключевых слов в языке?". Или это попытка глянуть, скажет ли претендент честно, что точное число не заучивал и просто перейдет к перечислению?

Кстати говоря с 7 пыхи все ключевые слова доступны для использовании в качестве имен свойств, констант, методов, трейтов, интерфейсов. Только class нельзя использовать в качестве конснтанты в классе, т.к. там и так есть ::class.
Аноним 24/01/19 Чтв 13:48:35 #265 №1333887 
>>1333852
Да все почти сделал из оповских задачек, кроме банкомата и прочего, что требует познаний в математике. Выучил даже основные алгоритмы и научился их применять, но завалился на такой простой хуйне. Написал на хх оригинальное резюме, прикрепил туда ссылки (магазин + гитхаб с оповскими задачами). Откликнулся с сопроводительным письмом на вакансию, пригласили через два дня.

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

Сказали, что тестирование будет состоять из теста и тестового задания. Т.к. тест я завалил, то до тестового даже не допустили. Там достаточно кандидатов было на эту вакансию. Такое чувство, что все эти рассказы про дохуя вакансий придумывают эйчары, которым надо делать вид, что они чем-то занимаются.
Аноним 24/01/19 Чтв 13:53:27 #266 №1333890 
>>1333887
>Т.к. тест я завалил
Что за тест был?
Аноним 24/01/19 Чтв 13:56:27 #267 №1333894 
>>1333886
>Ну понятно вопрос чекает что там претендент помнит, а может и вовсе знает.
Всё равно вопрос странный. Я вот на память мало вспомнить могу - для меня это конструкция, а не просто слова.
Аноним 24/01/19 Чтв 13:58:29 #268 №1333896 
>>1333887
Задачи опа это понятно, а студентов, файлообменник или тестхаб делал?
Аноним 24/01/19 Чтв 14:04:29 #269 №1333901 
>>1333833
Судя по вопросам контора ни о чем. В такой никакого профессионального роста не жди, а для джуна это важно.
Аноним 24/01/19 Чтв 14:06:08 #270 №1333902 
>>1333860
Лол, я толком не писал ничего, но и то знаю ответы на большинство без гугла. Если ты не знаешь, то непонятно что ты за погромист.
Аноним 24/01/19 Чтв 14:09:41 #271 №1333913 
>>1333887
Обратись к логике. Конкуренция в PHP наверное самая большая из всех языков. Но уровень кандидатов очень низкий. Поэтому зная чуть больше среднего можно легко их обойти. Искал бы ты работу на Хаскеле, там был бы уровень конкурентов во много раз выше.
Аноним 24/01/19 Чтв 14:13:02 #272 №1333917 
>>1333913
>Искал бы ты работу на Хаскеле, там был бы уровень конкурентов во много раз выше.
А на нём работа есть? Больше похоже на клуб илитистов.
Аноним 24/01/19 Чтв 14:13:36 #273 №1333918 
Лолвут? На хаскеле есть работа?
Аноним 24/01/19 Чтв 14:23:53 #274 №1333935 
>>1333787
Бамп вопросу. После просмотра еще пары промежуточных степ бай степ видосов на ютубе прихожу к выводу, что средств автоматизации в основном нет - люди берут вручную создаю бутстраповую сетку и вручную по ней разносят, прсото чекая пиксели из ФШ. Это так? Блин дримвивер получается юзлесс тогда, раз созданная им табличная сетка нах не нужна, а создавать самостоятельно бутстрап и прочий грид он не умеет.

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

1.ФШ
2. Пиксельперфект в пикселях.
3. В бутстрап или кастом грид.
4. Пиксели -в рем? Надо ли?


ПОмогите, прочитал и просмотрел кучу всего, сам забилдил два-три макета, но не пойму вот общий шаблон, указанный выше, 4й щаг.
Аноним 24/01/19 Чтв 14:24:48 #275 №1333937 
>>1333917
Работа есть. Но уровень нужен выше чем для PHP.
Аноним 24/01/19 Чтв 14:56:23 #276 №1333958 
>>1331382
Проверь пожалуйста. Мне очень надо.
Аноним 24/01/19 Чтв 15:25:55 #277 №1333974 
>>1333902
> знаю ответы на большинство без гугла
Если ты что-то знаешь с гуглом, то ты нчего не знаешь. Сейчас очень упала ценность чистого знания, когда все появилось в интернете. Ненышнее поколение считает интернет своей памятью и искренне удивляется, что кто-то нодобряет такой подход.
Аноним 24/01/19 Чтв 15:29:30 #278 №1333978 
А зачем в стандартной библиотебе пыни есть функции вычисления косинусов и синусов? Кому-нибудь вообще это хотя бы раз пригодилось?
Аноним 24/01/19 Чтв 15:35:10 #279 №1333983 
Абстрактные классы нужны лишь затем, чтобы отделить проектирование от реализации. Дискач.
Аноним 24/01/19 Чтв 15:36:16 #280 №1333987 
>>1333974
Если ты не знаешь элементарные вещи, значит ты не писал кода. Когда пишешь код, все само запоминается. Все таки они правильно делают, что хотя бы такие вопросы задают. Иначе поналезут нулевые гуглята.
Аноним 24/01/19 Чтв 15:39:14 #281 №1333990 
>>1333978
Представь себе нужны для вычислений.
Аноним 24/01/19 Чтв 16:08:19 #282 №1334016 
Аноны, изучаю новые фичи пхп 7, добрался до методов.

Правильно ли я понял, что после перечисления аргументов через двоеточие идет возвращаемый тип?
func idiNahuy123(idi, na, huy): string
{
}

А что ставить, если метод ничего не возвращает? Void и null не работают, ошибка ссылается на пространство имен.
Аноним 24/01/19 Чтв 16:15:01 #283 №1334037 
ребят, жутко пахнет от ног
Аноним 24/01/19 Чтв 16:15:04 #284 №1334038 
>>1334016
С 7.1 добавили void. Вроде в этой же версии появились нулабл ретурны, типа ?string.
Аноним 24/01/19 Чтв 16:19:16 #285 №1334047 
>>1333935
Ну бамп плиз
Аноним 24/01/19 Чтв 16:28:54 #286 №1334059 
>>1334037
зачем ты нюхаешь ноги?
Аноним 24/01/19 Чтв 16:58:26 #287 №1334096 
>>1333987
>Иначе поналезут нулевые гуглята.
Как-то в твиче у работников гугла был флешмоб - они писали как здорово нихуя не знают элементарных вещей, на которых постоянно валят джунов разные говноконторки.
Программист должен понимать что делает и как, а не учить синтаксис наизусть. Вообще, всё знать не возможно в ИТ, и основная доля программера - читать документацию и гугл.
>Когда пишешь код, все само запоминается.
Вот именно - когда пишешь, а не когда судорожно пытаешься вспомнить сколько там конструкций в языке.
Аноним 24/01/19 Чтв 17:03:03 #288 №1334101 
>>1334096
>а не когда судорожно пытаешься вспомнить сколько там конструкций в языке.
Я кстати погуглил эти ключевые слова из интереса, чтобы подсчитать. Оказалось некоторые из них я например вообще не видел ниразу, не довелось, соответственно я бы их и не назвал. Например insteadof.
Аноним 24/01/19 Чтв 17:06:52 #289 №1334103 
>>1334101
Ну вот видишь. Теперь ты не имеешь права писать программы.
Аноним 24/01/19 Чтв 17:16:24 #290 №1334115 
>>1334096
>Программист должен понимать что делает и как, а не учить синтаксис наизусть.
Если ты не знаешь унарные и бинарные операторы, то ты ноль, очевидно что код не писал. Они везде одинаковые. Про изучения синтаксиса никто не говорил. Тут как раз не синтаксис, а семантика.
Аноним 24/01/19 Чтв 17:23:54 #291 №1334122 
>>1333833
>1. Сколько ключевых слов зарезервировано языком, что это за слова?
не ебу
>2. Что значит слово “инициализация”?
установление первоначального состояния
>. Какие унарные и бинарные арифметические операции вы знаете?
+,-,/,,%, mod. Остальное вроде не арифметическое
унарный знаю минус
>4. Какой оператор используется для перехода к следующей итерации цикла?
continue
>5. Как правильно организовать доступ к полям класса?
сделать их константными
>6. Дайте определение понятию “конструктор”.
функция, возвращающая новый экземпляр класса
>7. Что такое сигнатура метода?
его тип и имя (тут я бы загуглил на самом деле, потому что может это просто его тип?)
>8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.
без статического метода хуй такой создашь
>9. Чем отличается переопределение метода от перегрузки?
первое ad-hoc полиморфизм, второе сабтайпинг
>10. Можно ли объявить метод абстрактным и статическим одновременно?
зачем?
>11. Можно ли перегрузить static метод?
зачем?
>12. Что будет, если единственный конструктор класса объявлен как final?
синтаксическая ошибка, я же не пишу на богомерзкой жабе
>13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
аналогично

с++-сеньер-300к-в-секунду*





Аноним 24/01/19 Чтв 17:56:01 #292 №1334140 
>>1334115
Это не семантика даже, причем тут семантика, это фундаментальные знания, на которых программирование и построено.
Аноним 24/01/19 Чтв 17:59:19 #293 №1334142 
>>1334122
>его тип и имя (тут я бы загуглил на самом деле, потому что может это просто его тип?)
Тип не имеет значения. Сигнатура это имя метода со списком параметров.
Аноним 24/01/19 Чтв 17:59:50 #294 №1334143 
>>1334140
Семантика это значение единиц языка. Любое вычисление основывается на формальном языке. Это может быть даже не язык программирования. Но у него всегда есть единицы, а них значение. Бинарные операторы на самом деле пришли из математической логики. Они могут обозначаться по разному в разных формальных языках, но значение всегда одинаковое. Поэтому семантика все таки.
Аноним 24/01/19 Чтв 18:00:37 #295 №1334144 
ОП ЗАКЛИНАЮ ТЕБЯ УБЕРИ ПОЖАЛУЙСТА УЗКОГЛАЗЫХ ШМАР ИЗ ОП-ПОСТ ЗАПОСТИ ЛИБО ЕВРОПЕЙСКИХ ЛИБО ВООБЩЕ НЕ ПОСТИ
Аноним 24/01/19 Чтв 18:03:22 #296 №1334145 
>>1334143
Ладно, ты победил. Я до сих пор и не знал толком, что такое семантика, но благодаря тебе узнал.
Аноним 24/01/19 Чтв 18:05:56 #297 №1334148 
>>1334122
>с++-сеньер
>не может сказать что такое сигнатура
Кек
Аноним 24/01/19 Чтв 18:10:58 #298 №1334154 
>>1334142
А вот и "я с гуглом все умею" подкатили.

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

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

А вот имена параметров не важны, поэтому и определение "имя метода со списком параметров" тупое, неверное, и написанное индусом-копирайтером.
Аноним 24/01/19 Чтв 18:11:14 #299 №1334155 
>>1334144
Та что справа на девченку даже не похожа. Трап наверное. Я бы тем кто трапов постит, вообще запретил создавать треды. Хоть бери и конкурирующий тред создавай.
Аноним 24/01/19 Чтв 18:11:35 #300 №1334157 
>>1333787
плезарики
Аноним 24/01/19 Чтв 18:23:50 #301 №1334163 
>>1334154
Вообще-то это определение не из гугла, а из книжки по жабе от О'Рили. Тип метода это не типы его параметров, а только тип возвращаемого значения. Как ты понимаешь, на вход может придти массивчик, а выйти строка. А сигнатура метода это его название + список параметров. Так как методы можно еще и перегружать, то нужно указывать тип данных этих параметров. Их имена не играют роли, важен их порядок.
Аноним 24/01/19 Чтв 18:25:27 #302 №1334165 
>>1334155
Я уж не смогу отличить трапа от не-трапа, но азиатские рожи терпеть не могу.
Надеюсь, что он прислушается и внемлит мольбам анонов.
Аноним 24/01/19 Чтв 18:26:19 #303 №1334167 
Благодаря этому треду я понял, что программистом мне не стать, чему очень обрадовался.
Аноним 24/01/19 Чтв 18:31:52 #304 №1334175 
>>1334167
Выкатываешься?
Аноним 24/01/19 Чтв 18:33:19 #305 №1334176 
>>1334157
>>1333935
>>1333787
Тебе в дизайнач или в /wrk зайди, там есть фронтенд-тред.
Аноним 24/01/19 Чтв 18:34:23 #306 №1334178 
>>1334175
буду продолжать писать для себя как тупая обезьяна в одном файле без ООП и psr
Аноним 24/01/19 Чтв 18:37:54 #307 №1334183 
>>1334167
Ну и зря. Бросил это дело, бросишь и другое. Трудности везде будут.
Аноним 24/01/19 Чтв 18:42:39 #308 №1334194 
>>1334176
:(
ты не поверищ
Аноним 24/01/19 Чтв 18:44:40 #309 №1334196 
>>1333787
Тебе один ответ может быть - пиши сам нормально, а не занимайся хуйней.
Аноним 24/01/19 Чтв 18:48:42 #310 №1334199 
>>1334183
ответил выше.
Просто у опа один аргумент - "пишешь для ЗАКАЗЧИКА, а не для себя", а так как я пишу для себя, то и в рот ебал эти стандарты и ООП. Мой код все равно никто не увидит, свою задачу он выполняет, остальное мне видимо не нужно. Изначально хотел развиваться, но теперь не вижу смысла.

Фейсбуки с вк точно так же делали: хуяк хуяк и в продакшн, если взлетело - переделываем нормально. Такого подхода буду придерживаться и я, т.к. перфекционизм убьет все мои начинания.
Аноним 24/01/19 Чтв 18:53:37 #311 №1334204 
>>1334199
Заказчику врядли важно как оно там, если работает как надо. А вот коллегам и тебе не насрать. Ну дело твое. Пишешь только для себя, и сам же от этого наплевательства пострадаешь в будущем.
>Фейсбуки с вк точно так же делали: хуяк хуяк и в продакшн, если взлетело - переделываем нормально.
Это в целом разумно, только тот же вк например так и не переделали нормально. Подозреваю, что и фейсбук тоже.
Аноним 24/01/19 Чтв 19:01:57 #312 №1334208 
>>1334204
>Это в целом разумно, только тот же вк например так и не переделали нормально.
Двачую. Никакого MVC там и в помине нет. Еще уродливые гет-параметры, которые не помещаются в адресную строку.
Аноним 24/01/19 Чтв 19:05:13 #313 №1334211 
>>1334204
>Пишешь только для себя, и сам же от этого наплевательства пострадаешь в будущем.
Каким образом?
>Это в целом разумно, только тот же вк например так и не переделали нормально. Подозреваю, что и фейсбук тоже.
Поясни, что с твоей точки зрения у них не так. Работает, не тормозит, что еще нужно?

>Двачую. Никакого MVC там и в помине нет. Еще уродливые гет-параметры, которые не помещаются в адресную строку.
Вы просто размышляете как погромисты, пользователю похуй что там в адресной строке и есть ли там mvc.
Аноним 24/01/19 Чтв 19:07:43 #314 №1334212 
Аноны, нормально ли это в разработке, что я подробно комментирую каждую строчку? Просто когда я возвращаюсь к собственному коду, я понимаю, что происходит вот конкретно здесь, но у меня нет общей картины, зачем это, откуда и куда идет. Поэтому приходится на каждой строчке объяснять самому себе, что тут происходит, а еще каждый метод и класс описываю через / */ с парамсами и ретурнами. В общем, это занимает довольно много времени. Нужно ли себя от этого отучать?
Аноним 24/01/19 Чтв 19:09:50 #315 №1334214 
>>1334211
Так мы и есть погромисты, нам похуй, что там у пользователя будет. Нам код поддерживать нужно, и чем удобнее это будет, тем лучше.
Аноним 24/01/19 Чтв 19:11:49 #316 №1334216 
>>1334214
ну кароч я поэтому и сказал что не быть мне программистом, извините если кого чем обидел. Не хочу писать код ради написания кода, хочу решать задачи.
Аноним 24/01/19 Чтв 19:12:01 #317 №1334217 
>>1334196
Ответь на вопросы няха.
Аноним 24/01/19 Чтв 19:17:03 #318 №1334219 
>>1334216
У тебя практические намерения в кодировании, тебе хочется что-то созидать, а не хуярить класс за классом ради того, чтобы охуеть, какую структуру я могу написать. Создай какой-нибудь интернет-магазин, настрой seo и продавай через него что-нибудь. Вот это годно будет.
Аноним 24/01/19 Чтв 19:21:59 #319 №1334222 
>>1334219
да я это и делаю, но зачитывался вашими тредами и дух захватывало - "ничего себе, может и я так могу?" Оказалось, что не могу, или не хочу, хз.
Проблем больше доставило то, что мы говорим на разных языках, и мне с моим подходом нереально будет влиться в какой-то коллектив потом.
Аноним 24/01/19 Чтв 19:26:13 #320 №1334225 
>>1334222
Столько я тебе всего написал, а оказалось тебе и правда это не нужно. Бери готовое решение, написанное другими людьми, и работай тогда, в этот тред действительно можно было не заходить.
Аноним 24/01/19 Чтв 19:27:59 #321 №1334227 
>>1326386
Доработанный вектор, https://github.com/php2ch/vector/blob/master/index.php

Учёл почти все замечания, а именно:
- Методы подсчёты значений сотрудника перенесены в департамент, в него же добавлены методы select() и isHead().
- Применил spaceship-оператор при сортировке.
- В функцию printCompany() добавил анонимные функции, теперь её можно запускать многократно.
- Среднее значение теперь вычисляется отдельной функцией.
- Методы антикризисного класса теперь статические, компанию не нужно добавлять в конструктор.

А, чтобы задать сотруднику индивидуальную з/п можно заменить содержащийся в нём объект профессии на новый (уникальный). Правда, тогда придётся проверять все объекты профессий в антикризисных мерах, но это уже другая история.
Аноним 24/01/19 Чтв 19:28:21 #322 №1334228 
>>1334222
Ты это я. Это смешно, но я уже с 2015 года вкатываюсь попеременно. То забиваю, то снова играет страсть что-то писать/изучать и т.д. Но я понял, что суть была в том, что у меня не было конкретной цели. Теперь я ее нашел. Я пилю свой проект с использованием всех последних бек-энд технологий и потом обязательно применю это на практике. Ну а если не получится, то и хуй с ним, проектом буду заниматься. Но я уверен, что получится, потому что я знаю уже больше, чем все здесь вместе взятые. Но это просто теория, практики у меня мало, щас вот наверстываю.
Аноним 24/01/19 Чтв 19:34:23 #323 №1334230 
>>1334228
>Но я уверен, что получится, потому что я знаю уже больше, чем все здесь вместе взятые
Хуя громкие заявления из-за первого опыта написания собственного проекта. Многие тут лет по 10 тернистый путь этот преодолевают, не забивая на качество кода и умудряясь при этом построить карьеру. Ну да, ты шаришь лучше всего треда канеш, уникальный весь.
Аноним 24/01/19 Чтв 19:38:51 #324 №1334234 
У меня есть маленький проект, первую рабочую версию которого я захуярил за пару часов в один файл под пхп4 без ооп и забыл. А теперь решил сделать вторую версию по-уму, поставил пхп7.1, фреймворк, добавил бутстрап, начал оформлять мвц. В результате уже три дня ебусь, всё никак не могу сделать выборку из БД через элоквент.

То ли лыжи не едут, то ли я ебанутый.
Аноним 24/01/19 Чтв 19:40:27 #325 №1334235 
>>1334230
10 лет учить php и фреймворки? Хуя ты зелень. Да даже если бы ты 5 сказал, это тоже много.
Даже несмотря на это, я могу ответить за свои слова. Помимо пыхи я знаю еще несколько языков, даже в асме ковырялся. Да что там, когда я сегодня днем вбросил список вопросов, многие отсюда просто сказали, мол, а нахуя это вообще надо? Действительно, нахуя? Чтобы крудить, фундаментальные знания не нужны, а чтобы стать профи, нужно заглянуть дальше переменных со знаком доллара.
Аноним 24/01/19 Чтв 19:41:58 #326 №1334237 
>>1334234
Ставь 7.3, если нужны тайпхинты полностью.
Аноним 24/01/19 Чтв 19:52:09 #327 №1334240 
>>1334235
10 лет я в целом занимаюсь кодингом, около 7 лет работаю. Есть куча своих проектов, и тоже всегда стремился свое писать. Работал не только на пхп, но и на шарпе, джавке, жсе и питоне. И свои проекты тоже разные совершенно. С чего ты решил, что тут в треде только изучающие?
Аноним 24/01/19 Чтв 19:55:01 #328 №1334241 
>>1334225
зайду завтра, чтоб найти работников за лапшу которые будут писать мне модули к симфони (по факту половина из вас пилит вордпресс на фрилансе, а в этом треде все такие девелоперы пиздец)
Аноним 24/01/19 Чтв 19:55:19 #329 №1334242 
>>1334240
В чем разница между .equals() и ==?
Аноним 24/01/19 Чтв 19:57:33 #330 №1334244 
>>1334228
Я обычно сюда захожу после того, как напишу за пару часов какое-то убогое и кривое поделие под свою задачу. Оно настолько плохое (даже мне очевидно), что прямо больно смотреть. И я иду сюда, чтоб попытаться начать заново и в следующий раз делать все правильно. И каждый раз я ломаюсь и возвращаюсь к началу.

Впрочем мои душевные пиздострадания не имеют никакого отношения к php, так что не буду портить тред своим присутствием.
Аноним 24/01/19 Чтв 19:58:58 #331 №1334246 
>>1334241
Что ты имеешь против лапши, гурман?
Аноним 24/01/19 Чтв 20:00:48 #332 №1334247 
>>1334244
Так а на чем ты пишешь?
Аноним 24/01/19 Чтв 20:01:24 #333 №1334248 
Зачем проверять кнопку у формы перед ее отправкой?
Инбифо: чтобы узнать, что форма была отправлена с конкретной страницы
Аноним 24/01/19 Чтв 20:24:07 #334 №1334256 
>>1334242
Можно было бы и язык еще написать, ну да ладно.
== и equals без перегрузки для ссылочных типов сравнит ссылки.
В шарпе можно перегрузить и то и другое, в джаве только equals, перегрузки операторов нет. (или есть в новых версиях, не следил)
Так же в шарпе для тех же стрингов уже есть перегрузка ==, чтобы сравнивать значения. В джаве этим не заморачивались и будут сравнены ссылки, для сравнения значений переопределены equals у встроенных типов. Ну и == не ругнется на нулл в отличии от equals в левом операнде, что в общем-то очевидно.
Аноним 24/01/19 Чтв 20:28:10 #335 №1334257 
>>1334248
Потому что внезапно на странице может быть не одна форма. И я сейчас не имею ввиду формы в типичном представлении пользователя, а именно тег form.
Например, ты реализуешь отправку поста в базу по одной кнопке одной форме, а удаляешь пост из базы по другой кнопке в другой форме с одним полем из этой кнопки.
И это две разные формы с двумя разными кнопками.
Ну и так исторически сложилось, что нужно проверять именно кнопку.
Аноним 24/01/19 Чтв 20:29:54 #336 №1334258 
>>1334247
на php, но без стандартов. Имею ввиду, что портить тред про обучение не хочу, т.к. и сам не научился, и другим мешаю.
Аноним 24/01/19 Чтв 20:32:15 #337 №1334259 
>>1334257
>Например, ты реализуешь отправку поста в базу по одной кнопке одной форме, а удаляешь пост из базы по другой кнопке в другой форме с одним полем из этой кнопки.
>И это две разные формы с двумя разными кнопками.
Две разные формы с одинаковыми post параметрами?
Аноним 24/01/19 Чтв 20:32:20 #338 №1334260 
>>1334256
Слушай, а я вот читал, что в жабе, если ты удалишь объект, то не факт, что он удалится незамедлительно, и некоторое непродолжительное время он будет жить, что может повлечь за собой некоторые баги. В общем, это зависит от того, с какой скоростью сборщик мусора его приберет. Это правда?
Аноним 24/01/19 Чтв 20:34:35 #339 №1334261 
>>1334259
Это ты у нас такой умный, а остальные нет.
Аноним 24/01/19 Чтв 20:43:05 #340 №1334263 
>>1334258
Если магазин пилишь, то позаботься хотя бы об элементарной безопасности.
Аноним 24/01/19 Чтв 21:00:01 #341 №1334272 
>>1334263
>позаботься хотя бы об элементарной безопасности.
Разверни мысль. Или банальное экранирование переменных уже считается чем-то необычным?
А стиль написания кода на безопасность никак не повлияет, в отличие от стада мартышек, слепо действующих по мануалу.
Аноним 24/01/19 Чтв 21:01:25 #342 №1334275 
>>1334261
а форму разве ты не сам себе шлешь?
Аноним 24/01/19 Чтв 21:15:32 #343 №1334289 
>>1334272
Какое экранирование переменных? Ты про SQL?
>>1334275
Мужик, здесь не С++, и в ногу себе выстрелить никак нельзя.
Аноним 24/01/19 Чтв 21:20:53 #344 №1334294 
>>1334260
Я не особо шарю в gc, работает на фоне и работает. В пыхе кстати тоже есть, но тут об этом обычно не думают, пока пилишь простое веб приложение и не покоряешь долгоживущие. Удаляется то, на что не остается ссылок. Конкретно самому удалять объекты, как в крестах например, не надо прямо. А то ты вроде именно удаление озвучил. Впринципе для удаления в таких языках можно параноидально обнулить все ссылки на объект и оставить остальное gc.
Какие там баги кроме утечек без понятия. Проще всего понять (да и обосраться) можно на статичных ссылках. Статика живет на уровне класса, поэтому даже после смерти инстансов такая ссылка остается валидной и gc ее не не тронет. Внутренние классы и потоки тоже легкий способ выстрелить в ногу gc. Много об этом не могу сказать, у меня серьезных утечек не было, только мелочевка вполне очевидная, и поэтому не приходилось вдаваться. В голове держу только сам факт, что за этим надо следить.
Аноним 24/01/19 Чтв 21:21:52 #345 №1334295 
>>1334289
>>Например, ты реализуешь отправку поста в базу по одной кнопке одной форме, а удаляешь пост из базы по другой кнопке в другой форме с одним полем из этой кнопки.
>>Мужик, здесь не С++, и в ногу себе выстрелить никак нельзя.

Да вы тут поехавшие какие-то. Если ты сам себе шлешь данные пост запросом, то никаких проблем нет. Если ты шлешь данные не себе с одинаковыми полями, то не надо так делать.
Аноним 24/01/19 Чтв 21:35:35 #346 №1334304 
>>1334295
Так данные шлешь не ты, а пользователь. А что он там тебе пришлет, одному богу известно.
Аноним 24/01/19 Чтв 21:41:08 #347 №1334306 
>>1334294
>В пыхе кстати тоже есть, но тут об этом обычно не думают, пока пилишь простое веб приложение и не покоряешь долгоживущие.
В нетбинсе последнем есть фича принудительного запуска сборщика мусора. И еще есть динамический счетчик памяти, занимаемой скриптом в рантайме.
Аноним 24/01/19 Чтв 22:18:20 #348 №1334326 
>>1334306
У тебя были серьезные проблемы с утечками? По какой причине смог выяснить? Интересно опыт в этом плане отличный от своего услышать.
Аноним 24/01/19 Чтв 23:41:37 #349 №1334365 
.png
Поясните за текстовый редактор Атом? Где мой местный решарп?
Аноним 25/01/19 Птн 00:01:41 #350 №1334372 
>>1334365
Автоподстановка из коробки работает только в IDE.
Аноним 25/01/19 Птн 00:07:26 #351 №1334373 
.png
>>1334372
Анус поставил?
Аноним 25/01/19 Птн 00:53:50 #352 №1334384 
>>1334373
Тащемта, анус затощен под анускрипт, он даже написан на нем. Поэтому треба ставить плагины. Хуевый редактор, если честно. Саблайм и брекеты уделывают его в два счета.
Аноним 25/01/19 Птн 01:27:23 #353 №1334392 
>>1334384
> брекеты
Ух нихуя себе какая годнота, спасибо.
Аноним 25/01/19 Птн 01:42:55 #354 №1334396 
>>1334384
А нет, не годнота. Судя по всему устарел на три года.
Аноним 25/01/19 Птн 03:16:49 #355 №1334412 
>>1334260

Баги это не должно повлечь. Если на объект не осталось ссылок в переменных программы, то с ним ничего нельзя сделать и есть он или нет - ничего не меняет. Хотя, конечно, при желании можно и в такой системе создать баг. Но это сложнее, чем в языках без сборки мусора, где программирование напоминает хождение по минному полю. На Си пишут лет 30-40 и до сих пор классические проблемы вроде buffer overflow или ошибок работы с памятью они лечить не научились. До сих пор есть шизанутые, которые пишут нечитаемый код в стиле a[i++] = b[j--];

Аноним 25/01/19 Птн 07:05:39 #356 №1334432 
>>1334208
>Никакого MVC там и в помине нет.
Вордпресс тоже MVC не имеет, а сколько сайтов на нём крутятся? Вообще, в веб с норм технологиями как-то не повезло, один говнокод повсюду.
Аноним 25/01/19 Птн 07:08:20 #357 №1334434 
>>1334212
Каждую строку не надо комментировать, только методы\функции, ну и описания классов там, или файлов, немножка - одной строкой. В сам алгоритм вообще лазать не надо, если он написан нормально и работает. Зачем его комментировать?
Аноним 25/01/19 Птн 09:35:19 #358 №1334481 
thedevilgodareraginginsideme.jpg
!http://([a-z0-9.-]+)(/\\S+)?!
Аноны, у меня вопрос по этому выражению. Я смотрю на часть шаблона "http://([a-z0-9.-]+)" и интерпретирую его следующим образом. После двух слешей есть один из указанных в квадратных скобках символов, и за ним может следовать любое количество равно таких же символов или не следовать вообще ничего. То есть, строки типа aaa, 11, --------, но не ab--1 или georgebush. Я верно размышляю? И, если да, то зачем [a-z0-9.-]+ заключать ещё и в круглые скобки? Они же содержат установленую последовательность символов. А в конкретно этом случае они ничего не поменяют. Или?
Аноним 25/01/19 Птн 09:54:44 #359 №1334488 
>>1334481
Проверил такой код:

<?php

$text = 'Samwise Gamgee'; // will put "a" in $empty?
$expression = '/[a-z0-9.-]+/';
$empty = [];

preg_match($expression, $text, $empty);

echo var_dump($empty);

?>

Выдал "amgee". Как-то я не допираю. Как вообще функция сканит текст?
Аноним 25/01/19 Птн 10:02:19 #360 №1334491 
>>1334488
В общем, делаю вывод, что [characters_list]+ просто совпадает с любой строкой, в которой есть символы, которые содержатся внутри скобок. Не важно в каком порядке и каком количестве - главное, чтобы был хотя бы один символ. Это показалось мне странным, потому что я думал, что из квадратных скобок выделается какой-то один символ, если после них не стоит никакого кватификатора. А добавление плюса просто означает, что именно один из указанных символов может повторятся любое количество раз. Но это будет другая конструкция - ([characters_list])+
Сложно уложить это в голове почему-то.
Аноним 25/01/19 Птн 11:36:41 #361 №1334516 
>>1334491
Совет всем на будущее и тебе тоже.

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

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

3. Будьте благоразумны. Если не получается решить задачу, отдохните и попробуйте решить ее снова. Погуглите. Не целесообразно спрашивать ответы здесь сразу. Кайф от самостоятельного решения задачи, хоть и с гуглом, не сравним с банальной вычиткой ответа из треда.
Аноним 25/01/19 Птн 16:35:53 #362 №1334613 
>>1334516
preach, brother
Аноним 25/01/19 Птн 16:45:51 #363 №1334621 
Снимок экрана2019-01-2516-41-45.png
Не знаю, куда написать, напишу сюда. Меня в вузе учили, что у программы и подпрограммы должна быть одна точка входа, одна точка выхода, один тип возвращаемого значения. Что же я вижу в пыхе? Пикрилейтед.

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

Аноним 25/01/19 Птн 16:55:09 #364 №1334626 
>>1334621
в идеологии структурного программирования под единой точкой выхода подразумевается введение оператора return и запрет (либо использование только в необходимых случаях) так называемых "длинных переходов", аналогов setjmp/longjmp в си
те формально фции php уже соответствуют этому требованию


Аноним 25/01/19 Птн 16:55:59 #365 №1334628 
.jpg
хачу сделать парсер юзеров одного сайта вот только есть одна праблема
ПАЦАНЫ КАК СПАРСИТЬ ЭТУ СТРАНИЦУ ШТОБЫ ЗАДЕЙСТВАВАТЬ ВОТ ЭТАТ ПАРАМЕТР newface-1

file_get_contents('http://loveplanet.ru/a-search/d-1/foto-1/pol-1/spol-2/bage-24/tage-24/geo-0,0,0/purp-0/newface-1/');

ШТО ДЕЛАТЬ? НАУЧИТЕ И ПАМАГИТЕ ПАЦАНЫ
Аноним 25/01/19 Птн 17:18:22 #366 №1334637 
>>1334626
бля, это же php тред!
не заметил и отписался
я теперь зашквареный, бля
не отмытся перед пацанами


Аноним 25/01/19 Птн 17:37:30 #367 №1334646 
Зачем в абстрактном супер-классе нужен конструктор?
Он нужен для того, чтобы его можно было вызвать у классов-потомков?
Аноним 25/01/19 Птн 17:38:37 #368 №1334647 
>>1334646
Или не вызвать, как захочешь. Ты можешь и не переопределять конструктор в дочерних классах. Или переопределить и насрать на базовый. Видал как много вариантов?
Аноним 25/01/19 Птн 17:47:56 #369 №1334651 
>>1334647
Проиграл в голосяндру.
Аноним 25/01/19 Птн 17:52:32 #370 №1334653 
Аноны, я щас почти дописал свой велосипед (легкий мвс-фреймворк для создания инет-магазина). Если я его выложу на гитхаб и приложу к резюме, насколько высоко повысятся мои шансы на то, что я найду годное место?
Аноним 25/01/19 Птн 18:16:14 #371 №1334683 
>>1334653
Ну повыше станут - кодеры из контор хоть посмотреть смогут как пишешь. Это всё же лучше, чем наугад джуна брать.
Аноним 25/01/19 Птн 18:18:17 #372 №1334686 
>>1334621
Неправильно утверждать, что функция всегда должна возвращать один тип. Функцию можно использовать как абстракцию данных. Она может возвращать другую функцию, которая в свою очередь не зависит от типа, и может возвращать разные типы, в зависимости от передаваемых аргументов.

В этом суть абстракции данных. Нам как и функциям, не нужно знать какой тип мы обрабатываемым. Мы можем обрабатывать разные типы одинаковыми функциями. Это дает универсальность и модульность. При таком подходе, не нужно переписывать верхние уровни абстракций, чтобы начать работать с новым типом. Достаточно изменить нижний уровень.
Аноним 25/01/19 Птн 18:23:14 #373 №1334694 
>>1334686
Декларативный хаскеле-червь-пидор, ты опять выходишь на связь, ублюдок?
Аноним 25/01/19 Птн 21:22:08 #374 №1334793 
1548440520364.jpg
>>1333833
Ну давай ублюдок, иди сюда, думаешь меня трахнуть? Я сам тебя трахну
> 1. Сколько ключевых слов зарезервировано языком, что это за слова?
Серьезно? Не помню точное количество. Ориентировочно 30-50. Перечислять тоже лень.
> 2. Что значит слово “инициализация”?
Первичное присвоение значения переменной.
> 3. Какие унарные и бинарные арифметические операции вы знаете?
Унарные: унарный плюс/минус, инкремент/декремент. Бинарные: +-*/%
> 4. Какой оператор используется для перехода к следующей итерации цикла?
continue
> 5. Как правильно организовать доступ к полям класса?
Поля непубличные, через геттеры.
> 6. Дайте определение понятию “конструктор”.
Метод, вызываемый при инициализации объекта
> 7. Что такое сигнатура метода?
Аргументы и их типы + возвращаемые значения и их типы
> 8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.
Бля, ну тут хуй знает. Видимо невозможно создать обьект такого класса напрямую. Можно создать в статическом методе такого класса, в его потомке. Скорее всего переопределить private конструктор в потомке тоже нельзя.
> 9. Чем отличается переопределение метода от перегрузки?
Перегрузка в япах обычно означает возможность создания методов с одинаковым названием, но разными аргументами. В пыхе такой хуйни нет.
Переопределение - создание метода с таким же названием в потомке.
> 10. Можно ли объявить метод абстрактным и статическим одновременно?
А хуле бы нет, да.
> 11. Можно ли перегрузить static метод?
Конечно, хуле нет.
> 12. Что будет, если единственный конструктор класса объявлен как final?
Нельзя его перегрузить?
> 13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
Хуй знает, в анонимных функциях надо все внешние переменные передавать через use. Таким извратом как создание анонимных классов не занимаюсь
Аноним 25/01/19 Птн 21:24:01 #375 №1334795 
>>1334793
>Ориентировочно 30-50.
Я вчера нагуглил. И уже забыл. Около 70. Почти все реально в памяти не держатся, постоянно используемых гораздо меньше (и от конторы к конторе может разниться то, основной или альтернативный синтаксис юзается).
Аноним 25/01/19 Птн 21:32:12 #376 №1334803 
>>1334795
А, ну в пыхе же ещё куча всякой хуиты уровня endfor и т.п.
Тогда возможно.
Лол, зато я помню, что в Go около 30 ключевых слов
Аноним 25/01/19 Птн 21:46:43 #377 №1334813 
>>1334396
> устарел на три года
>Последняя версия 1.13 (18.06.2018)
Аноним 25/01/19 Птн 21:52:47 #378 №1334819 
14148698996280.jpg
Читаю мануал от ОПа, появился вопрос по циклам (точнее, по математике внутри echo). Пишу такой код:

<?php
error_reporting(-1);
for ($x = 1; $x<=10; $x++) {
\techo "{$x}x{$x} = $x$x\n";
}
?>

Выдает
1x1 = 1
1
2x2 = 22
3x3 = 3
3
4x4 = 44
5x5 = 5
5
6x6 = 66
7x7 = 7
7
8x8 = 88
9x9 = 9
9
10x10 = 10*10

ЧЯДНТ? Пробовал pow($x,$x) и миллион вариантов расстановки круглых и фигурных скобок вокруг переменных, он их просто выводит строкой.

Алсо, ОП, у тебя в первых уроках сказано, что принцип, по которому дают имена переменным, называется camelCase, полез гуглить. Википедия говорит, что CamelCase - это когда каждое слово, включая первое, начинается с большой буквы, а то, как в пыхе называют переменные, называется lowerCamelCase. Ну и прослезился на задачках про доллар по 32 рубля.
Аноним 25/01/19 Птн 21:54:03 #379 №1334821 
>>1334819
У макабы свои правила разметки, которые сильнее пыхи, но код работоспособный, I promise.
Аноним 25/01/19 Птн 22:08:03 #380 №1334835 
>>1334793
>Унарные: унарный плюс/минус, инкремент/декремент. Бинарные: +-*/%
Аллилуйя, хоть кто-то ответил правильно.

>Аргументы и их типы + возвращаемые значения и их типы
Неверно.

>Хуй знает, в анонимных функциях надо все внешние переменные передавать через use. Таким извратом как создание анонимных классов не занимаюсь
Да по тем же правилам, что и к обычной переменой.
Аноним 25/01/19 Птн 22:20:30 #381 №1334844 
>>1334819
С этим разобрался, теперь другой вопрос возник. Как в один цикл впихнуть 2 действия? Например, если есть 2 переменные, и если одна переменная меньше 100, то прибавить 4 к ней, а к другой прибавить 1?
Аноним 25/01/19 Птн 22:22:00 #382 №1334846 
>>1334844
Не пихай в определение цикла такие вещи. А так через запятую 1 и 3 секция фора делится на действия.
Аноним 25/01/19 Птн 22:27:15 #383 №1334852 
>>1331405
Ушёл из сервисного центра в пыхокодеры где-то три четверти года назад.

Сложно, но учиться всегда сложно.
Аноним 25/01/19 Птн 22:31:32 #384 №1334860 
>>1334846
Спасибо, помогло. Действий сколько угодно можно добавить, надо полагать?
>Не пихай в определение цикла такие вещи
Это не я, это всё ОП! Я просто повторяю, что в мануале написано.
Аноним 25/01/19 Птн 22:33:53 #385 №1334862 
>>1334846
Асмобляди вообще делают так:
for(;;) {
тут какой-то код
условие прерывания
}

Так что не надо тут.
Аноним 25/01/19 Птн 22:38:20 #386 №1334865 
>>1334862
Я в курсе, что это можно. Дальше то что? И вообще любой цикл можно описывть через (другой цикл) while(true) или тот же for (;;), только в теле придется побольше написать. Это не значит, что это пиздец хорошая практика и погнали так делать все и всегда.
Аноним 25/01/19 Птн 22:47:41 #387 №1334870 
>>1334865
Просто так нагляднее. Видишь фор, ага, значит цикл, смотришь, что происходит за одну итерацию, так, тут инкрементится, тут складывается, тут ансеттится, тут условие, хуе-мое, а в случае с фор (что-то;что-то;что-то) смотришь что и где, примеряешь каждую итерацию к условию, мысленно прогоняешь итерацию за итерацией и в какой-то момент говоришь: так падажжи ебана.
Аноним 25/01/19 Птн 22:53:42 #388 №1334880 
>>1334870
Я так то ему посоветовал в случае фор использовать только счетчик в определении, все остальное в теле цикла для читаемости (возможно за редкими исключениями), а не добавлять туда всю кучу счетчиков и условий из тела цикла, хоть это и возможно. Он для того и создан, чтобы банальный счетчик итераций из тела вынести, вот пусть так и используется. Для других случаев другие вещи подойдут.
Аноним 25/01/19 Птн 23:04:47 #389 №1334891 
>>1334880
Да ты прав, конечно, просто я поспорить люблю.
Аноним 25/01/19 Птн 23:11:53 #390 №1334902 
>>1334880
Ты не прав. Нужно опираться на логику, а не на твое "Я сказал". Если нужно использовать составное выражение, то нужно использовать составное выражение. Выражения никогда не засоряют код, а вот лишние инструкции еще как. Цикл все равно будет в функции, будет скрыт, один раз написал и все. Потом используешь функцию как хочешь.
Аноним 25/01/19 Птн 23:22:33 #391 №1334914 
>>1334902
>Нужно опираться на логику, а не на твое "Я сказал"
Я этого и не говорил.
Аноним 26/01/19 Суб 02:04:00 #392 №1334954 
>>1334227
Не размещай кучу классов в одном файле. Один класс - один файл.
Аноним 26/01/19 Суб 03:29:32 #393 №1334962 
Аноны, доброго времени суток, только вкатился. Решаю задачки вот. Подскажите я сильно хуёво тут написал? Заебался голову ломать, не варит нихуя.. До этого задачки не вызывали особых затруднений, а тут с этими строками пизда
https://ideone.com/q3MrtH
Надо написать программу явл палиндромом.
С этими mb функциями пиздец просто в голове и массивы, и циклы и условия, ебись они конём с этой задачей нихуя не выходит. Целый день блять эти задачи решаю.
Заранее благодарю. Соре, пригорело.
Аноним 26/01/19 Суб 08:04:55 #394 №1334984 
>>1334954
Пфф, кто сказал что так нужно делать? Чепуха какая то.
Аноним 26/01/19 Суб 08:07:16 #395 №1334986 
>>1334962
Не годится. Создай функцию, которая будет принимать строку.

Прежде чем решать, расписывай алгоритм на бумажке. Эта техника очень помогает.
Аноним 26/01/19 Суб 10:40:28 #396 №1335016 
Какой вариант из двух предложенных ниже предпочтительнее использовать и почему? Они дублируют друг друга?

Первый:

$x = 10;
function test (&$x) {
$x = 5;
}
test($x);
echo $x; // 5

Второй:

$name = 10;

function test () {
global $name;
$name = 5;
}

test($name);
echo $name; // 5

Аноним 26/01/19 Суб 11:12:54 #397 №1335027 
>>1335016
Ни один. Что ты хотел показать и что хочешь сделать вообще? Если изменить глобальную переменную, то это антипаттерн.
Аноним 26/01/19 Суб 11:14:00 #398 №1335030 
>>1334986
>расписывай алгоритм на бумажке
Да зачем бумагу переводить? Прямо так пускай и пишет в редакторе:
// инициализировать переменные

// запустить такой-то цикл
// с таким-то телом

// и т.д.

А потом по этому скелету собирает.
Аноним 26/01/19 Суб 11:16:30 #399 №1335032 
>>1335027
Два разных способа сделать одно и то же. Спросил, какой предпочтительнее. Выходит - вообще нельзя менять по нормальным правилам? Тогда зачем существует ссылка на переменную?
Аноним 26/01/19 Суб 12:25:03 #400 №1335076 
>>1335030
На бумаге намного эффективней. Лучше использовать блок-схемы. То что ты написал - птичий язык. Он не формализован. По нему составить нормальный алгоритм невозможно. Для алгоритмов есть специальные формальные языки, - блок-схемы например.
Аноним 26/01/19 Суб 12:26:02 #401 №1335079 
>>1335032
Непонятно что ты делал. Учись подробно и четко объясняться. Чем лучше будешь объяснять, тем точнее получишь ответ на вопрос. Попробуй еще раз.
Аноним 26/01/19 Суб 13:05:02 #402 №1335116 
>>1335016
Зависит от того, что ты хочешь. В первом случае глобальная переменная изменится после вызова функции, во втором - нет.
Аноним 26/01/19 Суб 14:59:18 #403 №1335249 
Что делать, если мне надо возвращать несколько разных значений из метода?
Есть группа однотипных методов, которые принимают одинаковый параметр и возвращают один из возможных вариантов ответа.
Переписывать не вариант, уже пробовал, на архитектуру лучше всего ложится вариант, когда методы могут возвращать разные значения.

Какие есть варианты:
1. Не объявлять возвращаемый тип, а далее проверять через instanceof и функции вроде is_string что мне высрали. Не слишком хороший путь как по мне, ибо за счет динамической природы php будут ебнутые конвертации типов вроде string -> int.
2. Возвращать nullable-тип в связке с каким-то другим типом, то бишь, 2 возможных значения. Остальные значения записывать в члены класса и считывать потом. Тоже какое-то говно.
3. Создать свой класс, содержащий возможные значения и везде возвращать его. Плюсы: методы получаются чистыми, все четко и удобно. Минусы: надо городить очередной value-объект, бесполезный везде кроме этих нескольких методов.
4. out-параметры. Записывать некоторые или вообще все значения в переданные по ссылке переменные. Плюсы: аргументы типизируемы. Я могу передать "безтиповые" пустые переменные, а метод заполнит их нужными типами. Минусы: методы получаются нечистыми и ?? Вроде не такой уж хуевый вариант.

На какой стул сесть?
Аноним 26/01/19 Суб 17:44:32 #404 №1335404 
Привет, аноны. Начал немного осваивать PHP по учебнику из ОП поста. Прошу, подскажите, что делаю не так? Готовое решение не хочу, хочу сам понять, где обосрался. https://ideone.com/VGi2VJ. Заранее благодарю.
Аноним 26/01/19 Суб 17:44:55 #405 №1335405 
>>1335404
https://ideone.com/VGi2VJ - фикс
Аноним 26/01/19 Суб 18:20:15 #406 №1335433 
>>1335116
И во втором изменится - он импортировал её.
Аноним 26/01/19 Суб 18:39:07 #407 №1335448 
>>1331378 (OP)
Оп проверь пожалуйста. https://github.com/asdasdasdasddasasdasdas/StudentList

Аноним 26/01/19 Суб 20:23:55 #408 №1335517 
>>1331378 (OP)
Анончики, вопрос по регуляркам.
Задача с проверкой номеров телефона
Сделал первую часть: ^(\s?(\+\s?7|8))
А потом, в книге пишут:
>за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов
Как это сделать? 10 цифр это понятно: [0-9]{10}
А как сделать, чтобы между ними учитывались скобки, пробелы и минусы? Можно ли как то это сделать за один раз, либо придется что то типа: сначала идут 3 цифры, потом возможно скобка или пробел или минус, потом еще три цифры и опять может пробел или минус и т.д.?
Аноним 26/01/19 Суб 21:16:59 #409 №1335533 
>>1335517
Вот такая регулярка получилась, не понял, можно ли сделать так как говорили в подсказке к заданию
^\s?(\+\s?7|8)\s?-?\(?\s?[0-9]{3}(\s?-?\)?\s?){1,3}[0-9]\s?-?\)?\s?[0-9]\s?-?\)?\s?[0-9](\s?-?\)?\s?){1,2}[0-9](\s?-?\)?\s?)[0-9](\s?-?\)?\s?)[0-9]{2}$
Вот примеры для проверки https://regex101.com/r/qF7vT8/3.
Конечно получилось так, что он в основном проверяет примеры, которые даны в учебнике, потому что нужно было бы учитывать каждый пробел, тире после цифры, а это еще бы увеличило регулярку. Поэтому если знаете, скажите можно ли как нибудь записать регулярку по типу есть 10 цифр, а между ними может быть либ0 строчка, либо тиру, либо скобки?
Аноним 27/01/19 Вск 11:24:25 #410 №1335755 
Ебанутые, блять, тред до бамплимита за неделю угандошили.
Аноним 27/01/19 Вск 11:37:10 #411 №1335758 
>>1335533
Короче сделал увот так вот ^\s?(\+\s?7|8)([\s-\(\)0-9]*)$
Но теперь выделяется вся строка(то есть не только номер телефона, но и вся строка), но сократил как смогпросто увидел регулярку из четвертой части
Аноним 27/01/19 Вск 11:42:53 #412 №1335762 
>>1335405
Во-первых, какие <br/>? Это же не html, хотя не знаю, может в php тоже так можно, но все равно используй \n
Ну и твоя функция ничего не возвращает. ТО есть ты не используешь return
Аноним 27/01/19 Вск 11:56:22 #413 №1335769 
>>1335762
\n работают только в cli, а он в браузер выводит. Там только <br> работают.
Аноним 27/01/19 Вск 12:08:17 #414 №1335780 
>>1335769
В командной строке? Ты троллишь что ле? У меня по этой ссылке https://ideone.com/VGi2VJ выходит <br/><br/><br/> и все. Если изменить его на \n он работает
Аноним 27/01/19 Вск 12:45:48 #415 №1335802 
>>1335780
Потому что айдеон парсит код перед выполнением и заменяет все \n на <br>, а <br>, написанные тобой выводит, как есть, вот и работает. Такая вот имитация реальности. Как в VR-шлеме.
Аноним 27/01/19 Вск 12:56:58 #416 №1335808 
>>1335802
Это не ты тот "особенный", который говорил, что ООП не нужно?
Аноним 27/01/19 Вск 12:58:50 #417 №1335810 
>>1335808
А что, похож? Нет, к счастью. Я тот, кто спорил с ним по другую сторону баррикад.
Аноним 27/01/19 Вск 13:27:03 #418 №1335820 
>>1335808
>"особенный"
Как завуалированно ты указал на слово "шизик".
Аноним 27/01/19 Вск 16:11:08 #419 №1335991 
Супец, братаны-пыханы. Есть у меня поля в таблице, некоторые заполняются сразу, некоторые потом. Есть также поле с датой и временем. Как только я записываю данные в незаполненные ячейки строки, то дата с временем обновляются. Как сделать так, чтобы была обновлена только та ячейка в таблице, в которую идет запись?
Аноним 27/01/19 Вск 18:31:52 #420 №1336156 
ОП, а зачем ты советуешь местным макакичам учить pdo? Пусть сразу учатся в ORM разбираться. Это проще намного и используется в проде повсеместно. То есть практически применимо.
Аноним 27/01/19 Вск 18:48:41 #421 №1336194 
kateesnameyarik1.png
Аноны, есть вот такая структура.
обертка( другая_обертка( какой-то_метод() ) );
Обертка лежит в одном классе и передает данные в другую_обертку, которая лежит во втором классе, и она уже запрашивает данные у метода из того же (второго) класса и возвращает первой обертке в первый класс.

Мне нужно из обертки вызвать какой-то_метод, причем, заранее неизвестно, какой именно это метод.
Может можно как-то передать сигнатуру метода в другую_обертку, чтобы она с ее помощью вызвала этот метод?
Возможно такое в php?
Аноним 27/01/19 Вск 19:32:19 #422 №1336242 
8.png
https://ideone.com/RjqkmC
Никак не могу понять, почему у меня буква w меняется на заглавную. Помогите сообразить, пожалуйста. Хочу обойти ucfirst()
Аноним 27/01/19 Вск 19:51:23 #423 №1336267 
>>1336242
А что не так? Ты разбираешь предложение по знакам препинания и делаешь каждую первую букву заглавной. Перед w у тебя точка. W - начало нового предложения.
Аноним 27/01/19 Вск 19:56:35 #424 №1336277 
>>1336267
w в слове download. Там o перед w.
Аноним 27/01/19 Вск 20:13:04 #425 №1336293 
>>1336277
str_replace заменяет все вхождения, переданные первым аргументом. Первый аргумент у тебя w, соответственно функция заменяет все w в строке $sentence на toUpperCase(w). Очевидно же, анониус.
Аноним 27/01/19 Вск 20:17:03 #426 №1336296 
3.png
>>1336293
Моё увожение. Благодарю!
Аноним 27/01/19 Вск 22:49:27 #427 №1336421 
Есть в php хорошие встроенные итераторы деревьев?
Аноним 27/01/19 Вск 22:52:35 #428 №1336422 
Поясните вот за что. Раньше я точно помню как кодеры на пхп гордились отсутствием типизации и говорили всем (в том числе и мне) что она нахуй не нужна и будет отмирать во всех ЯП. А теперь я читаю что в версии пхп 7+ ввели типизацию и даже выделили её как основную фишку пхп этой версии. Собственно, когда произошла смена коней и как отреагировало ваше комьюнити? Как быстро вы переобулись из одного лагеря в другой и какие оправдания себе находите?
Аноним 27/01/19 Вск 22:56:40 #429 №1336424 
Ребята, как вы тестируете авторизацию?
Аноним 27/01/19 Вск 22:56:55 #430 №1336425 
>>1336422
Шизик, кто знает что тебе там показалось на заре твоей болезни? Никто не должен перед твоим манямиром оправдываться. Просто пей таблетки, которые врач прописал.
Аноним 27/01/19 Вск 23:09:48 #431 №1336431 
>>1336422
А с чего ты взял, что это одни и те же люди? На пыхе типизация не обязательна, можешь юзать ее, а можешь и не юзать. Можешь юзать частично. Вариантов масса. Да и к тому же, насколько я понял, указывать типы в пыхе это все равно что вставлять палки в свои колеса. Толку от них, все равно, если не укажешь тип - нихуя не произойдет, просто ошибка не выкинется.
Аноним 27/01/19 Вск 23:24:16 #432 №1336443 
>>1336422
Знал такого одного, но он вообще не очень был и все на массивах делал и методах по 1к строк. Типизация так то не обязательная, типа пиши как хочешь, хозяин барин. Хотя по хорошему обязательная во всех случаях, кроме тех, где нестрогость предусматривается логикой. Да и то эта тема доступна только в сигнатурах методов (хотя за версии типа 7.3 не в курсе изменений).
Аноним 27/01/19 Вск 23:29:46 #433 №1336451 
>>1336443
Сижу на 7.3, никаких изменений в отличие от 7.1 не заметил.
Аноним 28/01/19 Пнд 00:58:31 #434 №1336480 
>>1336431
>насколько я понял, указывать типы в пыхе это все равно что вставлять палки в свои колеса. Толку от них, все равно, если не укажешь тип - нихуя не произойдет, просто ошибка не выкинется.
ты всё неправильно понял

Вообще, типизация, лучшая вещь, которая случалась с пыхой за последние 5 лет.
В версии 7.4 добавили типизацию переменных класса при объявлении.
Новичкам советую приучаться и юзать всё с типами.

Аноним 28/01/19 Пнд 04:23:19 #435 №1336517 
>>1334217
Tut nikto ne yzaet dreampidor ili bootsthui. Dlya wseh uje dawno izobreli CSS Grid.
Аноним 28/01/19 Пнд 12:47:33 #436 №1336602 
>>1333694
>>1333692

Только дополз до работы, чтоб разобраться.

Сервер на диске C. Как мне, например, через хтмл (img src) вывести изображение pic.jpg, которое лежит на диске S?
Алиасы, кажется, делают не совсем то, что мне нужно.
Аноним 28/01/19 Пнд 14:16:59 #437 №1336656 
xc7862f91.jpg
Ребята, я не могу понять порядок работы функции preg_split().
Сначала долго вкуривал, как работают утверждения в регулярке, но в итоге разобрался в самом принципе. Однако теперь меня ввёл в ступор последний элемент массива в примере ОПа:
preg_split("/(?<=\d)/u", "12abc3"). Значения элементов массива будут такими: ['1', '2', 'abc3', ''].

Насколько я понял, функция будет посимвольно проходить по тексту, начиная с первого символа, и на каждой "остановке" делать проверку, не находится ли слева цифра. Если находится, то всё, что левее этой "остановки" попадёт в массив. Но мне не ясно почему работа регулярки не останавливается на последнем символе строки - 3. Там ведь дальше ничего вообще нет - куда она прёт?
То есть, изначально я думал, что функция сканит строку до символа 3. Остановившись на 3 и не зарегистрировав цифру слева, почему функция вообще выкидывает значение элемента abc3? А последний элемент - это вообще пушка. Как вообще логически туда могло попасть пустое значение?

В общем, я запутался. Помогите разобраться, пожалуйста.
Аноним 28/01/19 Пнд 15:05:56 #438 №1336684 
>>1336480
Плохое я время выбрал для своего проекта. Каждые пару месяцев приходится с версии на версию перекатываться.
Аноним 28/01/19 Пнд 15:07:35 #439 №1336686 
>>1336684
Помоему гдето раз в полгода-год минорка выходит, и перекатываться не обязательно так сразу.
Аноним 28/01/19 Пнд 16:02:13 #440 №1336702 
>>1336686
Что еще за минорка?
Аноним 28/01/19 Пнд 16:03:23 #441 №1336704 
>>1336702
На примере:
7.2
7 - мажорная версия
2 - миноная

Есть еще циферки дальше, но это лирика.
Аноним 28/01/19 Пнд 17:46:30 #442 №1336737 
>>1336704
А откуда пошло такое именование? С чем это связано?
Аноним 28/01/19 Пнд 18:03:36 #443 №1336750 
>>1336737
Я тебе только из головы могу сказать, а я нихера не шарю совершенно, кроме как на мажорку с миноркой ориентироваться, остальное не самое каждодневное.
Ну вот есть такая довольно общепринятая модель нумерования версии. Мажорка с миноркой понятно. Первая - это финиш, практически новый проудкт, вторая тот же продукт, но другое апи. Далее идут сборка и ревизия. Стадия кучи багфиксов так сказать и мелких правок. Сборка - это уже законченные билды, такие себе патчи с множеством фиксов, которые пользователям той же винды подсовывают под видом "нужно обновление" на минутку. Ревизия - тестовые билды конкретной сборки. Типа 3 билд 1452 ревизия означает билд номер 3 и 1452 ревизии этого билда хер знает кем, должно быть контролем качества.
Так то это не закон, иначе бы в школах учили, но полезно хотя бы первые две цифры нормально читать. Остальные уже при углублении.
Аноним 28/01/19 Пнд 18:56:13 #444 №1336778 
>>1336750
Я ничего не понял, что ты написал. Шизофазия какая-то. С термина на термин прыгаешь. Тебе никогда не говорили, что ты не логичен?
Аноним 28/01/19 Пнд 18:58:33 #445 №1336780 
>>1336778
Допускаю. Эту хуйню легко загуглить можно, не обязательно мой бред слушать.
Аноним 28/01/19 Пнд 21:28:26 #446 №1336928 
>>1336702
>>1336750
Гуглите семантическое версионирование: https://semver.org/lang/ru/#вступление

>>1336422
Ещё со времен PHP 5.3 ведущие фреймворки на полную использовали типизацию, может твои данные устарели лет на 10.

>>1336684
В PHP очень медленно и лениво добавляются изменения, для обновления минорной версии достаточно пару строк в проекте поправить (переводил проекты через 7.0 -> 7.1 -> 7.2). Конечно, при условии, что deprecation warnings исправляются сразу же. Это не JS, где каждые полгода проекты переписываются на новом стеке / фреймворке.
Аноним 28/01/19 Пнд 22:20:14 #447 №1336989 
>>1336928
>может твои данные устарели лет на 10.
Я так смотрю - пол интернета судит пхп по версии 10-летней давности. Что самое забавно примерно столько же легаси говна на нём уже налепили.
Аноним 28/01/19 Пнд 22:29:09 #448 №1336999 
>>1336989
Я тебе больше скажу: не все знают, что вышла 7 версия, и до сих пор продолжают лепить проекты на 5.6 версии по привычке.
Аноним 28/01/19 Пнд 22:57:53 #449 №1337037 
>>1336999
>не все знают, что вышла 7 версия
Как можно назвать человека, который в своей профессиональной деятельности не следит за индустрией?
Аноним 28/01/19 Пнд 23:20:33 #450 №1337062 
>>1337037
Да никак. Гонка за новым это дело молодых.
Аноним 29/01/19 Втр 08:29:06 #451 №1337204 
>>1337062
А ты пенсионер что ли, с паркинсоном и амнезией?
Давай не будем оправдывать свою лень и устаревший говнокод возрастом.
someApprentice 29/01/19 Втр 09:20:14 #452 №1337215 
Некропостинг

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

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

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

>>1331431
>Все наоборот. Глупые идеи всегда выстреливают, потому что умных людей, хорошо понимающих науку и инженерию единицы. Кто отвергнет ООП? Школьники, кодеры без образования? Только тот кто понимает математику, науку, и инженерию. Таких очень мало. Кто использует ООП? Все кому не лень. Но у них у всех есть общая черта, они не знают и не понимают математику. Так как не понимают математику, то не понимают и науку с инженерией в целом.
Всё с точностью да и на оборот.

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

>Математики и инженеры начала, середины, и немного конца 20-го века, были последними кто мог создавать шедевры. Делать вещи простые, компактные, функциональные, но без лишнего. Как пример Лямбда-исчисление Чёрча, и комбинаторная логика Шейнфинкеля-Карри.
Древние технологии это тонкий и острый инструмент, да. Но каждый инструмент имеет свои плюсы и минусы. Как ты и сказал, ООП предназначено для решения любой абстрактной задачи, но в перевес этому, оно не может решить так эффективно конкретную задачу, как это сделали бы те технологии.

Мастерство заключается в умении правильно применить те или иные плюсы и минусы.
someApprentice 29/01/19 Втр 09:50:03 #453 №1337226 
>>1331749
>>1331762
>Аноны, а просто любопытно, как вы читаете тред?
>Добавлен в избранное двача.
This.

>И как находите ответ на свою задачу если ОП часто их проверяет только несколько дней спустя, и за этой время успевают запостить 300-400 постов?
>Обязательно добавляю в сообщение с решением какое-нибудь ключевое слово (чаще всего название задачи), по нему нахожу свой пост и ответы к нему. Если задачу нужно переделывать, ваш ответ сохраняю в ворд-файл, чтобы не искать каждый раз.
Специально для таких случаев уже позаботились об этом - на сайте https://phpclub.tech можно получить конкретную цепочку обсуждения в течении всех тредов!

Чтобы это сделать нужно нажать на иконку "Цепочки" на интересующем вас посте.

https://phpclub.tech/pr/chain/1331762/
Аноним 29/01/19 Втр 09:54:22 #454 №1337228 
>>1336656

Алгоритм работы preg_split такой:

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

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

Пример: строка "abc", выражение "/./ui". Оно найдет подстроки "a", "b", "c". После "вырезания" из строки этих подстрок остается 4 пустых подстроки: ['', '', '', ''] - подстрока слева от a, между a и b, между b и c, после c.

Пример поинтереснее: выражение //ui, строка "ab". Пустое регулярное выражение совпадает с любой строкой, но не захватывает символы из нее. Потому оно "найдет" в строке 3 подстроки: перед a, между a и b и подстроку после b, все подстроки нулевой длины. Разбиение по этим подстрокам даст массив ['', 'a', 'b', ''].

Проверка, угадал ли я результат: https://repl.it/repls/CluelessRaggedAbstractions

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

Для отладки ты можешь использовать флаг PREG_OFFSET_CAPTURE в preg_match_all, который покажет позицию найденных подстрок (в байтах, а не символах, но для латиницы 1 байт = 1 символ).

Если ты хочешь зайти глубже, можно скачать библиотеку pcre, к которой приложены отладочные утилиты вроде pcretest ( https://www.pcre.org/ ). Они вызываются из ком. строки. Обрати внимание, что для некоторых платформ библиотека распространяется в исходных кодах и ее надо будет компилировать.
someApprentice 29/01/19 Втр 11:02:02 #455 №1337267 
>>1335249
google://php multiple return declaration
https://stackoverflow.com/a/37033355
someApprentice 29/01/19 Втр 11:07:19 #456 №1337270 
>>1335991
Покажи код и конкретно опиши проблему.
someApprentice 29/01/19 Втр 11:09:47 #457 №1337272 
>>1336194
>Возможно такое в php?
Да, это называется callback.

https://ru.wikipedia.org/wiki/Callback_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
https://secure.php.net/manual/ru/language.types.callable.php
someApprentice 29/01/19 Втр 11:23:50 #458 №1337282 
>>1336424
>Ребята, как вы тестируете авторизацию?
https://github.com/someApprentice/Portfolier/blob/master/tests/AuthorizationTest.php

Login/logout выполнен с помощью Symfony Security, но и это тестируется точно так же.

Почитай урок codedokode о тестировании и у тебя появится представление об этом.

https://gist.github.com/codedokode/a455bde7d0748c0a351a
Аноним 29/01/19 Втр 12:52:15 #459 №1337322 
>>1335448
Ты сам-то запускал что понаписал там, оно же, блядь, банально не работает! ОПу еще и дебажить за тебя что-ли?
Никто не обязан твоё говно разбирать, а на галере тебя за такое ебать грязной шваброй будут. Приведи код в порядок и рабочее состояние, чтобы смотреть приятно было. Имей уважение к своему труду и чужому времени, дружок.
someApprentice 29/01/19 Втр 14:12:10 #460 №1337361 
>>1337322
Свой негатив можешь оставить в /b/, а здесь люди пытаются научиться программированию на своих ошибках.

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

Пожалуйста, займись своими эмоциями в тематических для этого тредах, а в этом треде, и тем более, разделе занимаются программированием.
Аноним 29/01/19 Втр 14:25:54 #461 №1337370 
>>1337361
>Ты даже не указал где конкретно ошибка
Он не работает и человек выложил это на проверку, на всеобщее обозрение. Т.е. он сам неудосужился его проверить. Ошибка между стулом и клавиатурой.

>Свой негатив можешь оставить
А ты мне рот не затыкай, фашист.
someApprentice 29/01/19 Втр 14:32:22 #462 №1337373 
>>1337370
Я ожидал что разговор с такими эмоционально неуравновешенными будет бесполезен.
Аноним 29/01/19 Втр 14:44:08 #463 №1337381 
>>1334227
бамп
Аноним 29/01/19 Втр 14:46:21 #464 №1337383 
>>1337373
Пыхыпыдебил - это хуже всего вообще, даже хуже червя-пидора.
Чему ты, гнида, наглядная иллюстрация.
Аноним 29/01/19 Втр 14:52:13 #465 №1337387 
>>1337373
Дружок, ты выложил свой код на оценку - его оценили так как он того заслужил. Он не работает и тебя заслуженно обосрали, отчего ты начал обвинять просмотревшего в неуравновешенности. Заказчику ты тоже такое скажешь?
someApprentice 29/01/19 Втр 14:59:08 #466 №1337389 
>>1337387
Да.
Аноним 29/01/19 Втр 15:00:29 #467 №1337390 
>>1337226
Спасибо за ссылку, ОП. Благодаря тебе я нашел свой первый пост от 2015 года, где приложил скриншот своей первой имиджборды на html+php, такая-то ностальгия.
someApprentice 29/01/19 Втр 15:03:01 #468 №1337391 
>>1337390
>Спасибо
Пожалуйста, теперь иди нахуй.
Аноним 29/01/19 Втр 15:03:37 #469 №1337392 
Подскажите пожалуйста:
есть кусок кода, который должен выполнятся только первый раз. при перезагрузке страницы ничего не должно выполнятся.
Аноним 29/01/19 Втр 15:04:51 #470 №1337393 
>>1337389
Было бы забавно посмотреть, когда у заказчика падает весь магазин китайских поддельных сумок из-за такого вот кода в твоём плагине, а ты ему в ответ про неуровнавешенность лекции читаешь.
Аноним 29/01/19 Втр 15:08:53 #471 №1337395 
>>1337392
В куках ответ сей можно найти.
Аноним 29/01/19 Втр 15:12:09 #472 №1337396 
так много работы и почти нет конкуренции пхп зоотая жила прям, серьезно
someApprentice 29/01/19 Втр 15:12:13 #473 №1337397 
>>1337393
>неуровнавешенность
Ты эмоционально порвался неуравновешен.
someApprentice !EaaiHmIJms 29/01/19 Втр 15:17:42 #474 №1337401 
>>1337390
Я не, ОП. Я основоположник этого сайта и всего лишь учусь у него.


Прикньте у этого чувака так бомбануло, что он начал семенить от моего имени >>1337389 >>1337391 >>1337397 . Ахахахах жалко что нельзя отсылать голосые в тред, у него бы тогда ещё больше бомбануло от того как я смеюсь с него))))

Что это за люди что они делают зачем им всё это)))


P.S.
На этом можно прекратить флуд.
Аноним 29/01/19 Втр 15:20:27 #475 №1337402 
>>1337397
>Ты эмоционально неуравновешен.
Тебе показалось.
А вот ты неуважаешь ни свой труд, ни время других людей и вообще мудак по жизни, судя по треду - твой код ОП уже проверял, так ты, сделал минимальные правки и опять код-ревью на нерабочее говно просишь. Ты совсем шынгыс?
Аноним 29/01/19 Втр 15:27:55 #476 №1337406 
Хватит флудить. Код будет проверен, просто чуть позже.
someApprentice 29/01/19 Втр 15:30:06 #477 №1337410 
>>1337401
>Я не, ОП
>Ахахахах
>голосые
>)))
Ясно.
>>1337402
У тебя неуравновешенность, не способен помочь - проходи мимо
someApprentice 29/01/19 Втр 15:32:44 #478 №1337412 
>>1337406
Не указывай и не оправдывайся а лучше пройди нахуй
Аноним 29/01/19 Втр 15:48:45 #479 №1337422 
>>1337401
>Я основоположник этого сайта
Абу, иди нахуй.
Аноним 29/01/19 Втр 17:39:10 #480 №1337471 
Наверное, этот вопрос тут уже тысячу раз задавали, но я задам еще раз. Зачем в php нужно деление на статичестие и не статические методы? В чем между ними разница? Я ведь могу обращаться к методу через экземпляр или напрямую через класс, какая разница?
Аноним 29/01/19 Втр 17:53:29 #481 №1337475 
>>1337471
>В чем между ними разница?
Если по простому - их можно ползовать без инициализации объекта. А ещё они выдаются в единственном экземпляре на все объекты этого класса, что иногда удобно и позволяет не размазывать функционал по приложению.
Аноним 29/01/19 Втр 18:06:20 #482 №1337479 
>>1337475
То есть если я вызову нестатический метод в одном объекте, то он повлияет только на него, а если статический вызову из класса, то он повлияет на все?
Аноним 29/01/19 Втр 18:08:23 #483 №1337481 
Аноны, есть некоторый запрос в бд. Мне его нужно отсортировать по, пусть будет, именам. Я через bindParam привязываю переменную к ключу, но сортировка не происходит вообще, зато если я пишу точно такой же запрос, но без ссылки, то все работает. Для примера:
$stmt = $db->prepare("SELECT xui, pizda "
. "FROM twoja_mat "
. "ORDER BY xui DESC ");
И
$stmt = $db->prepare("SELECT xui, pizda "
. "FROM twoja_mat "
. "ORDER BY :xui DESC ");
$stmt->bindParam(':xui', $xui, PDO::PARAM_STR);
. Причем, если основываться на отладке, то и в первом и во втором случае происходит запрос к бд SELECT xui, pizda FROM twoja_mat ORDER BY xui DESC, но с той лишь разницей, что при привязке ключа, 'xuy' будет в кавычках. Что я делаю не так? Не гуглится нихуя
Аноним 29/01/19 Втр 18:51:58 #484 №1337493 
>>1337481
Байнды лучше всего избегать, это сильно усложняет восприятие кода.
Аноним 29/01/19 Втр 19:12:01 #485 №1337502 
>>1337481

Разница есть.

ORDER BY a - сортировать по значению поля a
ORDER BY 'a' - сортировать по строке 'a' (то есть как попало, так как мы сортируем по массиву одинаковых строк)

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

>>1337493

Не сказал бы. Хотя тут правильнее использовать bindValue, bindParam используется для двухстронней привязки, когда данные из БД заносятся обратно в переменную.
Аноним 29/01/19 Втр 19:37:45 #486 №1337505 
>>1337479
Статические методы из вызываются не столько из объекта, а из класса, вроде бы, и доступа к внутренним полям конкретного объекта у него нет, только, опять же, к статическим полям класса.
Ну сам напиши да попробуй, недолго ведь.
Аноним 29/01/19 Втр 19:44:05 #487 №1337508 
Что такое фронт контроллер? Это точка входа в приложение типа index.php или вызываемый в этом индексе главный класс приложения App, от которого танцуют все остальные классы?
Аноним 29/01/19 Втр 19:46:00 #488 №1337510 
>>1337505
Впервые слышу об этом. Я могу получить доступ к полям класса из статического и из нестатического метода.
Аноним 29/01/19 Втр 19:50:05 #489 №1337514 
>>1337481
Я вчера вот точно с такой же хренью сражался. В итоге плюнул и написал костыль сортировки через switch, который ORDER BY тупо соединяет с нужным значением. Думаю меня за это обоссут.
Аноним 29/01/19 Втр 19:52:55 #490 №1337518 
>>1337510
А у меня вроде не получалось - писал, что-то в стиле "нельзя использовать этот метод\ссылку в таком контексте", хотя могу путать - давненько дело было.
Аноним 29/01/19 Втр 19:58:54 #491 №1337521 
>>1337508
>Это точка входа в приложение типа index.php
Говорят это. Я там обычно окружение настраиваю - ошибки, дебаг там, пшеница, рожь, вот это всё. Потом бутстрап.пхп подключаю и понеслася.
Аноним 29/01/19 Втр 20:34:05 #492 №1337545 
>>1337521
>пшеница, рожь
Покушать-то.
Аноним 29/01/19 Втр 20:40:29 #493 №1337548 
А я вот думал, какая к черту разница, с ООП мы пишем или все в одном файле? Все равно интерпретатор превращает наш код в лапшу, выполняя строчку за строчкой
Аноним 29/01/19 Втр 20:45:53 #494 №1337550 
>>1337548
Важно понять процедурную абстракцию (функции). Это основа. И обязательно функции высшего порядка.
Аноним 29/01/19 Втр 20:57:11 #495 №1337558 
Laravel or Symfony?
Аноним 29/01/19 Втр 20:58:54 #496 №1337559 
>>1337558
Yii2
Аноним 29/01/19 Втр 21:00:23 #497 №1337562 
>>1337559
стагнация и за рубежом не востребован
Аноним 29/01/19 Втр 21:03:37 #498 №1337563 
>>1337558
Ну, смотря что ты хочешь сделать. Можно наугад просто выбрать или же взять и прочитать то, что пишут в интернетах.
Взять можно фреймворк посложнее, если тебе нужно не просто очередной магазин запилить: делаешь фреймворки, которые отвечают твоим задачам, запоминаешь стек фреймворков и расписываешь все плюсы и минусы. Так и сравниваешь потом плюсы и минусы и потом, если тебе нужна какая-то киллерфича, ищешь ее и выбираешь фреймфорк исходя из нее. Размер фреймворка и его архитектура элементов на стиль твоего кода не влияют.
Аноним 29/01/19 Втр 21:04:34 #499 №1337564 
>>1337548
А ЦП вообще побитово всё воспринимает. Может обратно на перфокарты вернёмся?
Аноним 29/01/19 Втр 21:15:47 #500 №1337572 
>>1337564
Не совсем. 32-х или 64-х битные команды.
Аноним 29/01/19 Втр 21:20:41 #501 №1337575 
ну чо суки, объясняйте нахуй. Вкатился я в это ваше ебливое php. Вторую неделю дрочу этот "учебник" для дурачков от ОПа. Ебать то ли я такой "индивид", то ли ОП ебанутый. В этом нахуй учебнике, по-моему может быть ограниченному мнению-нихуя не понятно после массивов. Я уже неделю вешу, вроде бы что-то понимаю и блять опять нихуя не понимаю. У меня ща пукан в файер шоу превратился. Может ещё кто-то какие-то лёгкие гайды распишет? Или ресурс какой подкинет.
Аноним 29/01/19 Втр 21:21:25 #502 №1337577 
>>1337572
Там минимальный вычислительный элемент - транзистор. Нет там никаких команд на таком уровне. Один набор нулей с единицами - одна команда, другой - другая.
Аноним 29/01/19 Втр 21:21:38 #503 №1337578 
>>1337575
hexlet.io
Аноним 29/01/19 Втр 21:22:45 #504 №1337582 
>>1337575
Нет, нахуй иди.

Или научись у людей нормально помощь просить, долбоёб.
Аноним 29/01/19 Втр 21:23:25 #505 №1337583 
>>1337582
погорячился, извини Анон.
Аноним 29/01/19 Втр 21:23:33 #506 №1337584 
>>1337577
Архитектура ЭВМ имеет 7 уровней. Ты говоришь про один из нижних. А я говорил про уровень микроархитектуры.
Аноним 29/01/19 Втр 21:28:56 #507 №1337587 
>>1337583
Что тебе именно непонятно? Строки, функции, регулярки?
В этом учебнике только азы, потом повеселее будет, с ООП и студент-листом, где ОП, вроде бы, объясняет, но нифига не всё, а скорее пинает в нужную сторону и катись сам дальше.
Аноним 29/01/19 Втр 21:48:36 #508 №1337598 
>>1337587
На самом деле этот учебник просто сборник задачек с неплохим зазывающим началом. Остальное там хуита ненужная.
Аноним 29/01/19 Втр 22:00:39 #509 №1337602 
>>1337598
Вполне нужная хуита там. Нужная и полезная. Уж точно лучше гугла, который до сих пор в поиске выдаёт советы от знатоков, которые через msql на БД ходят.
Аноним 29/01/19 Втр 22:07:26 #510 №1337607 
>>1337587
В общем я вкатился с полным Nullем знаний, я прошёл задачки в темах Массивы, Циклы и Условия и всё до них. И у меня какое-то зависание теперь происходит. К слову я это именно задрачиваю, т.е. приходя домой с работы в 17.30, я ем и начинаю заниматься до 21-22, а потом намертво падаю до 6.20. И по новой каждый день. Так вот последние 2 дня, я просто нихуя не понимаю что от меня хотят в задачах, какие переменные и куда что засовывать. Я думаю, я просто заебался.
И, кстати учу я так:
1) Читаю гайд от ОПа
2) Мануал ПХП обязательно листаю по подходящей теме
3)Решаю задачи
4)Ищу решения в интернете и осмысляю их
А по факту последние 2 дня я выполняю 1, 2 и всё, даже не уверен что в голове что-то откладывается.
Стоило бы отдохнуть пару дней хотя бы от этого или продолжать тыкаться-мыкаться в эту закрытую стену?
Аноним 29/01/19 Втр 22:14:41 #511 №1337609 
>>1337602
Так рабочий способ же. Низкоуровневый, но рабочий.
Аноним 29/01/19 Втр 22:18:38 #512 №1337612 
>>1337607
Советую тебе просто умереть и не создавать мне конкуренцию, сидящему на шее у мамки и каждый день с утра до ночи пидорящему пыху и смежное.
Аноним 29/01/19 Втр 22:21:15 #513 №1337613 
>>1337612
нахуя ты тогда пидоришь это говно? У тебя ж и так всё хорошо.
Аноним 29/01/19 Втр 22:26:29 #514 №1337615 
>>1337613
Скажем так, я заглядываю наперед.
Аноним 29/01/19 Втр 22:28:57 #515 №1337617 
>>1337607
Просто такие вещи требуют времени для понимания, если никогда раньше ничего такого не делал. Понимание машинной логики не всем сразу даётся: все эти циклы, ветвления, переменные. Просто дай себе время чтобы переварить инфу, не гони. Закинул себе тему новую, попробовал задачку - вышла\не вышла, но отдохни день-два, просто возвращайся иногда в мыслях к этой теме, обдумывай её и через пару дней увидишь как всё просто на самом деле. А сдуру и хуй сломать можно.
И поменьше эмоций - успеется ещё жопой пригорать к стулу.
Аноним 29/01/19 Втр 23:05:05 #516 №1337646 
>>1337617
> А сдуру и хуй сломать можно.
Ненавижу эту фразу.
Аноним 29/01/19 Втр 23:12:30 #517 №1337653 
В чем разница между ошибкой и исключением с точки зрения фреймворков? Вот я начал ковырять один из них и вижу, что ErrorHandler обрабатывает не ошибки, а исключения. Разрабы опечатались просто или что?
Аноним 29/01/19 Втр 23:13:38 #518 №1337655 
>>1337646
Держи в курсе.
Аноним 29/01/19 Втр 23:36:24 #519 №1337660 
Хочу сделать викторину, почти как "борьба умов" на телефоны, только в виде сайта. С чего начать? Какие темы гуглить?
Аноним 29/01/19 Втр 23:41:20 #520 №1337661 
>>1337660
Ты хочешь чисто на эрудицию делать вопросы или на находчивость? Если первое, то обратись к вике, если второе у нас на дваче куча разделов с тематикой, откуда можно почерпнуть вопросов.
Аноним 29/01/19 Втр 23:57:29 #521 №1337665 
>>1337661
Не про вопросы для сайт спросил. Интересно как реализовать сам сайт, я изучаю пхп всего 1.5 месяца, и понимаю только синтаксис, так же еще сделал по видеоуроку интернет магазин, но из него я пока подчерпнул знания с БД и не более. В общем интересна сама реализация.
Например я захожу на сайт и регистрируюсь или просто имею случайное имя типа "гость111", выбираю например сложность вопросов, ищу случайного оппонента либо играю с опредленным, статистика ответов, награды за победы и т.д.
Аноним 30/01/19 Срд 00:37:41 #522 №1337673 
>>1337665
Это нахуй никому не надо будет, лучше что-нибудь полезное сделай.
Аноним 30/01/19 Срд 01:43:21 #523 №1337684 
>>1337673
Это мне надо умник ебаный
Аноним 30/01/19 Срд 05:47:50 #524 №1337710 
>>1337660
Ты понимаешь как сделать роутинг? Сессии, БД, вот это вот все изучал? Для такого сайта скорее всего нужно SPA.
Аноним 30/01/19 Срд 07:47:09 #525 №1337726 
>>1337617
благодарю, анон! Так и поступлю.
Аноним 30/01/19 Срд 08:40:03 #526 №1337732 
>>1337508

Это паттерн проектирования, описанный например тут: http://design-pattern.ru/patterns/front-controller.html

Когда все запросы проходят через Front контроллер и дальше уже направляются на обработку Page controller, контроллеру конкретной страницы.
Аноним 30/01/19 Срд 10:15:32 #527 №1337764 
>>1337508
PHP рожден чтобы умирать. У него такая модель жизни приложения. Запустилось и умерло. Поэтому раньше делали роутинг приложения с помощью веб-сервера. Он запускал для каждого запроса отдельный .php файл.

Единая точка входа, это когда все запросы идут в один файл. А там запускается роутер, который вызывает нужные функции, в зависимости от запроса.
Аноним 30/01/19 Срд 11:02:50 #528 №1337779 
>>1337502
Пиздец, спасибо аноне. В итоге просто сделал для сортировки разные препеиры. Но код пиздец раздулся
Аноним 30/01/19 Срд 11:17:42 #529 №1337785 
>>1337764

Вообще, этот паттерн, когда скрипт отрабатывает и завершается - это скорее плюс, так как он убирает лишнее состояние и делает работу приложения на PHP более близкой к функциональной парадигме, и к идее stateless из REST: выполнение одного экземпляра скрипта не влияет на выполнение другого экземпляра. Также, это обеспечивает простоту масштабирования на много серверов, и избавляет от проблем с утечками памяти, которыми часто страдают приложения на других языках. Хуже того, для многих языков при этом нет доступных и удобных средств поиска источника утечек.
Аноним 30/01/19 Срд 11:26:20 #530 №1337789 
>>1337785
Утечки не совсем на уровне скрипта, а на уровне процесса. Так то они все равно существуют, ибо процесс все же не создается полностью с нуля на каждый реквест - не самое шустрое дело. Можно и так конечно, но работа будет нихера не отзывчивой. Просто это дело проходит безболезненно обычно. Тот же php-fpm чаще всего конфигурируется на заданное количество реквестов на один процесс в пуле, после чего тот нормально убивается (соответственно чистится память) и запускается новый. Можно и без перезапуска процессов, но тогда надо убедиться что утечек реально совсем нет, что не всегда вообще от тебя зависит.
Аноним 30/01/19 Срд 11:27:20 #531 №1337790 
>>1337785
SPA как делать в таком случае? Производительность при умирающем приложении очень низкая, 1000 rps потолок, а то и меньше. Еще бывает нужно что-то делать в фоновом режиме.

ФП к этому не относится. В ФП пропагандируется не изменять состояние переменных. Но в базу писать нужно все равно, и запросы обрабатывать. Если каждый раз создавать соединение с базой, производительность будет плачевной.
Аноним 30/01/19 Срд 11:56:21 #532 №1337798 
>>1337790
>Производительность при умирающем приложении очень низкая, 1000 rps потолок
Откуда ты эти цифры берешь? Зависимость от конкретной реализации конкретного приложения и мощностей машины напрямую присутствует.
>SPA как делать в таком случае?
И это тут совершенно не причем.
Для начала просто выясни сколько рпс тебе нужно. Потом поищи узкие места, если все еще актуально будет. 1к рпс в большинстве случаев потащит больше 10к пользователей одновременных. (цифры умозрительные, зависит от логики потому что, просто усреднил. в одной прилоге один пользователь может генерить в среднем 1 запрос за минуту, в другом может 10 запросов за секунду, не угадаешь) Уверен, что у тебя достигается нужная посещаемсоть для преодоления отметки в 1к рпс? Я просто не в курсе по твоему проекту, так что вполне может быть ты раньше времени паниковать начинаешь.
Аноним 30/01/19 Срд 12:09:08 #533 №1337802 
>>1337798
>Откуда ты эти цифры берешь? Зависимость от конкретной реализации конкретного приложения и мощностей машины напрямую присутствует.
Уже давно все протестировано. На хорошем i7 не более 1000 rps держит, при умирающем приложении.

>>1337798
>И это тут совершенно не причем.
Как это не причем. Каждый раз поднимать приложение? Это будет говеное SPA, будут задержки.

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

Аноним 30/01/19 Срд 12:26:20 #534 №1337806 
>>1337802
>Каждый раз поднимать приложение? Это будет говеное SPA, будут задержки.
Угу, и на приложениях для телефончиков всяких тоже, котоыре все через те же апишки работают, которые очень часто на пхп. Или браузерки возьми какие-нибудь - их там тоже до задницы на самом обычном коде с пхп, как хороших так и плохих.
Если у тебя ощутимые задержки без проблем с интернетом - скорее всего узкое место в твоей реализации и тебе нужно фиксить именно его.
При замерах рпс неважно спа там или нет, потому что ты замеряешь только выносливость приложения на текущей развертке. Среднее время на запрос тогда смотри. Интересно узнать кстати, какое среднее время запроса ты считаешь приемлимым.
>взять хотя бы интернет-магазин
На таких проектах при высокой нагрузке у тебя больше проблем с базой будет, чем с приложением. Там в бд страсти христовы часто.
>Каждый раз поднимать приложение?
Если не лень замерь именно сколько времени тратится на подъем приложения на разных фреймворках, интересненько будет посмотреть.
Аноним 30/01/19 Срд 12:42:23 #535 №1337811 
>>1337806
>Угу, и на приложениях для телефончиков всяких тоже, котоыре все через те же апишки работают, которые очень часто на пхп.
Извини, но это глупость. Создание процесса не быстрое дело. Для SPA нужен мгновенный отклик. Поэтому вероятно сейчас много SPA приложений тормознутые. По хорошему, для SPA нужно активное соединение, и соответственно запущенный процесс. Каждый раз поднимать это глупость. Так могут делать либо дилетанты, либо пофигисты, кто не заботится о пользователях.

>>1337806
>Если у тебя ощутимые задержки без проблем с интернетом - скорее всего узкое место в твоей реализации и тебе нужно фиксить именно его.
У меня все в порядке. Мне ничего фиксить не нужно.

>>1337806
>Если не лень замерь именно сколько времени тратится на подъем приложения на разных фреймворках, интересненько будет посмотреть.
Я говорил о чистом PHP. С фреймворками оверхед еще больше.
Аноним 30/01/19 Срд 12:49:02 #536 №1337812 
>>1337811
Ну тогда не поднимай каждый раз прилогу, раз сам для себя решил этот вопрос уже. Это возможно и легко гуглится, просто не так часто с этим люди работают и не думаю что ты помощь в этом треде найдешь особенную по этому вопросу.
https://github.com/walkor/Workerman
Вот как пример. Можно еще аналогов найти не мало.
Аноним 30/01/19 Срд 13:01:38 #537 №1337823 
>>1337812
Я разве задавал вопросы? Я отвечал на вопрос. Ты вклинился и начал мне объяснять как у меня все неправильно и плохо.
Аноним 30/01/19 Срд 13:03:18 #538 №1337826 
>>1337823
Ну блядь приехали, тогда не формируй ответ как вопрос.
>SPA как делать в таком случае?
Аноним 30/01/19 Срд 13:16:42 #539 №1337833 
>>1337826
Это были наводящие вопросы. А не вопросы ответы на которые я не знаю. Если бы я тупо начал писать, что ты все говоришь не правильно, а нужно так и так, то это был бы не аргументированный текст.
Аноним 30/01/19 Срд 13:26:58 #540 №1337835 
>>1337785
>>1337764
>>1337732
То есть фронт-контроллер это не один файл, а несколько?
Аноним 30/01/19 Срд 14:11:27 #541 №1337846 
>>1337835
Вопрос не понятный. Сам по себе контроллер это не файл, а функция.
Аноним 30/01/19 Срд 15:12:19 #542 №1337873 
>>1337617
Да всегда работает, лол, видимо с мышлением как-то связано, случается какой-то заклин на определенной метакогниции относительно задачи, откладываешь, возвращаешься и вуаля смотришь под другим углом или еще до решения озаряет.
Аноним 30/01/19 Срд 17:12:01 #543 №1337971 
>>1337607
Затуп на 1000 лет
Аноним 30/01/19 Срд 17:38:17 #544 №1337987 
>>1337846
Да понятно. Фронт-контроллер это точка входа приложения. Просто хочу понять, где эта точка входа: файл, куда направляются все пользовательские запросы или инициация всего приложения из этого файла.
Аноним 30/01/19 Срд 17:41:16 #545 №1337991 
>>1337987
Ты можешь даже разные приложения дергать при желании. Вот фронт контроллер этим и занимается. Точка входа самое правильное описание для него, усложнять далее не обязательно.
Аноним 30/01/19 Срд 18:07:04 #546 №1338016 
>>1337987
index.php например. Дальше за дело берется роутер.
Аноним 30/01/19 Срд 19:33:48 #547 №1338085 
Анон, который пишет свой фреймворк-велосипед, я думаю сделать к нему официальную документацию, комментарии и т.д. на русском языке и выложить это на гитхаб.
Как думаете, если очередные хабрадауны заметят мое поделие, то много вони поднимется из-за того, что я пишу доки на родном языке, а не на их любимом ангельском?
Также хочу кастомизировать обработчик ошибок и исключений, красиво оформить и национализировать для русскоязычного сообщества.
Аноним 30/01/19 Срд 19:37:02 #548 №1338087 
>>1338085
>хабрадауны
Судя по движухе в этой клоаке дауны как раз таки тут.
Аноним 30/01/19 Срд 19:55:53 #549 №1338095 
>>1338087
Почему?
Аноним 30/01/19 Срд 20:00:39 #550 №1338097 
>>1338095
А ты сравни даунов, которые на хабре пописывают, может даже чегото достигают. С теми, которые тут сидят только ради анонимного перекидывания говном, которое ни одной живой душе не интересно. И все на свои места встанет. А так пиши, можешь даже статейку написать о своем поделии, не обязательно на хабр.Велосипедные темы довольно популярны.
Аноним 30/01/19 Срд 20:22:28 #551 №1338122 
>>1337873
Это известный факт, что для обучения нужно время. В идеале ещё и не напрягаться и учить столько, сколько хватает от сессии до сессии и не больше, вот тогда ещё и удовольствие приносить начинает, что, в свою очередь опять улучшает и ускоряет понимание материала. А если напрягаешься во всю, да ещё при этом начинаешь замечать, что туго идёт как-то, то всё - приехали. Стресс, переключение внимания на себя, а не на предмет, потом складывается негативное отношение к процессу и человек ещё на подходе уже угнетать себя начинает. Ну и бросает потом - говно же, как в школе. А нужно именно увлекаться этим, как игрой. В конце-концов в наших тупых играх задачки ещё ебанутее встречаются, и ничего - хаваем.
Такая вот теория.
Аноним 30/01/19 Срд 20:27:48 #552 №1338132 
>>1338097
Да это понятно. Тут в основном только новички-вкатывальщики сидят да какие-то трали, считающие себя ветеранами кодирования.
Спасибо за совет насчет статейки, буду иметь ввиду.
Аноним 30/01/19 Срд 20:28:55 #553 №1338135 
Пилите перикард.
Аноним 30/01/19 Срд 20:42:43 #554 №1338160 
15332186779700.jpg
>>1334227
ОП, посмотри мой банкомат (не жадный, с перебором и ограничениями).
https://ideone.com/CRwVJY

Заранее спасибо!
Аноним 30/01/19 Срд 21:14:55 #555 №1338203 
>>1338160
А почему не с классами? Опу это не понравится.
Аноним 30/01/19 Срд 21:16:56 #556 №1338204 
>>1338203
А зачем делать с классами то, что проще и логичнее делать без них?
Аноним 30/01/19 Срд 21:20:32 #557 №1338207 
>>1338204
Надо с самого начала учиться писать правильно.
Аноним 30/01/19 Срд 21:23:43 #558 №1338210 
>>1338207
>Надо с самого начала учиться писать правильно.
Уа-ха-ха. Правильно это по твоему только с классами? Это называется ООП головного мозга. Классы нужны там где они нужны. PHP поддерживает ФП. Так что можно вообще без классов обходится если захочется.
Аноним 30/01/19 Срд 21:34:09 #559 №1338223 
>>1338207
Почему бы тогда не давать практические задачки на классы, где они НЕОБХОДИМЫ? Ох вейт, таких задач не существует.
Аноним 30/01/19 Срд 21:46:02 #560 №1338227 
>>1338207
Класс всего лишь абстрактный тип данных. Можно реализовать тоже самое другими способами.
Аноним 30/01/19 Срд 21:48:20 #561 №1338232 
>>1338207
По сути классы дают не более чем модульность. Без классов можно достичь более гибкой абстракции данных.
Аноним 30/01/19 Срд 22:15:39 #562 №1338252 
>>1338223
>Ох вейт, таких задач не существует
Любая, где количество строк больше 1к и много модулей.

Хотя >>1338207 выразился немного коряво. Надо писать не "правильно", а "как все и не выёбываться", чтобы ты мог понимать что пишут другие люди и люди могли понимать что ты там накалякал. Хотя, конечно, люди вполне и в ФП пишут, но уровень у тех что пишет на ООП, как ни странно, выше.
Аноним 30/01/19 Срд 22:23:49 #563 №1338257 
>>1338252
>"как все и не выёбываться"
То есть ООП головного мозга.

>>1338252
>но уровень у тех что пишет на ООП, как ни странно, выше
Рассмешил. Тупее оопэшников никого нет. Извини если обидел, но это чистая правда.
Аноним 30/01/19 Срд 22:25:30 #564 №1338262 
>>1338257
Толстый тролль томно прячет телеса.
Аноним 30/01/19 Срд 22:26:25 #565 №1338264 
>>1338257
Неосилятор как есть.
Аноним 30/01/19 Срд 22:26:50 #566 №1338265 
>>1338252
>Любая, где количество строк больше 1к и много модулей.
Никакой корреляции с классами нет. В ФП стиле, даже не так, в функционально-объектном стиле (без классов), можно писать приложения любого размера. И не угробить его, не запутаться в нем. На классах такое невозможно. На классах оно перерастет в банальное неподдерживаемое легаси. Код на выброс как говорится.
Аноним 30/01/19 Срд 22:28:27 #567 №1338267 
>>1338262
>>1338264
Под вашим ООП на классах (которое и не ООП вовсе) нет никакого формального фундамента. Тоже самое, но уже формализованное, можно реализовывать без классов. Что собственно и делают на таких языках, как например Лисп или Эрланг.
Аноним 30/01/19 Срд 22:32:00 #568 №1338272 
>>1338265
>невнятный неаргументированный высер
Ясно.
Аноним 30/01/19 Срд 22:32:27 #569 №1338275 
>>1338267
Шизик, ты?
Аноним 30/01/19 Срд 22:38:03 #570 №1338282 
>>1338272
>>1338275
Ну что, кто из вас в состоянии формализовать ваше ООП? Поднимите литературку что ли. Почитайте там, погуглите. Кое что есть по этой теме. Исследования ученых имею ввиду. Только вряд ли вы вообще про это знаете. Вы же как зомби твердите одно и то же "абстракция, наследование, полиморфизм". На уровне формальной модели там совсем другие формализмы вообще то.
Аноним 30/01/19 Срд 22:45:19 #571 №1338290 
>>1338282
Шизик, уймись - всем похуй на твои исследования. Скажи психиатру чтобы таблетки тебе сменил - эти тебя не берут уже. История определили место твоему ФП - у параши, а ты всё не уймёшься. Пришёл в тред ЯП, который не для ФП впринципе, к новичкам, и агитируешь тут свой бред. В других местах тебя уже обоссали, как я понимаю, а то и солёных залуп за щеку натолкали.
Ты смешон и жалок, пойми это.
Аноним 30/01/19 Срд 22:50:19 #572 №1338296 
Что означает строчка
if (getBool('huita') && getBool('pizda') & ( HUI | GOVNO | MOCHA)) {}
?
Аноним 30/01/19 Срд 22:51:38 #573 №1338297 
>>1338296
Говнокод.
Аноним 30/01/19 Срд 22:52:10 #574 №1338298 
>>1338252
>Надо писать не "правильно", а "как все и не выёбываться"
Лучше таки понимать, что ты пишешь и зачем, а не просто делать как все.
Аноним 30/01/19 Срд 22:56:50 #575 №1338301 
>>1338298
Таки про понимание там дальше по тексту.
Аноним 30/01/19 Срд 22:58:02 #576 №1338302 
>>1338301
Даже близко не то понимание, о котором я говорил.
Аноним 30/01/19 Срд 23:00:51 #577 №1338305 
>>1338302
Начинается.
Аноним 30/01/19 Срд 23:05:08 #578 №1338310 
>>1338301
Где про понимание? Опиши формальную модель ООП. Вот ты говоришь с математиком, пытаешься объяснить ему ООП. Как ты это будешь делать, какие формализмы использовать?

Если ты всерьез говоришь, что ООП это что-то имеющее смысл. Так опиши это на языке математики. Если не можешь, то грош цена твоему ООП, и слова твои получаются пустые.
Аноним 30/01/19 Срд 23:06:37 #579 №1338315 
>>1338290
Вся суть оопэшника - жопно-сортирный язык речи.
Аноним 30/01/19 Срд 23:07:12 #580 №1338316 
>>1338310
>Где про понимание?
В посте, шизик.
Аноним 30/01/19 Срд 23:08:25 #581 №1338318 
>>1338305
Что начинается? Я лишь сказал не копировать бездумно, чтобы получилось как "у всех", с такого ничего хорошего не получится. Именно эта чушь про копирование выше и была высказана, или ты не достаточно ясно выразился. Такие копипастеры без понимания хуже чумы, прикрываясь несуществующим пониманием такую херню наделают, что мама не горюй.
>>1338310
Не лезь, псих, тут не о твоих галюнах разговор.
Аноним 30/01/19 Срд 23:10:07 #582 №1338320 
>>1338318
>Что начинается?
Передёргивание.
Аноним 30/01/19 Срд 23:17:19 #583 №1338325 
>>1338310
Так всё просто.

Традиционные в современном понимании ОО-языки (Java, C# и т.п.) - это просто языки с системой типов с поддержкой subtyping'а. Вот и всё описание.
Аноним 30/01/19 Срд 23:31:47 #584 №1338341 
>>1338325
Пфф. И все? Какое то бурчание под нос. На большее я конечно не рассчитывал.

Любая вычислительная модель должна быть описана. Машина Тьюринга, Машина Поста, Лямбда-исчисление, - все это описано формальным языком. Где модель ООП?
Аноним 30/01/19 Срд 23:37:59 #585 №1338344 
>>1338341
Когда сейчас говорят про системы типов, обычно подразумевается, что речь идёт именно о типизации лямбда-исчислении.

Если про конкретику, то обычно системы типов ОО языков моделируются каким-нибудь тем или иным расширением System F<:
Аноним 30/01/19 Срд 23:43:00 #586 №1338346 
>>1338344
Какое отношение Лямбда-исчисление и System F имеет к ООП на классах? Опять похоже на невнятно бурчание.
Аноним 30/01/19 Срд 23:52:06 #587 №1338349 
Пыха норм поддерживает шестнадцатиричную систему счисления?
Аноним 30/01/19 Срд 23:58:05 #588 №1338350 
>>1338346
Прямое. Ты можешь большинство языков с классовым ООП таким образом смоделировать.

Открываешь TaPL, главу 18, там прямым образом показано, как это можно сделать.
Аноним 31/01/19 Чтв 00:01:11 #589 №1338352 
>>1338350
Чувак, ты в каком вузе учился? Как стать таким же инженегром, как ты?
Аноним 31/01/19 Чтв 00:13:12 #590 №1338359 
>>1338350
Вот это уже конструктивный разговор. Если еще есть похожие книги по теме, напиши, хотелось быть почитать.
Аноним 31/01/19 Чтв 00:21:38 #591 №1338363 
>>1338359
Именно отдельных книг посвященных целиком ООП и связанную с ним теорию типов я не вспомню. А вот статей на том же arxiv'е и т.п. куча. Из относительно интересного что мне попадалось, можно посмотреть DOT-calculus от Одерски, формальное основание для Scala 3.

А если просто про теорию типов, то можно начать с того же TaPL (после него ещё иногда советуют в ATTAPL от того же автора заглянуть), а дальше пойти в сторону зав. типов и пруверов на них (обычно советуют The Software Foundations) и HoTT (тут прям одноименная книга)
Аноним 31/01/19 Чтв 00:38:31 #592 №1338366 
>>1338363
Понял, благодарю. От себя добавлю кое-что, что хотел прочесть, но руки не доходили. Может кому интересно будет почитать.

Труды Луки Карделли, который занимался формализацией ООП, в частности статья http://lucacardelli.name/Papers/TypeSystems.pdf
Бертран Мейер Объектно-ориентированное конструирование программных систем, где он также ссылается на Карделли https://www.ozon.ru/context/detail/id/2336754/
Аноним 31/01/19 Чтв 00:42:32 #593 №1338369 
Еще одна статья Карделли, более ориентированная на ООП http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf
Аноним 31/01/19 Чтв 01:05:50 #594 №1338376 
>>1338366
В TaPL достаточно много ссылок на Карделли, как раз в тех главах, где заходит речь о ООП. Ну и TaPL, это прежде всего, учебник, поэтому там по сравнению с оригинальными статьями сильно более разжеван материал.
Задача про банкомат Аноним 31/01/19 Чтв 02:26:57 #595 №1338388 
Визуализация задачи без ограничений.PNG
Визуализация задачи с ограничением.png
Идея с хранением всех сумм.png
Аноны, в треде есть комментарии троллей, либо не отвечайте на них, либо отвечайте спокойно и рассудительно - троллям от этого становится скучно.

>>1338160

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

Решение задачи про размен с неограниченным числом банкнот есть тут: http://labs.org.ru/dp-3/

Полный перебор потребовал бы проверить порядка N ^ M вариантов, где N = (сумма/номинал самой мелкой купюры), M - число видов купюр. Однако, использование динамического программирования позволяет обойтись выполнением около N * M шагов (ценой чуть более высокого потребления памяти).

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

Первой идет сумма 0, которая, очевидно, выдается нулевым числом купюр. Затем мы пытаемся выдать сумму 100. Очевидно, тут только один вариант выдачи. Затем сумму 200. Тут есть уже 2 варианта: либо добавить еще одну 100-ю купюру (получается всего 2 купюры), либо добавить 200-ю купюру и убрать 100-ю. Вариант с 200-й купюрой выгоднее, и мы берем его и записываем в таблицу. И так мы добавляем строчки, пока не дойдем до требуемой суммы, и получаем оптимальную комбинацию для выдачи этой суммы.

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

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

Допустим, у нас есть запас 1x5000, 3x2000, 1x100 и нам надо выдать 6000. Если мы начнем считать комбинации для выдачи сумм, кратных 100, то мы придем к сумме 5000, которая выдается через 5000x1. Но добавляя по описанному выше алгоритму к этой сумме по одной купюре, мы уже никак не получим 6000.

Вот второй вариант визуализации ( Визуализация задачи с ограничением.png ).

Мы можем нарисовать горизонтальную табличку, в которой по горизонтали идет номинал купюр, а по вертикали - отложено их количество. Запас купюр я обозначил штриховой линией. Вариант размена выглядит как линия из 6 точек, по одной в каждой колонке (рисунок 1, вариант размена показан стрелочкой). На первый взгляд, для поиска ответа нам придется перебирать по N вариантов точек в каждой колонке, что дает N ^ 6 комбинаций.

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

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

Единственное, что меня тут беспокоит - как оценить сложность заполнения таблицы и объем нужной для хранения массивов чисел памяти? Выгоднее ли это, чем перебор N ^ M вариантов? Есть ли какие-то способы эффективно хранить/сжимать наборы чисел в ячейках? Как-нибудь в виде списка "от X до Y с шагом Z + от A до B с шагом C"? Битовую маску какую-нибудь использовать?

Без оптимизации, если номиналы купюр не кратны друг другу, в первом столбце будут гигантские списки чисел, как раз размерности порядка N ^ M.

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

По твоему коду.

> while ($requiredAmount > 0 && $amountOfBills >= $tempSum) {
> // Если есть остаток - рекурсируем функцию
> if ($tempSum > 0) {
> getBillsAndAmount($tempSum, $tempBills, $result, $tempResult);

Внутри цикла значение $tempSum не меняется, и потому нет особого смысла делать эту проверку на каждом шаге - её достаточно сделать один раз перед циклом, таким образом:

if ($tempSum == 0) {
$result = $tempResult;
return;
}

> if ($requiredAmount > $amount) $requiredAmount = $amount;
Тут можно было использовать функцию min()

Вместо ссылок можно было возвращать результат функции через return.

Также, вместо этого огромного if:

if ($bill <= $sum && $amount > 0) {
....
}

Можно было написать короче:

if ($bill > $sum || $amount <= 0) {
return;
}

Так, неплохо. Но можешь поломать голову над поиском оптимального решения, если хочешь.
553-595 Аноним 31/01/19 Чтв 02:40:36 #596 №1338394 
553-595

>>1338349

Поддерживает.

>>1338310

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

Потому нельзя сказать, что "грош цена ООП". Со своими задачами - разработка программ - оно справляется.

>>1338296

& и | это битовые операции, почитать можно например тут: 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

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

>>1338290

Не нужно писать в таком стиле.

>>1338267

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

Аноним 31/01/19 Чтв 02:41:01 #597 №1338395 
>>1338265

show me the code

>>1338232

Инкапсуляцию и наследование же. Плюс интерфейсы еще есть.

>>1338223

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

У нас есть учебные задачи на ООП:

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

>>1338203

Тут они не требуются.

>>1338135

Рано, еще не всем ответили.
Аноним 31/01/19 Чтв 07:40:14 #598 №1338431 
Смотрю требования к вакансии почтового сервиса protonmail https://protonmail.com/careers#software-engineer

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

>You'll have to be able to become proficient in at least 2 of these languages within a few weeks, and learn any other language equally rapidly.

Это вообще возможно за пару недель стать мастером, например в C или Java? Или тут имеется ввиду, что твои познания должны быть настолько глубокими в программировании, что они легко лягут на любой язык, и остается вопрос только в изучении синтаксиса?
Аноним 31/01/19 Чтв 10:05:39 #599 №1338461 
>>1338352
Мало в каких вузах хорошо дают теорию типов, если ты про нее интересуешься. Но это относительно простая тема, её при желании можно спокойно самостоятельно освоить. Нужно только немного логического мышления и отсутствие страха перед математическими обозначениями.

>>1338431
Многие языки программирования очень похожи друг на друга, как во внутреннему устройству, так и по принятому стилю. Т.е., например, знаешь С# - очень быстро сможешь писать на Java, Kotlin и базовой скале. Знаешь какой-нибудь из лиспов - опять-таки, запросто перейдешь на другой. То же самое и с ML-подобными, и с современными скриптовыми, да и с низкоуровневыми тоже (умея писать в современном стиле на крестах, пересесть на раст вообще не проблема).

Поэтому, достаточно только хоть как-то знать по языку из каждой группы и дальше учить новые будет очень быстро и просто. И в целом советую быть полиглотом в плане ЯП,это сильно улучшает кругозор и учит приемам из кучи разных парадигм и подходов.
Аноним 31/01/19 Чтв 10:06:01 #600 №1338462 
>>1338431
Не стать профессионалом, а овладеть 2 языками за несколько недель. Это вполне адекватное требование. Оно отсеет тех, кто учил языки, но не понимал их сущность, парадигмы на которых они основаны. Те кто зрят в корень, учат не языки а парадигмы. Они таки могут овладевать языком за несколько недель.
Аноним 31/01/19 Чтв 10:54:04 #601 №1338483 
1.PNG
2.PNG
3.PNG
>>1331378 (OP)
Аноны, помогите плз как сделать чтобы поле "Комментарий" было скрыто, если оно пустое
Аноним 31/01/19 Чтв 11:14:25 #602 №1338494 
>>1331378 (OP)
Сап, аноны. Хелп.
Есть вакансия младшего программиста баз данных. Требований там нет(кроме голода новых знаний). Так вот хочу попытаться туда устроиться. Но в Преимуществах:
Опыт написания запросов SQL
Опыт разработки приложений баз данных на любых языках/субд
Опыт составления тестовых кейсов(что это?).
Там же есть вакансия PHP программиста, но в требованиях там опыт от двух лет. Поэтому решил пойти на младшего программиста БД. Но все таки подумал, что с пустыми руками туда лучше не идти. Сейчас прохожу книгу ОПа, но застреваю на заданиях с регулярками(сейчас на главе: Повторим?). Так вот, может кто-нибудь поможет, пожалуйста, составить план(типа интенсива), чтобы я смог по быстрому подготовиться к этой вакансии, но только без изучений ПОКА лишней информации? Ну то есть , чтобы у меня было приложение и я мог отвечать на вопросы?
И кстати, как вы думаете, под младшим программистом БД они имели в виду, что я буду работать на прямую с сайтом или имелось в виду работа с товаром, если учесть, что это вакансия интернет магазина(или обычного магазина)?
Так же есть вакансия Стажера-разработчика в другой фирме. Там из обязанностей общее представление о разработке сайтов, а из требований коммуникативные качества(фак) и отличное знание ПК и Интернет(что они имеют в виду?). Но там полный рабочий день, а я учусь 3 дня в неделю. Так вот, может ли стажер иметь полный рабочий день(у младшего программиста БД гибкий график) или они ошиблись и не это имели в виду?
Аноним 31/01/19 Чтв 11:47:07 #603 №1338505 
>>1338494
Реляционную алгебру читал?

https://ru.hexlet.io/courses/rdb-basics
https://ru.hexlet.io/courses/postgresql-ddl
Аноним 31/01/19 Чтв 11:48:08 #604 №1338507 
>>1338505
Недописал

https://ru.hexlet.io/courses/rdb-basics

И в довесок регулярки на PHP

https://ru.hexlet.io/courses/regexp
Аноним 31/01/19 Чтв 13:49:56 #605 №1338574 
>>1338394
>Не нужно писать в таком стиле.
Не нужно учить меня разговаривать с мудаками.
Аноним 31/01/19 Чтв 13:54:28 #606 №1338576 
>>1338483
Хелп, очень нужна ваша помощь. Так и не понял как это сделать
Аноним 31/01/19 Чтв 14:43:29 #607 №1338592 
souleater06.png
ОП, если проверяешь, не забудь мои по верстке глянуть, а то я в самом начале запостил. Заранее пасиба.
>>1333346
Аноним 31/01/19 Чтв 15:18:41 #608 №1338608 
>>1338505
>>1338507
>Реляционную алгебру читал?
Что то знаю.
Но я имел в виду... вот допустим задача про список студентов, сделав ее, я могу пойти или еще рано?
Аноним 31/01/19 Чтв 17:54:33 #609 №1338684 
>>1338461
Разве у каждого языка не существует ещё несколько фрейморвков, из каждого у которого есть свои собственные тонкости?
Аноним 31/01/19 Чтв 17:57:42 #610 №1338685 
>>1338684
Отличай язык от библиотеки. Фреймворк это просто библиотека кода. Во фреймворках как и языках есть свои подходы. Изучать нужно подходы. Тогда любой новый фреймворк легко освоить.
Аноним 31/01/19 Чтв 18:02:35 #611 №1338690 
>>1338608
Если ты ещё регулярки осваиваешь, то рано. Это ж детский садик ещё, а ты уже в программисты БД лезешь странное название вакансии.
Аноним 31/01/19 Чтв 18:20:28 #612 №1338699 
>>1338684
В большинстве случаев количество и важность этих тонкостей сильно переоценивают.

К тому же сейчас в мейнстриме те же веб фреймворки для разных платформ и языков очень друг на друга похожи.
Аноним 31/01/19 Чтв 19:21:12 #613 №1338761 
Почему для работы миграций в ларавеле нужно что бы проект ларавеля находился в такой папке C:\xampp\htdocs?
Аноним 31/01/19 Чтв 19:22:58 #614 №1338765 
>>1338761
Не нужно.
Аноним 31/01/19 Чтв 20:26:18 #615 №1338812 
Ананасы, какую литературу можно почитать про новые классы Error, ErrorException и Exception? Мануал прочитал, но там очень общая информация. Когда нужно использовать что-то из этих трех? Я могу в любом месте кода выбросить любой из этих объектов через throw. Допустим, Error я использую для отлова ошибок, а Exception для отлова исключений, получается, что ErrorException это результат множественного наследования от Error и Exception? Что делает этот класс?
Аноним 31/01/19 Чтв 21:15:51 #616 №1338835 
почему по ларе так мало инфы?
Аноним 31/01/19 Чтв 21:37:39 #617 №1338843 
>>1338835
Официальной документации тебе мало?
Аноним 31/01/19 Чтв 22:53:11 #618 №1338922 
>>1338835
Есть видео уроки там где все объясняется.
Аноним 31/01/19 Чтв 23:07:52 #619 №1338943 
Почему при помощи define можно константе присвоить результат работы функции, а const нет? Можно ли это как-то обойти? А то не хочется, чтобы в файле была мешанина из const и define. И еще, хорошо ли это, что я использую const вне классов? А то я читал, что const нужно только в классах использовать.
Аноним 31/01/19 Чтв 23:13:40 #620 №1338955 
Допустим, у меня есть интернет-магазин с такой иерархией: есть общий класс продукта, общие классы категорий, например: техника, бытовая химия и бакалея, дальше идут классы конкретных товаров ноутбуки, шампуни, греча. Правильно ли я понял, что общий класс продукта и категории должны быть абстрактными, а конкретные не абстрактными? Можно ли любой класс, экземпляр которого я не хочу создавать, делать абстрактным?
Аноним 31/01/19 Чтв 23:14:57 #621 №1338957 
>>1338955
Да.
Аноним 31/01/19 Чтв 23:18:25 #622 №1338963 
>>1338957
Спасибо.
Аноним 01/02/19 Птн 00:08:18 #623 №1338985 
>>1338943
>Почему при помощи define можно константе присвоить результат работы функции, а const нет?
Очевидно потому, что define это функция, которая принимает строку и связывает её с значением которое может быть результатом работы функции, а const это объявление константы и только.
Аноним 01/02/19 Птн 01:03:56 #624 №1339006 
Сильно ли замедляет выполнение программы вложенность if-ов более 3-х штук?
https://github.com/asdasdasdasddasasdasdas/StudentList  Аноним 01/02/19 Птн 03:45:59 #625 №1339036 
>>1331382

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/12042279530b7358e443fdb759db3083a3e1cc1d/users.sql#L32
> `hash` varchar(100) NOT NULL,
Здесь бы не помешал комментарий к колонке (COMMENT '...'), что это за хеш.

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

> `gender` varchar(1) NOT NULL
Тут бы лучше подошел тип ENUM

> `email` varchar(20)
Я бы сделал побольше символов.

> CHARSET=utf8;
Кодировка utf-8 обозначается в MySQL как utf8mb4. utf8 - это урезанная кодировка (utf8mb3), я бы не советовал ее использовать, так как в ней, например, нет кодов эмодзи.

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

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

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/12042279530b7358e443fdb759db3083a3e1cc1d/index.php#L6
Здесь в автозагрузчике получается относительный путь вроде "Some/file.php". Этот путь будет интерпретироваться относительно текущей директории процесса (не обязательно относительно папки с файлом index.php), а также искаться во всяких include_path. Лучше составить полный путь, используя константу __DIR__.

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/bootstrap.php
Конфиг лучше бы вынести в отдельный файл, который находится в gitignore (это вроде описано в комментариях к задаче). А то сейчас, если один разработчик впишет туда свой пароль и закоммитит изменения, то эти изменения появятся у других разработчиков.

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/core/Router.php

Здесь пока плохо с форматированием. Тебе надо либо приучиться сразу писать код в правильном стиле, либо использовать какую-то IDE c встроенным форматированием. Например, Netbeans, PhpStorm, VS code (могут понадобиться плагины). Вот пример, обрати внимание на пробелы вокруг знака равно и запятой:

> $params = trim(parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH),"/");
> $params =explode('/',$params);

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

Далее, тут:
> if($params[1]) {

Если в массиве нет элемента с индексом 1, то будет ошибка (notice или warning). Надо проверять через array_key_exists, empty или isset.

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/12042279530b7358e443fdb759db3083a3e1cc1d/app/core/Router.php#L33
> try {
> } catch (\Exception $e) {

Здесь скорее всего неправильно исопльзуются исключения. Если ты хочешь ловить и обрабатывать исключения, тебе надо сделать свой класс исключений для каждого вида ошибки. А так, ты ловишь вообще все исключения в программе, и вместо записи их в лог (что PHP делает по умолчанию, если ты их не ловишь) просто выводишь на экран, не записывая в лог. Почитай урок https://github.com/codedokode/pasta/blob/master/php/exceptions.md

Также, для ошибки "страница не найдена" надо отдавать HTTP код 404. Если ты не знаешь, что такое HTTP и код статуса, почитай что-нибудь по этой теме, например урок https://github.com/codedokode/pasta/blob/master/network/http.md

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/ControllerFactory.php

Нельзя ли создание контроллеров делать в DI контейнере? А то получается дублирование тут его функционала. Правда, контроллер надо каждый раз создавать новый, а твой DI контейнер, увы, так не умеет. Если это слищком сложно, можно оставить так, но можно бы и попробовать сделать. Для этого надо в DI контейнер передавать не созданные объекты, а функции для их создания, и он будет вызывать их при необходимости.

https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/controller.php
Имя файла должно совпадать с именем класса с учетом регистра. У тебя файл с маленькой буквы. Под Windows, чтобы поменять регистр букв в имени, может понадобиться переименовать файл под другим именем сначала.

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/MainController.php
> private $model;
Лучше бы давать более понятное название, например, studentTG или как-то так. Так код будет понятнее.

> $search=$_GET['search'];
Лучше делать strval и trim. Так как могут передать массив вместо строки, а также, там могут быть лишние пробелы.

> setCurrentPage($_GET['page']);
Здесь тоже безопаснее принудительно преобразовать данные от пользователя к числу.

> paginator->countPage
Неточное название, лучше setRecordCount или setItemCount, или как-то так.

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/ProfileController.php
> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/RegistrationController.php

Тут много общего кода. Лучше всего было бы объединить его, а не копипастить.

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/controller/RegistrationController.php#L21
> if(!$this->auth->checkHash())
А что, если пользователь залогинен? Выводим белую страницу? Надо эту ситуацию тоже обрабатывать.

> header("Location:/profile");die();
Тут наверно лучше использовать return, вдруг ты захочешь в index.php или в роутере что-то делать после обработки запроса. Хотя можно пока и так.

> if($this->auth->checkHash())
> {
> $student = $this->model->getStudentByHash($_COOKIE['hash']);
Тебе не кажется, что правильнее было бы инкапсулировать (скрыть) всю работу с куками в AuthService и сделать в нем готовый метод для получения текущего пользователя? А то у тебя нет единого ответственного за работу с кукой hash, вместо этого работа с кукой размазана по всему коду. Плохо.

> public function __construct($model,$validator,$auth)
Здесь нужны тайп-хинты для защиты от ошибок и повышения понятности кода.

> private function grabPostValues()
Здесь бы нужен тайп-хинт на возвращаемое функцией значение.

https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/helpers/Authorization.php
Названия функций можно улучшить, также стоит добавить тайп-хинты на возвращаемые значения функций.

Вместо checkHash лучше написать что-то вроде isLoggedIn().

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/helpers/DIContainer.php#L35
Тут правильнее было бы сделать свой класс исключений, если уж делать все идеально. А то как ловить такое исключение и отличать от других?

https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/helpers/DIContainer.php#L9
> public $dependencies = [];
А почему public? Думаю, тут лучше ограничить доступ к полю. Ты не читал про инкапсуляцию?

---------

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

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

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

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

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

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

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

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

---------

https://github.com/asdasdasdasddasasdasdas/StudentList  Аноним 01/02/19 Птн 03:46:38 #626 №1339037 
>>1331382

> public function countPage($cstudents)
Тут нужен тайп-хинт и надо бы переименовать функцию.

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/helpers/Paginator.php#L26

> return "/?page=".$previousPage.'&search='.$_GET['search'];
Вот это плохо. Почему класс лезет куда-то в параметры запроса? Откуда он знает, что там хранится параметр поиска? У тебя нет разделения ответственности между пагинатором и контроллером. Не надо вообще в GET/POST лезть откуда-то, кроме контроллера.

Вдобавок, ты еще и неправильно подставляешь данные в ссылку, не исплоьзуя процентное кодирование спецсимволов через urlencode. А что, если там встретятся символы & или # ?

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

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

Исправить это можно так:

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

Первое наверно проще.

> public function ValidateAll($student)
Нужен тайп-хинт, а в идеале еще комментарий. Имена методов пишут с маленькой буквы.

> public function fill($post) :void
> {
> $this->name = $post['name'];
А тут есть гарантия, что в массиве всегда есть такой элемент? Также, нужен тайп-хинт.

> return $stmt->fetchAll(PDO::FETCH_CLASS);
Имей в виду, что у FETCH_CLASS есть странность: http://phpfaq.ru/pdo/fetch#oop

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

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

> public function countAllStudent() : int
> return $result->fetchColumn();
fetchColumn() возвращает строку, а не число. Ты увидишь ошибку, если включишь strict_types=1 в начале файла.

https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/model/StudentTableGateway.php#L133

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

https://github.com/asdasdasdasddasasdasdas/StudentList/tree/ads/public/view
Вообще, view не надо выкладывать в паблик. Их исходный код ведь пользователю видеть не надо.

https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/public/view/layouts/def.php
Форматирование кода очень плохое. Отступы неправильные.

> if(!$this->auth->checkHash()) : ?>

Лучше было бы наверно передавать переменную loggedIn.

> href=<?=$this->paginator->getPreviousPageUrl();?>
А где экранирование? Не забывай, что & это спецсимвол в HTML.

> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/public/view/partials/form.php
Форматирование плохое.

> <?= $errors['surname_error'] ?>
Тут лучше бы экранировать все на всякий случай.

> <input class="form-control " type="number" name="balli" value=<?=htmlspecialchars($student->balli) ?> required>

А нельзя ли тут ограничить мин/макс значения?

> <?= $student->gender == 'f' ?
Лучше бы конечно использовать константу.

> html,body{
> height:1000px;
> overflow-y: hidden;
> overflow-x: hidden;
По моему, это плохая идея. Если что-то не поместится на экран, то это будет никак не увидеть.

> thead th{
Ты зря задаешь стили для всех таблиц на сайте. Лучше применять только к таблицам с определенным классом. Это тебе потом помешает при развитии сайта.

> form{
То же самое.

> span.text-danger{
То же самое.

> .table-responsive{
То же самое. Сделал бы класс вроде student-table и применял бы к нему.


595-624 Аноним 01/02/19 Птн 03:47:37 #627 №1339038 
595-624

>>1339006

Думаю, что нет, но лучше измерить и проверить.

>>1338943

Если почитать мануал http://php.net/manual/ru/language.constants.syntax.php , то можно увидеть упоминание, что константы определяются при компиляции скрипта. Видимо, вычисление выражений в этот момент все усложнило бы. Да и это, наверно, усложнит чтение кода, так как значение константы явно не указано.

Возможно, тебе нужна переменная, а не константа.

> И еще, хорошо ли это, что я использую const вне классов?
В этом ничего плохого нет.

>>1338955

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

> Можно ли любой класс, экземпляр которого я не хочу создавать, делать абстрактным?
Можно. Хотя абстрактный класс - это недоделанный класс, класс-заготовка, от которого наследуются чтобы получить конкретный класс.
Аноним 01/02/19 Птн 03:48:16 #628 №1339039 
>>1338812

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

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

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

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

> Я могу в любом месте кода выбросить любой из этих объектов через throw.

В такой ситуации принято делать свой класс исключений, так как на каждый тип ошибки в идеале делается свой класс, чтобы их можно было различать и ловить только нужные. Например, если ты не смог прочесть файл, то можешь выкинуть IOException. Или у пользователя нет прав для выполнения действия - выкидываешь AccessDeniedException. Также, в PHP есть несколько готовых классов исключений на распространенные случаи: http://php.net/manual/ru/spl.exceptions.php

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

Мой урок по исключениям, советую прочесть: https://github.com/codedokode/pasta/blob/master/php/exceptions.md

> Допустим, Error я использую для отлова ошибок, а Exception для отлова исключений, получается, что ErrorException это результат множественного наследования от Error и Exception?

В PHP нет множественного наследования. Также, из твоего описания непонятно, чем у тебя отличаются "ошибки" от "исключений". Думаю, что ничем не отличаются.

> Что делает этот класс?
Объект исключения хранит подробности ошибки. Что это за ошибка, какие-то дополнительные подробности. Класс описывает свойства и методы, которые есть у объекта.

>>1338761

Не думаю, что там есть такое требование.
Аноним 01/02/19 Птн 03:48:54 #629 №1339040 
>>1338684

У многих языков только один распространенный фреймворк вроде RoR в Ruby или Django в Питоне.

>>1338685

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

>>1338608
>>1338494

Думаю, что в вакансии нужна не совсем реляционная алгебра. Есть среды разработки, где ты можешь создавать базу данных и писать дополнительные скрипты, формы, отчеты для работы с ней. Например: MS Access. Возможно, имеется в виду знание чего-то такого. Или, возможно, требуется умение писать хранимые процедуры на PL/SQL. Или, например, 1С - там тоже БД + фреймворк для разработки приложений для взаимодействия с ней. А может просто имеется в виду навык работы с phpMyAdmin, кто их знает. Написано не очень понятно, стоило бы уточнить.

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

> Опыт составления тестовых кейсов(что это?).

http://www.protesting.ru/testing/testcase.html

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

> отличное знание ПК и Интернет(что они имеют в виду?)

Умение пользоваться браузером, вордом, экселем, электронной почтой, что-то в таком роде.
Аноним 01/02/19 Птн 03:49:19 #630 №1339041 
>>1333346
>>1338592

> http://jsfiddle.net/8w256gev/3/

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

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

В твоем решении картинка не ужимается при уменьшении размеров окна. У тебя на картинке есть min/max-width, но этого недостаточно. Картинка - это замещаемый (replaced) элемент (как и input, button, select, form, object и тд), и если ей не указать ширину явно, то она берется из размеров картинки (350px). Потому ты должен указать width + max-width явно, чтобы картинка сужалась при уменьшении ширины окна.

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

> min-height: 150px;
Это может приводить к искажению пропорций картинки, если ты будешь её уменьшать.

> http://jsfiddle.net/rmouc3aj/

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

> label.super-button input {
> position: fixed;
Это плохая идея, ты закрепляешь его где-то поверх других элементов, и он хоть и невидим, но может перехватывать клики по своей области, перекрывая элемент под ним.

Что касается фокуса, то есть псевдокласс :focus для сфокусированных элементов. Достаточно добавить outline для input:focus + i.

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

Если стоит цель подсвечивать только при нажатии Tab (что было бы красивее), увы, тут решение только с помощью яваскрипта вроде описанного тут: https://stackoverflow.com/questions/23705055/input-effect-on-keyboard-tab-focus-but-not-on-click

Также, если ты знаешь JS, то можно повесить обработчик на кнопки, и, если над кнопкой была отпущена кнопка мыши, и элемент сфокусирован (document.focusedElement), то отдавать фокус функцией blur().

>>1338483

Думаю, нужен яваскрипт.
Аноним 01/02/19 Птн 04:14:27 #631 №1339044 
>>1339039
>Если класс Error обозначает внутреннюю ошибку PHP, как ты можешь его выкидывать? Ты ведь не интерпретатор PHP пишешь, у тебя такая ошибка не возникнет.

>Класс Error - как описано в мануале, базовый класс для внутренних ошибок PHP. Его использует PHP. Тебе его использовать не надо.

Я про то, что я в принципе могу выкинуть это через throw new \Error().
Мне нужно ошибки и исключения как-то различать. Но идеалогически верным было бы приводить все исключения к ошибкам, потому что на самом деле мало исключительных ситуаций может возникнуть во время работы программы. Львиная доля всех исключений порождает прерывание работы программы, а значит, это скорее ошибка, а не исключение, которое можно обработать и получить альтернативный, но все-таки положительный результат.
Аноним 01/02/19 Птн 09:03:09 #632 №1339074 
>>1339040
>Фреймворк это все же не совсем библиотека. Бибилиотека - это когда ты вызываешь функцию. А фреймворк - каркас приложения - часто сам вызывает твои функции.
Фреймворк это библиотека. Код на языке, для последующего использования. Вот пакетный менеджер обычно отдельное приложение. В фреймворке также вызываются функции, скафолдинг, миграции, и другие.

>>1339040
>Думаю, что в вакансии нужна не совсем реляционная алгебра.
На ее основе строится работа с данными, в любых базах, даже не реляционных. Даже вне баз используются принципы реляционной алгебры, для проектирования работы с данными. Без знаний ее основ считай калека.
Аноним 01/02/19 Птн 10:48:29 #633 №1339134 
сап, подскажите с регуляркой
https://ideone.com/miZCtl
Не понимаю как добавить игнорирование любого числа скобок, минусов, пробелов.
Благодарю заранее!
Аноним 01/02/19 Птн 14:56:37 #634 №1339285 
Какое пространство имен задать классам?
У меня в разных проектах образовалась пачка классов-утилит, которую часто использую.
Пространство имен сейчас у них везде разное.

Как поступить? Думаю залить это говно на гитхаб и в пространстве имен тупо задать им namespace MyGithubNickname\SomeUtil;

А далее в композере в проектах тупо подрубать им путь через psr-4, чтобы они грузились. Норм идея?
Аноним 01/02/19 Птн 14:58:31 #635 №1339286 
>>1339285
Да.
Аноним 01/02/19 Птн 15:06:15 #636 №1339289 
>>1338483
>>1339041
Он поддерживает только html в нем нельзя такое запилить, а если можно то как?
Аноним 01/02/19 Птн 15:16:24 #637 №1339296 
>>1339289
Не понял, ты хочешь, чтобы все твое добро работало на гитхабе? Он поддерживает только статичные html-css-javascript сайты, для пых-кода нужен интерпретатор и демон, на котором он должен крутиться и принимать запросы.
Аноним 01/02/19 Птн 19:51:11 #638 №1339454 
>>1338843
она говно
Аноним 01/02/19 Птн 19:55:34 #639 №1339463 
tool.gif
Аноны, нужна помощь. Не ебу что выкладывать на гитхаб, так же есть страх что если я выложу туда что-то, это кто-то увидит из коллег/друзей и засмеют (работаю в айти конторе не программистом с перспективой перехода в бэкенд). Если бы был фронтовиком уже давно бы захуячил туда портфолио какое + JS и какую-нибудь хуету джаваскриптовую, но в случае с бэкендом я вообще не ебу что туда выкладывать можно. Ведь я еще ниразу не писал ничего сложнее каких-нибудь скриптов. А как начинаю смотреть репозитории из того что мог бы сделать, так охуеваю от того как там все сделано круто у других, и нихуя не понятно как они это сделали. Не хватает чтоли понимания как устроены проекты (даже самые простые, блоги, цмски), их архетиктура, с чего вообще начать, как назвать каталоги/файлы и т.д. До этого работал с Python, когда перешел на PHP, не могу найти толковых гайдов, книг, везде всё описано по разному и сделано по разному, но что-то из этого считается говнокодом, а что-то нет. Короче че запилить, уже после того как вдуплил в синтаксис и можешь сделать что-то типо блога, но всё еще не знаешь как это сделать хорошо, чтобы не стыдно было показать на собеседовании?
Аноним 01/02/19 Птн 20:00:39 #640 №1339469 
>>1339039
>Не думаю, что там есть такое требование.
Как раз таки это требование, так как без этого миграции не проходят, таблица в базе данных migrations создается а остальные миграции нет.
Аноним 01/02/19 Птн 22:13:05 #641 №1339661 
image.png
>>1338388
ОП, а почему ну как мне кажется ты любишь "алгоритмические задачи"? Знания алгоритмов нужная вещь в PHP разработке? Ты же обещал, что не будет никакой математики. Тут и так регулярки сложные... Как так то?
Аноним 01/02/19 Птн 22:19:33 #642 №1339670 
>>1339661
>регулярки сложные
Что там сложного?
Мимо написал овер сотню спамеров и любую регулярку пишу с закрытыми глазами
Аноним 01/02/19 Птн 22:23:34 #643 №1339675 
>>1339670
Ну как сказать. Может я конечно передергиваюгибаю. Написать регулярку рили не так сложно, но вот чтоб сделать ее не громоздкой, тут уж нужны знания.
Аноним 01/02/19 Птн 22:25:49 #644 №1339679 
>>1339675
Давай напишу тебе. Че надо
Аноним 01/02/19 Птн 22:32:25 #645 №1339687 
>>1339463
Я тоже раньше такие вопросы задавал, про говнокод, про то, что засмеют. Мне тогда и сейчас понравился ответ одного анона: просто пиши, со временем сам увидишь где говнокод а где норм - это просто дело опыта.
А ещё учти такой факт, что все писали лапшу и ничего в этом нет сильно плохого, это просто повод расти дальше.
Аноним 01/02/19 Птн 22:34:35 #646 №1339689 
>>1339679
Да нет, спасибо, уже не надо.
Я вот тут писал
>>1335517
>>1335533
>>1335758
Решил кое как, ну и так сойдет.
Сейчас просто решаю задачу про банкомат. Задачу обычным способом решить еще можно ("жадный" алгоритм). А вот если брать осложненную версию, то тут уже тупняк.
По ссылкам проходишь, чтобы изучить метод динамического программирования, но чет не понятно. Ну сейчас >>1338388
этот комментарий дочитаю, может понятней будет
Аноним 01/02/19 Птн 22:35:14 #647 №1339691 
>>1339675
Не надо об этом думать, словно это какое-то великое знание. Это шаблон строки, заданный спецсимволами. Если чувствуешь неуверенность - поиграйся с ними и всё пройдет.
Аноним 01/02/19 Птн 22:40:02 #648 №1339697 
>>1339687
Фишка в другом.
В том, что кукарекать где говнокод - легко, но сами кукаретики хуй напишут то, что считают не говнокодом.
>со временем сам увидишь где говнокод а где норм
Подсказываю: говнокод будет всегда и везде из-за фундаментальных ограничений самих япов + в любом проекте сложнее хеллоуворда будет овердохуя узких и спорных мест и компромисов, которые являются самым настоящим говнокодом.
Возьми код любого популярного фреймворка и охуей от этого кала.
Костыль на костыле и костылем погоняет. Но за счет большого форса в комьюнити и хорошей документированности этим пользуются.

Я серьезно пришел к выводу, что писать идеальный или даже приближенный к нему код вообще невозможно нахуй, ибо япы не настолько развиты.
Например, хуй в каком популярном языке есть такая фишка, как ссылка на имя метода класса.
Ну или многопоточность. Там тоже все через жопу.
Код на C++ - так вообще один большой костыль, как и сам язык, на нем в принципе абсолютно нихуя нормального не напишешь.
И так везде. Одно говно блять.
Можно лишь научиться более-менее ловко его жрать. Но твой код всегда будет парашей
Аноним 01/02/19 Птн 23:16:16 #649 №1339717 
>>1339697
Ты ж сам накукарекал про кукаретиков, и сам же раскукарекался. Как так?
Говнокод обычно там, где не соблюдаются стандарты, т.е. типично-любительский такой джунский код. А костыли там, где без них никак это просто костыли.
Аноним 02/02/19 Суб 11:01:22 #650 №1339975 
>>1339717
Да какие в жопу стандарты.
Недавно начал делать проект на laravel и чуть не проблевался с этих роутов, которые захардкаживаются строками блядь.
Причем даже нельзя написать MyController::class, надо руками писать 'MyController'.
Да даже блядь обертку нельзя написать чтобы извлекать базовое имя класса, ибо там все через жопу сделано и то не поможет в случае если контроллер находится в подпапке.
Истинное ебаное говно блять.
И так везде - в сервис-провайдерах, в ядрах опять охуительные тонны стороковых литералов.
При рефакторинге вручную ходишь и идешь это говно.
Эти волшебные методы, которые перехватываются через __callStatic().
Да, в целом любой популярный фреймворк - лучше использовать, чем нет, но говорить что они написаны "хорошо" - это бред.
Нихуя не хорошо.
В крестах же любой сложный проект состоит из подобной пораши чуть менее чем полностью. Ввиду отсутствия какого бы то ни было стандарта в комьюнити и тонн одинаковых инструментов, которые делают то, что даже в пыхе делает стандартная библиотека.
Чего только стоит свой класс строк, который НЕПРЕМЕННО блять есть в каждой крестовой параше и везде он разный, ибо одинакового родного-то нет (точнее есть, но это просто недоразумение, которое использовать нельзя).
Аноним 02/02/19 Суб 11:55:49 #651 №1340009 
>>1339975
Стандарты по сути придуманы, чтобы не заблудиться в говнокоде совсем, так сказать последний рубеж, перед полным проигрышем разумным машинам.
Аноним 02/02/19 Суб 13:41:22 #652 №1340045 
Screenshot87.png
Screenshot88.png
>>1339469
>>1338761
Не может такого быть. Вот накатываю вообще в кастомной конфигурации докера, ларавельскую виртуалку даже не запускал не разу.
Аноним 02/02/19 Суб 19:43:34 #653 №1340266 
>>1334227
бамп
Аноним 03/02/19 Вск 08:27:38 #654 №1340612 
>>1339463
Откуда пик?
Аноним 03/02/19 Вск 08:53:17 #655 №1340623 
css.gif
>>1340612
Уже давно не помню откуда.
Аноним 03/02/19 Вск 09:39:37 #656 №1340634 
>>1339134
бамп вопросу
631-656 Аноним 03/02/19 Вск 13:50:30 #657 №1340725 
>>1340634
>>1339134

Довольно просто. Сначала мы пишем выражение вида "ровно 1 цифра, за ней любое число скобок, минусов, пробелов". Затем мы оборачиваем его в круглые скобки и указываем 10 повторений: (....){10}

Также, замечание. [+7,8] значит "ровно один символ: плюс, семерка, запятая или восемь".

>>1339697

В PHP, кстати, есть ссылка на метод конкретного объекта:

$ref = [$object, 'getValue'];
$value = call_user_func($ref);

>>1339689

> А как сделать, чтобы между ними учитывались скобки, пробелы и минусы? Можно ли как то это сделать за один раз, либо придется что то типа: сначала идут 3 цифры, потом возможно скобка или пробел или минус, потом еще три цифры и опять может пробел или минус и т.д.?

Процитирую ответ выше:

> Довольно просто. Сначала мы пишем выражение вида "ровно 1 цифра, за ней любое число скобок, минусов, пробелов". Затем мы оборачиваем его в круглые скобки и указываем 10 повторений: (....){10}

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

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

Если что, тут есть примеры задач, которые этим методом решаются: https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5#Классические_задачи_динамического_программирования

Я не могу гарантировать, что им можно решить задачу про банкомат, но ты можешь попробовать.
Аноним 03/02/19 Вск 13:51:22 #658 №1340726 
>>1339661

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

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

>>1339463

Тебе надо изучать ООП, MVC и фреймворки. Начать будет проще всего с микрофреймворка вроде Slim. На нем как раз можно и блог сделать.

>>1339285

Обычно используют название проекта, и если он большой, то названия компонентов. Ну например: \Symfony\Component\HttpFoundation\Request.

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

Вынеси их в библиотеку с названием XyzTools и соответственно так же назови пространство имен.

> Как поступить? Думаю залить это говно на гитхаб и в пространстве имен тупо задать им namespace MyGithubNickname\SomeUtil;

Хороший вариант.

> А далее в композере в проектах тупо подрубать им путь через psr-4, чтобы они грузились. Норм идея?

Это лучше сделать в самой библиотеке, добавить в неё composer.json с описанием автозагрузки.
Аноним 03/02/19 Вск 13:51:57 #659 №1340727 
>>1339044

> Я про то, что я в принципе могу выкинуть это через throw new \Error().

Правильнее так: либо используй классы исключений из SPL, либо делай свои классы исключений. Класс Error не для тебя сделан. Использовать объект класса Error неправильно, так как он выкидывается при ошибках PHP, и ты не сможешь отличить ошибки PHP от своих ошибок.

Error - это не ошибка, а исключение. Так как он реализует интерфейс Throwable и выкидывается через throw. Ошибка в PHP формально - это то, что генерируется вызовом trigger_error. Ты считаешь ошибкой исключение, которое ловится, но это лишь твое мнение.

Также, есть еще вариант, если ты ожидаешь ошибку, можно не выкидывать ее через throw, а возвращать через return.
https://github.com/php2ch/vector/blob/master/index.php Аноним 03/02/19 Вск 13:52:50 #660 №1340730 
>>1334227
>>1340266

Я смотрю, у тебя много тайп-хинтов, обрати внимание тогда, что в PHP7.4 добавили тайп-хинты для свойств: https://wiki.php.net/rfc/typed_properties_v2

> // Увольняем сотрудников, вызывая соответствующий метод департамента
> array_filter($engineers,
Это с точки зрения не очень правильно, так как array_filter предназначена для отбора элементов массива. Тебе бы больше подошла функция array_walk или просто foreach. Также, ты переносишь тут аргументы не по PSR-2.

> @param Company $company
Это не несет никакой новой информации и, по-хорошему, можно было бы и не писать.

> $profession = $analyst->getProfession();
> $profession->setBaseRate(1100);
Если объект profession у всех сотрудников один, то эта строчка повысит зарплату всем аналитикам во всех компаниях. Там в задаче ведь требуется создать несколько копий компании и к каждой копии применить свои меры, но ты повысишь зарплату во всех копиях компаний.

> $department->select(
> function ($employee) {
> if ($employee->getProfession() instanceof Manager && $employee->getRank() < 3) {
> $employee->setRank($employee->getRank() + 1);

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

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

> if ($coffeeVolume < 1) {
> 'Переданное значение меньше нуля'
Небольшое расхождение.

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

Если хочешь еще порешать задачки на ООП, то ищи "будильник" и "гостиницу" тут в треде или на phpclub.tech
Аноним 03/02/19 Вск 17:39:41 #661 №1340867 
зачем люди учат php если есть руби и дж
Аноним 03/02/19 Вск 17:47:11 #662 №1340878 
>>1340867
Покажи как ты на руби и на дж делаешь запрос к стороннему апи и получаешь джсон.
Аноним 03/02/19 Вск 17:50:19 #663 №1340882 
>>1340867

Можно такой же вопрос спросить про Руби. И кстати, тайп-хинты в Руби завезли? А вообще, https://habr.com/ru/post/315152/
Аноним 03/02/19 Вск 20:53:20 #664 №1341063 
чего блять.jpg
Почему система аутентификации/авторизации в Laravel такая сложная блять?
Я уже ебанулся это читать. Passport какой-то - это вообще нахуй какой-то фреймворк в фреймворке с кучей свистоперделок и даже собственными (!) таблицами в бд и собственными миграциями.

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

Че делать, помогити
Аноним 03/02/19 Вск 20:57:27 #665 №1341072 
>>1340867
>зачем люди учат php
Я начал учить еще очень давно, когда кроме него нихуя не было в вебе.
Теперь просто жру говно по инерции.
Зачем люди в этом треде учат - вообще хуй знает.
Я спрашивал, говорят тип вакансий много то что не менее 50% их них - ковыряние ложкой в сладком хлебе в вебстудиях, где тебе дадут пхп 5.6, обмажут джумлой, битриксом и прочими высерами мирового программирования - их не ебет.
А если говно отсеить, то окажется, что вакансий на тот же жс больше.
Да и кроме него языки есть.
Да и пхп уже не в моде.

Я бы сейчас в 2к19 php не учил.
Есть, как ты заметил, более хайповые и молодежные стеки. Js, Go.
Аноним 04/02/19 Пнд 13:24:07 #666 №1341572 
Добрый день, гайс. Подскажите, какие есть сейчас современные методы распарсивания чужих страничек, на которых есть аякс? Мне много не нужно, всего одну маленькую табличку вытягивать, которая у них на ресурсе генерируется джаваскриптом.
Аноним 04/02/19 Пнд 14:58:50 #667 №1341601 
>>1341072
жс отвратительный язык, на гоу 2 вакансии в моем 1кк
Аноним 04/02/19 Пнд 15:29:36 #668 №1341617 
>>1341572
Selenium
Аноним 04/02/19 Пнд 15:31:32 #669 №1341619 
>>1341601
>на гоу 2 вакансии
Ну это пока.жпг
>в моем 1кк
Мухосрани как бы никогда на острие прогресса не стояли.
Аноним 04/02/19 Пнд 15:38:25 #670 №1341625 
>>1341619
блин вот скажи по ФАКТУ чем будет лучше для бизнеса go
Аноним 04/02/19 Пнд 15:41:20 #671 №1341628 
1549284072580.jpg
>>1341625
Меньше платить нужно чуханам, которые повелись на НОВОЕ МОЛОДЁЖНОЕ.
Аноним 04/02/19 Пнд 15:50:36 #672 №1341635 
>>1341625
В душе не ебу, но го набирает популярность уже несколько лет.
Ну и он более производительный, можно легче писать всякий хайлоад.
Аноним 04/02/19 Пнд 16:13:13 #673 №1341646 
>>1340730
ОП, а можно в студентах использовать компоненты из фреймворков? Или лучше самому велосипедить?
Аноним 04/02/19 Пнд 16:34:04 #674 №1341656 
>>1340612
https://github.com/google/gif-for-cli
Аноним 04/02/19 Пнд 16:50:07 #675 №1341668 
>>1341072
Ну и что теперь, бросать изучать пхп?
Аноним 04/02/19 Пнд 17:06:04 #676 №1341679 
Что за хуйня в Laravel вместо моделей?
Почему они называют моделями сраный orm-билдер запросов?
Я привык что модель представляет собой некий интерфейс взаимодействия с данными. Инкапсуляция данных от внешнего кода. Внешний код может взаимодействовать с данными только с помощью методов модели.

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

Это че за наебалово блять.
Аноним 04/02/19 Пнд 17:12:54 #677 №1341684 
>>1341679
Еще замечу, что в ларавеле нихуя не ActiveRecord, а какая-то левая параша.

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

Сука, зачем я только проект на этом говне начал...
Аноним 04/02/19 Пнд 17:25:54 #678 №1341693 
>>1341684
То бишь, они предлагают мне писать всю логику выполнения запросов к БД тупо в контроллерах.
Охуенно блять, просто гениально нахуй.
Какая инкапсуляция, это все для лохов, игрушки дьявола
Аноним 04/02/19 Пнд 18:06:05 #679 №1341722 
>>1341679

Это вроде паттерн ActiveRecord. А так, Ларавель идеи заимствовал из RoR, а там примерно так же.
Аноним 04/02/19 Пнд 18:06:55 #680 №1341723 
>>1341693

А что тебе мешает сделать там сервисы или писать логику в ActiveRecord моделях?
Аноним 04/02/19 Пнд 18:08:16 #681 №1341725 
>>1341646

Можно, но идея конечно была разобраться самому, как работать с таблицами в БД, как работать с формами. Компоненты использовать можно, если ты понимаешь их внутреннее устройство и способен сам написать аналогичный.
Аноним 04/02/19 Пнд 18:36:59 #682 №1341744 
>>1341723
Щас бы писать логику работы с данными в классах, являющимися билдерами запросов.
Это примерно как унаследоваться от какого-нибудь класса DateTime и писать там логику своего приложения.
Аноним 04/02/19 Пнд 18:48:34 #683 №1341755 
>>1341744

Ты половину моего поста почему-то не прочел. Я еще в сервисах предлагал писать. Что касается моделей - в Ларавель их используют для этого, если тебе такой подход не нравится, то зачем ты этот фреймворк взял?
Аноним 04/02/19 Пнд 18:54:01 #684 №1341760 
>>1341755
>Я еще в сервисах предлагал писать.
Что именно ты под этим имеешь ввиду? Что такое "сервисы"?
Аноним 04/02/19 Пнд 18:57:56 #685 №1341764 
>>1341760

https://martinfowler.com/eaaCatalog/serviceLayer.html

Класс, содержащий методы бизнес-логики. Вроде зарегистрировать пользователя или удалить товар. Просто класс с методами, который не представляет какую-то сущность, а обычно существует в одном экземпляре.
Аноним 04/02/19 Пнд 19:02:07 #686 №1341770 
>>1341764
Ну вот примерно так я и собираюсь сделать.
Вот в этой статье чел понял какая проблема с ларавельскими проблемами: https://habr.com/ru/post/350778/
(Но зачем-то замутил еще один дополнительный слой абстракции, нахуя он это сделал - хуй знает).

Короче репозиторий. Сервис. Как ни называй это говно, суть в том, что этот класс выполняет запросы к базе в своих методах, а внешний код обращается к этому классу, когда ему надо провзаимодействовать с БД.
Тем самым осуществляются 2 вещи:
1. Внешний код может взаимодействовать с данными только так, как позволяет класс репозитория/сервиса.
2. Как репозиторий выполняет запросы является деталью реализации (хоть в нормальном приложении тебе и никогда не придется подменять эту реализацию)

Аноним 04/02/19 Пнд 19:02:30 #687 №1341771 
>>1341770
* ларавельскими моделями
Аноним 04/02/19 Пнд 19:21:46 #688 №1341787 
Screenshot1.png
АРХИТЕКТУРА ВЗАИМОДЕЙСТВИЯ С БД В ПРИЛОЖЕНИИ
Так бы называлась эта статья, если бы я писал ее какую-нибудь хабропомойку

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

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

Итого, сразу отваливается слой HQL. Тип некая обертка, которая позволяет тебе описывать запросы одинаково, что для mysql, что для postgress, что для sqlite...
Короче мало того, что это говно в принципе возможно только для простейших запросов, которые одинаковы в разных субд, так оно еще и не нужно по двум причинам.
1. Это параша будет тормозить приложение ну просто на ровном месте. Ты еще нихуя не написал, а эта поебень уже работает медленнее, чем если бы тупо написал чистый SQL. И если ты думаешь, что потери в производительности незначительны - нихуя не так. Какой-нибудь основательно напердоленный фреймворк может изи сжирать на это говно 100 милисекунд.
2. Это не нужно, ибо за этими обертками ты "теряешь контроль" над реальным телом sql-запроса.
Видешь какую-нибудь хуиту уровня ->where ('hui', '>=', 2)->join (phone)->firtst().
Ну и как блять выглядит sql-запрос для этой хуйни? Ты должен постоянно держать в голове включенным транслятор этого бреда на sql.
Я уже говорил, что в орм может не оказаться специфических возможстей конкретных субд?
А еще в этом говне могут быть баги и sql-запрос будет выглядеть не так, как ты думол.
Ну и зачем нужна эта срань, если ты можешь просто и без задней мысли писать чистые sql-запросы в ебаных методах?
И сразу все всем понятно, что именно будет делать этот запрос.

Итого, мы получаем TableDataGateway, где прямо в методах sql-запросы.
Далее можно навернуть ActiveRecord, DataMapper, но важно нечто иное, что в этих статьях упускают.

ЧТО тебе возвращают эти методы?
Допустим, в пыхе это будут массивы. Да, говно.

Короче, самой важной абстракцией является абстракция над сущностью.
Метод getUser() должен возвращать не массив, даже не какой-нибудь ArrayList<> в статическом языке.
Он должен возвращать объект данных.

Q: Что если запрос сложный, где возвращаемый ответ не полностью соответствует строке из БД, допустим, с join или динамически генерируемыми столбцами?
Ну и похуй. Все равно должен возвращаться объект данных.
Все методы этого TableDataGateway, Service, Repository или еще какой хуиты, где находится твой sql-код должны высирать или примитив или DAO (ValueObject).

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

Все.
По сути структура абстракций такая:
1. В результате выполнения чистого sql-кода возвращаются некие "сырые" данные.
2. Эти сырые данные преобразуются в value object.
3. Метод класса, где находился вышеописанный код возвращает тебе этот value object.

В итоге имеем:
1. Простоту написания и отслеживания изменений в SQL-коде.
2. Хорошую производительность ввиду отсутствия дополнительных прослоек.
3. Внешний код вызывает методы модели для получения value object'ов, но он ничего не знает о реализации этих методов.

Все блять. Что думаете?
Аноним 04/02/19 Пнд 22:18:34 #689 №1341931 
>>1341787

Ты путаешься. ORM используют не для того, чтобы писать запросы через Query Builder (стрелочками и скобочками). Наоборот, Query Builder используют, когда запрос надо собирать в зависимости от кучи условий (на SQL склеивание строк будет выглядеть довольно коряво). Обычно это всякие выборки с филтьрацией по разным условиям.

И не для того, чтобы менять одну базу данных на другую (хотя некоторые проекты это делают). Он для того, что написано в его названии (object-relational mapping).

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

> Далее можно навернуть ActiveRecord, DataMapper

Так Доктрина и есть ORM по схеме DataMapper. Ты сам себе противоречишь, потому что в начале пишешь, что она не нужна.

Плюсы ORM в том, что тебе не надо писать руками код загрузки объектов из БД и рутинные запросы вида "найти по id". Это быстро надоедает. Также, ORM умеет делать связи между сущностям, включая ленивую загрузку (где она в твоем самописном ORM), также, ORM умеет сам находить изменения в графе сущностей и сохранять их обратно в БД.

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

То есть ты обмениваешь удобство и скорость разработки на скорость работы и потребление памяти. По моему опыту, выгоднее всего получается что-то получать через ORM, а что-то SQL запросами.
Аноним 04/02/19 Пнд 22:21:33 #690 №1341935 
>>1341787

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

Например, я как-то ломал голову на тему: как, например, при выборке списка статей избежать загрузки текста статей? Сделать 2 сущности - Post и FullPost? Это плохой вариант. По факту, надо делать либо лениво загружаемые поля (в Доктрине их нету), либо мапить таблицу постов на 2 сущности: Post и PostDetails, связанные отношением 1-к-1 (Доктрина это тоже не умеет).
Аноним 04/02/19 Пнд 22:45:18 #691 №1341951 
>>1341935
>для одной сущности разные представления
А как такое может быть? Если они различаются, значит это разные сущности.

>как, например, при выборке списка статей избежать загрузки текста статей?
Ох уж эти проблемы орм-зависимых.
Массив id - разве не примитивный тип?
Не вижу проблемы.

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

Аноним 04/02/19 Пнд 22:52:00 #692 №1341961 
>>1341935
Не знаю, как там в доктрине, но в АР ларки или yii такие выборки поддерживаются с маппингом в модель.
Аноним 05/02/19 Втр 02:21:11 #693 №1342039 
>>1341961
Ларка и юи это уже вроде как вчерашний день. Попробуй CakePHP.
Аноним 05/02/19 Втр 02:53:10 #694 №1342044 
>>1342039
>>1341961
Что по поводу codeigniter 4? Вроде годнотища, но ещё без релиза.
Аноним 05/02/19 Втр 03:14:35 #695 №1342052 
>>1342044
Доки на не родном языке. Если инглиш рубишь, то у тебя все получится.
Аноним 05/02/19 Втр 03:45:36 #696 №1342055 
>>1342052
> Доки на не родном языке
На секунду показалось что я не в треде по программированию.
Аноним 05/02/19 Втр 03:59:16 #697 №1342056 
Модель должна получать данные, обрабатывать и передавать их в контроллер
ИЛИ
Контроллер должен забирать данные через методы модели и обрабатывать, а если я использую ОРМ, то роль модели здесь стремится к нулю
Аноним 05/02/19 Втр 06:53:08 #698 №1342066 
>>1342056
Модель это не только непосредственная работа с бд. Вообще всю бизнес логику проще назвать слоем модели, а эти орм только его часть. Так что эксперементируй. Ну а в контроллерах старайся делать поменьше, это просто посредники между клиентом и твоей логикой.
Аноним 05/02/19 Втр 10:06:54 #699 №1342131 
>>1342056
Модель, хуель, все эти слова давно извратили и никто уже в душе не ебет что это вообще значит.

Но что могу сказать - нельзя напрямую обращаться к базе данных в контроллерах.
То бишь, писать там sql-запросы. Ну или обернутые в ORM sql-запросы.
Нужен отдельный слой, который будет этим заниматься, а контроллеры уже будут с ним и работать.
Аноним 05/02/19 Втр 10:50:45 #700 №1342152 
Антоши, а что нужно знать, чтоб в резюме можно было гордо писать миддл?
Аноним 05/02/19 Втр 11:12:41 #701 №1342160 
Screenshot3.png
Screenshot4.png
Screenshot5.png
Ахаха, ларавель, заебися. Умудрился обосраться даже при конвертации модели в массив, расположив ключи в рандомном порядке. Охуенно блять.
Теперь я не могу просто сделать как на третьем пикреле, ибо порядок столбцов неизвестен.
Сука, прямо какое-то стремление жрать говно наблюдается в этом фреймворке и особая тяга к захардкаживанию всего и вся в строковых ключах.
Аноним 05/02/19 Втр 11:43:39 #702 №1342184 
Screenshot6.png
>>1342160
Сука, чтобы я еще раз что-то прогал на этой помойке - лучше убейте меня.
Нахуячили магии половину фреймворка, так для этой параши автокомплит ide (самой лучшей блять) не работает даже при напердоливании родными плагинами ларавеля.
Это какой-то новый уровень говноедства.
Аноним 05/02/19 Втр 12:59:09 #703 №1342220 
>>1342184
>Нахуячили магии половину фреймворка
Ух как мне тоже это не нравилось в свое время. Но потом как-то успокоился.
Аноним 05/02/19 Втр 14:00:21 #704 №1342244 
>>1331378 (OP)

Мне не нравится ПХП потому что постоянно приходится вводить комбинацию шифт+знак доллара, мизинец устает.
Это можно пофиксить как-нибудь?
Аноним 05/02/19 Втр 14:03:07 #705 №1342250 
>>1342244
Я тебе тут с этим не помогу, просто хотел еще до кучи накинуть следующее: -> для образения к методам инстанса, :: для обращения к статическому контексту, точечка для конкатенации.
Меня ничего из этого не парит, но я видел людей которые со всего перечисленного блевали.
Аноним 05/02/19 Втр 14:36:35 #706 №1342266 
tenor.gif
9
http://jsfiddle.net/b1wmyoe8/1/
10
http://jsfiddle.net/zgerh70m/1/ - пофиксил
>В твоем решении картинка не ужимается при уменьшении размеров окна.
Нагуглил решение(в блоке img), но не понимаю как оно работает толком. Что дает max-width: 100% + width: auto?
11
http://jsfiddle.net/0wbntouz/1/ - пофиксил, сделал подсветку
> position: fixed; Это плохая идея, ты закрепляешь его где-то поверх других элементов, и он хоть и невидим, но может перехватывать клики по своей области, перекрывая элемент под ним.
сделал absolute, так он на своем месте останется
Аноним 05/02/19 Втр 14:53:47 #707 №1342274 
images.jpg
По пхп:
Лиличка:
https://3v4l.org/IqEma
Считалка:
https://ideone.com/h8Oe7g
По кругу:
https://3v4l.org/BAtH4
Не понял зачем тут $fromAngle = -80; $toAngle = 260; т.к. не стал вникать в тригонометрию.
Аноним 05/02/19 Втр 15:08:12 #708 №1342279 
>>1340045
Все я выяснил в чем проблема, в папки в которой вложен ларавель не должно быть папок с русскими именами.
Аноним 05/02/19 Втр 16:37:03 #709 №1342326 
Оцените, насколько данный код является хуевым:
https://pastebin.com/RRXiNjLC
Аноним 05/02/19 Втр 18:04:27 #710 №1342378 
>>1342266

img - картинка - это replaced element, то есть элемент, у которого есть "внутренний размер" (размер картинки). Правила вычисления ширины для таких элементов описаны в спецификации CSS2.1:

- https://www.w3.org/TR/2011/REC-CSS2-20110607/visudet.html#inline-replaced-width

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

Наверно, тебе интереснее будет разобраться самому, чем увидеть правильный ответ.
Аноним 05/02/19 Втр 22:59:29 #711 №1342545 
Напоминание всем, кто использует PHP7+, почему важно использовать declare(strict_types=1), чтобы потом на продакшене не ловить непонятных багов: https://ideone.com/ompMYj
Аноним 06/02/19 Срд 01:15:56 #712 №1342571 
>>1342326
Я так же пишу, когда стараюсь. Вроде норм.
Аноним 06/02/19 Срд 01:47:14 #713 №1342586 
>>1342326

Что вернет toArray(), если его вызвать несколько раз подряд?

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

Экспорт в JSON имхо тут делать довольно бессмысленно. Также, на практике, если ты делаешь JSON API, часто нужна не просто копия данных, а надо часть полей скрыть, часть полей преобразовать итд. И твой код с этим не справится.
Аноним 06/02/19 Срд 01:49:44 #714 №1342587 
>>1342545

Интересный баг, не знал.

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

Ты баг в баг-трекере не пробовал поискать или создать? А то, может, мужики-то не знают.
Аноним 06/02/19 Срд 04:26:14 #715 №1342620 
>>1342066
>>1342131
Понял, спасибо.
Аноним 06/02/19 Срд 04:44:52 #716 №1342622 
QPtR1oSp2YA.jpg
Собираюсь устраиваться на работу в офис в ближайшем будущем, но у меня есть проблема: я еще ни разу не влился ни в один коллектив. Где-то я игнорировал всех, и игнорировали меня, где-то я конфликтовал с другими на ровном месте, где-то со мной конфликтовали. Не сказать, что я полный аутист до мозга костей, но круглосуточное двачевание с 2010 года дает о себе знать. Нормально общаться могу только тет-а-тет.
Еще у меня случается конфуз мозга, когда я слышу или читаю сленг программистов. Например, из последнего, некий анон употребил термин "тип" в значении "подсказка". Что-то типа "накидайте мне типов для хуйня_нейм". Я долго думал, что это значит и как относится к самому кодированию, пока не вспомнил, что пхпшторм мне в самом начале предлагал отключить ежедневные tips из функционала, что я и сделал.
Еще были проблемы со словом паттерн, которого нет в русском языке, но есть английское pattern. И когда я читаю его в английском тексте, я знаю, что это означает и читаю без остановок. Но когда раньше слышал в русском не шаблон, а паттерн, я начинал тупить.
И этого сленга очень много. Скажите, в реальной жизни ведь его тоже употребляют? Как мне зазубрить все эти сленговые словечки, чтобы понимать будущих коллег?
Аноним 06/02/19 Срд 04:51:49 #717 №1342623 
>>1342622
Само собой произойдет.
Ну а с коллективом бывает просто не везет, однако чаще всего даже аутисты (например я) вливаются нормально в коллектив. А почему бы и нет собственно? Этож говнокодерство, там многие разной степени аутяги, да и ненависть к менеджерам всяким объединяет.
Аноним 06/02/19 Срд 05:00:37 #718 №1342624 
>>1342587
>>1342545
С чего вы взяли, что это баг? === - это строгое сравнение, которое помимо значений проверяет еще и типы данных.
В данном случае ты сравниваешь строку с числом. Но в мануале ясно говорится, что если ты не используешь строгую декларацию, то типы будут динамически преобразовываться, где это возможно.
Аноним 06/02/19 Срд 05:07:47 #719 №1342625 
>>1342623
Ты наверняка модный и доброжелательный анон с популярными интересами. Я на свои текущие 24 года не нашел ни одного человека, дотягивающего до моего уровня. Так что аутист аутисту рознь.
Аноним 06/02/19 Срд 05:09:54 #720 №1342626 
>>1342625
Я необщительный дядька почти 30 лет, модного во мне нет ничего.
Аноним 06/02/19 Срд 05:17:46 #721 №1342627 
>>1342626
Давно работаешь говнокодером?
Аноним 06/02/19 Срд 05:21:04 #722 №1342629 
>>1342627
Получается больше 8 лет, в 21 первый раз устроился.
Аноним 06/02/19 Срд 06:37:06 #723 №1342637 
Как людям удается так хорошо выглядеть после бессонной ночи и вдобавок работать дальше целый день и оставаться бодрым?
Аноним 06/02/19 Срд 06:45:41 #724 №1342639 
У меня тут вопрос назрел. Я почти дописал свой фреймворк пхпшный, хочу еще прикрутить туда админку и дефолтный шаблон. Это получится уже не фреймворк, а cms?
Правильно ли я понимаю, что что все cms имеют под собой базу в виде небольшого фреймворка?
Аноним 06/02/19 Срд 11:30:03 #725 №1342748 
>>1342586
>Что вернет toArray(), если его вызвать несколько раз подряд?
Ну все то же самое.
Вообще суть кода в том, что базовый класс создает статический массив с ИМЕНАМИ переменных в ДОЧЕРНЕМ классе. Так как у всех объектов одного класса имена переменных будут одинаковы.
А далее уже toArray() уже напрямую, без рефлексии, то есть, очень быстро обращается по этим именам к полям уже конкретного ОБЪЕКТА.

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

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

Аноним 06/02/19 Срд 13:01:33 #726 №1342792 
>>1342639
Необязательно, кто-то на чистом пишет, особенно среди древних цмэсок, сейчас больше на фреймворках наверняка, да.
Аноним 06/02/19 Срд 19:21:39 #727 №1342969 
Господа, посоветуйте новичку софт аналог фотошопа (для верстки) - линейка, выгрузка фото из PSD, если это все возможно. Интересует аналог, потому что фотошоп работает достаточно медленно.
Аноним 06/02/19 Срд 20:36:47 #728 №1343002 
>>1342969
Тебе в /s.
Аноним 06/02/19 Срд 21:24:35 #729 №1343044 
Скриптач, как в 2019 нужно передавать переменные из пешапе в жс? Я проксирую запросы к внешнему api и в виде жсона отдаю в страничку, но это как-то некрасиво.
Аноним 06/02/19 Срд 22:02:37 #730 №1343071 
>>1342587
>>1342624
Я (автор ссылки на ideone) и не утверждал, что это баг. Более того, об этой особенности знал ещё пару лет назад, когда PHP7 только вышел. Проблема в том, что программист в больших проектах в 90% времени будет работать с кодом, который писал не он, а потому подобного рода проблемы сложно обнаружить, просто взглянув на код, часто приходится вооружаться отладчиком. Решил сообщить о такой особенности тайпхинтов в PHP для тех, кто не знал.
Аноним 06/02/19 Срд 22:31:52 #731 №1343088 
Анон, где я обсераюсь?

https://ideone.com/21EtbE

Задача:
W5.1. Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?

Ответ:
Всего будет выплачено около 61270 р. за 13 мес.
Аноним 07/02/19 Чтв 01:25:20 #732 №1343146 
>>1343088
Проверь переменную $pr анон и всё будет
Аноним 07/02/19 Чтв 01:51:43 #733 №1343156 
>>1342969
Ну ты же понимаешь, что ты с этим далеко не уедешь?
Это как учить раскладку дворак.
Вся хуйня на этой планете заточена под фотошоп, а у тебя видите ли работает медленно.
Ты не сможешь быть профессионалом не юзая фотошоп.
Аноним 07/02/19 Чтв 06:37:32 #734 №1343172 
>>1342244
Двачую вопрос.

В кач-ве выхода наверное есть способ забиндить знак доллара на нажатие одной кнопки.
Аноним 07/02/19 Чтв 06:39:56 #735 №1343173 
>>1342152
Мне кажется настоящий мидл понимает, что нужно писать, и не задает таких вопросов. Гугли вакансии, где требуются мидлы, и смотри, соответствуешь ли ты.
Аноним 07/02/19 Чтв 06:46:50 #736 №1343174 
>>1343156
И это хуево, что нет аналогов, потому что фш с каждой версией становится тормознутее, а монополистическое фш-общество уже трудно будет отказаться от фш в пользу чего-то другого. Должно пройти поколение-другое, прежде чем от фш можно было отказаться как от стандарта в отрасти.
Аноним 07/02/19 Чтв 07:06:58 #737 №1343175 
hqdefault.jpg
>>1343172
Изобретатель языка php не случайно ввел знак доллара в инструкцию декларации переменной. Каждый написанный знак доллара притягивает к пишущему деньги. Это псевдоним для священной фразы ГОЛОВА ДАЙ ДЕНЕГ.
А в теге <?php закодированы правила и пик, без которых эта фраза не работает. Сочетание этих символов складывается в особый бинарный код, который и генерирует эти правила и пик с ГОЛОВОЙ. Именно поэтому php код не работает вне этого тега.

ГОЛОВА ДАЙ ЖЕ МНЕ ДЕНЕГ
Аноним 07/02/19 Чтв 10:20:50 #738 №1343212 
>>1343175

Вообще, знак доллара до PHP для переменных использовался в Perl и в оболочках вроде bash. Он используется перед переменными в Ruby, XSLT. В Pascal он обозначает 16-чные числа. В JS, Java он может быть частью имени переменной. В BASIC обозначает строковые переменные. В Fortran является частью управляющей директивы.
Аноним 07/02/19 Чтв 10:26:23 #739 №1343217 
>>1342748

Ты свой код проверял? Я уверен, что не проверял. Зачем ты тогда так уверенно пишешь, что все правильно, если тебе намекают, что это не так? toArray() при каждом вызове будет возвращать массивы все большего размера.

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

Протестируй свой код.
Аноним 07/02/19 Чтв 12:01:43 #740 №1343266 
>>1343217
>toArray() при каждом вызове будет возвращать массивы все большего размера.
Черт, да ты прав, это действительно так. Да, я обосрался.

>не уверен, что если отнаследовать от твоего класса несколько классов, то в них будут разные экземпляры $reflection и $propertyNames.
Тот код несколько неверный, я уже переписал. Теперь там ни одного слова self, только static.

Вот окончательный вариант:
https://pastebin.com/sX5reRfW
Аноним 07/02/19 Чтв 12:06:58 #741 №1343269 
1388317776767.jpg
Есть одна проблема.

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

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

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

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

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

Так вот, вопрос в том, каким паттерном можно это описать? Вроде это не делегат.
Аноним 07/02/19 Чтв 12:42:00 #742 №1343301 
Привет, аноний. Шел я сейчас с работы и думал о всяком разном. И мне в голову ударила одна мысль. Вот есть у нас два файла лежащих в одной папке. Если каждый из этих файлов заrequirить друг в друга, то это будет работать?
Я уже давно не программист, настраивать окружение лень, поэтому обуздайте мое любопытство.
Аноним 07/02/19 Чтв 12:58:20 #743 №1343315 
>>1343301
В C++ есть похожая хуйня, когда 2 объекта могут ссылаться друг на друга.
То есть, есть класс, там ссылка на объект, компилятор проходит по ссылке, а там ссылка на тот класс, из которого он пришел, но он еще не определен!
Но это там разруливается с помощью какой-то неведомой хуйни, так что да, можно и такое сделать.
Аноним 07/02/19 Чтв 13:55:29 #744 №1343357 
Снимок экрана в 2019-02-07 14-46-47.png
Анон, нужна помощь.
Хули он делает?
Как ему сказать, чтоб открывал не текст, а скрипт?
Пробовал запускать и через хтмл тоже, нихуя, тупо весь код показывает.
Сам локалхост работает, показывает Apache2 Debian Default Page.
ЧЯДНТ?
Аноним 07/02/19 Чтв 13:58:38 #745 №1343359 
>>1343357
Надо указать веб серверу, чтобы он .php файлы заупскал собственно пыхой.
Аноним 07/02/19 Чтв 14:12:58 #746 №1343367 
Снимок экрана в 2019-02-07 15-12-22.png
>>1343359
Все сделал, спасибо.
И директорию свою выбрал для удобства, а то приходилось вечно ползать под админом в var/www/html.
Аноним 07/02/19 Чтв 14:24:23 #747 №1343375 
Можно ли как нибудь заменить уебищный стрелочный синтаксис => и -> на человечесике [key: value] и obj.property ???
Аноним 07/02/19 Чтв 14:25:18 #748 №1343376 
>>1343357
php -v что говорит?
Аноним 07/02/19 Чтв 14:26:18 #749 №1343377 
>>1343375
Да. Сменой языка.
Аноним 07/02/19 Чтв 14:29:15 #750 №1343380 
>>1343377
так чо вместо php все таки учить node.js ? Сам js знаю, но 7ая пыха говорят не уступает ноде по быстродействию и с асинхроностью проблем нет.
Аноним 07/02/19 Чтв 14:34:01 #751 №1343384 
>>1343380
Если ты только начинаешь, то я бы на твоем месте ноду учил. У нее большое будущее.
Аноним 07/02/19 Чтв 14:37:32 #752 №1343388 
>>1343384
Откуда вещаешь? С дивана или с работы?
Аноним 07/02/19 Чтв 14:58:15 #753 №1343398 
>>1343388
Ну фактически с дивана, однако знакомый из компании-конкурента рассказывал, что какие-то проекты там стали на ноде пилить и с каждым финансовым годом это число увеличивается.
Аноним 07/02/19 Чтв 15:15:22 #754 №1343410 
При заливке проекта на гитхаб, нужно заигнорить папку вендор с зависимостями, выложив лишь композер.джейсон или нужно всю папку тоже выгружать?
Аноним 07/02/19 Чтв 15:16:08 #755 №1343411 
>>1343410
>выложив лишь композер.джейсон
и лок еще.
Аноним 07/02/19 Чтв 15:16:51 #756 №1343412 
>>1343410
Просто дело в том, что проект для чайников, и эти чайники не в состоянии установить композер для дальнейшей разработки. Что же мне делать?
Аноним 07/02/19 Чтв 17:02:12 #757 №1343463 
Безымянный.jpg
Анонусы, подскажите, только вкатываюсь в ПДО MySQL
БД настроена, контакт есть. Скрипт выполняется, но данные в БД не приходят. Что за хуйня может быть? Я думаю что проблема возможна в:
A) В переменной $query проебался с синтаксисом или вообще хуйню написал
Б) В самой созданной БД проебался с настройкой таблы, возможно
P.S. Подключение к БД есть
Аноним 07/02/19 Чтв 17:03:08 #758 №1343464 
Безымянный.jpg
>>1343463
отлепился сам код
Аноним 07/02/19 Чтв 19:20:40 #759 №1343528 
while-echo.png
word=slov.png
Тэкс, анон. Конкретно туплю.
И в первом и от втором случаях не могу сделать, чтоб первая и вторая строки были различными.
Можно было бы сделать еще три $rand для второй строки.
Но тогда код будет больше и будет повторяться. Стараюсь так не делать.

Во втором случае тупо ловлю ошибку.

В чем дело? Как это исправить?
Аноним 07/02/19 Чтв 19:20:45 #760 №1343529 
>>1343464
>>1343463
Включи выбрасывание ошибок через исключени и увидишь ошибку:
$pdo->setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

https://pastebin.com/HxiZ2U6T

По-дефолту ошибки не отображаются.
Аноним 07/02/19 Чтв 21:23:46 #761 №1343617 
хочу учиться по курсам подскажите годноту пжл)
Аноним 07/02/19 Чтв 21:29:52 #762 №1343623 
>>1343617
Двачую вопрос, есть нормально структурированные курсы начиная с типов данных, строках строковых операторах, массивах, итераторах итд. А не как написать хелоу ворд в html? Можно на инглише.
Аноним 07/02/19 Чтв 21:33:33 #763 №1343628 
>>1343623
>>1343617
SoloLearn или курс с ОП- поста. Не?

> У нас есть свои уроки по основам PHP, они собраны и выложены по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не читайте, не сохраняйте, не запоминайте его, он временный).
Аноним 07/02/19 Чтв 21:52:20 #764 №1343644 
>>1331378 (OP)
Что нужно написать в PATH, чтобы не писать полностью путь php в командной строке?
D:\tmp\php - вот папка, где распакованы php компоненты
Аноним 07/02/19 Чтв 22:04:10 #765 №1343649 
Снимок экрана в 2019-02-07 23-03-06.png
>>1343528
Бамп и еще вопрос.
Хули ему тут не нравится?
Аноним 07/02/19 Чтв 22:50:44 #766 №1343678 
>>1343649
Точку с запятой пропускаешь. 8 и 17 строка.
Аноним 07/02/19 Чтв 23:06:16 #767 №1343684 
>>1343623

Официальный мануал: http://php.net/manual/ru/index.php
Аноним 08/02/19 Птн 04:30:14 #768 №1343756 
>>1343044
Бамп вопросу
Аноним 08/02/19 Птн 05:38:05 #769 №1343765 
Есть гайды, как написать свой автозагрузчик классов с неймспейсами?
Аноним 08/02/19 Птн 09:14:28 #770 №1343790 
>>1343528
>>1343649
Б А М П
А
М
П

>>1343678
Верно, спасибо.
Но мне надо как- то "прогнать" все значений, а то мне кажется, что он сравнивает только первый ($symb) и последний ($rev). И от этого всегда выдает "Палиндром".
Аноним 08/02/19 Птн 09:14:44 #771 №1343791 
>>1343765
Композер
Аноним 08/02/19 Птн 09:58:09 #772 №1343802 
image.jpeg
image.jpeg
Анон.
Поясни за $this.
Можно его не использовать при выведении чего- либо через конструктор __construct(), так как появляется = при использовании текста.
Аноним 08/02/19 Птн 10:10:55 #773 №1343808 
>>1343802
Конкатенируй строки.
Можешь еще попробовать заключать в фигурные скобки {$this->name}
Аноним 08/02/19 Птн 10:49:38 #774 №1343818 
>>1343808
Конкатенация и правда работает. А вот фигурные скобки - не всегда.
Наверно это от компилятора зависит, так как некоторые переваривают перенос строки через /n, а некоторые только <br/>.
Аноним 08/02/19 Птн 11:05:19 #775 №1343824 
>>1342637
Уже несколько лет так живу. Тянки говорят, что выгляжу норм. Но стараюсь делать всетаки зарядку каждый день - может это помогает. Хотя лысеть начал всетаки
Аноним 08/02/19 Птн 11:16:21 #776 №1343832 
T0jeCSQdJgU.jpg
Анон, как быть в такой ситуации и избавить себя от написания таких всратых условий?
Аноним 08/02/19 Птн 11:18:37 #777 №1343833 
>>1343528

Ты сгенерировал случайное слово 1 раз, положил его в переменную и вывел 2 раза одно и то же значение. Ты можешь хоть 10 раз его вывести, значение, положенное в переменную, само по себе не меняется.
Аноним 08/02/19 Птн 11:23:17 #778 №1343835 
>>1342244
Чем плох доллар? Никак не пойму той предьявы. Наоборот же удобно - сразу видишь что это переменная
Аноним 08/02/19 Птн 12:12:51 #779 №1343849 
>>1343833
Ну как тогда быть?

И чтобы не было:
> Можно было бы сделать еще три $rand для второй строки.
> Но тогда код будет больше и будет повторяться. Стараюсь так не делать.

Ящитаю, есть способ сделать это без копирования однообразных действий.
Аноним 08/02/19 Птн 12:30:18 #780 №1343861 
Screenshot233.png
>>1343833
Ебать я даун, братишка.
Надо было всего лишь выполнять рандом в цикле.
Аноним 08/02/19 Птн 12:54:56 #781 №1343872 
images.jpg
Как начать писать РЕАЛЬНЫЙ код на PHP?
Какие то шаблонизаторы, верстка ебаная вообще охуеть
Аноним 08/02/19 Птн 13:25:48 #782 №1343889 
>>1343808
В пхп новых версий советуют не конкатенировать вообще.
Аноним 08/02/19 Птн 13:56:36 #783 №1343905 
>>1343889
Ну охуеть теперь, может еще и двойные кавычки не использовать?
Аноним 08/02/19 Птн 14:19:42 #784 №1343914 
>>1343861
че пишешь? интересно стало
Аноним 08/02/19 Птн 14:38:01 #785 №1343959 
>>1343872
Добро пожаловать в высокоуровневое программирование.
Можешь и 2 недели абстракцию на абстракцию наворачивать, так ничего осязаемого и не написав.
Аноним 08/02/19 Птн 19:24:43 #786 №1344160 
>>1343914
Это задачки из учебника в ОП посте.
http://codedokode.github.io/phpbook в теме "Строки, хакеры и шифровки".
[mailto:bump] Аноним 08/02/19 Птн 20:03:42 #787 №1344180 
тупа бамп

уже 3 дня учу js на русском сайте, не собираюсь останавливаться
только вот пугают долги по сессии и англицкий
Аноним 08/02/19 Птн 20:15:00 #788 №1344187 
>>1344160
ой, какой классный аниме-учебник)) я бы такой бумажный в каком-нибудь магазине купил
Аноним 08/02/19 Птн 20:58:01 #789 №1344207 
>>1344187
а я бы отсосал тому кто его написал
Аноним 08/02/19 Птн 21:28:27 #790 №1344230 
>>1344207В низу страницы есть ссылки на ВК ФБ и почту. Можешь предложить автору свои услуги.
Аноним 08/02/19 Птн 21:41:32 #791 №1344246 
15357553945530.jpg
Где мы свернули не туда?
Композер падает от нехватки оперативки на вдс с гигом RAM.

Сука, ебаный пхп не может установить свое говно, как жить блять
Аноним 08/02/19 Птн 21:42:58 #792 №1344248 
>>1343765
Зачем тебе гайд? Регаешь свою функцию в spl-загрузчике, которая на вход берёт полное имя класса, с неймспесом. Ну и делаешь шо хочешь там.
Только ошибку не вызывай, если не нашёл класс - неположено, т.к. там могут быть и другие, а ошибку тебе сам пых покажет.
Аноним 08/02/19 Птн 21:46:43 #793 №1344251 
>>1343889
Если слушать всех советчиков, то ты для хелловорлда с десяток классов создашь, либу с гитхаба загрузишь и обязательно где-нибудь обосрёшься.
Давно уже такое заметил за сообществом кодеров.
Аноним 08/02/19 Птн 21:53:58 #794 №1344257 
>>1344251
Нормально, мировая практика.
Вот я тот, кто писал выше как композер падает от нехватки памяти.
Устанавливал пак локализации для фреймворка (без выбора языка, эта хуйня тупо грузит ВСЕ имеющиеся) и эта хуйня падает.
Пошел в исходники этой хуйни и выдрал 1 (ОДИН блять) файл на несколько килобайт, который вручную добавил и все заебись.

Аноним 08/02/19 Птн 22:00:19 #795 №1344264 
>>1344251
И на всё надо создать интерфейсы, как же мы без интерфейсов - не поймём же что куда втыкается! Нужны интерфейсы даже для обосрамса.
Аноним 08/02/19 Птн 22:07:15 #796 №1344269 
Безымянный.jpg
Бля, анонесы, подскажите плз. Заебался уже какого хуя эта блядская форма не отправляется к ебливому серверу.
Я этот кун >>1343463
Ошибка высветилась, подправил хуй знает как и куда нажал
Теперь другая ссанина вылетает, мать её.
Буду благодарен <3
красным ошибка
Хотя бы дайте пинка куда смотреть, потому что я сериоузли думаю что проебался в скрипте и имеет смысл удалить всё нахуй и попытаться переписать с нуля
Аноним 08/02/19 Птн 22:10:23 #797 №1344273 
>>1344269
Передаешь строку 'score' в столбец score, где тип smallint (не строковый нахуя тебе smallint в эпоху bigint, поехавший?)

Просто читай что написано в ошибке, также гугли по КОДУ ошибки. Тексты ошибок могут совпадать, но код всегда однозначно говорит о проблеме.
Аноним 08/02/19 Птн 22:11:52 #798 №1344275 
>>1344269
Ему не нравится тип данных, которые ты посылаешь - в 'score' используется smallint, а ты ему integer посылаешь. Либо тип в таблице меняй, либо то, что посылаешь.
Аноним 08/02/19 Птн 22:12:49 #799 №1344277 
>>1344273
>>1344275
огромное спасибо анончики! Буду копаться дальше
Аноним 09/02/19 Суб 01:29:47 #800 №1344344 
>>1344269

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

У меня ощущение, что ты туда строку пытаешься вставить.
Аноним 09/02/19 Суб 01:36:55 #801 №1344350 
>>1344269

Какой смысл удалить? Ты от этого знаний не получишь. Чтобы получить знания, надо понять причину ошибки, и больше ее не делать.

>>1344257

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

>>1344251

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

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

>>1343765

Есть: https://github.com/codedokode/pasta/blob/master/php/autoload.md


Аноним 09/02/19 Суб 01:44:52 #802 №1344352 
>>1344246

По моему опыту, 700 Мб обычно хватает. У тебя случайно сервер не на технологии OpenVZ, который потребление памяти умножает на два? Если не так, то попробуй взять более старую версию композера, отключить xdebug.

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

>>1343872

Если ты не знаешь шаблонизаторы, то писать "реальный" код тебе еще рано. Только какие-то учебные простые примеры. Кстати, простым языком шаблоны описаны в моей статье: https://github.com/codedokode/pasta/blob/master/php/templates.md

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

>>1343959

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

>>1343849

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

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


Аноним 09/02/19 Суб 01:49:52 #803 №1344354 
>>1343818

Не \n, а <br>. \n это перенос строки, но если ты вываливаешь вывод скрипта в браузер, то он интерпретирует вывод как HTML, а в HTMl перенос строки равносилен пробелу.

Выход - либо использовать br, либо указать в заголовке Content-Type тип содержимого text/plain.

Версия интерпретатора тут не при чем. Интерпретатор вообще никак не трогает выводимый текст и ничего в нем не заменяет.

>>1343802

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

$this->name = $name;

как отдельную команду, а не внутри строки.

Использовать this ты не обязан, но судя по вопросу, ты просто не понимаешь, что это такое и зачем нужно. Можешь открыть и почитать главу про ООП в учебнике из ОП-поста или любом другом учебнике.
Аноним 09/02/19 Суб 02:18:40 #804 №1344358 
>>1343410

Нет, ты включаешь игнорирование папки vendoк гитом файле .gitignore и и сохраяешь в репозиторий только composer.json + compoder.lock. Тот, кто скачает твой код, установит заисимости композером.

>>1343412

Сделай инсталлятор или оболочку, не знаю.

>>1343301

Если require то будет вечный цикл, и PHP упадет. Если require_once, то все ок.
Аноним 09/02/19 Суб 02:19:47 #805 №1344359 
>>1343269

Неправильно усложнять код из-за того, что ты его правишь. Используй опции рефакторинга в IDE или поиск/замену по файлам.
Аноним 09/02/19 Суб 11:37:00 #806 №1344413 
это просто охуенно.webm
Почему трейты так хороши?
Раньше думал бесполезное говно, но как узнал, что трейты могут определять абстрактные методы, устанавливая требования к родительскому классу - все резко изменилось.
Причем 2 разных трейта могут определять одинаковый абстрактный метод и базовый класс, использующий 2 таких трейта будет работать, эти методы как бы наложаться друг на друга (а одинаковые переменные разные трейты определять не могут).

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

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

Прям аж охуел с пхп, жалко в других языках нет трейтов.
Аноним 09/02/19 Суб 12:53:10 #807 №1344442 
1.JPG
2.JPG
3.JPG
Итак, доброго времени суток аноны, я тот самый который выше не мог отправить данные из формы в БД по PDO
В общем вчера я решил упростить себе задачу, дабы разобраться. С отправкой форм. И ограничился пока только текстовыми полями.
Также переименовал названия в таблице, ибо были какие-то эроры связанные с отправкой формы из NAME и Second-name.
Теперь мой код выглядит таким образом. Однако данные из форм по-прежнему не отправляются в бд. Из-за этого:
Invalid parameter number: number of bound variables does not match number of tokens
Все колонки я уже проверил.
Почему решил переписать код? Потому что вчера я решил трайнуть в ту самую неблагополучную колонку 'score' отправить текстовые данные. Однако в итоге в БД пришли только названия колонок.
Код конечно сейчас приятнее выглядит, но какой с этого толк, если он не работает?
Заранее благодарен.
Аноним 09/02/19 Суб 12:59:30 #808 №1344447 
>>1344442
>number of bound variables does not match number of tokens
Ебаный ты аутист, ты начнешь когда-нибудь читать что тебе пишут в текстах ошибок?
Число переменных не совпадает с числом плейсхолдеров.
Олсо, полагаю что при назначении параметров надо их тоже с двоеточием указывать.
Да и вообще используй вопросики и и не еби мозг. ? ? ? ? ?.
Аноним 09/02/19 Суб 13:30:45 #809 №1344459 
>>1344447
да я прочитал бля, только число переменных 5, в бд их тоже 5, как и в хтмл коде 5. Я убрал нахуй двоеточия и эта ебатека исчезла, теперь мне в бд приходят ПРОСТО МАТЬ ИХ ПУСТЫЕ ЗНАЧЕНИЯ БЛЯТЬ
Аноним 09/02/19 Суб 13:37:10 #810 №1344462 
5.JPG
>>1344459
причем не в одну линию, а по 5
Вот так выглядит
Аноним 09/02/19 Суб 14:32:40 #811 №1344492 
>>1344442

Откроем мануал: http://php.net/manual/ru/pdostatement.execute.php

> Запускает подготовленный запрос
> input_parameters
> Массив значений, содержащий столько элементов, сколько параметров заявлено в SQL-запросе

Ты должен вызывать execute 1 раз, но с полным массивом параметров. Если ты хочешь добавлять параметры по одному, то используй bindvalue на объекте PDOStatement: http://php.net/manual/ru/pdostatement.bindvalue.php

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

Также, try/catch писать не нужно. Если у тебя включен display_errors = 1,то PHP сам поймает и выведет это исключение (если не включен - запишет в лог (журнал) ошибок).

>>1344447

Надо быть культурнее.
Аноним 09/02/19 Суб 14:38:38 #812 №1344494 
>>1344492
О, спасибо за конструктивный ответ! Буду исправляться.
Аноним 09/02/19 Суб 14:53:16 #813 №1344502 
>>1344462

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

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

- Официальный мануал про то, как его включить (англ, сложный): https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-strict
- Статья: https://dev-tips.ru/blog/post/ustanovka-strict-mode-dlya-mysql

Это можно сделать либо в конфиге my.ini, либо в твоем коде, сделав запрос SET SESSION sql_mode = ...

Проверить текущий режим можно, сделав запрос SELECT @@sql_mode.

Если ты используешь новейшую версию MySQL (8 и выше), то скорее всего он уже включен по умолчанию.

Во-вторых, при создании таблицы ты можешь указать выражение, которому должно соответствовать вставляемое значение. Это делается опцией CHECK в запросе CREATE TABLE. Например, ты можешь указать. что значение колонки должно быть от 10 до 20:

CREATE TABLE t1 (age INT CHECK age BETWEEN 10 AND 20)

или, что длина поля должна быть не менее 3 символов:

CREATE TABLE t1 (name VARCHAR(100) CHECK LENGTH(name) >=3)

Эта опция работает только начиная с MySQL 8.0.16 (эта версия пока не выложена для Windows). Также, она работает в других СУБД вроде Postgres. Если ты создаешь таблицы не SQL-запросом, а через программы вроде phpmyadmin, то там может не быть такой возможности, а может, кстати и быть. Если ее нет, то ты можешь добавить ограничение после создания таблицы запросом ALTER TABLE.

Оф. мануал на англ: https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html

Я бы советовал писать такие ограничения, так как они защищают тебя от ошибок.
Аноним 09/02/19 Суб 15:03:51 #814 №1344508 
Как сделать связь таблицы с НЕСКОЛЬКИМИ другими таблицами?
Ну то есть как обычно бывает. Есть id, есть какой-нибудь user_id, который указывает на таблицу юзеров.

А если у меня там что-то типа
id, type, table_id?
И в зависимости от type table_id может указывать на значения в разных таблицах.

Как это грамотнее сделать?
Аноним 09/02/19 Суб 15:04:22 #815 №1344509 
>>1344442

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

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

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

>>1344413

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

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

Но, на мой взгляд, не стоит использовать трейт там, где подойдет отдельный класс-сервис.

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

>>1343044

Так же, как раньше: конвертировать в JSON и встраивать прямо в страницу в тело скрипта.
Аноним 09/02/19 Суб 15:06:10 #816 №1344511 
>>1344508

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

В общем случае твоя проблема напоминает проблему "наследования" таблиц, для которой есть 3 паттерна: https://www.google.com/search?q=%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B+%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F+%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86&gbv=1&sei=D8JeXM2EC6LmmwX63L7wBg
Аноним 09/02/19 Суб 15:11:18 #817 №1344513 
>>1344511
Ну хуй знает, даже не думал об этом в контексте наследования.
https://stackoverflow.com/questions/441001/possible-to-do-a-mysql-foreign-key-to-one-of-two-possible-tables
Тут говорят, что это полиморфные ассоциации.

>Лучше всего для каждой таблицы делать свое поле.
Об этом тоже думал.
id, facebook_id, vk_id, twitter_id.

Только вот таблица должна содержать только ОДНО из этих возможных значений, или facebook_id, или vk_id, или twitter_id, но не все сразу и даже не 2, а только одно.
А это нельзя гарантировать на уровне sql.

Аноним 09/02/19 Суб 15:20:10 #818 №1344516 
>>1344513

В твоем случае проще всего сделать общую таблицу social_networks и ссылаться на нее. А не по таблице на каждую соцсеть.
Аноним 09/02/19 Суб 15:21:34 #819 №1344517 
>>1344516
Дело в том, что у каждой соц-сети свои уникальные столбцы и вообще разное их количество, эти таблицы не одинаковы.
Аноним 09/02/19 Суб 15:31:29 #820 №1344523 
Короче решил остановится на единой связывающей таблице, классической many to many, но вместо обычной связи двух столбцов, будет связываться несколько.

То есть, есть такие таблицы:
users,
vk,
twitter,
facebook
user_social_networks

И user_social_networks будет содержать ключи на 3 другие таблицы:
id, facebook_id, vk_id, twitter_id.

По логике программы юзер может иметь несколько акаунтов в любых соц-сетях.
И user_social_networks должна хранить ссылки на акки юзера.
Но по идее, в одной строке этой таблицы не должно быть установлено больше одного столбца из списка соц-сетей, а остальные должны быть null.
То есть, 1 строка хранит ссылку только на 1 соц-сеть.
Но это нельзя гарантировать с точки зрения mysql.
Вроде в последних версиях можно сделать это для конкретного случая двух таблиц, но для большего количества нельзя.

В качестве плюсов - простая и очевидная структура БД.
Из минусов - нет идеального наложения на реляционную природу субд.
В целом, даже если по какой-то причине в базе окажется строка, где одновременно будут заданы 2 соц-сети и более - ничего страшного не случится. Небольшая цена за удобство.
Аноним 09/02/19 Суб 15:33:22 #821 №1344526 
>>1344523
А, ну еще забыл сказать, что структура вида id, facebook_id, vk_id, twitter_id все же имеет нормальные реляционные ключи на другие таблицы и к ней может применяться каскадное удаление/изменение.

В отличие от id, social_network_type, social_network_id
Аноним 09/02/19 Суб 15:43:23 #822 №1344530 
>>1344523

Начиная с версии 8.0.16 это можно гарантировать, добавив на таблицу ограничение CHECK. https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html

Оно же есть в Postgres и других системах.
Аноним 09/02/19 Суб 16:06:36 #823 №1344553 
2019-02-0916-04-13.png
Привет, аноны!

Тоже вкатываюсь в PHP. Задачки из оп-поста успешно решаю, но вот затух на установке mbstring и чет не догоняю, что делать.
Пробовал ковыряться в php.ini, но результат на пике.

Киньте плиз ссылку на мануал или подскажите, если все не так сложно.
Аноним 09/02/19 Суб 16:35:52 #824 №1344588 
>>1344509
Да, я именно её и начал делать. Но уже с подключением к бд и отправкой формы потратил 4 дня, сейчас почитаю.

>>1344502
Ещё одна благодарность тебе.
Аноним 09/02/19 Суб 16:35:59 #825 №1344589 
>>1344553
Устанавливай виртуалку с debian, устанавливай туда нормально пхп и все что угодно.
Аноним 09/02/19 Суб 16:44:02 #826 №1344590 
>>1344530
Вот это и имел ввиду.
Но как там сделать проверку на 3+ столбца?
Только на 2 можно.

CHECK (col1 NOT NULL XOR col2 NOT NULL)
Можно ли дописать XOR col3 XOR col4...?
Аноним 09/02/19 Суб 18:09:47 #827 №1344650 
Вопрос про require_once.
Допустим, у нас есть два файла:
data.php
<?php
$a = 1;
?>


и index.php
<?php
function b()
{
require_once('data.php');
echo $a;
}
?>


При запуске index.php получим ошибку "Notice: Undefined variable: a".
Мне нужно без правок в файле data.php, работать с его данными из функции b файла index.php. При этом изменять количество входных параметров функции тоже нельзя.
То есть, запускаем функцию и она уже внутри должна подключить файл и считать из него переменную. Но не считывает. Как это пофиксить?
Аноним 09/02/19 Суб 18:17:04 #828 №1344656 
>>1344590

Ну банально присвоить 1 если поле заполнено, и 0 если нет (x IS NULL), сложить и проверить что сумма равна 1.

>>1344553

У тебя в php.ini прописана директива для загрузки расширения mbstring, но PHP не смог найти файл (dll) с ним. Либо ты неверно указал папку, либо ты не скачал это расширение. Он тебе даже пишет, где он пытался искать файл.

Мануал http://php.net/manual/ru/install.pecl.windows.php

mbstring, если не путаю, идет под Windows в комплекте с PHP, так что скорее всего ты неверно указал папку. Зайди туда и глазами найди нужный файл.

Спрашивай, если непонятно.
Аноним 09/02/19 Суб 18:18:05 #829 №1344658 
>>1344650

require_once выполняет файл только первый раз, как следует из ее названия. Тебе нужен require.
Аноним 09/02/19 Суб 18:42:58 #830 №1344679 
>>1344658
Спасибо.
Однако, мистика. Попробовал require - получилось. Попробовал снова require_once - снова получилось. никаких ошибок. А раньше были.
Аноним 09/02/19 Суб 20:44:21 #831 №1344750 
Антуаны, я наконец сделал свою ЙОБУ >>1344442 и я счастлив!
Спасибо всем кто помог итт!
Аноним 09/02/19 Суб 21:03:17 #832 №1344763 
>>1344350
>Наоборот, не понимаю, в чем удовольствие писать то, что уже кем-то написано
Собственно вот тебе ответ >>1344257
В посте явно видно, что иногда лучше самому навелосипедить по-минималке, чем тащить толстые либы от неизвестного Васяна с неизвестным исходом.
>Возможно
А ещё не надо фантазировать надо моими постами. Возможно ты умственны инвалид, у которого проблемы с пальцами и ты не можешь сам написать ничего.
Вообще, какой смысл разбираться в технологиях, если потом только чужие либы юзать?
Аноним 09/02/19 Суб 21:21:43 #833 №1344778 
ttmp.jpg
>>1344750
А я неделю от веба отдохнуть решил, продолжая изучать основное направление.
Аноним 09/02/19 Суб 21:22:13 #834 №1344779 
>>1344679
Хм. После перезагрузки компа, пхпшторм подчёркивает $a и предупреждает, что она "Undefined variable", но в браузере всё отрабатывает без ошибок и нотисов. Прогуглил всё, что смог придумать для поискового запроса, нигде не пишут, что в функции require и require_once работают как-то по другому. Вот теперь думаю, можно в таком виде отправлять, или нет. то ли это просто пхпшторм не видит переменной в подключённом файле и можно забить, то ли это грубая ошибка на видимость переменных и её допускать нельзя.
Аноним 10/02/19 Вск 00:03:29 #835 №1344881 
Screenshot16.png
Что за хуйня происходит, помогите.

$_list передается в метод по значению.
Вроде все идеально. value передано по ссылке.

В итоге массив не изменяется блять.
Как так?
Аноним 10/02/19 Вск 01:07:22 #836 №1344899 
>>1344881
Отбой тревоги, дело оказалось в реализации ->toArray() в объектах EntityEnterface.
Короче если у EntityEnterface в качестве члена другой EntityEnterface, то он не конвертился в массив, а прямо передавался.
Сделал рекурсивно, теперь заебись.

Рекурсия в рекурсии, кажется я познал дзен программирования.
Аноним 10/02/19 Вск 06:28:25 #837 №1344919 
>>1337481
во втором случае у тебя бессмыслица, ты по чему сортировать собрался? сортировать по колонке можно, там байнд не нужен, когда ты байнд делаешь у тебя вместо колонки строка обычная подставляется, и это перестает быть колонкой
Аноним 10/02/19 Вск 15:40:23 #838 №1345110 
как вам елисеев с "неделей ооп"
Аноним 10/02/19 Вск 18:23:31 #839 №1345228 
Аноны, подскажите кто-то, заебался уж.
Есть форма авторизации, есть бд с логинами и паролями. Пароли которой хэшируются по принципу:
$hash = password_hash($password, PASSWORD_DEFAULT);
В бд приходят пароли в виде $2y$.....
Загвостка в том, что при авторизации приходит в бд совершенно другой хеш пароля. Соответственно один и тот же парольчто вносится в базу при регистрации, и который вводится при авторизации имеют различный хэш.
Как это решается?
Аноним 10/02/19 Вск 20:57:51 #840 №1345321 
>>1345228

Для проверки надо не колхозить свою функцию, а использовать http://php.net/manual/ru/function.password-verify.php

Хеш разный каждый раз, так как там перед хешированием генерируется случайная соль.
Аноним 11/02/19 Пнд 17:56:48 #841 №1345773 
аноны экстрасенсы подскажите
1)есть форма для информации и файл куда сбрасываются значения
2)далее страница обновляется и отображаются значения из файла

проблема в том что после обновления странички, показывается старая версия файла, т.е до ввода информации(если глянуть в файл, то в нем все корректно записалось), после повторного обновления странички показываются уже корректные данные.
код не скидываю т.к он норм все отрабатывает
куда копать?
Аноним 11/02/19 Пнд 18:16:55 #842 №1345794 
>>1345773
>куда копать?
Как там файл открыт, с каким флагом?
Читается как, до записи или после?
Ну ты понел...
Аноним 11/02/19 Пнд 18:32:37 #843 №1345807 
>>1345794
пишу данные file_put_contents,
читаю file_get_contents,
кеширование в пхп.ини убрал
Аноним 11/02/19 Пнд 18:39:29 #844 №1345815 
>>1345807
Попробуй через fopen с файлом поработать, на ручной передаче, так сказать.
Аноним 11/02/19 Пнд 19:15:20 #845 №1345847 
>>1345815
тож самое
Аноним 11/02/19 Пнд 19:58:50 #846 №1345883 
>>1345773

Код кривой.
Аноним 11/02/19 Пнд 20:00:45 #847 №1345887 
>>1345847
Ну значит у тебя логика неправильная в приложении.
Аноним 11/02/19 Пнд 20:43:37 #848 №1345929 
>>1345773
>>1345794
>>1345807
>>1345815
>>1345847
>>1345883
>>1345887

в идеоне не запустится, т.к файл создается
https://ideone.com/PMk9XX
Аноним 11/02/19 Пнд 20:56:51 #849 №1345941 
>>1345929
как всегда нашел ошибку после того как написал в тред, не совсем понял почему так призошло, но хотелось бы услышать мнение от более опытных людей, если их это говно заинтересует
Аноним 12/02/19 Втр 12:05:49 #850 №1346261 
Как перестать дрочить на красоту кода? я больше времени трачу на оформление чем на разработку и тестирование.
Аноним 12/02/19 Втр 12:15:23 #851 №1346263 
bitardsuicide.jpg
Пишу на пхп несколько лет, считаю себя далеко не самым хуевым программистом, сегодня впервые увидел в коде ключевое слово yield.
Я вообще ничего до этого время не слышал про это дерьмо и генераторы.
Пиздец блять.
Есть что-то еще, о чем мне стоит знать?
Аноним 12/02/19 Втр 12:16:01 #852 №1346265 
>>1346261
Что ты имеешь ввиду под красотой?
Надеюсь не форматирование?
Аноним 12/02/19 Втр 12:53:46 #853 №1346274 
>>1346265
и форматирование и структура и общая гармония.
я когда редактор ставлю, то два часа настриваю цветовую схему и подстветку кода, чтобы приятно было смотреть на код
Аноним 12/02/19 Втр 12:56:25 #854 №1346277 
>>1346263
И что? Ты это высрал, чтобы выебанутся тут?
Аноним 12/02/19 Втр 14:30:18 #855 №1346311 
>>1346263
>Есть что-то еще, о чем мне стоит знать?
Да есть - ты хуёвый программист, раз не обращаешь внимание на развитие твоей платформы, ну и сам не развиваешься значит. Добро пожаловать в стагнацию, говнокодер.
Аноним 12/02/19 Втр 15:31:25 #856 №1346343 
Аноны, подскажите кто-нибудь куда смотреть хоть. Вот у меня есть сайт на котором регистрация и авторизация, после авторизации создаётся сессия и происходит переход на ссылку. Если не авторизировался, то кидает обратно на форму авторизации. Вопрос в следующем. Как мне сделать так, чтобы неавторизованные пользователи не могли пройти дальше авторизацииибо можно просто ввести в url адрес этой страницы и он открывается
Т.е. при отсутствие кук и сессии-доступ к этому url закрыть. Как это правильно реализовать?
Аноним 12/02/19 Втр 16:03:11 #857 №1346354 
>>1346343
забей, во современных фреймворках это делается в одну строчку при создании нового роута

Аноним 12/02/19 Втр 16:48:21 #858 №1346377 
>>1346354
ну подскажи в каких фреймворках, и с какой строчкой :)
Я совсем недавно начал заниматься пхп, мало понимаю.
Аноним 12/02/19 Втр 17:08:09 #859 №1346394 
Аноны, подскажите, умоляю. Как управлять чужой сессией? Есть 2 стула 2 человека и некая группа, один админ, другой мембер. Мне нужно сделать возможность админу передать админку или выбросить мембера из группы, но дело в том, что для минимизации запросов в бд я положил токен доступа к группе и ее названию в сессии и в след раз когда админ выкидывает пользователя, юзер все равно продолжает как бы находиться в группе до близжайшего релога. И вот я думаю либо переделать эту механнику с сессиями, либо просто отключать пользователя, но это тоже не лучший вариант. Помогите
Аноним 12/02/19 Втр 17:59:19 #860 №1346416 
>>1346343
создаешь файл пхп где происходит проверка сессий, если не прошло выкидывает через хедер на страничку авторизации, и подключаешь файл через реквайр куда тебе надо
Аноним 12/02/19 Втр 18:14:38 #861 №1346422 
>>1346343
Я лично это прописал в роутере т.е. если человек, который заходит на сайт, не имеет сессии, он всегда попадает в разрешенные ему каталоги даже не получая доступ к контроллеру этого адреса. Либо можно сделать как написал этот анон >>1346416 , но его способ у меня лично вызвал небольшую жопную боль и раздувание кода (если я правильно понял о чем он)
Аноним 12/02/19 Втр 20:34:34 #862 №1346477 
jpeg 1.jpg
Пацаны, вы пишите тесты в свои приложениях на пхп?
Аноним 12/02/19 Втр 20:39:43 #863 №1346482 
>>1346311
Я всегда знал что я дебил...
Аноним 12/02/19 Втр 20:42:59 #864 №1346484 
>>1346274
В нормальных IDE сложнее блокнота всегда есть автоформатирование по нажатию комбинации клавиш.
1 раз настроил и далее твой код всегда идеально отформатирован.

Я даже так и пишу зачастую, ибо так быстрее.
Например, пишу что-нибудь в духе if (1===2){return true;}
прям вот так в строку, похуй, так быстро.
Затем нажимаю crtr+shift+f и все, код нормально форматируется.

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

Короче, IDE - очень важный инструмент, который предохраняет от ошибок путем статического анализа и экономит тонны твоего времени благодаря продвинутому автокомплиту и автоформатированию.
Аноним 12/02/19 Втр 21:04:10 #865 №1346493 
>>1346482
Если ты опытный, то отвечай на мой ответ:
у меня в шаблоне вывод ошибок валидации сделан через подстановку массива $errors[%fieldname%], ну тупо так, по-колхозному. И если ошибок нет, то у меня нотисы вываливаются на несуществующее смещение в массиве.
Мне кажется, что городить if-else конструкции в шаблоне ниочень идея. Как вариант - заполнять пустыми строками эти ключи, но тоже несколько велосипедно сие.
Что делают синьоры-помидоры в таких случаях?
Аноним 12/02/19 Втр 21:21:39 #866 №1346503 
>>1346493
В шаблонизаторе должна быть функция показа ошибок, что-то вроде showErrors().
Она должна быть реализована на верхнем уровне кода по отношению к шаблону.
А уж далее в ней обходишь массив ошибок и выводишь как хочешь.
Плюс если что можешь изменить формат вывода в одном месте.
Если у тебя не самописный шаблонизатор, то там такое уже есть, если нет - стоит написать.
Аноним 12/02/19 Втр 21:26:09 #867 №1346505 
>>1346493
>>1346503
Ну вот, например: https://laravel.com/docs/5.7/validation#quick-displaying-the-validation-errors
Короче, не обращайся к ошибкам по строковым ключам, код показа ошибок не должен париться о том, сколько их, какие из них существуют, как называются и т.п.
Этого можно достичь помещая ошибки в массив, а далее обходя его в цикле.

Этот код обхода в цикле может быть как в самом шаблоне, так и в функции высшего порядка, смотря как сделаешь
Аноним 12/02/19 Втр 21:33:04 #868 №1346510 
>>1346503
Писать шаблонизатор - не вариант. По условию ОПа надо на чистом PHP выводить, как я понял. А на чистом - там надо городить проверку на каждое поле ввода, или обязательно заполнять по ключу. Или отключать вывод ошибок и срать в логи сотнями.
Можно ещё класс написать, чтобы обрабатывал эти запросы по несуществующему ключу, но я тяжелыми наркотиками не балуюсь.

Не понимаю как выкрутиться.
Аноним 12/02/19 Втр 21:33:34 #869 №1346511 
>>1346263
Да, много чего. Кури http://php.net/manual/en/, полезно бывает.
Аноним 12/02/19 Втр 21:42:53 #870 №1346515 
>>1346505
>Короче, не обращайся к ошибкам по строковым ключам, код показа ошибок не должен париться о том, сколько их, какие из них существуют, как называются и т.п.
>Этого можно достичь помещая ошибки в массив, а далее обходя его в цикле.
Но тогда у меня ошибки будут выводиться в кучу, а по проекту надо под полем ввода, где непрошла валидация.
Хотя способо через цикл годный, хоть что-то. Если не придумаю лучше за вечер, то им и сделаю.
Аноним 12/02/19 Втр 21:57:34 #871 №1346523 
Доброго дня, макаки, и снова я со своей велосипедной cms. Дабы не ебаться с лицензиаром такой вещи, как ORM, начал писать свою собственную. Сначала навертел абстракцию над pdo, сейчас наворачиваю другую абстракцию над абстракцией, где будут человекочитаемые методы типа selectAll(), selectOne(), push() и прочее. Так как методов этих много, а о реалиции их я пока что не думал, может быть вы знаете какие-нибудь простые библиотеки с открытым кодом, откуда можно понапиздить методов, переписав под себя?
Посмотрел пока исходник redbeanphp, не нашел там нужного.
Аноним 12/02/19 Втр 21:59:37 #872 №1346524 
>>1346511
Нахуя кидать ссылку на английский ман, когда есть русскоязычный?
Аноним 13/02/19 Срд 00:04:57 #873 №1346569 
>>1346523

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

Также, может быть тебе поможет статья про паттерны работы с БД: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
Аноним 13/02/19 Срд 00:14:29 #874 №1346574 
>>1346394

Можно убрать хранение лишних данных (токен доступа к группе) из сессии.

>>1346493

Тебе еще и экранировать данные придется при выводе. Можно либо if/else, либо заполнять все ключи. Либо сделать функцию, внутри которой будет if и которую можно вызывать. На практике обычно используют какую-то библиотеку для форм (Symfony Forms например), и она предоставляет вывод ошибки/ошибок одной строчкой вроде такой:

{{ form_errors(form.email) }}

Это с использованием шаблонизатора твиг. Без него можно так:

<?= showErrors($errors, 'email') ?>

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

>>1346510

Такого условия нет, если я не путаю. Нотисов в коде не должно быть, они считаются ошибкой разработчика.
Аноним 13/02/19 Срд 01:08:38 #875 №1346593 
>>1346574
>Тебе еще и экранировать данные придется при выводе
Надо ли? Если разработчик в строку ошибки вставляет теги, когда есть шаблон и там вывод оформлен, то земля ему пухом, братишке. Разве нет?
Но с функцией тоже интересный вариант. У меня есть уже одна - для сборки УРЛа с параметрами, значит и вторая туда же пойдёт.
Их значит уже 2 + метод рендера(в контроллере) + заголовков ХТМЛ можно выделить место. Значит мне писать отдельно класс Представления, как я понимаю? А то у меня простое подключение шаблонов.

Вроде же простое приложение, а целый фреймворк городить надо.
Аноним 13/02/19 Срд 01:39:18 #876 №1346605 
>>1346524
Не подозревал, что русский есть, он дописан хоть? На английском и так все понятно же и родные названия все.
Аноним 13/02/19 Срд 01:50:04 #877 №1346606 
>>1346515
А, ну тогда через функцию вида getError ("name").
Внутри проверяй, есть ли ошибка для этого поля и если есть - возвращай.

Можешь сократить в шаблоне:
e("name");
Аноним 13/02/19 Срд 01:52:55 #878 №1346608 
>>1346523
Чувак, ты почти точно делаешь бесполезное говно.
Если в твоей ORM не будет таких вещей, как many-to-many отношения и полиморфные отношения - она является просто обёрткой над SQL.
Аноним 13/02/19 Срд 04:41:40 #879 №1346627 
Оп, допустим у меня есть функция save($student) в классе StudentDataGateway. Можно ли в ней разбирать объект функцией serialize() и посылать разобранным в бд? Насколько такой подход уместен для этой задачи?
Аноним 13/02/19 Срд 12:11:27 #880 №1346753 
>>1346569
Cпасибо за ссылочку, как раз то, что нужно.

>>1346608
Да, значит, я неверно выразился. Для меня ORM и есть просто обертка над SQL.
Аноним 13/02/19 Срд 14:37:05 #881 №1346842 
>>1344230
мне кажется ты тролль и пососать мне не удастся (
Аноним 13/02/19 Срд 18:25:43 #882 №1346988 
>>1346627
Смысла у тебя БД тогда немного. В БД хранят данные, чтобы можно было быстро делать выборки по индексам, джойнить, анализировать и прочее. Если у тебя весь объект хранится как строка, то никаких операций кроме выгрузки-загрузки невозможно. Еще и будет медленнее все, если таких объектов через serialize много грузить.
Аноним 13/02/19 Срд 20:27:34 #883 №1347083 
>>1346988
Да serialize тут не к чему, ты прав.
Аноним 13/02/19 Срд 20:29:15 #884 №1347084 
>>1346627
Вопрос снимается и тут же новый появляется.

Есть ли какой-то встроенный способ для передачи объекта в таблицу бд? Ведь можно получить готовые объекты из таблицы прописав $request->fetchAll(\PDO::FETCH_CLASS, User::class);
Аноним 13/02/19 Срд 22:13:43 #885 №1347144 
>>1346263
>Есть что-то еще, о чем мне стоит знать?
Рефлекшены, тайпхинтинг, етц
Аноним 13/02/19 Срд 23:06:48 #886 №1347165 
14607193951160.jpg
Анончики, пишу мини-cmsку на коленке, выручайте, если вам не трудно. Мозги уже плавятся.

Имеем входные данные - это csv файлик - все выводы я сделал, но нужно сделать realated-вывод записей

То есть смотрите, такие столбцы:
тайтл|картиночка|текстовка|категория|теги через запятую

title|image_url|text|Яблоки|продукты, фрукты, еда
title|image_url|text|Яблоки|продукты, фрукты, еда
title|image_url|text|Яблоки|продукты, фрукты, еда
title|image_url|text|Апельсины|продукты, фрукты, еда
title|image_url|text|Груши|продукты, фрукты, еда

Все-все-все строки берутся и складываются в большущий массив $key[]. А значения из каждой строки на каждой конкретной веб-странице (то есть строчке) выбираю через

\t$mkey = $key;
\t$mkeyarr = explode("|", $mkey);
\t

\tИ дальше у меня на каждую строчку уже свой массив идет:
\t
\t$mkey0 = $mkeyarr[0];\t//title
\t$mkey1 = $mkeyarr[1];\t//image_url
\t$mkey2 = $mkeyarr[2];\t//text
\t$mkey3 = $mkeyarr[3];\t//cats\t
\t$mkey4 = $mkeyarr[4];\t//tags через запятую

Я путаюсь в массивах, помогите с двумя задачами:

1. Вывести массив записей той же категории, что и текучая

2. Вывести массивы тех же тегов, что и совпадают с текущим
Аноним 13/02/19 Срд 23:39:27 #887 №1347183 
>>1347165
>Я путаюсь в массивах, помогите с двумя задачами:
>1. Вывести массив записей той же категории, что и текучая
>2. Вывести массивы тех же тегов, что и совпадают с текущим
Почему ты не хочешь загружать csv в БД и уже оттуда доставать как тебе надо одной строкой? Зачем колесо изобретать?
Аноним 13/02/19 Срд 23:47:01 #888 №1347189 
>>1347165
Ну а вообще это легко делается через foreach. Или через array_filter\walk какой-нибудь.
Проходим по всему массиву и сохраняем в результирующий массив те, где совпадает что тебе там надо. Одной функцией наверное даже можно.
Но лучше БД.
Аноним 13/02/19 Срд 23:48:56 #889 №1347190 
>>1347183
У меня задача - без БД, там есть еще нюансы.
>>1347189
Спасибо
Аноним 13/02/19 Срд 23:58:51 #890 №1347193 
1. Тестовое задание для кандидата: Написать крестики-нолики на PHP для работы в консоли на поле 3х3. Состояние игры храним в файлике рядом со скриптом в json формате. Все оформить в ООП стиле. Какие должны быть команды в консоли: 1. Начать игру 2. Сделать ход (указываем номер ячейки и тип). После каждого хода отображаем результат хода: 2.1. если успех то п.4. 2.2. если ошибка, то ошибку. 3. Завершить игру 4. Отрисовать текущее состояние. 5. About - выводим информацию об авторе и пр.

задание на ждуна, я даже не понял какую консоль они имеют ввиду


Аноним 14/02/19 Чтв 00:26:20 #891 №1347205 
>>1347193
Ебанутенько.
Аноним 14/02/19 Чтв 04:54:15 #892 №1347241 
Аноны, что почитать? Потому как мое развитие медленно начало скатываться в стагнацию, очко горит пиздец
Аноним 14/02/19 Чтв 08:24:20 #893 №1347292 
>>1347193
Збс. Неужели пыха наконец-то начинает признаваться не только как язык для сайтоклепства
Аноним 14/02/19 Чтв 08:25:10 #894 №1347293 
>>1347241
Обрати внимание на:
М.Зандстра - PHP, объекты, шаблоны и методики программирования
Аноним 14/02/19 Чтв 11:19:33 #895 №1347371 
>>1347193

Командная строка или консоль:

https://github.com/codedokode/pasta/blob/master/soft/cli.md
https://beginpc.ru/windows/komandnaya-stroka

Если ты не понял, то значит, надо учиться.
Аноним 14/02/19 Чтв 11:25:45 #896 №1347376 
>>1346627

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

Если вдруг ты принимаешь данные от пользователя и десериализуешь их - это уязвимость. Используй JSON в таких случаях.
Аноним 14/02/19 Чтв 11:32:00 #897 №1347381 
>>1346593

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

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

100% безопасный вариант: все экранируется в шаблоне.

Небезопасный вариант:

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

Тут, чтобы проверить, что все безопасно, надо изучить весь код. включая функцию X и откуда в нее приходят данные. Более того, другой программист может модифицировать функцию X, сделав так, что она перестанет быть безопасной. Он ведь не знает, что эти данные потом выводятся без экранирования.
Аноним 14/02/19 Чтв 11:33:26 #898 №1347385 
>>1346593

Можно сделать вспомогательный класс со статическими методами, например. Можно сделать класс для View и поместить методы туда, но при росте приложения это не очень удобно, так как все будут туда добавлять методы и он разрастется.
Аноним 14/02/19 Чтв 11:45:13 #899 №1347397 
>>1347292
Писать крестики-нолики на PHP это как клепать сайты на C. А требовать такое от джунов - это слабоумие.
Аноним 14/02/19 Чтв 11:52:03 #900 №1347404 
Вот я хочу написать бэк своего магазина при помощи шаблона активная запись. Бэк mvc-шный. Есть базовая модель от которой наследуются модели каждого контроллера. Насколько я понял идею, мою архитектуру можно спроецировать на этот шаблон ->
базовый класс активной записи это базовый класс модели, от которого наследуются конкретные классы активных записей - конкретные классы модели (типа Отзыв или Продукт).

Я все правильно описал?
Аноним 14/02/19 Чтв 11:53:33 #901 №1347406 
>>1347397
Не совсем то, у тебя от сложного к простому, а крестики нолики это от простого к сложному.
Аноним 14/02/19 Чтв 13:43:01 #902 №1347452 
запускаю composer папка vendor в laravel не появляется, сижу на убунте
Аноним 14/02/19 Чтв 13:52:48 #903 №1347457 
>>1347452
В чем проблема-то?
Аноним 14/02/19 Чтв 14:00:28 #904 №1347461 
пользователь убунты разобрался, все ок
Аноним 14/02/19 Чтв 14:04:31 #905 №1347464 
>>1347293
Спасибо большое, запишу. А помимо этого? Какие-нибудь каналы на ютубе или статьи еще, книги
Аноним 14/02/19 Чтв 14:47:09 #906 №1347473 
>>1347406
Да никому в здравом в голову не придёт писать крестики-нолики на PHP, когда есть более удобные для этого ЯП.
Вообще, в норме людям такие тестовые давать, которые макс приближены к тому, чем они там в конторе занимаются. По крайней мере станет видно умеет человек нормально в разработку веб или нет.
А вот такое - бред сивой кобылы. Что этот тест покажет? Ни знания фреймворков, ни паттернов(разве что из геймдева лол), ну и тд. Придёт это ждун и будет им там крестики-нолики писать вместо продукта.
Аноним 14/02/19 Чтв 14:47:16 #907 №1347474 
>>1343889
Интересно, кто, где и почему?
Расскажите подробнее. пожалуйста.
Аноним 14/02/19 Чтв 15:00:42 #908 №1347480 
>>1347381
Как-то тоже об этом задумывался - неявные штуки получаются.

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

>Можно сделать вспомогательный класс со статическими методами, например
А этот класс не будет разрастаться, если всё подряд туда сливать? Это же получится просто свалка разнородных функций, которые делают совершенно разные вещи.
Аноним 14/02/19 Чтв 15:51:43 #909 №1347510 
У меня есть объект Request, где чистятся вилкой на входе куки, пост и гет, и думаю, что напрямую тогда не надо обращаться к этим суперглобальным массивам. Практикуется ли обнуление $__GET, $__POST и тп?
Аноним 14/02/19 Чтв 18:04:44 #910 №1347564 
>>1347473

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

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

Кстати, раз уж речь о задачах - кто хочет поломать голову?

Задача. Напишите функцию, находящую различия между двумя массивами строк аналогично утилите diff.

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

Массив на выходе имеет вид [ [признак, строка], [признак, строка], ... ] где признак - это "", если строка есть в обоих входных массивах, "-", если она есть только в left или "+", если она есть только в right.

Пример: left = ['abc', 'def', 'ghi']; right = ['abc', 'ghi', 'xyz'];
Результат:
[
['', 'abc'],
['-', 'def'],
['', 'ghi'],
['+', 'xyz']
]

По возможности, если это не требует больших вычислительных затрат, стоит выбирать более короткое представление результата. Например, для left = [a, b, c, d] и right = [a, x, y, b, c, d] стоит выбрать форму:

a
+x
+y
b
c
d

А не более длинную:

a
-b
+x
-c
+y
-d
+b
+c
+d

Описание утилиты diff: https://ru.wikipedia.org/wiki/Diff
Алгоритм LCS: https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B0%D1%8F_%D0%BE%D0%B1%D1%89%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C

Если вы просматриваете результат работы программы в браузере, то стоит сделать еще визуализацию результата, например, вроде такой: https://www.tecmint.com/wp-content/uploads/2016/07/DiffMerge-Compare-Files-in-Linux.png
Аноним 14/02/19 Чтв 19:28:32 #911 №1347605 
>>1347564
>Кстати, раз уж речь о задачах - кто хочет поломать голову?
У нас тут вроде прикладное программирование, а не школа информатики, где детки дрочат алгоритмы.
Я лучше очередной класс напишу для своего проекта, чем на это полвечера убью безрезультатно.
Аноним 14/02/19 Чтв 20:19:13 #912 №1347632 
Котаны, такой вопрос.
Я немного знаю пхп, получше знаю JS и средне знаю sql.
Мне нужен паттерн/шаблон/проект типичного сайта на пхп. Структура сайта, если угодно, скелет.
Или сурс дайте.
Очень нужно!
Аноним 14/02/19 Чтв 20:41:07 #913 №1347648 
>>1347397
Как по мне то норм. Хз я пилю гору консольных скриптов на пыхе, если бы мне надо былобы заниматься онли сайтошлепством - укатился бы в питон.

Не пойму чем пыха не подходит
Аноним 14/02/19 Чтв 23:39:35 #914 №1347764 
>>1347648
>Не пойму чем пыха не подходит
Дело не в пыхе, а в таких задачках.
Какой в них смысл, если это в 99% проектах не используется? Вот убьёт какой джун на твою ерунду день и что? Ему это в вебе не пригодится вообще.
Лучше бы почитал чего нужного в это время.
Такие задачки бессмысленны ещё потому, что ничему не обучают впринципе - суходрочка одна на алгоритмы. Без постоянного применения такие вещи из головы вылетают быстро. Писал в своё время сортировки и задачки аналогичные - сейчас я это всё фуфлом для ЧСВшных студентов считаю.
Аноним 14/02/19 Чтв 23:44:50 #915 №1347767 
>>1347648
>Хз я пилю гору консольных скриптов на пыхе
И что ты там за скрипты пишешь? Поди велосипеды изобретаешь раз за разом с таким подходом.
Аноним 14/02/19 Чтв 23:45:53 #916 №1347769 
>>1347632
MVC гугли.
Аноним 15/02/19 Птн 00:52:30 #917 №1347789 
>>1347632

Типичный сайт сделан на CMS (Drupal, Wordpress) или фреймворке, например, Laravel или Symfony. Ты можешь поискать туториалы по созданию сайта на них или поискать готовые примеры. Вот например демо-сайт на Симфони: https://github.com/symfony/demo

Чтобы разобраться в них, тебе надо знать ООП, MVC, может быть, разные паттерны.

>>1347764

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

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

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


Аноним 15/02/19 Птн 01:11:26 #918 №1347798 
Подскажите, как распарсить сайт?
Аноним 15/02/19 Птн 01:26:36 #919 №1347802 
>>1347789
>расширяет кругозор,
Не расширяет. Знания, которые не используются - забываются. А умение решить твою задачку даже знанием не назовёшь - с этим любой справится, немного поломав голову.
Кругозор расширяет теория и изучение современных технологий.

>и полезно
Туда же.

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

И не надо смешивать теорию, типа структур данных, со своей бессмысленной задачкой. И не дай бох ты будешь так писать в рабочем проекте, как в этих задачках. Алгоритмы вообще отдельная песня и нечего пихать это везде где можно.
Аноним 15/02/19 Птн 05:29:57 #920 №1347843 
>>1347798
Первая же ссылка, блин, в яндексе
https://tproger.ru/digest/parse-html-via-php/
Аноним 15/02/19 Птн 08:33:24 #921 №1347883 
>>1347764
>Ему это в вебе не пригодится вообще
Большая часть моей работы заключается в написании консольных скриптов и подводных, которые необходимо знать там полно.

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

Я уже не говорю о том при работе с сайтом - твой код живет 1 секунду, консольный же скрипт может работать неделями, что заставляет учитывать совсем другие проблемы (сохранение состояния при падении, утечки памяти и пр.)
Аноним 15/02/19 Птн 09:39:45 #922 №1347909 
>>1347193
Я б тебе работу не дал, если ты даже сосоль не знаешь. Но вообще задание простейшее, тупо в лоб команды из консоли, по ним вывод соответствующих классов, даже никакого интерфейса не выводить.
Аноним 15/02/19 Птн 11:15:06 #923 №1347964 
бамп
Аноним 15/02/19 Птн 12:33:39 #924 №1348010 
Анон, как передать значение токена в неотправленную форму?


Аноним 15/02/19 Птн 12:35:27 #925 №1348011 
>>1346608
есть где-то описания, как это в orm реализовано? интересно внутреннюю механику таких штук узнать
Аноним 15/02/19 Птн 12:41:16 #926 №1348014 
Вкатываюсь в ПХП. Такие вопросы, на старте фриланс или работа в офисе? Мне кажется что то, что то сложно найти. Какие минимальные для работы знания нужны? PHP/CSS/HTML/JS? За сколько времени реально найти работу с 0 или минимума знаний? Хочу как то распланировать что учить, гайд в оп посте норм(полный), или лучше искать другие источники, книги там или видео?
Аноним 15/02/19 Птн 12:43:07 #927 №1348016 
>>1348014
Я вот несколько лет в офисе, на фриланс так и не получилось до сих пор. Не знаю, кто там с фриланса сразу начинает, это сложнее намного, знаний много надо.
Аноним 15/02/19 Птн 12:45:13 #928 №1348017 
>>1348014
Гайд неполный, но основы дает. Дальше придется курить уже документации и книги по отдельным технологиям, это большую часть времени на изучение и съедает. Но сначала основы из оп поста знать надо, иначе будешь плавать во всем и не понимать как и что с чем связано.
Аноним 15/02/19 Птн 14:39:19 #929 №1348114 
>>1347843
Не сработает, если на странице будет джава. Мне нужен рабочий способ для всех случаев.
Аноним 15/02/19 Птн 15:39:27 #930 №1348158 
>>1348114
http://parsing.valemak.com/ru/php/library/phpquery/
Аноним 15/02/19 Птн 16:11:23 #931 №1348213 
почему все так плохо относятся к битрикс? самая эффективная система в снг, больше половины вакансий на php требуют знания битрикса и только его
Аноним 15/02/19 Птн 16:33:46 #932 №1348237 
>>1348213
Почему там все ЗАГЛАВНЫМИ БУКВАМИ?
Почему там используется синтаксис доисторической пыхи?
Почему он не запускается на пыхе 7.3?
Почему там лезут постоянно предупреждения об ошибках из самого ядра?

Заставили пилить сайт на оном. Моя жеппа в щепки порвана
Аноним 15/02/19 Птн 17:08:06 #933 №1348267 
Помогите, пожалуйста. Есть вордпресс говно на плагине elementor.

Каким образом я могу реализовать конструкцию:

1) Есть маленькое говно с неполным текстом
2) Кликаешь
3) Открывается полная версия на этой же странице

Я бы написал сам, сука, но эта дрянь не дает, а сама такого функционала не предоставляет
Аноним 15/02/19 Птн 17:09:22 #934 №1348268 

>>1348267

То есть по сути

element = getelementbyid

element.style.display==''block''
Аноним 15/02/19 Птн 17:27:34 #935 №1348288 
>>1348267
>>1348268

А, все. Пиздец. Плагин-антивирус блочил js, а не elementor.
Аноним 15/02/19 Птн 18:44:38 #936 №1348338 
аут.JPG
Сап всем, анонасы молю-выручайте, я запилил форму авторизации и аутентификации. Выглядит сие вот таким образом (пик). Далее если персонаж авторизировался-его перебрасывает на страницу. Иначе-бросает на главную. Так вот, суть в том, что я не уверен, что мой код работает верно. Ибо не ебу как его проверить, вроде заходит на сайт при верном логине и пароле. А создаётся ли сессия и отправляются куки-не пойму.
И второе, как сделать так, чтобы при вводе url следующей страницы обходя форму авторизации пассажира выкидывало на index например. Опыта у меня не много, но я что-то совсем запутался с этой хуетой и уже не понимаю в какую сторону мне нужно копать.
Аноним 15/02/19 Птн 21:28:13 #937 №1348463 
>>1348338
Лопни мои ебанные глаза! Чувак, найди в инете готовое решение. Твой код даже комментировать бесполезно - это сплошной кусок говна.
Аноним 15/02/19 Птн 21:30:03 #938 №1348466 
>>1346394
Гугли rbac. А потом гугли решения на php или пиши свое.
Аноним 15/02/19 Птн 21:31:49 #939 №1348470 
>>1348463
Проиграл в голос, ты прав. Но, я думаю мне стоит как-то дособирать это говно из палок и чтоб оно как-то держалось. Дабы апнуть свои знания.
Аноним 15/02/19 Птн 21:37:16 #940 №1348476 
>>1348338

Прочитай про SQL инъекцию: https://github.com/codedokode/pasta/blob/master/security/sql-injection.md

Также, ты неправильно делаешь, что выводишь исключение на экран. В логи оно не попадет, ты о нем не узнаешь, а пользователю оно ничего не скажет.
Аноним 15/02/19 Птн 21:42:45 #941 №1348485 
>>1348470
Ладно, попробую тебя направить:
1. try catch должен обрамлять только тот участок кода, где может вылезти исключение. В твоем случае это подключение к базе. Его и оберни, а логики вынеси из try нехуй ей там делать.
2. Пришедший постом логин может содержать sql injection. Пихать его в таком виде в sql запрос даже не выстрел в ногу, а в голову.
3. Нахрена ты стартуешь сессию до подключения к бд?
Аноним 15/02/19 Птн 22:37:08 #942 №1348503 
>>1347769
>>1347789

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

Еще вопрос - я так понимаю что в браузере исполняться может только JS? Тоесть если php шаблон отдан клиенту, то все изменения в DOM либо с помощью JS прямо на месте, либо отправка данных о изменении на сервер, и перерисовка php-страницы полностью?
Для примера - событие допустим hover в браузере php никак не перехватит? И допустим нет JS. Кто то провел курсором над элементом, возникло событие, как тут может среагировать php?
Аноним 15/02/19 Птн 23:12:23 #943 №1348519 
>>1348463
>>1348476
т.е. вас не смутило что это написано в обычном блокноте, без подсветки синтаксиса?
Аноним 15/02/19 Птн 23:13:16 #944 №1348520 
>>1348503
аяксом
Аноним 15/02/19 Птн 23:14:11 #945 №1348521 
>>1348519
протестую, я тот самый анон, я просто открыл страницу в браузере!
phpstorm не влез одним скрином.
Аноним 15/02/19 Птн 23:15:19 #946 №1348522 
>>1348476
благодарю, учту и допилю. Однако я спрашивал о другом.
Аноним 15/02/19 Птн 23:16:18 #947 №1348523 
>>1348485
окей, я тебя понял. Лови благодарность, няша :3
Аноним 16/02/19 Суб 00:06:35 #948 №1348546 
>>1347883
>Банальный парсер и тот таит в себе кучу всего с чем не сталкиваешь при банальном сайтоделании
Да ты что? Перечисли пожалуйста, чего у тебя там особенного такого. И почему ты решил, что бэкэнд делать просто? Студентов сделал уже? Покажи.
И почему парсеры на сайтах не используются вдруг?

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

>сохранение состояния при падении
Есть куча готовых либ и софта для этого, но Чингачгук у нас всё сам.
Аноним 16/02/19 Суб 00:07:16 #949 №1348547 
Вы че ебанутые, зачем вам ORM? Какие преимущества она даёт в сравнении с чистым майскул? И нет, код выходит не чище.
Аноним 16/02/19 Суб 01:39:59 #950 №1348569 
>>1348547
у соседа есть, чем я хуже?
Аноним 16/02/19 Суб 02:35:50 #951 №1348578 
Кому интересна моя история вката? Могу расписать в паре абзатцев.
Аноним 16/02/19 Суб 02:38:36 #952 №1348579 
Пыхач, я чот ебанулся и записался на олимпиаду по веб-программированию. Обещают пхп, а я вообще нихуя не понимаю. Есть пара дней. Как вообще запускать пхп на локалке, из консоли там? Как читать данные из файла построчно? Или как аргументы? Я пока смотрю всякие костыли олимпиадные с графами, а с технической стороны я не шарю
Аноним 16/02/19 Суб 02:49:41 #953 №1348581 
>>1348578
Выкладывай свою морозную. 3 часа ночи - самое время для былины.
Аноним 16/02/19 Суб 07:57:45 #954 №1348630 
Есть блог на laravel с комментариями на vue. Комментарии приходят json'ом. Лучше сделать для этого апи с авторизацией или просто роутов хватит?
Аноним 16/02/19 Суб 14:24:07 #955 №1348752 
ОП постоянно говорит, что без ООП сложно сделать задачу вроде вектора.
Предлагаю на проверку свободный от сайд-эффектов, строго типизированный вектор, включая антикризисные меры: https://codesandbox.io/s/github/kubk/vector-fp/tree/build/?expanddevtools=1&hidenavigation=1&module=%2Findex.ts&view=editor
Например, если в тип Employee добавить новую должность, то код не скомпилируется, так как для новой должности не описаны все необходимые характеристики (ЗП, кофе и т.д). Тоже самое если добавить новый ранг. Если в демо навести курсор над любой переменной, то можно увидеть тип, который вывел тайпскрипт. Знания ФП у меня поверхностные, только то что в статьях-туториалах почерпнул. Думаю какую книгу взять, интересует возможность доказывать корректность программы на стадии компиляции.
Аноним 16/02/19 Суб 14:36:21 #956 №1348760 
14762210194491.jpg
Как скопировать структуру многомерного массива?

Многомерный массив может содержать различные объекты в качестве значений.
Мне надо обойти этот массив и создать массив с такой же структурой, но в качестве значений использовав свои значения.
Аноним 16/02/19 Суб 14:37:15 #957 №1348762 
>>1348547
Никаких - свистоперделка. Используешь ОРМ - всеравно пишешь методы-обертки для своих задач, точно также как на чистом мускуле
Аноним 16/02/19 Суб 14:37:29 #958 №1348763 
>>1348752
Почему вкладка браузера с этим говносайтом жрет у меня 30% процессора? Чтобы у тупых жс-блядей печень отсохла блядь
Аноним 16/02/19 Суб 14:38:27 #959 №1348764 
>>1348760
А, ну самое главное - исходный массив изменять нельзя.
array_walk_recurcive ($arr, function (&$value){$value = 'hui';}) не катит
Аноним 16/02/19 Суб 14:41:01 #960 №1348765 
>>1348546
>И почему ты решил, что бэкэнд делать просто?
По опыту

>Студентов сделал уже?
Я не делал ни одной задачи из ОП поста

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

>Есть куча готовых либ и софта
Нету
Аноним 16/02/19 Суб 14:54:35 #961 №1348779 
>>1348763
Специально открыл. 800мб памяти и 10% скайлейка в ПРОСТОЕ. Прелесть какая.
Аноним 16/02/19 Суб 15:04:49 #962 №1348780 
>>1348763
Там в браузере запускается полноценный редактор кода с автокомплитом/go to definition и прочим: https://medium.com/@compuives/whats-unique-about-codesandbox-f1791d867e48
IDE на Java тоже много отъедают. Если тебе просто текст, то в левом верхнем углу есть ссылка на гитхаб репозиторий, из которого создан codesandbox.
Аноним 16/02/19 Суб 15:40:56 #963 №1348806 
Здрасте, вопрос есть.
Шукал по поводу работы с тегами, набрёл на https://ru.stackoverflow.com/questions/148204/Организация-тегов-в-бд-и-запросах
Подаскажите, нафига столбец `tag_count`?
Аноним 16/02/19 Суб 15:53:49 #964 №1348817 
>>1348806
Гугли что такое many to many отношения.
Аноним 16/02/19 Суб 16:04:31 #965 №1348827 
>>1348817
По схеме, что на stackoverflow выходит, что чтобы сохранить запись с тегами, нужно сохранить саму запись, сохранить новые теги (если такие будут), сделать n записей (где n - кол-во тегов) в таблицу связи тег-запись.
Чтобы найти записи по тегу, достаточно узнать id тега и сделать выборку по нему в таблице связей. Смысла `tag_count` по-прежнему не понимаю.
ЗЫ Many to many погуглил, не помогло.
ЗЗЫ https://toster.ru/q/250728 - тут тоже в таблице связей нет третьего столбца...
Аноним 16/02/19 Суб 16:12:22 #966 №1348836 
>>1348581
напишу как только вкачусь
Аноним 16/02/19 Суб 16:16:49 #967 №1348839 
>>1348765
>Я не делал ни одной задачи из ОП поста
Я не сомневаюсь.

>Тем не менее с задачей висения в памяти он справляется
Конечно - с твоими-то костылями. Сам себе проблемы создаёшь на ровном месте и сам же их героически решаешь.

>Нету
Конкретно сохранение состояния можно реализовать через кэширование на Redis\Memcached, но ты же у нас настоящий индеец и всё сам делаешь.

Тебя к реальным проектам на пушечный выстрел лучше не подпускать - такого наворотишь со своими алгоритмами.
Аноним 16/02/19 Суб 18:00:55 #968 №1348906 
>>1348760
Классическая задача по рекурсивному обходу дерева. Гугли по этому словосочетанию.
Аноним 16/02/19 Суб 18:19:13 #969 №1348912 
>>1348579
Бамп, мне до понедельника надо подготовиться
Аноним 16/02/19 Суб 18:26:40 #970 №1348917 
>>1347193
Разве пшп умеет задавать вопросы в консоли? Типа, открываешь скрипт, а он тебе предлагает соснуть хуйца или сделать бочку, и тебе нужно в консоль букву напечатать
Аноним 16/02/19 Суб 20:45:19 #971 №1349007 
>>1348917
конечно
<?php
$answer = '';
while ($answer != 'da' . PHP_EOL) {
echo 'Sosnut\'? ( da ): ';
$answer = fgets(STDIN);
}
echo 'Pristupaj' . PHP_EOL;
Аноним 16/02/19 Суб 22:19:14 #972 №1349090 
Щас был в /xo/ там все говорят шо ПХП ненужен, смысла учить его нет и "PHP нужен только для старых проектов которые его используют, чтобы запилить очередной костыль и надеяться, что этот монстр не развалиться." Это правда? Нет смысла развиваться в этом напралении?
Аноним 16/02/19 Суб 22:25:09 #973 №1349096 
еще грят шо пхп мертвая технология гспди
Аноним 16/02/19 Суб 23:00:15 #974 №1349123 
Вопрос по задаче про будильник:

Есть класс будильник и у него есть массив-объектов тревог.Как лучше сделать?

1. Передавать объекты тревог в методы класса будильник

2. Просто прописать методы класса Тревога и вызывать их для каждой тревоги

заранее ивиняюсь если расписал все непонятно
Аноним 16/02/19 Суб 23:03:41 #975 №1349127 
>>1349090
Чем задавать тупые вопросы в 10000 раз ,зайди на хедхантер и посмотри вакансии по разным языкам
Аноним 17/02/19 Вск 00:03:03 #976 №1349160 
>>1348839
>можно реализовать
>Есть куча готовых либ и софта для этого

Предлагает пердолить свой костыль с редиской как готовое решение. Ясно
Аноним 17/02/19 Вск 01:52:03 #977 №1349196 
>>1349160
>пердолить свой костыль
Лучше известные решения, чем костыли очередного хеллоуворлдщика.
Алсо, с каких это пор кэширование является костылём?
Аноним 17/02/19 Вск 09:31:43 #978 №1349269 
>>1349123
В конструктор будильника передать массив тревог.Создать метод у будильника который пробежит по тревогам и будетвызывать нужные тревоги
Аноним 17/02/19 Вск 11:29:18 #979 №1349313 
>>1349196
Госпади. Какой же ты даун блядь.
ЭТО НЕ ГОТОВОЕ РЕШЕНИЕ, долбоеб. Испанский стыд от таких знатоков-советчиков
Аноним 17/02/19 Вск 11:46:29 #980 №1349334 
Screenshot51.png
Двач, какого хуя?
1. При клонировании примитивные типы копируются по значению.
2. При клонировании, если член является объектом, копируется ссылка на него.
3. При этом массивы всегда копируются по значению в пхп.

А что с массивами объектов?
Я где-то читал, что для объектов в массиве вызывается метод clone, но походу нихуя не вызывается.

Мне что, при клонировании вручную копировать члены, являющиеся массивами?
Аноним 17/02/19 Вск 12:21:27 #981 №1349377 
>>1349334
При клонировании клонируются примитивы и копируются ссылки, потом вызывается __clone у клонированного объекта. В случае массива просто скопировался весь массив, а там только ссылки, так что ничего не поменялось. clone на массиве конечно не вызывается, с чего вдруг, делай сам в классе А.
Аноним 17/02/19 Вск 13:10:01 #982 №1349452 
>>1349334
При копировании объекта в переменную помещается ссылка на него, а вот при клонировании создается новый объект. А чего именно ты хочешь добиться я так и не понял.
Аноним 17/02/19 Вск 17:01:42 #983 №1349685 
>>1331378 (OP)
Хочу установить mySQL для apache на компьютер (32 разрядная система). И хотя во всех мануалах просят скачать zip-архив, последние версии имеют zip-архив только для 64 разрядных систем, поэтому мне пришлось скачать установщик. В установщике я выбрал установить только сервер (Server only). Нажимая далее, установщик пишет следующее: mysql installer did not find packages in the current bundle suitable for installation. Что делать?
Аноним 17/02/19 Вск 17:43:19 #984 №1349737 
>>1348752
Разве это не ООП в функционалном стиле? Там так же есть "объекты" Департамента или СтавкиРабочего.
Аноним 17/02/19 Вск 18:35:34 #985 №1349792 
>>1349737
Смотря что считать объектом. Если исходить из определения Гради Буча, то у объекта есть поведение и изменяемое состояние: http://www.helloworld.ru/texts/comp/other/oop/ch03.htm
В моём случае Департамент это просто неизменяемая структура данных без поведения. Возможность создавать такие структуры данных существовала задолго до появления ООП, тут есть примеры структур данных на чисто функциональных языках: https://en.wikipedia.org/wiki/Record_(computer_science)#Examples
Аноним 18/02/19 Пнд 01:56:49 #986 №1350186 
>>1349685

- проверить соответствие ОС требованиям MySQL, может эта ОС не поддерживается
- попробовать взять более старую версию mysql
Аноним 18/02/19 Пнд 16:48:34 #987 №1350506 
Без имени 1.png
Сап, пыханы. Я тут накидал схему, расскажите, кто знает, как правильно?

Первое это классический подход к организации модели с бд без всяких орм и шаблонов.

Второе я придумал на основе статьи ОПа по шаблонам проектирования (в частности Active Record)

Третье я увидел в видосе, где мужик писал свой фреймворк. ERepository это класс, где Е - название сущности типа Е1, Е2 и Е3. Зачем здесь нужен репозиторий, я не знаю.

Расскажите, пожалуйста, как должна выглядеть структура модели, чтобы она соответствовала всем канонам активной записи.
Аноним 18/02/19 Пнд 17:43:19 #988 №1350524 
как учить laravel, помогите
Аноним 18/02/19 Пнд 19:15:29 #989 №1350566 
у книги Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования 5 издание есть?
Аноним 18/02/19 Пнд 19:19:28 #990 №1350569 
>>1350566
Есть, но только на английском, на русский уже год переводят и постоянно откладывают. Вроде на рутрекере было и на nnm-club.
Аноним 18/02/19 Пнд 20:29:28 #991 №1350605 
>>1350524
лучше всего смотреть как кто-то применяет технологию и пытаться подражать
также нужно вчитываться в документацию на английском
Аноним 18/02/19 Пнд 22:04:45 #992 №1350654 
>>1348917

Умеет, как и почти любой язык, почитай про stdin/stdout. В Windows в консоли может понадобиться использовать кодировку Windows-1251 или cp866, чтобы отображать и принимать кириллицу.

>>1348579

> Как вообще запускать пхп на локалке, из консоли там?

Урок:

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

> Как читать данные из файла построчно?

fopen + fgets + fclose

> Или как аргументы?

http://php.net/manual/ru/features.commandline.php

>>1348839

> Конкретно сохранение состояния можно реализовать через кэширование на Redis\Memcached, но ты же у нас настоящий индеец и всё сам делаешь.

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

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

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

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

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

Ну и вы тут флуд развели на 5 постов без единого примера кода или примера задачи, с которой PHP справляется хорошо или плохо.
Аноним 18/02/19 Пнд 22:53:05 #993 №1350681 
a12a988e590f2f4b336506e636e73ae7124c5561.jpg
Есть что то что проверяет использование классов? (use) и обращение к несуществующим переменным (когда обьебался одним символом в названии существующей)?
php -i, phpcs не провереряют
phpmd не уверен если проверяет оцените в пример? Но на сколько я вижу - нет.
Аноним 18/02/19 Пнд 22:53:36 #994 №1350683 
Анон с Вектором на TypeScript (@kubk), я глянул, интересно, но прокомментировать пока не успел. Типизация мне нравится. Скажу только, что там из-за иммутабельности неудобно менять свойства рабочих (т.к. по сути надо пересоздавать Департамент ради изменения свойства 1 рабочего, а самого рабочего надо клонировать, при этом, если кто-то на него ссылался, то он продолжит ссылаться на старую копию. Пример: есть объект Задача, и у него есть поле Исполнитель - оно будет ссылаться на старую версию работника), и нельзя поменять зарплату одному отдельному рабочему. Также, список Департаментов и ТаблицуЗарплат можно было объединить в тип Компания.

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

>>1348806

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

>>1350524

Убеждаешься, что ты знаешь базовые вещи (ООП, MVC, ActiveRecord, шаблонизация, проектирование БД). Если не знаешь - почитай статьи, например, тут: https://github.com/codedokode/pasta/ или где-то еще.

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

Вот для начала совсем уж простой туториал: https://laravel.com/docs/5.1/quickstart
Аноним 18/02/19 Пнд 22:55:23 #995 №1350685 
>>1350506

Первый подход имхо это и есть ActiveRecord: объект, который умеет сам себя сохранять в БД. Или же TableDataGateway: класс, который собрал в себе методы работы с одной таблицей (разница: объект AR соответствует 1 строчке в таблице и их может быть много, а TDG - существует в 1 экземпляре и соответствует таблице, а не строчке в ней).


> Третье я увидел в видосе, где мужик писал свой фреймворк. ERepository это класс, где Е - название сущности типа Е1, Е2 и Е3. Зачем здесь нужен репозиторий, я не знаю.

Репозиторий - это объект, который представляет собой некое "хранилище" сущностей. Их туда можно класть, искать, удалять. При этом репозиторий может использовать для хранения БД, а может, например, использовать какое-то другое хранилище (например, просто хранить их в памяти в массиве - это полезно в тестах). Или вообще передавать/получать данные из REST API. Ты можешь заметить, что репозиторий похож на TDG, но TDG - явно предназначен для работы с БД, а репозиторий - это просто хранилище, не обязательно в БД.

Репозиторий, как и другие паттерны, описан в книге Фаулера: https://www.martinfowler.com/eaaCatalog/repository.html Там в примере используется "двухслойная" схема, репозиторий является лишь "фронтендом", к которому может быть прикреплен "бекенд" - бекенд для сохранения в БД, или бекенд для сохранения куда-то еще.

Репозитории есть в ORM Doctrine, работающем по принципу Data Mapper.

Статья на хабре: https://habr.com/ru/post/248505/

Вот еще картинка https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/media/image18.png из статьи майкрософта: https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design

Там используются понятия "домен", "доменная модель" - домен здесь значит "предметная область задачи", а модель - сущность из этой области: https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82

В третьем подходе, который ты описал, есть что-то похожее на Data Mapper. Я не очень понимаю, как ActiveRecord совмещается с репозиторием: суть "активной записи" в том, что объект, представляющий строку в таблице, умеет сам себя сохранять в БД. Соответственно, репозитории при таком подходе не требуются.

Т.е. ключевое отличие AR от других паттернов:

Active Record:

$user = new User;
$user->setName(...);
$user->save();

Репозиторий/Data Mapper:

$user = new User;
$user->setName(...);
$userRepository->save($user);

Для проверки ты можешь сам поискать у Фаулера все эти паттерны, вот например, ActiveRecord: https://www.martinfowler.com/eaaCatalog/activeRecord.html

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

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

Как описано у Фаулера или в других статьях.
Аноним 18/02/19 Пнд 22:55:50 #996 №1350686 
>>1349123

Действительно, непонятно описал.

> 1. Передавать объекты тревог в методы класса будильник

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

> 2. Просто прописать методы класса Тревога и вызывать их для каждой тревоги

Не очень понял.

Традиционно такие вещи делают так: делаем объект Тревога, и делаем Будильник, который хранит в себе список Тревог и умеет делать вещи вроде поиска ближайшей тревоги:

$alarm = new Alarm(12, 00, ...);
$clock->addAlarm($alarm);
$clock->deleteAlarm($alarm);
$nextAlarm = $clock->getNextPlannedAlarm();

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

$alarm = $clock->createAlarm(12, 00, ....);
$clock->deleteAlarm($alarm);
$nextAlarm = $clock->getNextPlannedAlarm();

>>1349334

При клонировании все работает так же, как при присваивании:

- массивы клонируются (но не объекты внутри них)
- дочерние объекты (в полях или в массивах) не клонируются, просто копируется ссылка на них:

class A
{
public B $b;
public $list; // B[]
}

При клонировании этого объекта $b не будет склонирован, $list будет скопирован (будет создана независимая копия массива), но ссылки в нем останутся ссылками на те же объекты.

Если тебя это не устраивает, то определи метод __clone и в нем клонируй руками все вложенные объекты.
Аноним 19/02/19 Втр 00:16:10 #997 №1350715 
Сап,Делаю сайт на WP.Вообщем такая проблема.Нужно сделать личный кабинет с возможностью заливать pdf файлы на свой профиль.Подскажите, как вообще это можно осуществить.
Аноним 19/02/19 Втр 00:19:24 #998 №1350716 
1550524754834.jpg
>>1350683
>5.1
Аноним 19/02/19 Втр 00:49:25 #999 №1350725 
>>1350654
>Я бы использовал файлы или БД
>использовать другие динамические языки (JS, Питон) неудобно из-за более низкой производительности
Ну-ну. Файлы у нас пишутся быстро, а JS с Питоном медленно работают.
Ясно всё.
Аноним 19/02/19 Втр 00:59:01 #1000 №1350726 
>>1350654
>Тем более, кеш плохо годится для сохранения состояния
Алсо, тот же редис можно подключит в php.ini и просто переназначить на него сессии. И не надо костылить бесконечные скрипты.
Ну вы даётё блин.
Аноним 19/02/19 Втр 01:14:18 #1001 №1350728 
>>1350685
Спасибо тебе за такой всеобъемлющий пост.

>Я не очень понимаю, как ActiveRecord совмещается с репозиторием: суть "активной записи" в том, что объект, представляющий строку в таблице, умеет сам себя сохранять в БД. Соответственно, репозитории при таком подходе не требуются.

Я читал, что там вся разница в методе save.
Классический AR этот метод вызывает прям в сущности, а репозиторий в связке с AR сохранение и обновление берет на себя, и логика из сущности содержится в нем. Читал, что сам по себе AR это плохо. AR с репозиторием это не дата маппер, потому что нужен еще один слой адаптера.

Подожди, то есть все это выше мною прочитанное это ложь?
Аноним 19/02/19 Втр 01:18:25 #1002 №1350730 
>>1350726
Редис твой говнецо.
Аноним 19/02/19 Втр 01:32:39 #1003 №1350734 
>>1350728

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

>>1350726

Там вроде речь шла про состояние вообще а не сессии.

>>1350716

Для 5.7 туториала что-то нет. Ну пусть анон тогда сам по документации узнает, что изменилось в сравнении с 5.1.

>>1350725

Типизации все равно нет. Хотя я Питон успешно использую в Jupyter Notebook. Ну и еще PHP вроде как проще в использовании и фреймворков под него много.
Аноним 19/02/19 Втр 01:50:53 #1004 №1350735 
>>1350734
>Типизации все равно нет
В /б это называют манёврами.

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

Теперь я даже начинаю понимать почему ПХПшников в массе своей макаками называют.
Аноним 19/02/19 Втр 02:54:01 #1005 №1350737 
>>1350686
Методы изменения параметров тревоги должны быть у тревоги или у будильника?
Аноним 19/02/19 Втр 17:49:09 #1006 №1350945 
>>1350737

Можно сделать у тревоги, если у тебя Тревогу можно создать или получить из будильника. Так скорее всего будет удобнее. Но ты можешь для эксперимента попробовать сделать их у Будильника и посмотреть, что получится.
Аноним 19/02/19 Втр 22:43:37 #1007 №1351074 
>>1350734
>А как они из AR объекта получают объект репозитория? Через какой-то глобальный реестр? Сути это не меняет, это все равно AR, если сущность умеет сама себя сохранять.

Что значит из AR-объекта? Из сущности, в которой используется трейт AR? Или из самого трейта?
Никак, наверное. Они подключают трейт к сущности, а в репозитории создают ее объект, где уже вызывают метод сейв и проводят с сущностью манипуляции.
Там еще каким-то боком Query Builder работает, но это наверное к вышеописанному не относится.
Аноним 19/02/19 Втр 23:23:18 #1008 №1351098 
Если на мой вопрос может ответить только ОП, это значит, что я уже достаточно далеко продвинулся в изучении технологий?
Аноним 20/02/19 Срд 00:47:09 #1009 №1351145 
Расскажите пожалуйста с чего вы начинали и каким образом осваивали данный яп. Пиздец нахуй, не знаю с чего начинать и с какой стороны зайти.
Аноним 20/02/19 Срд 00:51:52 #1010 №1351147 
1.png
2.png
Безымянный.png
подскажите куда копать, не представляю как сделать такое простое задание

Предположим, у нас есть код, позволяющий вывести список групп товаров, а также товары, находящиеся в каждой группе. Задача заключается в том, что необходимо добавить к имеющемуся коду функциональность вложенных групп товаров.
В приложенном файле test_base.sql находится дамп базы данных MySQL, содержащий две таблицы:
1.\tgroups – таблица групп товаров, содержит поля:
•\tid – идентификатор группы
•\tid_parent – идентификатор «родительской» группы
•\tname – название группы
2.\tproducts – таблица товаров, содержит поля:
•\tid – идентификатор товара
•\tid_group – идентификатор группы товаров
•\tname – название товара
Необходимо написать PHP-скрипт, удовлетворяющий следующим требованиям:
1.\tПри запуске выводит список (ul) групп товаров первого уровня (groups.id_parent=0), название каждой группы является ссылкой, которая вызывает этот же скрипт с GET-параметром “group”, равным id группы. Возле названия должно быть написано общее количество товаров в группе (количество товаров в самой группе и во всех ее подгруппах). Пока не выбрана ни одна группа – также выводится список всех товаров.
2.\tПри переходе по ссылке (выборе группы товаров первого уровня) – кроме списка групп товаров первого уровня выводится также список всех подгрупп выбранной группы, все имена подгрупп также являются ссылками, и возле названия подгруппы находится количество товаров, содержащихся в этой подгруппе. Также выводятся все товары, отнесенные к выбранной группе (и всем ее подгруппам).
3.\tКоличество уровней вложенности групп не ограничено.
4.\tНабор используемых технологий ограничен: php, mysql, html, xslt (не обязательно). При реализации использование каких-либо библиотек или фреймворков разрешается только для шаблонизации (вывода информации).
5.\tДопустимо добавление новых полей в таблицы. Изменять логику работы или типы полей, удалять поля в любой таблице запрещено в целях сохранения обратной совместимости с имеющимся кодом (предполагаем что он есть). В случае добавления полей для всех вновь добавленных полей необходимо подготовить запрос/скрипт, заполняющий их данными, либо описать словами логику работы такого запроса/скрипта.
6.\tНикакое специальное оформление не требуется, оцениваться будет логика работы с вложенными группами товаров – sql-запросы и код php, реализующий эту логику, а также html код, реализующий вложенные списки.



Аноним 20/02/19 Срд 02:59:31 #1011 №1351172 
https://www.linkedin.com/in/tetiana-blindaruk-a34b79b1/
Аноним 20/02/19 Срд 19:35:06 #1012 №1351497 
Сап, аноны. Как я могу добавить к моему get запросу еще запросы, не трогая предыдущие? Ситуация: есть глобальный и локальный фильтр сортировки записей. Глобальный показывает распределение по группам, локальный - сортировку списка. Например example.com/lists?sort_by=name&sort_direction=up и example.com/lists?show=personal_records. Если во втором случае я нажму сортировку, фильтр $_GET['show'] перебивается фильтрами $_GET['sort_by']. Пытался через $_SERVER['REQUEST_URI'], но оно зацикливается и получается что то вроде example.com/lists?sort_by=name&sort_direction=up&sort_direction=up&sort_direction=up
Помогите, молю
Аноним 20/02/19 Срд 22:44:25 #1013 №1351605 
>>1351147
Обычное тестовое на работах. Решается элементарно, если знаешь запросы MySQL и PDO в PHP. Остается только сделать обработку GET параметров и соединить в контроллере с вызовами к PDO.
Аноним 20/02/19 Срд 22:52:21 #1014 №1351610 
>>1351497
Шли json массивы через POST или используй разные имена параметров через GET, если они у тебя друг друга перебивают - например sort_by_direction, show_direction. Как у тебя по 3 штуки одинаковых выходит, не пойму, что-то ты не так в обработке видно делаешь. Простейший путь - ставь в скрипте переменную $sortDirection один раз и потом на ссылках по условию из нее выводи.
Аноним 21/02/19 Чтв 00:19:30 #1015 №1351675 
Я уже приблизительно придумал как решить эту проблему, когда делал постраничную навигацию. Правда, теперь это будет, вероятно выглядеть как example.com/lists?&asd=123 (Именно как ?&, но оно вроде не является большой проблемой и все равно работает). Три раза я для примера написал, сортировочные фильтры идут вместе. И именно они перебивают свойства отображения. Через пост не хочу чтобы была возможность скопировать ссылку вместе со всеми фильтрами
Аноним 21/02/19 Чтв 02:37:25 #1016 №1351731 
national-geografic-Сова-глаз-песочница-532835.jpeg
>>1331378 (OP)
Есть смысл тут искать себе разраба? Нужен толковый чувак, веб-разработчик широкого профиля (фуллстак). Мне пофиг, какой у вас стиль одежды, откуда вы, в какое время суток предпочитаете работать (если работаете в целом, а не дрочите).

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

Языки программирования: PHP (7.2+), JS, HTML/CSS, SQL (MySQL или MariaDB).
Фреймворки: Yii, jQuery.
Технологии и инструменты: scss(sass), gulp, git, PHPStorm.
Короче, ничего сверхъестественного.

ЗП 40-45 на руки. Минусы - сам проект так себе по интересности, иногда приходится переделывать некоторые вещи по паре раз, двигать туда сюда текстики-кнопочки, нежелательно уходить в запой и проёбываться.
[email protected]
Аноним 21/02/19 Чтв 02:37:43 #1017 №1351732 
>>1351731
Ну или пишите тележку, если удобнее, постучусь.
Аноним 21/02/19 Чтв 04:12:24 #1018 №1351739 
>>1351675
>>1351497

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

От чего зависит ссылка?

- от глобальных параметров фильтрации
- от добавленных к ним локальных параметров

Ну так давай так и сделаем. Сделам функцию, которая принимает все эти параметры и выдает ссылку:

getSomePageUrl(string $section, string $sortBy, string $sortDir, ...): string

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

Соответственно, функция примет вид:

getSomePageUrl(Filter $filter, string $sortBy, string $SortDir)

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

Для сбора query string от URL удобно использовать http_build_query - она еще и кодирует данные процентным кодированием (урок про URL: https://github.com/codedokode/pasta/blob/master/network/urls.md ).

>>1351147

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

Конкретно в задаче надо знать PHP и SQL.
Аноним 21/02/19 Чтв 04:13:23 #1019 №1351740 
>>1351074

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

Ты что-то сложное описываешь. Я думаю, это просто неправильное понимание паттернов (или ты неточно описал). Если что, эти паттерны подробно описаны в книге Фаулера "Проектирование архитектуры корпоративных приложений" (PoEAA), и ты можешь прочитать их описания и сравнить с кодом.

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

> Там еще каким-то боком Query Builder работает, но это наверное к вышеописанному не относится.

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

>>1350715

Нужно:

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

Как "добавить страницу в личный кабинет" можно, наверно, нагуглить. Я сделал поиск по "wordpress member area" или "wordpress allow file upload for users" и там выдаются статьи по этой теме.

Там даже кто-то гайд нарисовал: https://chrislema.com/wp-content/uploads/chrislema-guide-membership-plugins.png - но естественно, тебе надо тщательно проверить, подойдет ли плагин для твоих целей.

Аноним 21/02/19 Чтв 04:13:45 #1020 №1351741 
>>1350681

В программы проверки кода можно добавлять свои правила. Но проверка переменных потребует полноценный синтаксический анализ кода. Так что, не знаю. IDE вроде PhpStorm вроде это умеют делать.
Аноним 21/02/19 Чтв 04:18:58 #1021 №1351742 
Аноны, погодите немного, через день-два перекатимся.
Аноним 21/02/19 Чтв 14:03:44 #1022 №1351897 
>>1351731
Деньги никакие, какой тебе фуллстак за такое пойдет. Разве с глухой провинции.
Аноним 21/02/19 Чтв 14:52:41 #1023 №1351940 
Почему пишут вот так:
dirname(__FILE__)

Вместо того, чтобы написать вот так:
__DIR__

Это болезнь?
Аноним 21/02/19 Чтв 16:24:53 #1024 №1351998 
>>1351940
Кто так пишет? Я видел только dirname(__DIR__) и просто __DIR__. Наверное просто кто-то не знает, что есть такая константа или дело привычки.

>>1351740
>Я думаю, это просто неправильное понимание паттернов (или ты неточно описал).

Еще я задал этот вопрос на тостере, а мне ответили, мол, сущность не должна сама себя сохранять, ибо это противоречит принципам SOLID, то есть, нарушается принцип единственной ответственности. Поэтому создается репозиторий от каждой сущности, куда передается логика сохранения и прочего. И я вот думаю, правильно ли эти люди понимают шаблоны проектирования, или это я неправильно тебе объясняю.
Книгу-то я не читал, но на сайте его смотрел описания. Эти шаблоны еще у Зандстры вроде описываются в последних главах, но я еще не дошел до них.
Аноним 21/02/19 Чтв 16:48:43 #1025 №1352016 
>>1351998
А еще тот же человек на тостере ответил, что он "против AR", лол.
Аноним 21/02/19 Чтв 16:49:43 #1026 №1352018 
>>1351897
Ну, зп раза в 2 выше медианной по какому-нибудь Омску, причем на руки, а не по бумажкам. А так да, по меркам ДС/Европ не густо.
Аноним 21/02/19 Чтв 19:02:52 #1027 №1352134 
>>1351739
Я уже к этому решению и пришел, но все равно спасибо. Еще не начинал писать функцию, потому твоя информация мне очень поможет
Аноним 21/02/19 Чтв 19:03:52 #1028 №1352137 
>>1352018
У нас на такую не проживешь, тупо денег не хватит после оплаты квартиры и коммунальных расходов. Минималка в крупном городе это тысяч 70.
Аноним 21/02/19 Чтв 19:15:21 #1029 №1352144 
>>1352137
>У нас на такую не проживешь
>Минималка в крупном городе это тысяч 70
У вас это где? Средняя (не медианная, не модальная) по Москве около этой суммы или чуть выше (Мосгорстат как-то, в 2017 что ли, насчитал 90, а потом его поправили как раз до 70).
К слову, я в ДС, в районе рядом с ТТК, трачу на
>платы квартиры и коммунальных расходов
значительно меньше 45.
Аноним 21/02/19 Чтв 19:16:09 #1030 №1352145 
>>1352137
>>1352144
Я к тому, что, понятное дело, вакансия рассчитана на удаленщиков из провинции, где 45 это охуенная зп, а не на постоянно живущих в ДС.
Аноним 21/02/19 Чтв 20:02:23 #1031 №1352175 
>>1352145
Я удаленщик из провинции, сейчас работаю за 60к и без всяких фулкаков, а на чистом пых-беке.
Чет ты реально мало предлагаешь.
Аноним 21/02/19 Чтв 20:17:06 #1032 №1352178 
>>1351172
>https://www.linkedin.com/in/tetiana-blindaruk-a34b79b1/
https://www.linkedin.com/in/tetiana-blindaruk-a34b79b1/
Аноним 21/02/19 Чтв 21:03:57 #1033 №1352192 
>>1331378 (OP)
<?php

error_reporting(-1);
$random=0;
echo 'pull';

$random = mt_rand(1,6);
echo 'PC pulled $random';

?>
WHERES THE MISTAKE ANON?
Аноним 21/02/19 Чтв 21:08:47 #1034 №1352195 
>>1352175
Ну извините.
Аноним 21/02/19 Чтв 21:37:50 #1035 №1352209 
Пачаны, есть такая функция, которая выводит сообщения.
Смысл в чем. Из одного файла вызывается эта функция и передает текст. А во втором файле сама эта функция.


1 файл
MessageSend ('Поле "Ваш Ник" пустое.');

2 файл
function MessageSend($p1){
header('Location: '.$_SERVER['HTTP_REFERER']);
$Massage = 'Ошибка: '.$p1.' !!!';
echo $Massage;
}

Вот в чем проблема, после вызова "header('Location: '.$_SERVER['HTTP_REFERER']);", дальнейшие команды "echo" не срабатывают.

Как принудить их сработать?
Аноним 21/02/19 Чтв 22:05:23 #1036 №1352233 
>>1352209
А никак. Все, что после хедера вызывается, исполнено не будет, ты ведь очищаешь $_SERVER и передаешь новые заголовки.
Хотя вроде бы переменная массаж инициализируется, но у тебя не будет к ней доступа. Тут даже трюки с ob_start и ob_get_clean не сработают, потому что заголовки превыше всего.
Аноним 21/02/19 Чтв 22:11:43 #1037 №1352238 
>>1352192
А есть варианты, как сделать такую конструкцию другим способом?
Аноним 21/02/19 Чтв 22:39:34 #1038 №1352265 
>>1352192
Строка в одинарных ковычках не парсится на предмет наличия переменных.
Аноним 21/02/19 Чтв 23:08:26 #1039 №1352283 
Всем, кому в соседних тредах нарасказывали про то, что PHP сейчас не самый модный - в Яндексе новый проект пишут на PHP (Symfony) и прямо сейчас ищут разработчика: https://moikrug.ru/vacancies/1000049016
Аноним 22/02/19 Птн 00:40:54 #1040 №1352339 
>>1352283
Хуяндексе
Аноним 22/02/19 Птн 02:53:13 #1041 №1352369 
Парни, есть один вопрос
Пытаюсь спарсить сайт CURlом, на сайте штук 15-20 тегов <a> под одним классом, а курл видит только половину из них. Есть идеи почему так происходит?
Аноним 22/02/19 Птн 08:28:36 #1042 №1352405 
>>1352369
Потомучто в xdebug стоит ограничение на вывод символов в консоль?
Аноним 22/02/19 Птн 08:32:16 #1043 №1352406 
>>1352283
Лан поясняю.
ПХП был немодным за бугром до ООП и вообще до 7 версии. Он объективно был непригодным. Но до местных пидорах, этот тренд начал доходить только недавно, поэтому существует парадокс - пыха - ацтой, но почему - никто не может объяснить. Пидораха кукарекает, что на швитом жападе так скозали, а то что сказали это 100500 лет назад ему неведомо.

Пыха в тренде нынче везде. Как за бугром так и в рашке. Язык занял свою нишу и стабильно ее удерживает.
Аноним 22/02/19 Птн 09:24:04 #1044 №1352413 
doctor.jpg
14989415132420.png
Посоны, PHPSTORM на рутреке без вирусов, качать можно? Если бы работал и были бы деньги, однозначно бы купил, сейчас лишний бакс на счету. Мне чисто перед поиском работы обкатать его, хотя мб и триальную качну если есть. Сейчас sublime 3 настроил с плагинами и прочим в недо IDE. Netbeans пробовал но не то, еще в IDE есть встроенный форматтер кода по PSR вот это тоже прикольно
Аноним 22/02/19 Птн 09:57:44 #1045 №1352424 
>>1352413
В смысле netbeans не то? Он в ряде вещей даже лучше, чем шторм.
Аноним 22/02/19 Птн 10:02:39 #1046 №1352425 
14988500358560.png
>>1352424
я с ide игрался вообще только, но заметил что при наведении мышкой на класс ide его не ищет, а в том же сублиме можно кликнуть и он сам по неймспейсу находит нужный класс, или хз, там можно как-то включить.

Вообще, у Нетбинса такие же возможности, чем лучше, чем хуже, его можно так же кастомизировать? И еще нет карты документа чтобы быстро скроллить
Аноним 22/02/19 Птн 10:08:59 #1047 №1352428 
>>1352406
После JS современный PHP мне вполне нравится. В Питоне например я бугуртил от лямб в одну строку, В JS в колбэк пол-программы завернуть можно.
Единственно в PHP какая то кривая система области видимости переменных. В JS как то более естественно чтоли.
И пишут что с 7 версии быстрее Питона.
А вообще конечно рыночек решает. Если человеку нужен магазин - то нахуя ему на Node/Jango например городить, если с той же эффективностью он реализует это на ПХП, на котором разработчиков гораздо больше.
Аноним 22/02/19 Птн 12:30:16 #1048 №1352499 
>>1352406
>пыха - ацтой, но почему - никто не может объяснить
мне на ебаное ит сказали, что у погромил есть своя иерархия
похописты - пидоры ёпта
Аноним 22/02/19 Птн 12:33:42 #1049 №1352502 
>>1352428
>PHP мне вполне нравится
а я когда на пыхе чё-нить пишу представляю что кодю не на нём, а на жаваскрэп или на пайтхон
т.е. это когда тню ебёт какой-нить карлан, а она представляет у ся в башке своей сраной, што в пизде у неё хуй альфача, а не омеги
вот точно так же у меня дела обстоят с пиэйчпи
Аноним 22/02/19 Птн 12:35:56 #1050 №1352506 
>>1352502
...
представляю, что вместо знаков доллара я вижу вары
вместо точек плюсы
вместо стрелочек точки
а вместо фигурных скобок мне мерещиться индентация
Аноним 22/02/19 Птн 13:03:16 #1051 №1352515 
>>1352502
>>1352506
Проиграл с тебя.
Аноним 22/02/19 Птн 13:32:22 #1052 №1352524 
>>1352425
Пишу в нетбинс онли. Пробовал штор - не зашел.
Нетбинс обвешал плагинами и вуаля. Все есть и дебагер и хуягер и карту поставил. Мне нравица
Аноним 22/02/19 Птн 14:12:22 #1053 №1352536 
>>1352413
зачем качать на рутрекере, если можно скачать с офф сайта и ввести просто сервак активации левый, который тебе на год мб и навсегда активирует его?
Аноним 22/02/19 Птн 15:23:47 #1054 №1352567 
>>1352502
они правда так представляют??? не может быть...
Аноним 22/02/19 Птн 15:28:10 #1055 №1352570 
>>1352502
ответьте пожалуйста, скажите что это не так
Аноним 22/02/19 Птн 17:31:21 #1056 №1352651 
Image 1.png
>>1347193
Я написал тестовое.
Rate me /pr/
https://github.com/rollertinqq/-tictactoe/
Аноним 22/02/19 Птн 17:49:06 #1057 №1352655 
>>1352651
Нахуя на гит залил?
Аноним 22/02/19 Птн 17:50:50 #1058 №1352657 
>>1352655
а куда надо было?
Аноним 22/02/19 Птн 17:57:16 #1059 №1352663 
>>1352657
Да никуда не надо. Серваки блять уже лопаются от ваших бесполезных велосипедов и учебных задач, которые не только никому, они даже вам нахуй не сдались.
Аноним 22/02/19 Птн 18:01:41 #1060 №1352666 
>>1352663
У тебя спросить забыли
Аноним 22/02/19 Птн 18:40:56 #1061 №1352695 
аноны, поясните деревянному. Как закрыть доступ к html странице, запилил скрипт, авторизация и всё такое. Нужно сделать проверку наличия кук и если их нет, то переадресовывать на другую страницу тем самым закрывая доступ к контенту, я правильно понимаю логику? Я написал скрипт, но не знаю как его прикрутить к html документу, каким тегом и т.д.
P.S. Скрипт на куки я написал.
Аноним 22/02/19 Птн 20:41:11 #1062 №1352758 
>>1352695
>Как закрыть доступ к html странице
Через .htaccess.

>не знаю как его прикрутить к html документу
Если js, то <script></script>
Если php, то меняешь расширение с .html на .php и вставляешь скрипт в <?php ... ?>
Аноним 22/02/19 Птн 21:13:44 #1063 №1352775 
>>1352758
теперь при открытии этого html у которого поменял расширение на php просто в текстовом виде строки с разметкой html и вставленным кодом
Аноним 22/02/19 Птн 21:20:21 #1064 №1352778 
>>1352758
под закрыв доступ я имею ввиду вход только для авторизованных/зарегистрированных пользователей, правильно ли я понимаю, что это нужно делать через .htaccess?
Аноним 22/02/19 Птн 22:40:03 #1065 №1352806 
>>1352413
>>1352425
В нетбинс тоже форматтер кода есть, по PSR настраивается. Карта навигации по классу там есть. Переходы по названию класса тоже. В PHPStorm есть конечно пара штук, каких в нетбинс нет вроде этих неймспейсов, но они не особо ценные и работу как-то существенно не ускоряют. В нетбинс повседневная работа с кодом вполне комфортна, у нас на фирме на нем работают с кучей проектов без проблем. Phpstorm имхо оверхайпнут, за такие бабки, какие они там за него требуют, он особых преимуществ перед бесплатным нетбинсом не дает.
Аноним 22/02/19 Птн 22:53:15 #1066 №1352813 
>>1352806
Дополню.
Меня перегоняли постоянно на пхпшторм, мол там можно настроить работу с удаленным сервером. Поковыряся и оказалось в нетбинсе такая шляпа тоже есть.

Я если честно хз что еще там надо. Форматирование кстати там неоче настраивается, например or и and не понимает и плохо перенос строк настраивается. Ебался с этим
Аноним 23/02/19 Суб 00:55:28 #1067 №1352847 
>>1352695
бамп вопросу, заебался голову ломать. Уже нихуя не понимаю.
После верной авторизации пользователь получает куки, как написать скрипт проверки кук и если не совпадает/или их нет, то соответственно кикать посетителя со страницы
Аноним 23/02/19 Суб 15:21:28 #1068 №1353155 
>>1352847
у тебя есть страница:

index.php

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

<?php

if huiv и т.д, и если что-то не так, делаешь переадресацию, все, дело закрыто

>как написать скрипт проверки

ну мануалов дохуя в интернете, первое что тебе нужно научится - гуглить
Аноним 23/02/19 Суб 16:53:42 #1069 №1353262 
>>1352813
Нетбис это ведь та же идея, только кастрированная. Такое чувство, что нетбинс это такой тестировочный полигон для остальных платных продуктов джетбрейнс. Туда запиливают всякие штуки новички, только-только пришедшие в эту компанию. Как только они надрочатся с кодом, их уже берут работать с платными средами разработок.
Аноним 23/02/19 Суб 18:01:36 #1070 №1353336 
>>1353262
>>1352813
>>1352806
Ну нихуясе теперь. Сравнили жопу с небом.
Разумеется phpstorm гораздо лучше.
>есть форматтер и автопереход, хуле еще надо епта бля
Да вы охуели?
СТАТИЧЕСКИЙ АНАЛИЗ. Запусти 1 раз пых-шторм на своем говнокоде и ты охуеешь от количества хуйни, которую ГОЛЫЙ шторм там нашел ну просто сходу.

ПРОДВИНУТЫЙ АВТОКОМПЛИТ И PHPDOC.
Пых-шторм умеет то, чего не умеет нетбинс. Например, слабо переименовать несуществующий, описанный в пых-доке метод в 25 разных файлах?

ПЕРЕМЕЩЕНИЕ КЛАССОВ И ИЗМЕНЕНИЕ НЕЙМСПЕЙСОВ.
В нетбинсе это целая трагедия. Там тупо нет возможности одной сука кнопкой переместить корректно класс с изменением его неймспейсов (в том числе в овердохуя других файлов, что его импортируют).
А тут CTRL+M и готово.

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

ЕДИНАЯ ЭКОСИСТЕМА INTELLIJ
Все иде жид-бреинсов очень похожи. 1 раз привыкнув, ты можешь вообще легко менять иде под нужный язык и все настройки будут в точно тех же местах, что и в другой иде. Интерфейс тот же. Более того, все проблемы и баги тоже там везде едины.

phpstorm-сектант
Аноним 23/02/19 Суб 18:06:52 #1071 №1353348 
Кстати, качал на the pirate bay версию 2018.3 - она точно работает.
Аноним 23/02/19 Суб 19:32:51 #1072 №1353419 
Часто ли рефлекшн апи используете в проектах?
Аноним 23/02/19 Суб 21:31:18 #1073 №1353538 
>>1353419
IoC на рефлексии работает
Аноним 23/02/19 Суб 21:35:10 #1074 №1353544 
Какой фреймворк лучше использовать: Yii2, Laravel, Symphony?
Аноним 23/02/19 Суб 21:40:16 #1075 №1353548 
>>1353544
точнее, какой актуален и быстр в освоении?
Аноним 23/02/19 Суб 23:01:56 #1076 №1353599 
>>1353544
смотря что нужно делать
Аноним 23/02/19 Суб 23:02:59 #1077 №1353600 
>>1353599
побыстрому сделать сервак маленькой соц сети
Аноним 23/02/19 Суб 23:05:10 #1078 №1353602 
>>1353600
я делал на laravel по гайдам
https://www.youtube.com/watch?v=cEYLjsEKyy8&list=PLfdtiltiRHWGGxaR6uFtwZnnbcXqyq8JD
Аноним 23/02/19 Суб 23:20:33 #1079 №1353613 
>>1353602
спасибо, посмотрю. Олсо, читал в одной статье что ларавел глючит иногда, типа может не распознать некоторые методы, хотя они есть. Такое может быть?
Аноним 24/02/19 Вск 00:07:20 #1080 №1353646 
>>1353538
А что это такое? Я читал, что это просто особенность фреймворков такая. Я вот даже сейчас пишу свой фрейм и вижу, что код из контроллеров, который я пишу, вызывается в совершенно другом месте. Код вдругих классах тоже вызывается в других классах и его результат передается в другие классы, где уже подтягивается другой мой код.
Это оно?
И причем тут Inversion of Control?
Аноним 24/02/19 Вск 00:15:12 #1081 №1353649 
>>1353646
Имею ввиду, как инверсия контроля связана с рефлексией?
Аноним 24/02/19 Вск 00:34:28 #1082 №1353655 
>>1353336
Сектанство какое-то точно, все это в работе ни разу не нужно было. Классы рефакторил в нетбинсе, пока хватало. Автокомплитом не пользуюсь, напечатать быстрее бывает, чем тыкать там в нем. Для статического анализа тулзы есть специальные, у нас в интеграционных тестах подключаются. Phpdoc в нетбинсе есть с автозаполнением из типизированных параметров, пока тоже хватало.
Аноним 24/02/19 Вск 00:40:52 #1083 №1353662 
>>1353544
Переводили с тимлидом проект на Ларавел, че-то говно сложное и мутное оказалось, документация малопонятная, джунов пытались подключить - им вообще темный лес, потом пересели на Симфонию - все просто, логично и понятно, стандартам соответствует, все новые фишки там, дока понятная, джунов достаточно быстро подтянулись, еще вроде как и побыстрее, на ней и остановились. До Yii2 не дошло, симфонии на все хватило. Теперь на новых проектах ее ставим.
Аноним 24/02/19 Вск 01:05:27 #1084 №1353677 
>>1353649
Dependency injection с ней связан.
Ioc-контейнер получает тип аргументов метода с помощью рефлексии.
Аноним 24/02/19 Вск 01:08:30 #1085 №1353678 
>>1353419
Нет, трюков с рефлексией в коде обычных сайтов быть не должно, так как она позволяет извлечь внутренности объекта, поменять приватные свойства/методы на публичные и не только, то есть программа может менять себя по ходу выполнения. Рефлексия может использоваться в библиотеках для генерации документации по коду, либо библиотеках для обнаружения багов в коде (PHPStan, Psalm). Нужно понимать как работает рефлексия (почитать мануал на php.net), так как будешь часто натыкаться на неё в коде библиотек, но в своих проектах стоит её избегать.

>>1353538
IoC это один из подходов для организации слабой связанности между частями системы: https://martinfowler.com/bliki/InversionOfControl.html
К рефлексии это не имеет никакого отношения, ты путаешь с autowiring - там да, на рефлексии: https://symfony.com/doc/current/service_container/autowiring.html

>>1353649
Никак.

>>1353348
Поставь EAP версию (месяц бесплатно) и просто переустанавливай каждый месяц, до тех пор пока не начнёшь зарабатывать программированием деньги. Если студент - можешь отправить фото студбилета, дадут лицензию на год (я так 4 года продлевал). Ещё у них бывают скидки на день дружбы 40%. В общем, не воруй, лучше поддержи отечественного производителя.
Аноним 24/02/19 Вск 01:35:45 #1086 №1353689 
>>1353649
В обычном классе у тебя в конструкторе будет написано куча $var = new SomeClass($arg1, $arg2, ...). При инверсии контроля у тебя в phpdoc класса будет написано что-то вроде @inject SomeClass.
Дальше работа контейнера зависимостей будет в том, чтобы при создании классов через него эти строки через рефлексию понаходить, подбирать нужные аргументы/объекты/классы и инжектить их в конструктор класса. При всем этом часто нужно бывает посмотреть в методы и phpdoc класса до его инстанциирования через рефлексию.
Аноним 24/02/19 Вск 06:12:26 #1087 №1353708 
Можно переходить в новый тред >>1353705 (OP)

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

Аноним 24/02/19 Вск 18:46:13 #1088 №1354170 
>>1351731
>Yii, jQuery

к-к-комбо
Аноним 24/02/19 Вск 19:22:41 #1089 №1354219 
tumblrpjy0t6gIjK1rp8y35o11280.jpg
Laravel
1. Не понимаю в чем профит сервис контейнера? Уже пересмотрел много видео и статей и примеры. Но я не понимаю через сервис провайдеры мы как бе можем подменять реализации интерфейсов того что будет храниться в сервис контейнере, но мы как бы можем сделать это и без него в чем профит использовать именно его? Да реализация через него синглтона довольна удобно и ясна, но она не так часто нужна, так для чего еще?. Так что вопрос зачем?
2. Заодно вопрос какая структура папок должна быть для контрактов и их реализации.
3. Если бороться с жирными контроллерами через сервисный слой то какую выбрать структуру папок чтоб можно было вернуться к проекту через месяц?
Аноним 25/02/19 Пнд 08:38:02 #1090 №1354594 
Пиздон или Джава? На чей хуй пересесть? Что анон посоветует?
Аноним 25/02/19 Пнд 15:19:16 #1091 №1354826 
>>1331378 (OP)
Объясните, как писать код с HTML и PHP одновременно? В одном файле хранить код или отдельно?
Прочитал про шаблоны ОПа, но че то не понял.
Аноним 27/02/19 Срд 01:47:39 #1092 №1356078 
>>1354826
Сначала обрабатываешь данные которые пришли от пользователя, потом работаешь с базой данных и только потом делаешь шаблон страницы на ХТМЛ с вкраплениями ПХП кода для вывода динамического содержимого страницы.
можно все писать в одном файле, но нахуя? тебе жалко места в папке для еще одного файла?
Аноним 04/03/19 Пнд 09:19:30 #1093 №1358835 
15498749681870.jpg
Какую книжку по основам php имеет смысл почитать, если не Котерова? Знаю, что есть куча сайтов, но в форме книги мне легче.
comments powered by Disqus

Отзывы и предложения