Двач.hk не отвечает.
Вы видите копию треда, сохраненную 11 марта 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Клуб изучающих PHP #107 /php/ 1331378 В конец треда | Веб
Ну что, у кого-то начался рабочий год, у кого-то - учебный. А мы по-прежнему изучаем язык 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? — Да, однозначно. Посмотри любую вакансию.
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
3 1331382
Напомню себе проверить: 16/01/19 >>1328089 https://github.com/asdasdasdasddasasdasdas/StudentList

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

Если вас пропустили, напомните о себе в этом треде.
4 1331383
АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
АЛЛИЛУЙЯ
5 1331384
Как новичок должен относиться к людям, которые пишут, что ООП это антипаттерн и он должен самоискорениться из мира проектирования програмного обеспечения?
6 1331389
>>31384
Никак. У этого молодца просто работы нет, вот и путается под ногами.
7 1331392
>>31389
Хочешь сказать, что ООП и паттерны это самое важное в программировании, верх мастерства разработчика?
8 1331394
>>31392
Тащемта, разговор не про программирование, а про проектирование ПО.
9 1331396
>>31394
Хорошо, хочешь сказать ООП и паттерны это верх мастерства проектирования ПО?
10 1331397
>>31384
В том виде, в котором это существует сейчас - да, антипаттерн, дешевый понт, не являющийся чем-то выдающимся, хотя адепты поют об обратном. Современное ООП и паттерны - не более чем лозунги, а кто им следует - не более чем сектанты. Потому что оно ничего выдающегося из себя не представляет, с точки зрения грамотного инженера, но хайп такой огромный, как будто это лучшее изобретение человечества.
11 1331400
>>31397
Так никто и не говорит про современное оопэ, где пишут процедурный код в классах. Я лично читаю старые книжки 20 века и черпаю идеи оопэ оттуда. Вот это действительно годнота, вот тогда реально умели люди программировать.
12 1331402
>>31397
>>31396
КАКАЯ НАХУЙ РАЗНИЦА, КТО КАК ПИШЕТ???

Люди, программисты, составляют договоренности по написанию кода. Так рождаются конвенции. Им нравится так писать, здесь нет правильного или неправильного подхода, как у врачей, здесь царит полная свобода действий.
А всякие сектанты, как вы, навязываете людям, которым удобно писать в стиле ООП, свою маниакальную идею отказа от современного ООП в угоду хуй пойми чему. Что вы забыли в треде языка, который может писать любыми способами? Идите в джаву и сисярп навязывайте свое мнение этим лохам, у которых в основе языка уже ООП-подход.
13 1331404
Вот если я допустим занимать одно временно фронт и эндом, то что мне нужно учить?
14 1331405
Кто-нибудь совмещает с основной работой? Если да, то как, удачно? Кто-то уже ушёл со своей специальности на кодера?
15 1331406
>>31402
Ну попробуй откажись от активрекорда или датамапера или или адаптеров в любой dbal или фасадов в ларавеле, от декораторов которые используются повсюду, от эвентлисенеров.
16 1331407
>>31406
По-русски можно? Ненавижу проггеров за то, что они смешивают инглиш и русиш. Учись, блять, разговаривать на русском, а не на неологизмах.
17 1331409
18 1331410
>>31400
Идея ООП изначально была глупой. Алан Кей же был биологом, и еще очень любил громкие высказывания, якобы он все понимает лучше других. В математике насколько мне известно он ничего не открыл. Из этого следует, что у него была прочная профессиональная деформация в сторону биологии. Биология имеет мало общего с техническими науками, и инженерией. Но Кей все равно решил скрестить бульдога с носорогом. И насколько мне известно не реализовал свои громкие заявления. Его модель ООП так и осталась никому не известной, но из-за него появились другие модели, которые еще более провальны.

Поэтому книги по ООП, старые или новые, априори содержат в себе чепуху. Так как сама идея чепуха, а реализация еще хуже. И не стоит забывать, что ООП на классах не единственная модель. Есть еще прототипное ООП из языка Self, и якобы тру-модель из языка Smalltalk, которая потом (в Smalltalk-80 и далее, а может чуть раньше) тоже была сильно извращена.
19 1331411
>>31402
Разница в том, что грамотного инженера сразу видно по темам, которые его интересуют. Если интересуется паттернами и ООП, значит априори кодер без знаний математики, без желания осваивать науки, без способности отличать хорошее от плохого. Человек вроде тебя, громкие истерики с матами, нежелание учиться, и т.д. и т.п.
20 1331412
>>31406
Что ты сказать хотел? То что есть некий activerecord не означает, что ООП и паттерны это центр вселенной. Подходы могут быть и другие, не основанные на ООП, на объектах, и т.д. Ты цепляешься за слова, не понимая их сути. Ведь что такое объект? Вопрос не простой. Кто сказал, что объект это экземпляр класса? В ФП языках функции - объекты.

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

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

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

>>31411
Я вообще считаю, что программа (любая) должна иметь одну точку входа и одну точку выхода. Программа должна выполняться построково, линейно, без гото и прочей мешанины классов. Программа, которая находится в одном файле и каждая строчка выполяется последовательно - это идеальная программа. А то, как разрабатывают современные разрабы это спагетти ебаное, в котором разбираться придется не один месяц.
23 1331416
>>31415
Да ладно его кормить. Он тут уже черт знает сколько времени подвывает круглосуточно.
24 1331419
>>31416
Покушать-то я сам хочу.
25 1331421
Друзья, как закрепляете пройденный материал? И заучиваете ли вы наименования команд?
26 1331431
>>31415

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


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

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

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

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


Не идеальная. Как тогда быть с параллельностью, если все линейно и построчно? В математических вычислениях нет течения времени, нет хранимого изменяемого состояния. А ты предлагаешь подход противополжный, где состояние будет постепенно изменяться, моделируя ход времени. Такие программы трудно параллелить, они ограничены по возможностям.
28 1331433
>>31431

>Лямбда-исчисление Чёрча, и комбинаторная логика Шейнфинкеля-Карри


бесполезная хуета как впрочем и вся маняматика.
29 1331441
>>31432
В математике нет параллельности. Соответственно, нет времени, которое бы эту параллельность имитировала.

>нет хранимого изменяемого состояния


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

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

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


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



Ну это вообще ПУШКА. Ты похоже не выспался совсем.
30 1331444
>>31433
Вот так определяются быдло-кодеры.
31 1331447
>>31441
Любое математическое вычисление можно распараллелить. Так как нет течения времени. Время не имитирует параллельность. Время течет едино, как оно может быть параллельным? Наоборот, когда есть течение времени как в императивных и ООП программах, становится сложно выполнять параллельные вычисления. А так как архитектура компьютера без параллельного выполнения не может уже выдать больше мощности, программы приходится параллелить.
32 1331449
>>31441

>Для этого и была придумана динамическая память.


Что? О какой памяти идет речь? Я говорил о том, что изменяемое состояние не позволяет параллелить, и приносит много других ограничений. Это решается очень просто, декларативными языками программирования, а все манипуляции с состоянием происходят на уровне уже процессора, после трансляции кода из декларативного языка.
33 1331451
>>31441

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


Вот именно, большинство это просто пользователи. Они пользуются не задумываясь. Создать свое они не могут, они не умеют этого делать. А других создателей уже нет. За последние годы ничего не создано нового. Все основы Computer Science были заложены в 20-ом веке. Те кто формировал CS уже умерли, либо уже не у дел.
34 1331452
>>31441

>Ну это вообще ПУШКА. Ты похоже не выспался совсем.


Покажи что в математике является лишним. Это та сфера, где все создано и используется для решения задач. Ничего лишнего. В отличие от программирования.
35 1331457
>>31447
Ты понимаешь принцип параллелизма? Это значит, что программа начала выполняться в одной точке, из которой вызвались еще две программы, например, подключение к двум базам данных, а может и не из этой, а из другой программы, и пока эти процессы не завершатся, программа не продолжит выполнение. Это два процесса, которые могут зависеть друг от друга, а могут и не зависеть. И вторая программа может ждать первую, когда она завершится. Вопрос времени налицо.

>>31449

> говорил о том, что изменяемое состояние не позволяет параллелить


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

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


Если бы не было математики, не было бы и программирования. Не было бы Лямда-исчисления, скорее всего не было бы и работ Тьюринга. Несколько математиков (Тьюринг, Чёрч, и другие) конкурировали между собой, поэтому родилось несколько фундаментальных основ программирования и вычислительной техники. Не будь конкуренции, у нас бы не было компьютеров.
37 1331460
>>31441
>>31447
>>31449
>>31451
>>31452
>>31457
>>31459
Дебилов и шизиков полон тред.
Все же пыхыпы - это диагноз и приговор, вот и очередная иллюстрация.
38 1331461
>>31457
Ты все запутываешь. Изменяемое состояние на уровне кода программы не позволяет просто и эффективно распараллелить. Потому что данные нужно как то синхронизировать. Если состояния нет, то и синхронизировать ничего не нужно. Поэтому ФП сейчас пошло в мейнстрим. Все ФП языки позволяют легко параллелить программы.

Причем тут кэш процессора? Кэш не параллелит, и не для этого вообще создан и используется.
39 1331464
>>31461
Нахуй иди.
40 1331465
>>31460
Еще один быдло-кодер определился. С чего ты взял что я пишу на PHP? Это для начала, второй вопрос, чем PHP хуже других языков? Язык это инструмент. Грамотный инженер может писать код с помощью любого инструмента. Быдло-кодеру дай даже самый лучший инструмент, все равно он будет быдлокодить.

Не инструменты красят инженера, а инженер инструменты. Вот дадут тебе самый лучший язык, что изменится? Ты же так и будешь чепуху писать, называть всех дибилами, и писать говнокод.
41 1331466
>>31464
Еще один порвался. Измельчал нынче программист. Даже позицию свою отстоять не может.
42 1331467
>>31465

>С чего ты взял что я пишу на PHP?


>чем PHP хуже


Пыходебил ну совсем не палится, ох лол.
43 1331468
>>31461

>Изменяемое состояние на уровне кода программы не позволяет просто и эффективно распараллелить.



Я тебе об этом и пишу. Есть два состояния: до распараллеливания и после него. В первом случае данные рассекаются на потоки и обрабатываются программой, во втором - данные синхронизируются и образуют единое целое. Такой принцип работает в видеокартах, например, и в ЦП.
А кэш нужен для того, чтобы эти переходные значения хранить. Я и не говорил, что кэш параллелил что-то.
44 1331470
>>31468

>Есть два состояния: до распараллеливания и после него.


А вот этот - обычный шизик.
45 1331471
>>31467
>>31466
>>31465
>>31464
Идите Танненбаума почитайте, дети.
46 1331472
>>31467
Я могу писать почти на любом языке. Когда я был таким как ты, мне тоже не нравился PHP. В основном потому что такие как ты его поливают грязью. С опытом, увидев много других языков, я понял что язык это инструмент, и можно писать и на PHP в том числе. Все зависит не от инструмента, а от того кто его использует.

Назови 3-5 хороших языков по твоему мнению.
47 1331473
>>31471

>это замшелое говно для ограниченного быдла


Ясно.
48 1331474
>>31468
Ты говоришь об императивной модели, а я о декларативной. В ней все под другому. Посмотри на математические вычисления. В них в принципе нет состояния, а значит и синхронизации. Можно распараллелить любой кусов вычисления.
49 1331475
>>31472

>Я могу фантазировать на сосаке


Поправил эту мечтательную маню.
50 1331476
>>31474
Это ты, гнида, хаскель форсила?
51 1331477
>>31475
Вали нахуй отсюда, если бы ты знал что-то кроме жиквери и фреймворка пыховского, то ты бы тоже умел писать на всех языках. Ибо все языки, как бабы - одинаковые.
52 1331478
>>31468
Зачем вообще смотреть на процессор? Есть ОС, которая дает абстракции процессов и прочего, есть язык программирования, который дает языковые абстракции. На этих уровнях нужно решать задачи. А на уровне процессора пусть решает ОС и компилятор.
53 1331481
>>31477

>КУДАХ БАБАХ КУКАРЕКУ


Ясно.
54 1331484
>>31478
Напрямую ты, конечно, не повлияешь на работу процессора, но сможешь сильно упростить ему жизнь, если оптимизируешь свой код. Компилятор - машинка простая, она все переведет в инструкции для проца, а ебстись с утечками какими-нибудь тебе. Поэтому важно знать работу проца, ящитаю.

>>31474
Я тебя понял. Мне как раз декларативная и не нравится тем, что там нельзя снаскоку понять, что происходит и сколько памяти затребует программа. При кажущейся краткости кода, куча неоптимизированных рекурсий может запросто засрать всю память. Собственно, как и циклы в импере, поэтому циклы - зло. Но зато более изящно решаются некоторые задачи, матан твой тот же самый.
55 1331485
>>31484

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


Просто ты тупой пыхыпыдаун
56 1331488
>>31484
Вот есть к примеру Haskell. На нем легко писать параллельные программы. И не нужно ни о чем заботиться, потому что всю грязную работу делает компилятор.
57 1331490
>>31488 - >>31476
Хаха, угадал.
58 1331491
>>31460 FS@UR
59 1331503
>>31488
Писать функциональный код можно на любом языке.
Как сказано - "программист на Фортране может написать программу на Фортране на любом языке программирования".
Первый язык определяет все. Поэтому ты мне тут и доказываешь, что функциональщина лучше ООП, с чего и начался наш спор, собственно.
60 1331505
>>31490
Ничего ты не угадал. Это пример декларативного языка с возможностью легко писать параллельный код. Еще один пример Erlang.
61 1331508
>>31503
На Фортране нельзя. В нем нет даже рекурсии (раньше не было, сейчас может и есть). Писать можно, если в языке есть ФВП хотя бы. Только этот код все равно будет сложно параллелить. Так как транслятор языка не ориентирован на это.

ООП создавали люди далекие от науки. Поэтому имеем то что имеем. Сравнивать его с ФП глупо, потому что ФП имеет математический базис, и очень долгую историю, фактически почти 100 лет. По сравнению с этим ООП детская поделка.
099.gif610 Кб, 480x228
62 1331509
>>31508

>ФП имеет математический базис

63 1331510
>>31488

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

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

Алсо, https://habr.com/ru/post/315152/
64 1331511
>>31508
Ты же понимаешь, что делать интернет-магазин на ФП это все равно что ездить на работу на ламборгини? Не тот это язык, чтобы пилить программы с простыми вычислениями %%и даже без оных%. Людям, далеким от науки, нужен был подход, который бы решал их задачи бизнеса. Вот они и придумали классовый подход для решения этой задачи. Они не были математиками, они высрали все, что смогли. И ты, инженер, сравниваешь себя с ними. Не стыдно?
65 1331515
>>31509
Ах, ты оказывается даже не знал, что ФП основано на математических моделях. Конечно, откуда быдло-кодер может это узнать.
66 1331521
>>31511
Об этом я и говорил. Что в программную инженерию поналезли все кому не лень, и лепят кривые поделия с умным видом. А потом школьники, и прочие битарды, с не менее умным видом рассуждают об ООП, и пишут что математика не нужна, Лямбда-исчисление говно, и тому подобное. Смешно на это смотреть.

>>31510
Не нравится не читай. Причем тут Haskell? У некоторых как будто мозг деревянный. Им про фундаментальные основы говоришь, они не понимают без примеров. Приводишь в пример какой то язык, начинают беситься что язык не тот. Ты вообще хоть что нибудь понял из того что прочитал? Haskell пример умного транслятора. Просто пишешь параллельный декларативный код, а транслятор его переводит в императивный.
67 1331526
>>31521

Прекрасно, пишите декларативный код на любом языке, с или без ооп, только без флуда на 50 постов.
68 1331528
Няши, у меня вордпресс генерирует в одну определённую страницу неизвестный Javascript код. Мне нужно сделать правку в этом коде, но я не пойму, откуда он берётся. Когда захожу в окно редактирования страницы в самом ВП, то его там нет, файла с таким содержимым я тоже не нашел (смотрел с wp-content/themes... и wp-included.
Сам ньюфаг в вордпрессе, взял задание на JS, а заказчик не сказал, что у него сайт на ЦМС.
С меня няши :з
69 1331541
>>31511
С одной стороны это так, но с другой это выглядит чепухой. Если есть более совершенный подход, то его нужно использовать. Чем лучше решение тем лучше для всех. Если кто-то говорит, что нужно использовать более кривой подход, то он кто вообще? Получается уже наоборот, чем хуже тем лучше. Как я уже писал в одном из тредов, что подход ООП именно такой, чем хуже тем лучше. И вы все ему следуете, при этом пишите глупые детские шуточки про математику, Лямбда-исчисление, ФП языки.
70 1331551
>>31521

>Об этом я и говорил. Что в программную инженерию поналезли все кому не лень, и лепят кривые поделия с умным видом.



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

>>31541

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



Я помню тебя.

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



Ты ебаный фанатик, который везде насаждает ФП. Оно может и лучше во многом, но точно не для клепания сайтиков с их ебучей вариативностью. Иначе это будет та же самая мешанина.
ajax-loader.gif4 Кб, 32x32
71 1331567
Доброго дня, вкатываюсь в тред успешных людей.
Хочу рассказать свою историю.
Программист, уже 23 года, заканчиваю профильный вуз.

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

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

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

Вот так и сижу на тухлом стартапе с обещаниями золотых гор, и забываю то что знал ранее.
Сейчас хотя бы пишу дипломы на c# подзаказ, надеюсь смогу оплатить арендное жилье.
72 1331572
73 1331577
74 1331581
>>31567
Ну, скореллирую со своей историей.

>Ранее пробовал искать работу на c#, но не прошел собес на джуна


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

>Делаю я это бесплатно, проект долгий, как закрою наверное заплатят.


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

>мне высылают тестовое, я думаю что меня все равно не возьмут и не делаю его.


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

>Сейчас хотя бы пишу дипломы на c# подзаказ


Как-то раз я за конченный диплом заломил цену, которую студентики не смогли потянуть - как же меня обосрали, ууух. А так тоже мелочью по несколько часиков балуюсь. Это скорее отдых, чем работа.
28, помидор с зп 250к.
75 1331584
>>31528
Поиском по файлам попробуй найти.
76 1331593
>>31567
Поныть можно в соседнем перезвоним-треде, тут люди решают задачи и идyт к ycпeхy.
77 1331602
До сих пор не совсем понимаю нужду в интерфейсах и абстрактных классах.
Может кто oбъяснить на примерах?

Это просто как шаблон реализовав по которому класс, oн тoчнo будет верно работать?
78 1331608
Вопрос: Куда выкладывать решение js задачек?
79 1331611
>>31608

jsfidle, codepen, jsbin
80 1331617
Есть ли возможность конструировать объявление namespace динaмически? Из строки например?
Или можно ли как-то сделать, чтобы неймспейсы по дефолту задавались в сooтветствии с путем к файлу, а не в глобал пихались?
81 1331619
Анон, как пользовaтьcя sublime text? Я вот скачал, установил и все. Написать я в нем могу, а как запустить этот скрипт?
82 1331622
>>31581
>>31567
Я вот как почитaю подoбные посты, что-то неуютно становиться.
мимо-студент-20 лвл
83 1331623
>>31617

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

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

Если тебе тяжело руками писать неймспейсы и use, поставь плагин к редактору, который это делает.
84 1331629
>>31623
Тут дело в версионирoвании модулей.
Неймспейсы меняются абсолютно везде при создании новой версии, руками можно прaвить, но это пиздец долго и шанс накосячить ебливый.
85 1331638
>>31619
Редактор для редактироания кода, а не запуска скриптов. Запускать скрипт надо из консоли:

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

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

Также, можно настроить саблайм чтобы он по какой-то кнопке запускал PHP, гугли как именно.
86 1331640
>>31567
И я вкачусь. Студент-мeханик ИTТ, 23 гoда. Заканчиваю магистратуру по направлению механика. Год проработал на заводике инженером-исследователем, думал пойти в науку, но что то совсем не идет у меня это дело. Все время хотел вкатиться в айти, но только начав изучать какой нибудь ЯП через день - два желание пропадало.
У вас тут уютненько в тредике, буду пытаться сделать студентиков!
87 1331647
>>31617
Объявление - нет. Использование можно, рефлексия работает с зарегестрированными автозагрузчиками. А вообще изза автозагрузки можно вообще на неймспейсы не ориентироваться (не делай этого, просто как пищу для размышлений дал).

>а не в глобал пихались


Они не пихаются. Ну вернее пихаются конечно, директивы же, но автозагрузку по стандартам можно как угодно извратить. Делать так не надо, но он же об этом спрашивал.
>>31629
А вот тут я тебя понял. Я писал костылик для версий для одного проекта. Смена версий не была частой конечно, но нужно было сделать обратную совместить, то есть не терять код. Тут нихуя не поделаешь. Только оставить код прошлой версии позади например в другом неймспесе, а продолжать работать уже в новом.
88 1331658
>>31647

>А вот тут я тебя понял. Я писал костылик для версий для одного проекта.



Типа когда версия апнулась и изменилась какая-нибудь мелочь и старые версии приложений начинают отваливаться, пока не обновятся? У нас старые версии затребовали оставлять на случай этого кaк раз. Старые приложения работают со старым апи, обновятся - работают с новым. Как-то так.
89 1331661
>>31629

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

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

Но я ни разу с таким не сталкивался и интуиция подказывает мне что ты делаешь что-то неправильно. Какое еще версионирование, наркоман?
90 1331662
>>31658
Да, именно для этого. Бывает и хуже. Например когда между версиями меняется схема хранилища, а надо и то и другое держать. В таких ситуациях та еще война идет между разработчиками и менелджерами. Первые опнимают, что проще плюнуть и заставить обновляться, вторым важно не потерять стареньких клиентов, которые или не умеют обновляться, или принципиально не хотят. Но так то все решаемо, просто не по красоте.
91 1331666
>>31658
Версионирование API это другое дело. Обычно в API действительно используют версию в URL, например:

/api/v2/cities

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

Если же речь о классах, и ты пишешь например библиотеку, то надо тоже сделать несколько версий библиотеки - наример lib1 для старых приложений и lib2 для новых, не стоит пытаться объединить это в одной универсальной библиотеке.
92 1331672
>>31666
У меня было по другому. Определенное апи - это точка входа и логика только в этой части приложения. Но ее надо соотнести с прошлыми, чтобы не было и там и там поломок. И с соседними, где логика немного отличается и должна адаптироваться под общую схему. Копировать в такой ситуации было не вариант, хранилище на любое количество и тип приложений было одно - только выкручиваться оставалось.
93 1331674
В Yii/Yii2 нет возможности сгенерить миграцию по мoдели?
94 1331675
>>31602
Ну смотри, допустим у тебя в приложении есть форма логина, пишешь для нее класс.
Затем тебе понадобилась форма регистрации, пишешь для нее класс.
Тут замечаешь, что добрая половина методов и свойств первой и второй формы совпадает.
Если ты быдлокодер и тебе нaсрать на качество твой работы, ты так и оставишь, тем более что ты никогда не писал приложение с более чем 2-3 формами.
Но если ты ответственный программист, то догадываешься, что копипастить куски кода из одного класса в другой наверное неправильно. Тем более что в серьезных приложениях родственных классов будет не 2-3, а десятки-сотни.
Пишешь абстрактный класс, который содержит в себе все общее, что есть у классов форм, называешь AbstractForm.
Наследуешь LoginForm и RegisterForm от AbstractForm, в них прописываешь только уникальные для данного класса свойства и методы.

Что касается интерфейса, то это набор требований к классу, то есть буквально мы пишем: "у всех классов, которые имплементируют данный интерфейс, должен быть определенный функционал (метод), неважно как они будут реализованы, но они должны быть". Пример не знаю какой привести.
Вот чувак приводит пример со столами https://toster.ru/q/10682

>Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.


Обрати внимание, что Rollable (с колесиками) может быть не только стол, но и стул, кровать, то есть совершенно другие типы объектов. Метод roll() будет у них всех реализован по-разному, поэтому мы не используем тут абстрактный класс типа НечтоКатящееся. Тем более что один класс может реализовывать множество интерфейсов, а абстрактный класс можно унаследовать только один. Стол должен быть одновременно с колесиками и складывающимся. Мы не можем создать абстрактный класс НечтоКатящееся, затем НечтоСкладывающееся, и создать класс Стол наследующий оба абстрактных класса. Да и не для этого они придуманы, класс всегда описывает объект, а интерфейс функционал. Абстрактный класс это обобщенное описание категории объекта, допустим стол, или стул, или кровать. От него наследуем уже какую-то конкретную разновидность, например СтолПисьменный расширяет АбстрактныйСтол реализует Складывающийся интерфейс.
А можно и оба интерфейса, пусть стол будет Складывающийся и Катящийся.
Затем создаем класс КроватьДвуспальная расширяет АбстрактнуюКровать реализует Катящийся интерфейс.

Короче абстрактный класс это обобщение, чтобы не копипастить общие методы и свойства по всем классам-наследникам, мы их группируем в одном классе.
Интерфейс это описание функционала, один класс может реализовывать множество интерфейсов. И один и тот же интерфейс может быть использован множеством классов.
Интерфейс не имеет реализации, он только декларирует, что у класса обязан быть определенный метод, а реализация может быть какая угодно, нас это не интересует, она инкапсулирована внутри.
94 1331675
>>31602
Ну смотри, допустим у тебя в приложении есть форма логина, пишешь для нее класс.
Затем тебе понадобилась форма регистрации, пишешь для нее класс.
Тут замечаешь, что добрая половина методов и свойств первой и второй формы совпадает.
Если ты быдлокодер и тебе нaсрать на качество твой работы, ты так и оставишь, тем более что ты никогда не писал приложение с более чем 2-3 формами.
Но если ты ответственный программист, то догадываешься, что копипастить куски кода из одного класса в другой наверное неправильно. Тем более что в серьезных приложениях родственных классов будет не 2-3, а десятки-сотни.
Пишешь абстрактный класс, который содержит в себе все общее, что есть у классов форм, называешь AbstractForm.
Наследуешь LoginForm и RegisterForm от AbstractForm, в них прописываешь только уникальные для данного класса свойства и методы.

Что касается интерфейса, то это набор требований к классу, то есть буквально мы пишем: "у всех классов, которые имплементируют данный интерфейс, должен быть определенный функционал (метод), неважно как они будут реализованы, но они должны быть". Пример не знаю какой привести.
Вот чувак приводит пример со столами https://toster.ru/q/10682

>Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.


Обрати внимание, что Rollable (с колесиками) может быть не только стол, но и стул, кровать, то есть совершенно другие типы объектов. Метод roll() будет у них всех реализован по-разному, поэтому мы не используем тут абстрактный класс типа НечтоКатящееся. Тем более что один класс может реализовывать множество интерфейсов, а абстрактный класс можно унаследовать только один. Стол должен быть одновременно с колесиками и складывающимся. Мы не можем создать абстрактный класс НечтоКатящееся, затем НечтоСкладывающееся, и создать класс Стол наследующий оба абстрактных класса. Да и не для этого они придуманы, класс всегда описывает объект, а интерфейс функционал. Абстрактный класс это обобщенное описание категории объекта, допустим стол, или стул, или кровать. От него наследуем уже какую-то конкретную разновидность, например СтолПисьменный расширяет АбстрактныйСтол реализует Складывающийся интерфейс.
А можно и оба интерфейса, пусть стол будет Складывающийся и Катящийся.
Затем создаем класс КроватьДвуспальная расширяет АбстрактнуюКровать реализует Катящийся интерфейс.

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

>кодер без знаний математики


О, я смотрю ты опытный разработчик! Можешь прояснять новичку какая глубина знаний математики требуется пхп/веб разрабочику? С первого взгляда кажется, что можно обойтись арифметикой из начальных классов. Хотелось бы услышать развернутый ответ от специалиста.

>паттернами и ООП


Но ведь почти в каждой вакансии их указывают в требованиях?!
96 1331685
>>31675
Спасибо
С абстрaктным классов всё ясно.

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

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

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

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

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

И вот тут моё слабоумие даёт о себе знать. Я не понимаю, как мне впихнуть в цикл произведение этих чисел.
98 1331689
>>31685

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

Интерфейсы реализуют, а не наследуют. Интерфейс это набор требований (требований, чтобы был определенный метод с определенным функционалом).
99 1331692
>>31683

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


Логика и здравый смысл нужны. Математика бонусом идет в любом деле, но фанатизм в таком виде - это минус уже. Заебали ваши срачи, тем более с этими пастами, котоыре я еще лет 5 назад видел. Только тред перекатили и уже все засрано бессмысленной эзотерической хуйней о том, как один обиженный приперся толсто потроллить, а ему решили все ответить. Тред в несущественных спорах о вкусах превратился.
100 1331693
>>31692
Ну вообще-то это реальные люди. Я лично с ним спорил.
101 1331694
>>31687
Бля, я догадался, что произведение надо просто в цикл засунуть, и что так тоже можно.

Ну может я и не такой уж и слабоумный.
102 1331695
>>31685
Чтобы показать что класс относится к данной группе или имеет данное свойство. Ну анон привел пример выше, интерфейсом 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лаешь свой класс как тебе надо, реализуешь интерфейс и фреймворк может с твоим классом взаимодействовать.

Если ты не уверен где надо применять интерфейсы, не применяй их пока.
102 1331695
>>31685
Чтобы показать что класс относится к данной группе или имеет данное свойство. Ну анон привел пример выше, интерфейсом 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лаешь свой класс как тебе надо, реализуешь интерфейс и фреймворк может с твоим классом взаимодействовать.

Если ты не уверен где надо применять интерфейсы, не применяй их пока.
103 1331698
>>31683
Требуется для чего? Смотря какие у тебя цели. Я не смотрю на требования. Мне интересно изучать в глубину и ширину. Чтобы не было областей, где я не понимаю что происходит. Это влечет за собой изучение математики, физики, и много чего еще. Просто изучай то чего не знаешь.

Не знаешь архитектуру компьютера, - изучай. Не знаешь как работает процессор, - изучай. Алгоитмы, базы данных, математика, физика, машинное обучение, etc, - изучи это. Изучай то, что тебе нужно. А если изучать только то, что требуют, типа ООП, паттернов, то будешь расти не так как тебе нужно, а как хочет кто-то другой. Это очень ограниченное обучение получится. Потому что в какой-нибудь веб-студии создают сайты из говна и палок, и не хотят ничему учиться. Если следовать требованиям вакансий, то можно научиться какой-нибудь ерунде, про которую кто-то придумал, что она очень важна. Нужно мыслить своей головой.
104 1331699
105 1331700
>>31687
Циклы не имеют отношения к математике. В математике нет даже изменяемых переменных. В мперативном программировании все не так как в математике.
106 1331703
>>31685
Вообще, в ООП много средств, которыми ты задаешь правила работы со своим классом:

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

Важно пользоваться всеми этими возможностями правльно. Их мы изучаем в задачах про Вектор и кошки-мышки.
107 1331713
>>31703
Хм. Но дело в том, что у ОПа в главе про OОП нет этой информации и предлагается решать их не зная всего этого
108 1331714
В перл есть заебательский оператор "my", а что в php?
109 1331718
>>31714
И что он делает?
110 1331723
>>31718
Он идет в паре с "usе strict;"

Позволяет oбъявлять переменные только явно "my $result", и избежать ошибки типа "return $reslt;". Сегодня решил попробовать пых, мне такого очень не хватает.
111 1331725
>>31695

>То есть интерфейс это что-то вроде договоренности


Захотелось добавить, что часто для описания подобной "договоренности" используется слово "контракт". На самом деле повседневное совершенно дело встретиться с тонной контрактов хоть в пхп, хоть в джаве, хоть где либо еще. Просто ремарка, чтобы увидев контракты репозиториев каких-нибудь не было остолбенения.
112 1331727
>>31723

>мне такого очень не хватает


Там надо добавить error handler - функцию для обработки ошибок. И по ошибке "встретилaсь необъявленная переменная" что-нибудь сделать, например, выбросить исключение.
Но не надейся там особо. Ни один из динамических языков лучше от этого не станет. Проверено уже.
hdwallpapers.top780.jpg515 Кб, 1920x1080
Бложек 113 1331738
Увидел на странице рекламу:

> Как установить игру?


> На компьютер или телефон. Смотрите прямо в поиске Яндекса! 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ды распространения вредоносных программ настолько эффективны что даже яндекс не может от них удержаться.
d5bbedb232.png45 Кб, 1124x417
114 1331745
Возник вопрос по студентам. Каким образом лучше проверять переданные через форму данные?

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

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

В правильном ли я направлении думаю?
ОПРОС 115 1331749
Аноны, а просто любопытно, как вы читаете тред?

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

И как находите ответ на свою задачу если ОП часто их проверяет только несколько дней спустя, и за этой время успевают запостить 300-400 постов?
116 1331750
>>31745

>Перед тем как передать форму на сервер проверяем её жсом и если есть ошибки - выводим их


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

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


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

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


Это от твоих предпочтений зависит. Кто исключения кидает на такую мелочевку и ловит их потом по иерархии. А кто составляет стек ошибок. Результат один и тот же. Выводить не обязательно. Что с ними делать решать тебе и под конкретный этап разработки.
117 1331752
>>31749

>просто держите открытым постоянно и обновляете


Автообновление есть.
118 1331754
>>31738

>Видимо сомнительные метoды распространения вредоносных программ настолько эффективны что даже яндекс не может от них удержаться.


Что забавно, яндекс накладывает санкции на сайты с подобным видом монетизации.
119 1331762
>>31749
Добавлен в избранное двача.

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

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

Интересно, все эти люди, кто в Яндексе или Гугле работают, они наверно гордятся тем, какие они умные, как они с закрытыми глазами могут нейросеть на Хаскелле написать (не то что эти крудописатели на PHP), но затем они идут на работу придумывать, как обмануть неискушенного пользователя и заставить установить их программу или ввести свои данные и согласиться на слежку, сохраняя при этом видимость свободного выбора (а также, как обойти GDPR, сохраняя видимость его соблюдения). Обе компании по сути зарабатывают на слежке и монетизации собранных данных.
121 1331765
>>31750

>И в том и другом случае ты валидируешь все от а до я, как минимум не менее тщательно, чем на фронте.



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

try {
$model = new Model($name, $email);
} catch () {
// Что-то делаем
}
}
122 1331769
>>31745

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

> Перед тем как передать форму на сервер проверяем её жсом


Хватит HTML5 валидации.

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



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

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

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

Использование исключений не позволяет передать несколько ошибок.
123 1331771
>>31765
Контрллер валидирует только инупт, потом слой модели валидирует данные.
Например контроллер чекает что передано число больше 0, а модель уже валидирует на это число от 2 до 25. Конкретизируй отвественность, сначала контроллер, который ловит самые грубые ошибки, потом модель, которая ловит логические ошибки. Во всяком случае контроллер спокойно число от строки отделит, и многие другие вещи сделает без привязки к бизнес логике, а модель добьет остальное. (Модель в это случае не датакласс или активрекорд, не путай)
124 1331784
Короче, я нихуя не понял, что я сделал, но вышла такая херня в первой задачке, в циклах, там где каждый год на 10% сумма росла до миллиона.

<?php

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

?>

А как сделать, чтобы ещё и года от 16 отсчитывались вперёд?
А то я сам не понял как сделал, чтобы отсчёт лет был, а вот года чёт не выходит.
125 1331785
>>31769
>>31771
Немного прояснилось, спасибо!
126 1331787
>>31784
Ой, извините, сейчас нормально сделаю.

https://pastebin.com/kLh6XnG6
127 1331789
>>31465
Опять этот коммивояжёр с обострением шизоидного артрита. Втирал за лямбду, посоны, или нет ещё?
128 1331793
>>31465

>Не инструменты красят инженера, а инженер инструменты.


Лол. Нормальные люди инструментами пользуются. Нах их надо красить? Тебе их цвет не нравится?
129 1331794
>>31789

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


#мюслиДушевнобольных
130 1331808
Ларавел-герои, поясните за такую штуку.
Делаю простое CRUD приложение типа блог
$post->body - тут хранится текст одной записи блога.

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

Объясните, в чем цимес и теория стоящая за этими двумя записями? (ну с восклицательными знаками и без)
131 1331813
>>31793
Не делай вид что не понял. Хорошо, не инструмент украшает программиста, а программист инструмент. В умелых руках и PHP становится нормальным инструментом. А говно-кодеру дай самый лучший язык, все равно говнокод получится.
132 1331815
>>31813
Зачем бы программисту украшать инструменты?

Ну и говнокодерами были все программисты. Кто был, кто есть. Тебе то что от этого, шизик?
133 1331835
>>31815

Хватит флудить.
134 1331846
>>31835
Я не флудю
135 1331872
>>31835
Я бампаю.
136 1332067
Поясните пожалуйста за некоторые моменты MVC.

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

У меня должен быть один view с текстовым полем и кнопкой, откуда информация передаётся в контроллер, контроллер передаёт параметр в model, там выполняется запрос к апи. А вот дальше я не знаю, как это должно работать. Создавать ещё одну модель, куда будет передаваться джсон и который будет записывать инфу в БД через элоквент? Или всё делать в одной модели? Как правильно, памагити!!111
137 1332081
И почему в оппосте не рекомендуют Атом? Мне очень понравился...
138 1332082
>>1331359
бамп вопросу
139 1332084
>>32081
Игра мне тоже понравилась. Действительно почему бы в оппосте не поддержать отечественного производителя!
140 1332089
>>32067
Ты должен решать проблемы применением паттернов, а не умножать их. Даже так - ты должен решить проблему, а паттерн нужен, чтобы объяснить другим как ты ее решил. В твоем ларавеле даже есть возможность сразу в роуте вьюху прописать. Т.е ты не обязан всегда MVC в голове держать.
141 1332092
>>32089
Тогда что мне делать конкретно в моем случае? С мвц или без него, мне важно понять как правильно в этом конкретном случае.
142 1332093
>>32092
И в чем тогда смысл вопроса? Лепи чтобы работало. :)
143 1332101
>>32089
ООП головного мозга. Паттерны наше все.
144 1332103
>>32093
Чтобы работало я слепил бы на коленке в одном пхп файле. Но я собираюсь выкладывать в общий доступ, а значит моя задача сделать ПРАВИЛЬНО (я уже третий раз повторяю это слово, а не слово АБЫ РАБОТАЛО). Если не можешь помочь, то зачем овтетчаешь?
145 1332104
>>32092
В программировании нет правильного или неправильного. Это творческая профессия. Твори.
146 1332106
>>32103

>моя задача сделать ПРАВИЛЬНО


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

Лучше говорить не правильное решение, а приемлемое. Любое решение приемлемо, если оно хотя бы работает. А дальше его можно улучшать постепенно. Эволюция.
147 1332107
>>32106
>>32104
Я и так физик (точнее механик), а мвц учу ради своего маленького проекта. И как я должен его учить, если я запутался, а ответ мне дать не могут?
15092480576060.webm1,5 Мб, webm,
720x720, 0:10
148 1332112
Что заставляет лютей юзать 1 мадженту? Это же лютая лапша из хрен пойми по какому принципу построенного наследования, кучи блять конфигов и шаблонов, которые немногим лучше xslt.
Разбираться в этом всем аду особенно трудно, когда у тебя нет никаких контактов с тимой (особенно физических), которая около 2 лет своими руками возводила дополнительные круги ада, в которых на одну страницу приходится по 200 запросов к базе, а в половине из них не меньше 3 джоинов. А в довесок ко всему еще нашлась функция, которая почти в каждый из них добавляла джоин по селекту в котором был еще один джоин и один left join , который тоже блять по селекту в котором еще(!) один джоин.
А самый пиздец в том, что это все в тырпрайз версии. Столько платить за цмс и сотворить с ней такое. Просто пиздец, никогда такой хуйни не видел.
149 1332115
>>32107
короче сове
1. делаешь штобы работало
2. (опционально) переделываешь, шоб было красиво/быстро
3. (опционально) идёшь нахуй из профессии
150 1332117
>>32115
в треде снай
151 1332119
>>32107
Тебе же говорят, не бывает правильного и не правильного в программировании. Это сугубо творчество. Делай как понимаешь сам. Если тебе сказать делай так или так, то ты ничему не научишься. Кто просто повторяет, становится макакой. Учись думать. Принимать решения. Пробовать разные варианты. Для инженера это самое главное.

Спроектировать, собрать, найти слабые места и улучшить, - вот работа программиста-инженера.
152 1332127
>>32067
Я бы создал дополнительный класс, что-то вроде components/ApiHelper, передавал бы в него параметр, после чего он возвращал json который уже через модель записывался в базу.
153 1332130
>>32127
Для чего там класс, если это можно сделать одной функцией?
154 1332138
>>32130
Разделение ответственности. Работа с апи может меняться и обрастать дополнительным функционалом. Или потребоваться в другом контроллере.
155 1332146
>>32138
А почему это нельзя сделать, когда придется разделить ответственность за дополнительный анал?
156 1332148
>>32138
А что функция это не разделение ответственности? Ее можно сделать универсальной. СИКП почитай. Ты предлагаешь преждевременную оптимизацию. Это overengineering чистой воды. Сразу видно почерк адепта ООП. Использую, да по-больше, но не знаю зачем.
15159267633140.webm1,8 Мб, webm,
320x240, 0:28
157 1332156
>>32146
Потому что в твоем случае все обрабатываемые аналы считаются обычными. Условие для создания их как дополнительных не срабатывает.
>>32148
Да ты же поехавший. Лапшу по всему проекту собирать потом легче будет? Очередной препод-теоретик их техникума в ебенях с нулем опыта пришел повыебываться.
B0JfbCnIYAAeEHO.png206 Кб, 485x369
158 1332171
>>32156
Очередной ООПэшник порвался. Слабенькие вы какие-то.
159 1332180
>>32127
Спасибо.
160 1332184
>>32180
Молодец! Теперь у тебя будет на каждый пук по классу, которые даже инстанцировать не нужно.
161 1332208
так шо тут у нас? ооп нинужно? найс, 30 лет уже это слысу, но всё равно ооп еще здеся. а знаете почему? я заню почему, но вам не скажу)) ибо вы эгоисты, а ооп не для эгоистов придуман, а для командных работников
162 1332216
>>32184
Я благодарю не за содержание, а за тот факт, что он единственный ответил по делу. А хорош его совет или нет мне предстоит ещё определить.
163 1332251
CodeIgniter 4 уделывает все фреймворки.
164 1332326
>>32148

>Ты предлагаешь преждевременную оптимизацию


Класс наваять для этих дел - минутное дело. Зато потом голова болеть не будет, собирая всё это дело в одном месте.
165 1332365
Почему у нас, пхпшников, нет такого набора модных и гламурных книжечек, как у рубистов??

Как можнo выучиться красивому коду без современных и структуированных книжек на английском от профессионалов?
166 1332374
>>32365
И еще, правильно ли я понимаю что похапе устаревшая бекэнд штука для связи с БД формочек, обычный информационный(редкообновляемый) сайт можно написать без нее, верно?
167 1332379
>>32374

>похапе устаревшая бекэнд штука


считай, што пыха это хуета, которой ты рулишь протоколом хттп напрямую. врядли это когда-нибудь устареет
168 1332413
>>32379
Так есть же асинхронный node.js
169 1332451
>>32413
Напиши мне на своей ноде или ещё на чём запрос к стороннему API, да так чтобы ты потом не кричал НУ АНИ ДАЛЖНЫ СНАЧАЛА СПЕЦИАЛЬНА В НАСТРОЙКАХ РАЗРЕШИТЬ МНЕ ТЯНУТЬ ИНФОРМАЦИЮ С ДЖАВАСКРИПТА!!1.
170 1332499
>>32451

>к стороннему API


если опенсорс, то особых проблем возникнуть не должно
https://aws.random.cat/meow
171 1332502
>>32499
Это что такое? Ты с кошечками развлекаешься? Чому на локалхосте не норм?
172 1332504
>>32502
на локалхосте вполне норм, пока девелопишь и тестишь
а в продакшн выкатывать куда? тоже на локалхост?
ведь задача например - написать самый крутой аппликэйшн с котиками и утонуть в море говна бабла
173 1332561
>>32499
Код где, который я скопирую и вставлю в ноду, которую ты привёл в пример? Давай мне код, я его продублирую у себя, вставлю свою ссылку чужого апи и мы чекнем как оно работает (никак) и сколько строк занимает в сравнении с пхп (овердохуя).
Screenshot43.png25 Кб, 788x409
getNthOrEqualIdFromThisOnTheRightByStatusChannelbotIdAndMessageSource 174 1332576
Кажется у меня проблема.
Я не знаю как коротко называть методы.
Это уже совсем пиздец какой-то блять.
Что делать? Как бы вы назвали этот метод?

Просто убрать ByStatusChannelbotIdAndMessageSource нельзя, ибо там и по другим критериям методы есть.
175 1332577
>>32576
А я то думал это у меня длинные названия. Теперь спокоен.
176 1332589
>>32576
Впринципе тебе было бы удобнее билдер критериев иметь, чем городить эти обертки с детальным описанием в названии.
С билдером мог бы сделать например
$builder->nthOrEqualFrom(...params)->right()->byStatus(status)->byMessageSource(source)->get();
и это более переиспользуемый и гибкий вариант. Правда я понятия не имею насколько это реально у тебя по коду реализовать.
177 1332594
>>32589
Как такое сделать? Как паттерн называется?
178 1332598
>>32576
А нахуя вообще вливать всю суть в название метода?
Бери пример с си-блядей. Они буквально несколько (1-3) букв берут от слова и разбивают его _. Да, это может показаться трудночитаемым, но в си все функции из stdlib хуевочитаемые да и нахуй не нужны, но у тебя же ЕБАНЫЙ ВЕБШТОРМ, навел мышкой на метой и у тебя уже документация подсветилась.
179 1332606
>>32594
Билдер и называется, только придется фантазию проявить. Примеры и объяснения по учебнику не для таких ситуаций. Наверняка видел аналоги в виде QueryBuilder всяких. Суть та же.
180 1332628
>>32606
Вообще я знаю паттерн, (но забыл название, лол), который позволяет создавать цепочки вызовов методов типа как ты выше написал. Если вкратце, суть в том, чтобы возвращать $this везде.

Но вообще это уже какая-то ORM нахуй получается, в рот я ебал еще и орм на коленке писать тут, совсем говноедство какое-то будет, никто блядь не поймет потом мой код
181 1332631
>>32628
Что-то типа такого?

$foo = () => $var1 => $var2 => $var3;
182 1332635
>>32628
Ну вот в твоей ситуации это как бы билдер критерии для метода 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);
}
}

Вот тебе и билдер конкретно для того страшного метода с кучей параметров. Как ты понимаешь это на коленке и сделать можно лучше во много раз, просто как пример что тут нет ничего сложного. Полноценная орм и прочее, кстати, тоже пригодились бы. Раз у тебя ее нет можешь взять да доктрину подтянуть, там много чего есть.
183 1332642
>>32635
Тогда придется на тонны других методов тоже отдельные классы писать? Это же просто ебанутся как долго.

Насчет орм и доктрины - да. В следующий раз, пожалуй и буду их юзать. Сейчас уже нет смысла тонны кода переписывать на нее.
184 1332643
>>32642
Ну как посмотреть. Вот у тебя есть метод getNthOrEqualFromThis. Первая же обертка над ним получилась с длиннющим именем. А таких оберток, судя по количеству параметров, может быть до ебаной жопы. Помоему лучше уж один раз сделать даже самый глупенький билдер и дергать через него, чем делать 100500 длиннющих методов вместо этого каждый раз. Сам же сказал, что есть и другие критерии к нему, значит проблема не в одном только том конкретном методе.
185 1332644
>>32365
Зато у нас есть неплохая официальная документация и отличный тред в котором полно зелени.
мыслитель.jpg31 Кб, 600x340
186 1332647
>>32643
Но тогда это будет практически эквивалентно прямым запросам в БД, только через обертку.
Инкапсуляция, мам...

Нужно создать несколько методов с выборками по определенным критериям, а не просто разрешить ебать таблицу в рот и жопу как хочешь.
187 1332648
>>32598
А мне нравится это сишное iInterfaceName и всякое подобное. Коротко и понятно, главное контекст знать.
188 1332651
>>32647
А через эти методы типа только в писечку ебешь, но никак не в рот и жопу как содомит какой-то? Чтобы полноценно выбрать решение надо разобраться в причинах, которые привели к той обертке, а не только на метод имени Льва Толстого посмотреть.
189 1332653
>>32647
Дьявол на пикче?
190 1332676
>>32651

>А через эти методы типа только в писечку ебешь, но никак не в рот и жопу


Ну вообще да, в том и смысл!
191 1332677
>>32676
Я как-то не вижу этого. Обертка с именем на целый фанфик по сути прячет всего 1.5 реальных параметра, притом сама целых 5 принимает. И реально спрятанный параметр всего лишь бул. Судя по всему есть еще и вторая такая, где _is_less тру. Шо так ебать можно, шо эдак.
192 1332680
>>32576

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

getNeighbourId/getNthId. Насчет bystatus... - это же явно можно назвать короче. Например, getNthIdByBotAndSource
193 1332681
>>32643
По-моему, лучше вообще писать такой код, чтобы не опускаться до оберток.
194 1332683
>>32589

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

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

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'));
195 1332685
>>32576

Также, возможно эту функцию просто стоит по другому назвать? Вроде getSimilarMessages или как-то так?
196 1332688
>>32683
Впринципе то, что я ему предложил больше похоже на фильтр как раз. Запомню это название, а то хуйню одну другой назвал.
197 1332703
Фреймворк yii2. Такая проблема: в верстке используется более свежая версия jQuerty, чем в фреймворке. В ассете отключаю jQuery, которая идет с вёрсткой - верстка корректно работает (меню сворачивается в бургер и работает), но не работает валидация от Yii. Делаю наоборот - верстка перестает корректно работать, но валидация отрабатывает своё. Какими путями можно решить эту штуку?
198 1332726
>>32703

Правильнее всего переделать верстку на использование jQ от Yii. Либо мучаться с jQuery.noConflict(), загружая 2 копии библиотеки и используя в верстке приватную копию.
199 1332734
>>32703
Залезть в исходники фрейма и поменять жиквери на более зрелую, либо переписать верстку.
200 1333137
Недавно столкнулся с проектиком на php 4. Ну как проектиком. Там весь код был в нескольких файлах. Забавно было то, что в одном из них я нашел аццкую смесь из всех языков веба. В index.php был php с подготовленными sql запросами, html, css в head и js в скриптовых тегах. И задумался, как же раньше было лампово, ни тебе стандартизаций, ни тебе менеджеров, которые наставляют писать по тз. Программистов вообще считали элитой своих наций. Никто не понимал, что они делают. Когда же все стало меняться? Я не помню этот момент. Но руку к этому приложили большие корпорации со своими стажировочками и пиаром высоких технологий среди масс. Ублюдки.
201 1333158
Почему PhpStorm
1. Игнорит все SPL-исключения. Тупо все что унаследовано от двух главных SPL-классов исключений LogicException и RuntimeException - игнорится.
2. Имеет глубину сканирования исключений равную единице.
Если в методе, который вызывается у тебя в методе кидается исключение, ты об этом не узнаешь.

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

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

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

КИДАЕШЬ ИСКЛЮЧЕНИЕ В МЕТОДЕ ПРИ НЕКОРРЕКТНОЙ СИТУАЦИИ
@
ОБЕЗЬЯНА-ПРОГЕР ВЫРУБИЛ ВСЕ ИНСПЕКЦИИ В IDE И ЛОВИТ ВСЕ ЭКЗЕПШЕНЫ ГОЛОЙ ЖОПОЙ
@
- НУ МАМ, ПОЧЕМУ ПАДАЕТ, ВОТ ЖЕ КЛЯТЫЕ ГОВНОКОДЕРЫ! НАДО БЕЗ ИСКЛЮЧЕНИЙ ПИСАТЬ!
204 1333173
>>33172
Вот и пиши на своем крестоговне, а в божественном PHP исключения ненужны.
205 1333175
>>33173
Метод возвращает значение типа int. Возникает ошибка, из-за которой невозможно возвратить корректное значение.
Как ты сообщишь об ошибке?
А если в методе могут возникнуть 3 разные ошибки?
206 1333177
>>33175
А ты не пиши с ошибками.
207 1333179
>>33172
Так а нахуя ты сравниваешь божественные кресты с богомерзким похапэ? Если бы у пыхи был компилятор, то разрабы идеи заморочились бы немножко и сделали по умолчанию чуть иначе, в глубоким уровнем сканирования исключений. Но тебе, мудаку, дали интерпретатор и отсутствие ебли с исключениями, а тебе не нравится. Что за хуйня? Это программисты? Делаешь, как лучше, а им не нравится.

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

>на бумажке карандашиком


Дедуля, тебе к земле уже привыкать пора.
Выключай кудахтер и сходи исповедуйся.
209 1333182
>>33177
Двачую. Правильно методы проектируй, чтобы не было ошибок. Для тебя придумали операторы условий, чтобы отдавать некорректное значение.
210 1333185
>>33180
Мне 23 года, дедуля.
211 1333186
>>33179
Иди на бумажке карандашиком найди все исключения, которые может высрать некий говнокод, с которым ты должен работать, написанный не тобой.
От этого могут зависеть бизнес-процессы на дохуя денег, а IDE, несмотря на то, что может их все найти, не делает этого.

Самое смешное что ты даже не понимаешь причину, по которой жопбрейнс ограничили глубину сканирования исключений в пыхе и почему в яве она не ограничена.
212 1333188
>>33182
>>33177
Вы реально конченые или тралите?

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

ВНЕЗАПНО (никогда такого не было и вот опять) некие кривожопые говнокодеры передали в ваш метод несуществующий файл, не html-файл, некорректный html-файл, анус пса, небо, аллаха и хуй знает что еще.
Что будете делать?
213 1333189
>>33185
Значит ты простой пыхыпыдебил - разновидность обычного наследственного дебила особой вонючести.
Впрочем, все вы такие.
214 1333191
>>33188
Лично я тралю
Уж не знаю насчет идиотика >>33182

>принимает на вход html-файл


>Что будете делать?


Ебальник вскрою дегенерату, осмелившемуся мне подобное дерьмо затирать.
215 1333193
>>33188
Заюзаю либу для парсинга невалидных файлов.
Нет, не поделюсь, иди исключения обрабатывай.
216 1333195
>>33189
Пошел нахуй. Еще я буду париться, что там мне какие-то верстальщики насували в iostream, раз по их вине прошла ошибка, им и исправлять.
217 1333196
>>33193

>либу для парсинга невалидных файлов


Ага, написанную такими же кончеными дебичами, что и ты, которая при невозможности распарсить файл высрет тебе что-то string:"NE MOGU RASPARSIT! OSHIBKA!"
218 1333198
>>33195

>Еще я буду париться


ПРОД УПАЛ
@
СЫЧЕВ С РАЗБИТЫМ ЕБАЛОМ И БЕЗ ПОСЛЕДНЕЙ ЗАРПЛАТЫ ИЩЕТ РАБОТУ
219 1333199
>>33196
Да ладно, признайся, что исключения нужны только в строго типизированных языках, а в пыхе эта фича нахуй не сдалась.
220 1333202
>>33198
В согласованной разработке, где каждый знает, что делает, прод не падает. У тебя был печальный опыт работы, я смотрю.
221 1333203
>>33199

>НИНУЖНА


As expected.
Дебилы, дебилы never change.
222 1333204
>>33199
Пыха и есть строготипизированный в последних версиях, с подключением, маня. Или ты там еще без тайпхинтов лапшедерьмо пишешь?
Хотя что от такого ебача ожидать
223 1333205
>>33202

>ВРЕТИ


>НЕТ ТЫ


Да у нас тут ПЫХЫПЫБИНГО, хаха.
224 1333206
>>33204

>тайпхинтов


Хуйня и ненужно.
nobrain2.jpg141 Кб, 738x405
225 1333212
226 1333214
>>33205
>>33204
>>33203
Надеялся на норм срач, а вы только на переходы на личности способны. Ни капли сути по теме. А ты дебил, а ты маня, а ты хуево пишешь, а ты еще хуевее, тут тебе капсболд, тут бомбанулей. Вот бы еще разок сюда зашел тот анон из начала треда, было бы весело.
227 1333215
>>33214

>на личности


Не льсти себе, дебилушка, ну какая у тебя личность - сплошные спиномозговые рефлексы и обиженный скулеж.
Типичный пхпшник, хаха.
228 1333216
>>33214
Постите сами смешное
229 1333217
>>33215
Не льщу.

>>33216
Я?
230 1333223
>>33217

>Не льщу.


Это правильно, дебилушка.
Самокритика - это хорошо.
231 1333228
>>33223
Так ты согласен со мной насчет ненужности исключений?
232 1333229
>>33228

>насчет ненужности


Конечно же ты не нужен.
Никому вообще даже себе самому
233 1333231
>>33229
Раз у тебя кончились параметры аргументы, я приму это за "да".
234 1333234
>>33231

>эти маняфантазии


Все, пыхыпыдаун окуклился в агонии бессильной обиды
235 1333239
В каких случаях следует кидать RuntimeException а в каких LogicException?
В чем семантический смысл каждого из них?
236 1333249
>>33239
Иди уже нахуй, идиотик.
237 1333263
Иногда бывают такие ситуации, когда происходит какая-то дичь, которая никогда не должна происходить.
Например, есть ланг-файл формата key=value.
Класс, отвечающий за мультиязычность пытается найти такой-то ключ, но его там не оказывается.
Такая хуйня является фатальным недостатком программы и возникает, если прогер забыл внести ключ в ланг-файл.
При таком раскаладе дальнейшее выполнение программы вообще не имеет смысла, ибо она как бы недоделана.

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

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

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

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

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

Не помню точно, но да, опять в этой яве исключение RuntimeException можно не ловить, что является исключением (лол) из общей ситуации, где ты обязан ловить все.
То есть если метод генерит такое исключение это как бы знак того, что все, пизда, приехали.
238 1333326
>>33239
>>33263
Экшепшены не нужны, это уже сказал тот, что выше.
239 1333330
https://pastebin.com/AGuEC61g

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

Где обосрался?
240 1333332
>>33330
На лекции.
berserk-ep-12-english-dub-hd.jpg7 Кб, 320x180
241 1333346
10
http://jsfiddle.net/8w256gev/3/ - тута не понял как выравнять сноску [..] относительно строки, абсолют или флоат ее смещает вверх, и еще можно ли ее через флоат как-то сделать? Кароче что-то я намудрил кажется.
11
http://jsfiddle.net/rmouc3aj/ - тут доп.пункт подсветка по фокусу с клавы - фокус и при нажатии делается, есть focus visible но он только в лисе.
242 1333352
>>33346
Пошел нахуй.
243 1333365
>>33352
Счастливого пути, сообщи как доберешься.
244 1333369
>>33365
Нахуй послан.
245 1333373
>>33369
И кто же тебя так?
246 1333383
>>33373
Соси хуй.
изображение.png164 Кб, 604x298
247 1333392
download.png9 Кб, 225x225
248 1333533
Объясните, пожалуйста, разницу между переопределением метода и его перегрузкой в наследовании. И где это может пригодиться. Объясните так, чтобы даже чайник понял.
249 1333580
>>33330
Автор этой дрисни репортин ин.
Поставленная задача решена : форма стала пропускать на страничку только пользователей, что присутствуют в бд.
https://pastebin.com/wbJNMKaP - решение.

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

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

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

250 1333681
Бамп из закреплённого.

Как в хтмл прописать путь до другого диска? Апач лежит на диске С, нужно иметь доступ к изображениям с диска Е (удаленный). Все что нагуглил -- нужно идти от корня сервера, но нихуя не получается изображение вывести через img src.
251 1333692
>>33681

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

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

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

Не давай доступ к лишним папкам, проверяй правила.
252 1333694
>>33681

А, если ты имел в виду, что Апач установлен на диск C, а надо корнем сайта сделать папку на e:, то хватит DocumentRoot + Require в Directory. Если не работает - включи лог ошибок и посмотри, что в него пишется при попытке открыть какой-то URL.
15483064845860.jpg189 Кб, 839x812
253 1333787
Писториусы, поясните за етот момент. Крч наслайсал макет в фотошопе, открываю его в Дримвивере, а там допотопная разметка с таблицами (пикрел). Вопрос, как это говно превратить в бутстрап верстку (которая была в макете в виде слоя полосок/ребер).

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

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

Алсо вы вообще также делаете через слайсы (ну или просто чекая размеры в ПС слоях, кому как удобно) или уже какие-то другие, более автоматизированные способы есть?
1051332.jpg35 Кб, 600x450
254 1333833
Коль скоро у двачеров обед, а есть они любят прям за пекой, то вот вам блиц-опрос с собеседования, которое я не прошел, устраиваясь пхп-джуном в одну известную контору в моем городе:

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

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

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

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

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

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

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

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

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

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

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

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

13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
1051332.jpg35 Кб, 600x450
254 1333833
Коль скоро у двачеров обед, а есть они любят прям за пекой, то вот вам блиц-опрос с собеседования, которое я не прошел, устраиваясь пхп-джуном в одну известную контору в моем городе:

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

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

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

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

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

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

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

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

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

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

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

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

13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
255 1333852
>>33833
Что ещё спрашивали, задачи какие давали? Сам проекты свои какие показывал? Что из задач опа решал?
256 1333860
>>33833
Ой, да пошли они нахуй. Отвечаю, что га все эти вопросы готов дать ответ с гуглом под рукой, потому что и в работе его юзаю. Какой смысл в зазубривании.
257 1333871
>>33833

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


Без знания этого факта нельзя софт писать, да?

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


Предварительная подготовка.

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


Из бинарных and, or, xor, not. Но вообще это хуета.

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


Continue;

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


Поля позакрывать, как границу при СССР, доступ через сеттеры-геттеры, как у чекистов принято.

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


Инициализация и запуск объекта. Внезапно.

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


В душе не ебу.

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


Бесполезная херня, если кроме этого закрытого конструктора там ничего нет.

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


Понятия не имею.

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


А зачем?

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


Статик метод этож вроде глобал функции. Не знаю.

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


Не пользовался.

>Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?


Х.з.

Вопросы как-то совсем из другой плоскости, как по мне. Всегда говорят - учите технологии, а не синтаксис. А тут спрашивают хуйню, которую нагуглить за 10 минут можно.
257 1333871
>>33833

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


Без знания этого факта нельзя софт писать, да?

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


Предварительная подготовка.

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


Из бинарных and, or, xor, not. Но вообще это хуета.

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


Continue;

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


Поля позакрывать, как границу при СССР, доступ через сеттеры-геттеры, как у чекистов принято.

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


Инициализация и запуск объекта. Внезапно.

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


В душе не ебу.

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


Бесполезная херня, если кроме этого закрытого конструктора там ничего нет.

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


Понятия не имею.

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


А зачем?

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


Статик метод этож вроде глобал функции. Не знаю.

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


Не пользовался.

>Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?


Х.з.

Вопросы как-то совсем из другой плоскости, как по мне. Всегда говорят - учите технологии, а не синтаксис. А тут спрашивают хуйню, которую нагуглить за 10 минут можно.
258 1333872
>>33860
Так логика в том, что ты можешь дать ответы на эти вопросы без гугла. Иначе зачем их тебе задавать?
259 1333875
>>33833

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


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

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


Тебя в лесу работать посадят, среди медведей?
261 1333879
>>33871

>Без знания этого факта нельзя софт писать, да?


Нет. Вдруг ты назовешь свойство ключевым словом?

>Предварительная подготовка.


Неверно.

>Из бинарных and, or, xor, not. Но вообще это хуета.


Арифметических, а не логических.

>Continue;


Молодец.

>Поля позакрывать, как границу при СССР, доступ через сеттеры-геттеры, как у чекистов принято.


Молодец.

>В душе не ебу.


Это классика, это надо знать.

>Бесполезная херня, если кроме этого закрытого конструктора там ничего нет.


Молодец.

>Понятия не имею.


Классика.

>А зачем?


Нужно.

Иди кароч мат.часть учи.
262 1333880
>>33879

>Иди кароч мат.часть учи.


Иди нахуй - я в лесу не работаю.
263 1333885
>>33879

>Вдруг ты назовешь свойство ключевым словом?


Вы там в блокнотах до сих пор разрабатываете?

>Неверно.


Что не мешает мне пользоваться ей. Я учебники не пишу и знать мне это необязательно.

>Арифметических, а не логических.


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

>Это классика, это надо знать.


Понадобится - узнаю. Это не такая сложная для восприятия информация. Впрочем, как и всё остальное.
Вопросы, судя по всему, ждун и писал. Я-то ожидал, про MVC, паттерны, покажите ваш код и т.д., а тут детсад.
264 1333886
>>33879

>Нет. Вдруг ты назовешь свойство ключевым словом?


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

Кстати говоря с 7 пыхи все ключевые слова доступны для использовании в качестве имен свойств, констант, методов, трейтов, интерфейсов. Только class нельзя использовать в качестве конснтанты в классе, т.к. там и так есть ::class.
265 1333887
>>33852
Да все почти сделал из оповских задачек, кроме банкомата и прочего, что требует познаний в математике. Выучил даже основные алгоритмы и научился их применять, но завалился на такой простой хуйне. Написал на хх оригинальное резюме, прикрепил туда ссылки (магазин + гитхаб с оповскими задачами). Откликнулся с сопроводительным письмом на вакансию, пригласили через два дня.

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

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

>Т.к. тест я завалил


Что за тест был?
267 1333894
>>33886

>Ну понятно вопрос чекает что там претендент помнит, а может и вовсе знает.


Всё равно вопрос странный. Я вот на память мало вспомнить могу - для меня это конструкция, а не просто слова.
268 1333896
>>33887
Задачи опа это понятно, а студентов, файлообменник или тестхаб делал?
269 1333901
>>33833
Судя по вопросам контора ни о чем. В такой никакого профессионального роста не жди, а для джуна это важно.
270 1333902
>>33860
Лол, я толком не писал ничего, но и то знаю ответы на большинство без гугла. Если ты не знаешь, то непонятно что ты за погромист.
271 1333913
>>33887
Обратись к логике. Конкуренция в PHP наверное самая большая из всех языков. Но уровень кандидатов очень низкий. Поэтому зная чуть больше среднего можно легко их обойти. Искал бы ты работу на Хаскеле, там был бы уровень конкурентов во много раз выше.
272 1333917
>>33913

>Искал бы ты работу на Хаскеле, там был бы уровень конкурентов во много раз выше.


А на нём работа есть? Больше похоже на клуб илитистов.
273 1333918
Лолвут? На хаскеле есть работа?
274 1333935
>>33787
Бамп вопросу. После просмотра еще пары промежуточных степ бай степ видосов на ютубе прихожу к выводу, что средств автоматизации в основном нет - люди берут вручную создаю бутстраповую сетку и вручную по ней разносят, прсото чекая пиксели из ФШ. Это так? Блин дримвивер получается юзлесс тогда, раз созданная им табличная сетка нах не нужна, а создавать самостоятельно бутстрап и прочий грид он не умеет.

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

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

ПОмогите, прочитал и просмотрел кучу всего, сам забилдил два-три макета, но не пойму вот общий шаблон, указанный выше, 4й щаг.
275 1333937
>>33917
Работа есть. Но уровень нужен выше чем для PHP.
276 1333958
>>31382
Проверь пожалуйста. Мне очень надо.
277 1333974
>>33902

> знаю ответы на большинство без гугла


Если ты что-то знаешь с гуглом, то ты нчего не знаешь. Сейчас очень упала ценность чистого знания, когда все появилось в интернете. Ненышнее поколение считает интернет своей памятью и искренне удивляется, что кто-то нодобряет такой подход.
278 1333978
А зачем в стандартной библиотебе пыни есть функции вычисления косинусов и синусов? Кому-нибудь вообще это хотя бы раз пригодилось?
279 1333983
Абстрактные классы нужны лишь затем, чтобы отделить проектирование от реализации. Дискач.
280 1333987
>>33974
Если ты не знаешь элементарные вещи, значит ты не писал кода. Когда пишешь код, все само запоминается. Все таки они правильно делают, что хотя бы такие вопросы задают. Иначе поналезут нулевые гуглята.
281 1333990
>>33978
Представь себе нужны для вычислений.
282 1334016
Аноны, изучаю новые фичи пхп 7, добрался до методов.

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

А что ставить, если метод ничего не возвращает? Void и null не работают, ошибка ссылается на пространство имен.
283 1334037
ребят, жутко пахнет от ног
284 1334038
>>34016
С 7.1 добавили void. Вроде в этой же версии появились нулабл ретурны, типа ?string.
285 1334047
>>33935
Ну бамп плиз
286 1334059
>>34037
зачем ты нюхаешь ноги?
287 1334096
>>33987

>Иначе поналезут нулевые гуглята.


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

>Когда пишешь код, все само запоминается.


Вот именно - когда пишешь, а не когда судорожно пытаешься вспомнить сколько там конструкций в языке.
288 1334101
>>34096

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


Я кстати погуглил эти ключевые слова из интереса, чтобы подсчитать. Оказалось некоторые из них я например вообще не видел ниразу, не довелось, соответственно я бы их и не назвал. Например insteadof.
289 1334103
>>34101
Ну вот видишь. Теперь ты не имеешь права писать программы.
290 1334115
>>34096

>Программист должен понимать что делает и как, а не учить синтаксис наизусть.


Если ты не знаешь унарные и бинарные операторы, то ты ноль, очевидно что код не писал. Они везде одинаковые. Про изучения синтаксиса никто не говорил. Тут как раз не синтаксис, а семантика.
291 1334122
>>33833

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


не ебу

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


установление первоначального состояния

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


+,-,/,,%, mod. Остальное вроде не арифметическое
унарный знаю минус

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


continue

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


сделать их константными

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


функция, возвращающая новый экземпляр класса

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


его тип и имя (тут я бы загуглил на самом деле, потому что может это просто его тип?)

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


без статического метода хуй такой создашь

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


первое ad-hoc полиморфизм, второе сабтайпинг

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


зачем?

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


зачем?

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


синтаксическая ошибка, я же не пишу на богомерзкой жабе

>13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?


аналогично

с++-сеньер-300к-в-секунду*
291 1334122
>>33833

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


не ебу

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


установление первоначального состояния

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


+,-,/,,%, mod. Остальное вроде не арифметическое
унарный знаю минус

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


continue

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


сделать их константными

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


функция, возвращающая новый экземпляр класса

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


его тип и имя (тут я бы загуглил на самом деле, потому что может это просто его тип?)

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


без статического метода хуй такой создашь

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


первое ad-hoc полиморфизм, второе сабтайпинг

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


зачем?

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


зачем?

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


синтаксическая ошибка, я же не пишу на богомерзкой жабе

>13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?


аналогично

с++-сеньер-300к-в-секунду*
292 1334140
>>34115
Это не семантика даже, причем тут семантика, это фундаментальные знания, на которых программирование и построено.
293 1334142
>>34122

>его тип и имя (тут я бы загуглил на самом деле, потому что может это просто его тип?)


Тип не имеет значения. Сигнатура это имя метода со списком параметров.
294 1334143
>>34140
Семантика это значение единиц языка. Любое вычисление основывается на формальном языке. Это может быть даже не язык программирования. Но у него всегда есть единицы, а них значение. Бинарные операторы на самом деле пришли из математической логики. Они могут обозначаться по разному в разных формальных языках, но значение всегда одинаковое. Поэтому семантика все таки.
295 1334144
ОП ЗАКЛИНАЮ ТЕБЯ УБЕРИ ПОЖАЛУЙСТА УЗКОГЛАЗЫХ ШМАР ИЗ ОП-ПОСТ ЗАПОСТИ ЛИБО ЕВРОПЕЙСКИХ ЛИБО ВООБЩЕ НЕ ПОСТИ
296 1334145
>>34143
Ладно, ты победил. Я до сих пор и не знал толком, что такое семантика, но благодаря тебе узнал.
297 1334148
>>34122

>с++-сеньер


>не может сказать что такое сигнатура


Кек
298 1334154
>>34142
А вот и "я с гуглом все умею" подкатили.

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

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

А вот имена параметров не важны, поэтому и определение "имя метода со списком параметров" тупое, неверное, и написанное индусом-копирайтером.
299 1334155
>>34144
Та что справа на девченку даже не похожа. Трап наверное. Я бы тем кто трапов постит, вообще запретил создавать треды. Хоть бери и конкурирующий тред создавай.
300 1334157
>>33787
плезарики
301 1334163
>>34154
Вообще-то это определение не из гугла, а из книжки по жабе от О'Рили. Тип метода это не типы его параметров, а только тип возвращаемого значения. Как ты понимаешь, на вход может придти массивчик, а выйти строка. А сигнатура метода это его название + список параметров. Так как методы можно еще и перегружать, то нужно указывать тип данных этих параметров. Их имена не играют роли, важен их порядок.
302 1334165
>>34155
Я уж не смогу отличить трапа от не-трапа, но азиатские рожи терпеть не могу.
Надеюсь, что он прислушается и внемлит мольбам анонов.
303 1334167
Благодаря этому треду я понял, что программистом мне не стать, чему очень обрадовался.
304 1334175
>>34167
Выкатываешься?
305 1334176
>>34157
>>33935
>>33787
Тебе в дизайнач или в /wrk зайди, там есть фронтенд-тред.
306 1334178
>>34175
буду продолжать писать для себя как тупая обезьяна в одном файле без ООП и psr
307 1334183
>>34167
Ну и зря. Бросил это дело, бросишь и другое. Трудности везде будут.
308 1334194
>>34176
:(
ты не поверищ
309 1334196
>>33787
Тебе один ответ может быть - пиши сам нормально, а не занимайся хуйней.
310 1334199
>>34183
ответил выше.
Просто у опа один аргумент - "пишешь для ЗАКАЗЧИКА, а не для себя", а так как я пишу для себя, то и в рот ебал эти стандарты и ООП. Мой код все равно никто не увидит, свою задачу он выполняет, остальное мне видимо не нужно. Изначально хотел развиваться, но теперь не вижу смысла.

Фейсбуки с вк точно так же делали: хуяк хуяк и в продакшн, если взлетело - переделываем нормально. Такого подхода буду придерживаться и я, т.к. перфекционизм убьет все мои начинания.
311 1334204
>>34199
Заказчику врядли важно как оно там, если работает как надо. А вот коллегам и тебе не насрать. Ну дело твое. Пишешь только для себя, и сам же от этого наплевательства пострадаешь в будущем.

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


Это в целом разумно, только тот же вк например так и не переделали нормально. Подозреваю, что и фейсбук тоже.
312 1334208
>>34204

>Это в целом разумно, только тот же вк например так и не переделали нормально.


Двачую. Никакого MVC там и в помине нет. Еще уродливые гет-параметры, которые не помещаются в адресную строку.
313 1334211
>>34204

>Пишешь только для себя, и сам же от этого наплевательства пострадаешь в будущем.


Каким образом?

>Это в целом разумно, только тот же вк например так и не переделали нормально. Подозреваю, что и фейсбук тоже.


Поясни, что с твоей точки зрения у них не так. Работает, не тормозит, что еще нужно?

>Двачую. Никакого MVC там и в помине нет. Еще уродливые гет-параметры, которые не помещаются в адресную строку.


Вы просто размышляете как погромисты, пользователю похуй что там в адресной строке и есть ли там mvc.
314 1334212
Аноны, нормально ли это в разработке, что я подробно комментирую каждую строчку? Просто когда я возвращаюсь к собственному коду, я понимаю, что происходит вот конкретно здесь, но у меня нет общей картины, зачем это, откуда и куда идет. Поэтому приходится на каждой строчке объяснять самому себе, что тут происходит, а еще каждый метод и класс описываю через / */ с парамсами и ретурнами. В общем, это занимает довольно много времени. Нужно ли себя от этого отучать?
315 1334214
>>34211
Так мы и есть погромисты, нам похуй, что там у пользователя будет. Нам код поддерживать нужно, и чем удобнее это будет, тем лучше.
316 1334216
>>34214
ну кароч я поэтому и сказал что не быть мне программистом, извините если кого чем обидел. Не хочу писать код ради написания кода, хочу решать задачи.
317 1334217
>>34196
Ответь на вопросы няха.
318 1334219
>>34216
У тебя практические намерения в кодировании, тебе хочется что-то созидать, а не хуярить класс за классом ради того, чтобы охуеть, какую структуру я могу написать. Создай какой-нибудь интернет-магазин, настрой seo и продавай через него что-нибудь. Вот это годно будет.
319 1334222
>>34219
да я это и делаю, но зачитывался вашими тредами и дух захватывало - "ничего себе, может и я так могу?" Оказалось, что не могу, или не хочу, хз.
Проблем больше доставило то, что мы говорим на разных языках, и мне с моим подходом нереально будет влиться в какой-то коллектив потом.
320 1334225
>>34222
Столько я тебе всего написал, а оказалось тебе и правда это не нужно. Бери готовое решение, написанное другими людьми, и работай тогда, в этот тред действительно можно было не заходить.
321 1334227
>>1326386
Доработанный вектор, https://github.com/php2ch/vector/blob/master/index.php

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

А, чтобы задать сотруднику индивидуальную з/п можно заменить содержащийся в нём объект профессии на новый (уникальный). Правда, тогда придётся проверять все объекты профессий в антикризисных мерах, но это уже другая история.
322 1334228
>>34222
Ты это я. Это смешно, но я уже с 2015 года вкатываюсь попеременно. То забиваю, то снова играет страсть что-то писать/изучать и т.д. Но я понял, что суть была в том, что у меня не было конкретной цели. Теперь я ее нашел. Я пилю свой проект с использованием всех последних бек-энд технологий и потом обязательно применю это на практике. Ну а если не получится, то и хуй с ним, проектом буду заниматься. Но я уверен, что получится, потому что я знаю уже больше, чем все здесь вместе взятые. Но это просто теория, практики у меня мало, щас вот наверстываю.
323 1334230
>>34228

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


Хуя громкие заявления из-за первого опыта написания собственного проекта. Многие тут лет по 10 тернистый путь этот преодолевают, не забивая на качество кода и умудряясь при этом построить карьеру. Ну да, ты шаришь лучше всего треда канеш, уникальный весь.
324 1334234
У меня есть маленький проект, первую рабочую версию которого я захуярил за пару часов в один файл под пхп4 без ооп и забыл. А теперь решил сделать вторую версию по-уму, поставил пхп7.1, фреймворк, добавил бутстрап, начал оформлять мвц. В результате уже три дня ебусь, всё никак не могу сделать выборку из БД через элоквент.

То ли лыжи не едут, то ли я ебанутый.
325 1334235
>>34230
10 лет учить php и фреймворки? Хуя ты зелень. Да даже если бы ты 5 сказал, это тоже много.
Даже несмотря на это, я могу ответить за свои слова. Помимо пыхи я знаю еще несколько языков, даже в асме ковырялся. Да что там, когда я сегодня днем вбросил список вопросов, многие отсюда просто сказали, мол, а нахуя это вообще надо? Действительно, нахуя? Чтобы крудить, фундаментальные знания не нужны, а чтобы стать профи, нужно заглянуть дальше переменных со знаком доллара.
326 1334237
>>34234
Ставь 7.3, если нужны тайпхинты полностью.
327 1334240
>>34235
10 лет я в целом занимаюсь кодингом, около 7 лет работаю. Есть куча своих проектов, и тоже всегда стремился свое писать. Работал не только на пхп, но и на шарпе, джавке, жсе и питоне. И свои проекты тоже разные совершенно. С чего ты решил, что тут в треде только изучающие?
328 1334241
>>34225
зайду завтра, чтоб найти работников за лапшу которые будут писать мне модули к симфони (по факту половина из вас пилит вордпресс на фрилансе, а в этом треде все такие девелоперы пиздец)
329 1334242
>>34240
В чем разница между .equals() и ==?
330 1334244
>>34228
Я обычно сюда захожу после того, как напишу за пару часов какое-то убогое и кривое поделие под свою задачу. Оно настолько плохое (даже мне очевидно), что прямо больно смотреть. И я иду сюда, чтоб попытаться начать заново и в следующий раз делать все правильно. И каждый раз я ломаюсь и возвращаюсь к началу.

Впрочем мои душевные пиздострадания не имеют никакого отношения к php, так что не буду портить тред своим присутствием.
331 1334246
>>34241
Что ты имеешь против лапши, гурман?
332 1334247
>>34244
Так а на чем ты пишешь?
333 1334248
Зачем проверять кнопку у формы перед ее отправкой?
Инбифо: чтобы узнать, что форма была отправлена с конкретной страницы
334 1334256
>>34242
Можно было бы и язык еще написать, ну да ладно.
== и equals без перегрузки для ссылочных типов сравнит ссылки.
В шарпе можно перегрузить и то и другое, в джаве только equals, перегрузки операторов нет. (или есть в новых версиях, не следил)
Так же в шарпе для тех же стрингов уже есть перегрузка ==, чтобы сравнивать значения. В джаве этим не заморачивались и будут сравнены ссылки, для сравнения значений переопределены equals у встроенных типов. Ну и == не ругнется на нулл в отличии от equals в левом операнде, что в общем-то очевидно.
335 1334257
>>34248
Потому что внезапно на странице может быть не одна форма. И я сейчас не имею ввиду формы в типичном представлении пользователя, а именно тег form.
Например, ты реализуешь отправку поста в базу по одной кнопке одной форме, а удаляешь пост из базы по другой кнопке в другой форме с одним полем из этой кнопки.
И это две разные формы с двумя разными кнопками.
Ну и так исторически сложилось, что нужно проверять именно кнопку.
336 1334258
>>34247
на php, но без стандартов. Имею ввиду, что портить тред про обучение не хочу, т.к. и сам не научился, и другим мешаю.
337 1334259
>>34257

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


>И это две разные формы с двумя разными кнопками.


Две разные формы с одинаковыми post параметрами?
338 1334260
>>34256
Слушай, а я вот читал, что в жабе, если ты удалишь объект, то не факт, что он удалится незамедлительно, и некоторое непродолжительное время он будет жить, что может повлечь за собой некоторые баги. В общем, это зависит от того, с какой скоростью сборщик мусора его приберет. Это правда?
339 1334261
>>34259
Это ты у нас такой умный, а остальные нет.
340 1334263
>>34258
Если магазин пилишь, то позаботься хотя бы об элементарной безопасности.
341 1334272
>>34263

>позаботься хотя бы об элементарной безопасности.


Разверни мысль. Или банальное экранирование переменных уже считается чем-то необычным?
А стиль написания кода на безопасность никак не повлияет, в отличие от стада мартышек, слепо действующих по мануалу.
342 1334275
>>34261
а форму разве ты не сам себе шлешь?
343 1334289
>>34272
Какое экранирование переменных? Ты про SQL?
>>34275
Мужик, здесь не С++, и в ногу себе выстрелить никак нельзя.
344 1334294
>>34260
Я не особо шарю в gc, работает на фоне и работает. В пыхе кстати тоже есть, но тут об этом обычно не думают, пока пилишь простое веб приложение и не покоряешь долгоживущие. Удаляется то, на что не остается ссылок. Конкретно самому удалять объекты, как в крестах например, не надо прямо. А то ты вроде именно удаление озвучил. Впринципе для удаления в таких языках можно параноидально обнулить все ссылки на объект и оставить остальное gc.
Какие там баги кроме утечек без понятия. Проще всего понять (да и обосраться) можно на статичных ссылках. Статика живет на уровне класса, поэтому даже после смерти инстансов такая ссылка остается валидной и gc ее не не тронет. Внутренние классы и потоки тоже легкий способ выстрелить в ногу gc. Много об этом не могу сказать, у меня серьезных утечек не было, только мелочевка вполне очевидная, и поэтому не приходилось вдаваться. В голове держу только сам факт, что за этим надо следить.
345 1334295
>>34289

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


>>Мужик, здесь не С++, и в ногу себе выстрелить никак нельзя.



Да вы тут поехавшие какие-то. Если ты сам себе шлешь данные пост запросом, то никаких проблем нет. Если ты шлешь данные не себе с одинаковыми полями, то не надо так делать.
346 1334304
>>34295
Так данные шлешь не ты, а пользователь. А что он там тебе пришлет, одному богу известно.
347 1334306
>>34294

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


В нетбинсе последнем есть фича принудительного запуска сборщика мусора. И еще есть динамический счетчик памяти, занимаемой скриптом в рантайме.
348 1334326
>>34306
У тебя были серьезные проблемы с утечками? По какой причине смог выяснить? Интересно опыт в этом плане отличный от своего услышать.
.png38 Кб, 991x598
349 1334365
Поясните за текстовый редактор Атом? Где мой местный решарп?
350 1334372
>>34365
Автоподстановка из коробки работает только в IDE.
.png28 Кб, 689x447
351 1334373
>>34372
Анус поставил?
352 1334384
>>34373
Тащемта, анус затощен под анускрипт, он даже написан на нем. Поэтому треба ставить плагины. Хуевый редактор, если честно. Саблайм и брекеты уделывают его в два счета.
353 1334392
>>34384

> брекеты


Ух нихуя себе какая годнота, спасибо.
354 1334396
>>34384
А нет, не годнота. Судя по всему устарел на три года.
355 1334412
>>34260

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

>Никакого MVC там и в помине нет.


Вордпресс тоже MVC не имеет, а сколько сайтов на нём крутятся? Вообще, в веб с норм технологиями как-то не повезло, один говнокод повсюду.
357 1334434
>>34212
Каждую строку не надо комментировать, только методы\функции, ну и описания классов там, или файлов, немножка - одной строкой. В сам алгоритм вообще лазать не надо, если он написан нормально и работает. Зачем его комментировать?
thedevilgodareraginginsideme.jpg448 Кб, 1024x903
358 1334481
!http://([a-z0-9.-]+)(/\\S+)?!
Аноны, у меня вопрос по этому выражению. Я смотрю на часть шаблона "http://([a-z0-9.-]+)" и интерпретирую его следующим образом. После двух слешей есть один из указанных в квадратных скобках символов, и за ним может следовать любое количество равно таких же символов или не следовать вообще ничего. То есть, строки типа aaa, 11, --------, но не ab--1 или georgebush. Я верно размышляю? И, если да, то зачем [a-z0-9.-]+ заключать ещё и в круглые скобки? Они же содержат установленую последовательность символов. А в конкретно этом случае они ничего не поменяют. Или?
359 1334488
>>34481
Проверил такой код:

<?php

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

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

echo var_dump($empty);

?>

Выдал "amgee". Как-то я не допираю. Как вообще функция сканит текст?
360 1334491
>>34488
В общем, делаю вывод, что [characters_list]+ просто совпадает с любой строкой, в которой есть символы, которые содержатся внутри скобок. Не важно в каком порядке и каком количестве - главное, чтобы был хотя бы один символ. Это показалось мне странным, потому что я думал, что из квадратных скобок выделается какой-то один символ, если после них не стоит никакого кватификатора. А добавление плюса просто означает, что именно один из указанных символов может повторятся любое количество раз. Но это будет другая конструкция - ([characters_list])+
Сложно уложить это в голове почему-то.
361 1334516
>>34491
Совет всем на будущее и тебе тоже.

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

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

3. Будьте благоразумны. Если не получается решить задачу, отдохните и попробуйте решить ее снова. Погуглите. Не целесообразно спрашивать ответы здесь сразу. Кайф от самостоятельного решения задачи, хоть и с гуглом, не сравним с банальной вычиткой ответа из треда.
362 1334613
>>34516
preach, brother
Снимок экрана2019-01-2516-41-45.png12 Кб, 381x212
363 1334621
Не знаю, куда написать, напишу сюда. Меня в вузе учили, что у программы и подпрограммы должна быть одна точка входа, одна точка выхода, один тип возвращаемого значения. Что же я вижу в пыхе? Пикрилейтед.

Зачем здесь нужны тайпхинты вообще, если одна и та же подпрограмма может вернуть кучу разных значений?
364 1334626
>>34621
в идеологии структурного программирования под единой точкой выхода подразумевается введение оператора return и запрет (либо использование только в необходимых случаях) так называемых "длинных переходов", аналогов setjmp/longjmp в си
те формально фции php уже соответствуют этому требованию
.jpg17 Кб, 620x231
365 1334628
хачу сделать парсер юзеров одного сайта вот только есть одна праблема
ПАЦАНЫ КАК СПАРСИТЬ ЭТУ СТРАНИЦУ ШТОБЫ ЗАДЕЙСТВАВАТЬ ВОТ ЭТАТ ПАРАМЕТР 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/');

ШТО ДЕЛАТЬ? НАУЧИТЕ И ПАМАГИТЕ ПАЦАНЫ
366 1334637
>>34626
бля, это же php тред!
не заметил и отписался
я теперь зашквареный, бля
не отмытся перед пацанами
367 1334646
Зачем в абстрактном супер-классе нужен конструктор?
Он нужен для того, чтобы его можно было вызвать у классов-потомков?
368 1334647
>>34646
Или не вызвать, как захочешь. Ты можешь и не переопределять конструктор в дочерних классах. Или переопределить и насрать на базовый. Видал как много вариантов?
369 1334651
>>34647
Проиграл в голосяндру.
370 1334653
Аноны, я щас почти дописал свой велосипед (легкий мвс-фреймворк для создания инет-магазина). Если я его выложу на гитхаб и приложу к резюме, насколько высоко повысятся мои шансы на то, что я найду годное место?
371 1334683
>>34653
Ну повыше станут - кодеры из контор хоть посмотреть смогут как пишешь. Это всё же лучше, чем наугад джуна брать.
372 1334686
>>34621
Неправильно утверждать, что функция всегда должна возвращать один тип. Функцию можно использовать как абстракцию данных. Она может возвращать другую функцию, которая в свою очередь не зависит от типа, и может возвращать разные типы, в зависимости от передаваемых аргументов.

В этом суть абстракции данных. Нам как и функциям, не нужно знать какой тип мы обрабатываемым. Мы можем обрабатывать разные типы одинаковыми функциями. Это дает универсальность и модульность. При таком подходе, не нужно переписывать верхние уровни абстракций, чтобы начать работать с новым типом. Достаточно изменить нижний уровень.
373 1334694
>>34686
Декларативный хаскеле-червь-пидор, ты опять выходишь на связь, ублюдок?
1548440520364.jpg105 Кб, 720x960
374 1334793
>>33833
Ну давай ублюдок, иди сюда, думаешь меня трахнуть? Я сам тебя трахну

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


Серьезно? Не помню точное количество. Ориентировочно 30-50. Перечислять тоже лень.

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


Первичное присвоение значения переменной.

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


Унарные: унарный плюс/минус, инкремент/декремент. Бинарные: +-*/%

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


continue

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


Поля непубличные, через геттеры.

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


Метод, вызываемый при инициализации объекта

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


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

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


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

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


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

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


А хуле бы нет, да.

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


Конечно, хуле нет.

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


Нельзя его перегрузить?

> 13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?


Хуй знает, в анонимных функциях надо все внешние переменные передавать через use. Таким извратом как создание анонимных классов не занимаюсь
1548440520364.jpg105 Кб, 720x960
374 1334793
>>33833
Ну давай ублюдок, иди сюда, думаешь меня трахнуть? Я сам тебя трахну

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


Серьезно? Не помню точное количество. Ориентировочно 30-50. Перечислять тоже лень.

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


Первичное присвоение значения переменной.

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


Унарные: унарный плюс/минус, инкремент/декремент. Бинарные: +-*/%

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


continue

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


Поля непубличные, через геттеры.

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


Метод, вызываемый при инициализации объекта

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


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

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


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

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


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

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


А хуле бы нет, да.

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


Конечно, хуле нет.

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


Нельзя его перегрузить?

> 13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?


Хуй знает, в анонимных функциях надо все внешние переменные передавать через use. Таким извратом как создание анонимных классов не занимаюсь
375 1334795
>>34793

>Ориентировочно 30-50.


Я вчера нагуглил. И уже забыл. Около 70. Почти все реально в памяти не держатся, постоянно используемых гораздо меньше (и от конторы к конторе может разниться то, основной или альтернативный синтаксис юзается).
376 1334803
>>34795
А, ну в пыхе же ещё куча всякой хуиты уровня endfor и т.п.
Тогда возможно.
Лол, зато я помню, что в Go около 30 ключевых слов
377 1334813
>>34396

> устарел на три года


>Последняя версия 1.13 (18.06.2018)

14148698996280.jpg33 Кб, 720x481
378 1334819
Читаю мануал от ОПа, появился вопрос по циклам (точнее, по математике внутри echo). Пишу такой код:

<?php
error_reporting(-1);
for ($x = 1; $x<=10; $x++) {
echo "{$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 рубля.
379 1334821
>>34819
У макабы свои правила разметки, которые сильнее пыхи, но код работоспособный, I promise.
380 1334835
>>34793

>Унарные: унарный плюс/минус, инкремент/декремент. Бинарные: +-*/%


Аллилуйя, хоть кто-то ответил правильно.

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


Неверно.

>Хуй знает, в анонимных функциях надо все внешние переменные передавать через use. Таким извратом как создание анонимных классов не занимаюсь


Да по тем же правилам, что и к обычной переменой.
381 1334844
>>34819
С этим разобрался, теперь другой вопрос возник. Как в один цикл впихнуть 2 действия? Например, если есть 2 переменные, и если одна переменная меньше 100, то прибавить 4 к ней, а к другой прибавить 1?
382 1334846
>>34844
Не пихай в определение цикла такие вещи. А так через запятую 1 и 3 секция фора делится на действия.
383 1334852
>>31405
Ушёл из сервисного центра в пыхокодеры где-то три четверти года назад.

Сложно, но учиться всегда сложно.
384 1334860
>>34846
Спасибо, помогло. Действий сколько угодно можно добавить, надо полагать?

>Не пихай в определение цикла такие вещи


Это не я, это всё ОП! Я просто повторяю, что в мануале написано.
385 1334862
>>34846
Асмобляди вообще делают так:
for(;;) {
тут какой-то код
условие прерывания
}

Так что не надо тут.
386 1334865
>>34862
Я в курсе, что это можно. Дальше то что? И вообще любой цикл можно описывть через (другой цикл) while(true) или тот же for (;;), только в теле придется побольше написать. Это не значит, что это пиздец хорошая практика и погнали так делать все и всегда.
387 1334870
>>34865
Просто так нагляднее. Видишь фор, ага, значит цикл, смотришь, что происходит за одну итерацию, так, тут инкрементится, тут складывается, тут ансеттится, тут условие, хуе-мое, а в случае с фор (что-то;что-то;что-то) смотришь что и где, примеряешь каждую итерацию к условию, мысленно прогоняешь итерацию за итерацией и в какой-то момент говоришь: так падажжи ебана.
388 1334880
>>34870
Я так то ему посоветовал в случае фор использовать только счетчик в определении, все остальное в теле цикла для читаемости (возможно за редкими исключениями), а не добавлять туда всю кучу счетчиков и условий из тела цикла, хоть это и возможно. Он для того и создан, чтобы банальный счетчик итераций из тела вынести, вот пусть так и используется. Для других случаев другие вещи подойдут.
389 1334891
>>34880
Да ты прав, конечно, просто я поспорить люблю.
390 1334902
>>34880
Ты не прав. Нужно опираться на логику, а не на твое "Я сказал". Если нужно использовать составное выражение, то нужно использовать составное выражение. Выражения никогда не засоряют код, а вот лишние инструкции еще как. Цикл все равно будет в функции, будет скрыт, один раз написал и все. Потом используешь функцию как хочешь.
391 1334914
>>34902

>Нужно опираться на логику, а не на твое "Я сказал"


Я этого и не говорил.
392 1334954
>>34227
Не размещай кучу классов в одном файле. Один класс - один файл.
393 1334962
Аноны, доброго времени суток, только вкатился. Решаю задачки вот. Подскажите я сильно хуёво тут написал? Заебался голову ломать, не варит нихуя.. До этого задачки не вызывали особых затруднений, а тут с этими строками пизда
https://ideone.com/q3MrtH
Надо написать программу явл палиндромом.
С этими mb функциями пиздец просто в голове и массивы, и циклы и условия, ебись они конём с этой задачей нихуя не выходит. Целый день блять эти задачи решаю.
Заранее благодарю. Соре, пригорело.
394 1334984
>>34954
Пфф, кто сказал что так нужно делать? Чепуха какая то.
395 1334986
>>34962
Не годится. Создай функцию, которая будет принимать строку.

Прежде чем решать, расписывай алгоритм на бумажке. Эта техника очень помогает.
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
397 1335027
>>35016
Ни один. Что ты хотел показать и что хочешь сделать вообще? Если изменить глобальную переменную, то это антипаттерн.
398 1335030
>>34986

>расписывай алгоритм на бумажке


Да зачем бумагу переводить? Прямо так пускай и пишет в редакторе:
// инициализировать переменные

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

// и т.д.

А потом по этому скелету собирает.
399 1335032
>>35027
Два разных способа сделать одно и то же. Спросил, какой предпочтительнее. Выходит - вообще нельзя менять по нормальным правилам? Тогда зачем существует ссылка на переменную?
400 1335076
>>35030
На бумаге намного эффективней. Лучше использовать блок-схемы. То что ты написал - птичий язык. Он не формализован. По нему составить нормальный алгоритм невозможно. Для алгоритмов есть специальные формальные языки, - блок-схемы например.
401 1335079
>>35032
Непонятно что ты делал. Учись подробно и четко объясняться. Чем лучше будешь объяснять, тем точнее получишь ответ на вопрос. Попробуй еще раз.
402 1335116
>>35016
Зависит от того, что ты хочешь. В первом случае глобальная переменная изменится после вызова функции, во втором - нет.
403 1335249
Что делать, если мне надо возвращать несколько разных значений из метода?
Есть группа однотипных методов, которые принимают одинаковый параметр и возвращают один из возможных вариантов ответа.
Переписывать не вариант, уже пробовал, на архитектуру лучше всего ложится вариант, когда методы могут возвращать разные значения.

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

На какой стул сесть?
404 1335404
Привет, аноны. Начал немного осваивать PHP по учебнику из ОП поста. Прошу, подскажите, что делаю не так? Готовое решение не хочу, хочу сам понять, где обосрался. https://ideone.com/VGi2VJ. Заранее благодарю.
406 1335433
>>35116
И во втором изменится - он импортировал её.
407 1335448
408 1335517
>>31378 (OP)
Анончики, вопрос по регуляркам.
Задача с проверкой номеров телефона
Сделал первую часть: ^(\s?(\+\s?7|8))
А потом, в книге пишут:

>за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробелов


Как это сделать? 10 цифр это понятно: [0-9]{10}
А как сделать, чтобы между ними учитывались скобки, пробелы и минусы? Можно ли как то это сделать за один раз, либо придется что то типа: сначала идут 3 цифры, потом возможно скобка или пробел или минус, потом еще три цифры и опять может пробел или минус и т.д.?
409 1335533
>>35517
Вот такая регулярка получилась, не понял, можно ли сделать так как говорили в подсказке к заданию
^\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 строчка, либо тиру, либо скобки?
410 1335755
Ебанутые, блять, тред до бамплимита за неделю угандошили.
411 1335758
>>35533
Короче сделал увот так вот ^\s?(\+\s?7|8)([\s-\(\)0-9]*)$
Но теперь выделяется вся строка(то есть не только номер телефона, но и вся строка), но сократил как смогпросто увидел регулярку из четвертой части
412 1335762
>>35405
Во-первых, какие <br/>? Это же не html, хотя не знаю, может в php тоже так можно, но все равно используй \n
Ну и твоя функция ничего не возвращает. ТО есть ты не используешь return
413 1335769
>>35762
\n работают только в cli, а он в браузер выводит. Там только <br> работают.
414 1335780
>>35769
В командной строке? Ты троллишь что ле? У меня по этой ссылке https://ideone.com/VGi2VJ выходит <br/><br/><br/> и все. Если изменить его на \n он работает
415 1335802
>>35780
Потому что айдеон парсит код перед выполнением и заменяет все \n на <br>, а <br>, написанные тобой выводит, как есть, вот и работает. Такая вот имитация реальности. Как в VR-шлеме.
416 1335808
>>35802
Это не ты тот "особенный", который говорил, что ООП не нужно?
417 1335810
>>35808
А что, похож? Нет, к счастью. Я тот, кто спорил с ним по другую сторону баррикад.
418 1335820
>>35808

>"особенный"


Как завуалированно ты указал на слово "шизик".
419 1335991
Супец, братаны-пыханы. Есть у меня поля в таблице, некоторые заполняются сразу, некоторые потом. Есть также поле с датой и временем. Как только я записываю данные в незаполненные ячейки строки, то дата с временем обновляются. Как сделать так, чтобы была обновлена только та ячейка в таблице, в которую идет запись?
420 1336156
ОП, а зачем ты советуешь местным макакичам учить pdo? Пусть сразу учатся в ORM разбираться. Это проще намного и используется в проде повсеместно. То есть практически применимо.
kateesnameyarik1.png16 Кб, 517x529
421 1336194
Аноны, есть вот такая структура.
обертка( другая_обертка( какой-то_метод() ) );
Обертка лежит в одном классе и передает данные в другую_обертку, которая лежит во втором классе, и она уже запрашивает данные у метода из того же (второго) класса и возвращает первой обертке в первый класс.

Мне нужно из обертки вызвать какой-то_метод, причем, заранее неизвестно, какой именно это метод.
Может можно как-то передать сигнатуру метода в другую_обертку, чтобы она с ее помощью вызвала этот метод?
Возможно такое в php?
8.png34 Кб, 512x512
422 1336242
https://ideone.com/RjqkmC
Никак не могу понять, почему у меня буква w меняется на заглавную. Помогите сообразить, пожалуйста. Хочу обойти ucfirst()
423 1336267
>>36242
А что не так? Ты разбираешь предложение по знакам препинания и делаешь каждую первую букву заглавной. Перед w у тебя точка. W - начало нового предложения.
424 1336277
>>36267
w в слове download. Там o перед w.
425 1336293
>>36277
str_replace заменяет все вхождения, переданные первым аргументом. Первый аргумент у тебя w, соответственно функция заменяет все w в строке $sentence на toUpperCase(w). Очевидно же, анониус.
3.png37 Кб, 512x512
426 1336296
>>36293
Моё увожение. Благодарю!
427 1336421
Есть в php хорошие встроенные итераторы деревьев?
428 1336422
Поясните вот за что. Раньше я точно помню как кодеры на пхп гордились отсутствием типизации и говорили всем (в том числе и мне) что она нахуй не нужна и будет отмирать во всех ЯП. А теперь я читаю что в версии пхп 7+ ввели типизацию и даже выделили её как основную фишку пхп этой версии. Собственно, когда произошла смена коней и как отреагировало ваше комьюнити? Как быстро вы переобулись из одного лагеря в другой и какие оправдания себе находите?
429 1336424
Ребята, как вы тестируете авторизацию?
430 1336425
>>36422
Шизик, кто знает что тебе там показалось на заре твоей болезни? Никто не должен перед твоим манямиром оправдываться. Просто пей таблетки, которые врач прописал.
431 1336431
>>36422
А с чего ты взял, что это одни и те же люди? На пыхе типизация не обязательна, можешь юзать ее, а можешь и не юзать. Можешь юзать частично. Вариантов масса. Да и к тому же, насколько я понял, указывать типы в пыхе это все равно что вставлять палки в свои колеса. Толку от них, все равно, если не укажешь тип - нихуя не произойдет, просто ошибка не выкинется.
432 1336443
>>36422
Знал такого одного, но он вообще не очень был и все на массивах делал и методах по 1к строк. Типизация так то не обязательная, типа пиши как хочешь, хозяин барин. Хотя по хорошему обязательная во всех случаях, кроме тех, где нестрогость предусматривается логикой. Да и то эта тема доступна только в сигнатурах методов (хотя за версии типа 7.3 не в курсе изменений).
433 1336451
>>36443
Сижу на 7.3, никаких изменений в отличие от 7.1 не заметил.
434 1336480
>>36431

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


ты всё неправильно понял

Вообще, типизация, лучшая вещь, которая случалась с пыхой за последние 5 лет.
В версии 7.4 добавили типизацию переменных класса при объявлении.
Новичкам советую приучаться и юзать всё с типами.
435 1336517
>>34217
Tut nikto ne yzaet dreampidor ili bootsthui. Dlya wseh uje dawno izobreli CSS Grid.
436 1336602
>>33694
>>33692

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

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

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

В общем, я запутался. Помогите разобраться, пожалуйста.
438 1336684
>>36480
Плохое я время выбрал для своего проекта. Каждые пару месяцев приходится с версии на версию перекатываться.
439 1336686
>>36684
Помоему гдето раз в полгода-год минорка выходит, и перекатываться не обязательно так сразу.
440 1336702
>>36686
Что еще за минорка?
441 1336704
>>36702
На примере:
7.2
7 - мажорная версия
2 - миноная

Есть еще циферки дальше, но это лирика.
442 1336737
>>36704
А откуда пошло такое именование? С чем это связано?
443 1336750
>>36737
Я тебе только из головы могу сказать, а я нихера не шарю совершенно, кроме как на мажорку с миноркой ориентироваться, остальное не самое каждодневное.
Ну вот есть такая довольно общепринятая модель нумерования версии. Мажорка с миноркой понятно. Первая - это финиш, практически новый проудкт, вторая тот же продукт, но другое апи. Далее идут сборка и ревизия. Стадия кучи багфиксов так сказать и мелких правок. Сборка - это уже законченные билды, такие себе патчи с множеством фиксов, которые пользователям той же винды подсовывают под видом "нужно обновление" на минутку. Ревизия - тестовые билды конкретной сборки. Типа 3 билд 1452 ревизия означает билд номер 3 и 1452 ревизии этого билда хер знает кем, должно быть контролем качества.
Так то это не закон, иначе бы в школах учили, но полезно хотя бы первые две цифры нормально читать. Остальные уже при углублении.
444 1336778
>>36750
Я ничего не понял, что ты написал. Шизофазия какая-то. С термина на термин прыгаешь. Тебе никогда не говорили, что ты не логичен?
445 1336780
>>36778
Допускаю. Эту хуйню легко загуглить можно, не обязательно мой бред слушать.
446 1336928
>>36702
>>36750
Гуглите семантическое версионирование: https://semver.org/lang/ru/#вступление

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

>>36684
В PHP очень медленно и лениво добавляются изменения, для обновления минорной версии достаточно пару строк в проекте поправить (переводил проекты через 7.0 -> 7.1 -> 7.2). Конечно, при условии, что deprecation warnings исправляются сразу же. Это не JS, где каждые полгода проекты переписываются на новом стеке / фреймворке.
447 1336989
>>36928

>может твои данные устарели лет на 10.


Я так смотрю - пол интернета судит пхп по версии 10-летней давности. Что самое забавно примерно столько же легаси говна на нём уже налепили.
448 1336999
>>36989
Я тебе больше скажу: не все знают, что вышла 7 версия, и до сих пор продолжают лепить проекты на 5.6 версии по привычке.
449 1337037
>>36999

>не все знают, что вышла 7 версия


Как можно назвать человека, который в своей профессиональной деятельности не следит за индустрией?
450 1337062
>>37037
Да никак. Гонка за новым это дело молодых.
451 1337204
>>37062
А ты пенсионер что ли, с паркинсоном и амнезией?
Давай не будем оправдывать свою лень и устаревший говнокод возрастом.
someApprentice 452 1337215
Некропостинг

>>31410

> Биология имеет мало общего с техническими науками, и инженерией.


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

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

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

>>31431

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


Всё с точностью да и на оборот.

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

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


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

Мастерство заключается в умении правильно применить те или иные плюсы и минусы.
someApprentice 452 1337215
Некропостинг

>>31410

> Биология имеет мало общего с техническими науками, и инженерией.


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

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

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

>>31431

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


Всё с точностью да и на оборот.

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

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


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

Мастерство заключается в умении правильно применить те или иные плюсы и минусы.
someApprentice 453 1337226
>>31749
>>31762

>Аноны, а просто любопытно, как вы читаете тред?


>Добавлен в избранное двача.


This.

>И как находите ответ на свою задачу если ОП часто их проверяет только несколько дней спустя, и за этой время успевают запостить 300-400 постов?


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


Специально для таких случаев уже позаботились об этом - на сайте https://phpclub.tech можно получить конкретную цепочку обсуждения в течении всех тредов!

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

https://phpclub.tech/pr/chain/1331762/
454 1337228
>>36656

Алгоритм работы 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 455 1337267
>>35249
google://php multiple return declaration
https://stackoverflow.com/a/37033355
someApprentice 456 1337270
>>35991
Покажи код и конкретно опиши проблему.
someApprentice 457 1337272
someApprentice 458 1337282
>>36424

>Ребята, как вы тестируете авторизацию?


https://github.com/someApprentice/Portfolier/blob/master/tests/AuthorizationTest.php

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

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

https://gist.github.com/codedokode/a455bde7d0748c0a351a
459 1337322
>>35448
Ты сам-то запускал что понаписал там, оно же, блядь, банально не работает! ОПу еще и дебажить за тебя что-ли?
Никто не обязан твоё говно разбирать, а на галере тебя за такое ебать грязной шваброй будут. Приведи код в порядок и рабочее состояние, чтобы смотреть приятно было. Имей уважение к своему труду и чужому времени, дружок.
someApprentice 460 1337361
>>37322
Свой негатив можешь оставить в /b/, а здесь люди пытаются научиться программированию на своих ошибках.

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

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

>Ты даже не указал где конкретно ошибка


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

>Свой негатив можешь оставить


А ты мне рот не затыкай, фашист.
someApprentice 462 1337373
>>37370
Я ожидал что разговор с такими эмоционально неуравновешенными будет бесполезен.
463 1337381
>>34227
бамп
464 1337383
>>37373
Пыхыпыдебил - это хуже всего вообще, даже хуже червя-пидора.
Чему ты, гнида, наглядная иллюстрация.
465 1337387
>>37373
Дружок, ты выложил свой код на оценку - его оценили так как он того заслужил. Он не работает и тебя заслуженно обосрали, отчего ты начал обвинять просмотревшего в неуравновешенности. Заказчику ты тоже такое скажешь?
someApprentice 466 1337389
>>37387
Да.
467 1337390
>>37226
Спасибо за ссылку, ОП. Благодаря тебе я нашел свой первый пост от 2015 года, где приложил скриншот своей первой имиджборды на html+php, такая-то ностальгия.
someApprentice 468 1337391
>>37390

>Спасибо


Пожалуйста, теперь иди нахуй.
469 1337392
Подскажите пожалуйста:
есть кусок кода, который должен выполнятся только первый раз. при перезагрузке страницы ничего не должно выполнятся.
470 1337393
>>37389
Было бы забавно посмотреть, когда у заказчика падает весь магазин китайских поддельных сумок из-за такого вот кода в твоём плагине, а ты ему в ответ про неуровнавешенность лекции читаешь.
471 1337395
>>37392
В куках ответ сей можно найти.
472 1337396
так много работы и почти нет конкуренции пхп зоотая жила прям, серьезно
someApprentice 473 1337397
>>37393

>неуровнавешенность


Ты эмоционально порвался неуравновешен.
someApprentice !EaaiHmIJms 474 1337401
>>37390
Я не, ОП. Я основоположник этого сайта и всего лишь учусь у него.

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

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


P.S.
На этом можно прекратить флуд.
475 1337402
>>37397

>Ты эмоционально неуравновешен.


Тебе показалось.
А вот ты неуважаешь ни свой труд, ни время других людей и вообще мудак по жизни, судя по треду - твой код ОП уже проверял, так ты, сделал минимальные правки и опять код-ревью на нерабочее говно просишь. Ты совсем шынгыс?
476 1337406
Хватит флудить. Код будет проверен, просто чуть позже.
someApprentice 477 1337410
>>37401

>Я не, ОП


>Ахахахах


>голосые


>)))


Ясно.
>>37402
У тебя неуравновешенность, не способен помочь - проходи мимо
someApprentice 478 1337412
>>37406
Не указывай и не оправдывайся а лучше пройди нахуй
479 1337422
>>37401

>Я основоположник этого сайта


Абу, иди нахуй.
480 1337471
Наверное, этот вопрос тут уже тысячу раз задавали, но я задам еще раз. Зачем в php нужно деление на статичестие и не статические методы? В чем между ними разница? Я ведь могу обращаться к методу через экземпляр или напрямую через класс, какая разница?
481 1337475
>>37471

>В чем между ними разница?


Если по простому - их можно ползовать без инициализации объекта. А ещё они выдаются в единственном экземпляре на все объекты этого класса, что иногда удобно и позволяет не размазывать функционал по приложению.
482 1337479
>>37475
То есть если я вызову нестатический метод в одном объекте, то он повлияет только на него, а если статический вызову из класса, то он повлияет на все?
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' будет в кавычках. Что я делаю не так? Не гуглится нихуя
484 1337493
>>37481
Байнды лучше всего избегать, это сильно усложняет восприятие кода.
485 1337502
>>37481

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

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

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

>>37493

Не сказал бы. Хотя тут правильнее использовать bindValue, bindParam используется для двухстронней привязки, когда данные из БД заносятся обратно в переменную.
486 1337505
>>37479
Статические методы из вызываются не столько из объекта, а из класса, вроде бы, и доступа к внутренним полям конкретного объекта у него нет, только, опять же, к статическим полям класса.
Ну сам напиши да попробуй, недолго ведь.
487 1337508
Что такое фронт контроллер? Это точка входа в приложение типа index.php или вызываемый в этом индексе главный класс приложения App, от которого танцуют все остальные классы?
488 1337510
>>37505
Впервые слышу об этом. Я могу получить доступ к полям класса из статического и из нестатического метода.
489 1337514
>>37481
Я вчера вот точно с такой же хренью сражался. В итоге плюнул и написал костыль сортировки через switch, который ORDER BY тупо соединяет с нужным значением. Думаю меня за это обоссут.
490 1337518
>>37510
А у меня вроде не получалось - писал, что-то в стиле "нельзя использовать этот метод\ссылку в таком контексте", хотя могу путать - давненько дело было.
491 1337521
>>37508

>Это точка входа в приложение типа index.php


Говорят это. Я там обычно окружение настраиваю - ошибки, дебаг там, пшеница, рожь, вот это всё. Потом бутстрап.пхп подключаю и понеслася.
492 1337545
>>37521

>пшеница, рожь


Покушать-то.
493 1337548
А я вот думал, какая к черту разница, с ООП мы пишем или все в одном файле? Все равно интерпретатор превращает наш код в лапшу, выполняя строчку за строчкой
494 1337550
>>37548
Важно понять процедурную абстракцию (функции). Это основа. И обязательно функции высшего порядка.
495 1337558
Laravel or Symfony?
496 1337559
497 1337562
>>37559
стагнация и за рубежом не востребован
498 1337563
>>37558
Ну, смотря что ты хочешь сделать. Можно наугад просто выбрать или же взять и прочитать то, что пишут в интернетах.
Взять можно фреймворк посложнее, если тебе нужно не просто очередной магазин запилить: делаешь фреймворки, которые отвечают твоим задачам, запоминаешь стек фреймворков и расписываешь все плюсы и минусы. Так и сравниваешь потом плюсы и минусы и потом, если тебе нужна какая-то киллерфича, ищешь ее и выбираешь фреймфорк исходя из нее. Размер фреймворка и его архитектура элементов на стиль твоего кода не влияют.
499 1337564
>>37548
А ЦП вообще побитово всё воспринимает. Может обратно на перфокарты вернёмся?
500 1337572
>>37564
Не совсем. 32-х или 64-х битные команды.
501 1337575
ну чо суки, объясняйте нахуй. Вкатился я в это ваше ебливое php. Вторую неделю дрочу этот "учебник" для дурачков от ОПа. Ебать то ли я такой "индивид", то ли ОП ебанутый. В этом нахуй учебнике, по-моему может быть ограниченному мнению-нихуя не понятно после массивов. Я уже неделю вешу, вроде бы что-то понимаю и блять опять нихуя не понимаю. У меня ща пукан в файер шоу превратился. Может ещё кто-то какие-то лёгкие гайды распишет? Или ресурс какой подкинет.
502 1337577
>>37572
Там минимальный вычислительный элемент - транзистор. Нет там никаких команд на таком уровне. Один набор нулей с единицами - одна команда, другой - другая.
503 1337578
>>37575
hexlet.io
504 1337582
>>37575
Нет, нахуй иди.

Или научись у людей нормально помощь просить, долбоёб.
505 1337583
>>37582
погорячился, извини Анон.
506 1337584
>>37577
Архитектура ЭВМ имеет 7 уровней. Ты говоришь про один из нижних. А я говорил про уровень микроархитектуры.
507 1337587
>>37583
Что тебе именно непонятно? Строки, функции, регулярки?
В этом учебнике только азы, потом повеселее будет, с ООП и студент-листом, где ОП, вроде бы, объясняет, но нифига не всё, а скорее пинает в нужную сторону и катись сам дальше.
508 1337598
>>37587
На самом деле этот учебник просто сборник задачек с неплохим зазывающим началом. Остальное там хуита ненужная.
509 1337602
>>37598
Вполне нужная хуита там. Нужная и полезная. Уж точно лучше гугла, который до сих пор в поиске выдаёт советы от знатоков, которые через msql на БД ходят.
510 1337607
>>37587
В общем я вкатился с полным Nullем знаний, я прошёл задачки в темах Массивы, Циклы и Условия и всё до них. И у меня какое-то зависание теперь происходит. К слову я это именно задрачиваю, т.е. приходя домой с работы в 17.30, я ем и начинаю заниматься до 21-22, а потом намертво падаю до 6.20. И по новой каждый день. Так вот последние 2 дня, я просто нихуя не понимаю что от меня хотят в задачах, какие переменные и куда что засовывать. Я думаю, я просто заебался.
И, кстати учу я так:
1) Читаю гайд от ОПа
2) Мануал ПХП обязательно листаю по подходящей теме
3)Решаю задачи
4)Ищу решения в интернете и осмысляю их
А по факту последние 2 дня я выполняю 1, 2 и всё, даже не уверен что в голове что-то откладывается.
Стоило бы отдохнуть пару дней хотя бы от этого или продолжать тыкаться-мыкаться в эту закрытую стену?
511 1337609
>>37602
Так рабочий способ же. Низкоуровневый, но рабочий.
512 1337612
>>37607
Советую тебе просто умереть и не создавать мне конкуренцию, сидящему на шее у мамки и каждый день с утра до ночи пидорящему пыху и смежное.
513 1337613
>>37612
нахуя ты тогда пидоришь это говно? У тебя ж и так всё хорошо.
514 1337615
>>37613
Скажем так, я заглядываю наперед.
515 1337617
>>37607
Просто такие вещи требуют времени для понимания, если никогда раньше ничего такого не делал. Понимание машинной логики не всем сразу даётся: все эти циклы, ветвления, переменные. Просто дай себе время чтобы переварить инфу, не гони. Закинул себе тему новую, попробовал задачку - вышла\не вышла, но отдохни день-два, просто возвращайся иногда в мыслях к этой теме, обдумывай её и через пару дней увидишь как всё просто на самом деле. А сдуру и хуй сломать можно.
И поменьше эмоций - успеется ещё жопой пригорать к стулу.
516 1337646
>>37617

> А сдуру и хуй сломать можно.


Ненавижу эту фразу.
517 1337653
В чем разница между ошибкой и исключением с точки зрения фреймворков? Вот я начал ковырять один из них и вижу, что ErrorHandler обрабатывает не ошибки, а исключения. Разрабы опечатались просто или что?
518 1337655
>>37646
Держи в курсе.
519 1337660
Хочу сделать викторину, почти как "борьба умов" на телефоны, только в виде сайта. С чего начать? Какие темы гуглить?
520 1337661
>>37660
Ты хочешь чисто на эрудицию делать вопросы или на находчивость? Если первое, то обратись к вике, если второе у нас на дваче куча разделов с тематикой, откуда можно почерпнуть вопросов.
521 1337665
>>37661
Не про вопросы для сайт спросил. Интересно как реализовать сам сайт, я изучаю пхп всего 1.5 месяца, и понимаю только синтаксис, так же еще сделал по видеоуроку интернет магазин, но из него я пока подчерпнул знания с БД и не более. В общем интересна сама реализация.
Например я захожу на сайт и регистрируюсь или просто имею случайное имя типа "гость111", выбираю например сложность вопросов, ищу случайного оппонента либо играю с опредленным, статистика ответов, награды за победы и т.д.
522 1337673
>>37665
Это нахуй никому не надо будет, лучше что-нибудь полезное сделай.
523 1337684
>>37673
Это мне надо умник ебаный
524 1337710
>>37660
Ты понимаешь как сделать роутинг? Сессии, БД, вот это вот все изучал? Для такого сайта скорее всего нужно SPA.
525 1337726
>>37617
благодарю, анон! Так и поступлю.
526 1337732
>>37508

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

Когда все запросы проходят через Front контроллер и дальше уже направляются на обработку Page controller, контроллеру конкретной страницы.
527 1337764
>>37508
PHP рожден чтобы умирать. У него такая модель жизни приложения. Запустилось и умерло. Поэтому раньше делали роутинг приложения с помощью веб-сервера. Он запускал для каждого запроса отдельный .php файл.

Единая точка входа, это когда все запросы идут в один файл. А там запускается роутер, который вызывает нужные функции, в зависимости от запроса.
528 1337779
>>37502
Пиздец, спасибо аноне. В итоге просто сделал для сортировки разные препеиры. Но код пиздец раздулся
529 1337785
>>37764

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

ФП к этому не относится. В ФП пропагандируется не изменять состояние переменных. Но в базу писать нужно все равно, и запросы обрабатывать. Если каждый раз создавать соединение с базой, производительность будет плачевной.
532 1337798
>>37790

>Производительность при умирающем приложении очень низкая, 1000 rps потолок


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

>SPA как делать в таком случае?


И это тут совершенно не причем.
Для начала просто выясни сколько рпс тебе нужно. Потом поищи узкие места, если все еще актуально будет. 1к рпс в большинстве случаев потащит больше 10к пользователей одновременных. (цифры умозрительные, зависит от логики потому что, просто усреднил. в одной прилоге один пользователь может генерить в среднем 1 запрос за минуту, в другом может 10 запросов за секунду, не угадаешь) Уверен, что у тебя достигается нужная посещаемсоть для преодоления отметки в 1к рпс? Я просто не в курсе по твоему проекту, так что вполне может быть ты раньше времени паниковать начинаешь.
533 1337802
>>37798

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


Уже давно все протестировано. На хорошем i7 не более 1000 rps держит, при умирающем приложении.

>>37798

>И это тут совершенно не причем.


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

>>37798

>1к рпс в большинстве случаев потащит больше 10к пользователей одновременных.


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

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


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

>взять хотя бы интернет-магазин


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

>Каждый раз поднимать приложение?


Если не лень замерь именно сколько времени тратится на подъем приложения на разных фреймворках, интересненько будет посмотреть.
535 1337811
>>37806

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


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

>>37806

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


У меня все в порядке. Мне ничего фиксить не нужно.

>>37806

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


Я говорил о чистом PHP. С фреймворками оверхед еще больше.
536 1337812
>>37811
Ну тогда не поднимай каждый раз прилогу, раз сам для себя решил этот вопрос уже. Это возможно и легко гуглится, просто не так часто с этим люди работают и не думаю что ты помощь в этом треде найдешь особенную по этому вопросу.
https://github.com/walkor/Workerman
Вот как пример. Можно еще аналогов найти не мало.
537 1337823
>>37812
Я разве задавал вопросы? Я отвечал на вопрос. Ты вклинился и начал мне объяснять как у меня все неправильно и плохо.
538 1337826
>>37823
Ну блядь приехали, тогда не формируй ответ как вопрос.

>SPA как делать в таком случае?

539 1337833
>>37826
Это были наводящие вопросы. А не вопросы ответы на которые я не знаю. Если бы я тупо начал писать, что ты все говоришь не правильно, а нужно так и так, то это был бы не аргументированный текст.
540 1337835
>>37785
>>37764
>>37732
То есть фронт-контроллер это не один файл, а несколько?
541 1337846
>>37835
Вопрос не понятный. Сам по себе контроллер это не файл, а функция.
542 1337873
>>37617
Да всегда работает, лол, видимо с мышлением как-то связано, случается какой-то заклин на определенной метакогниции относительно задачи, откладываешь, возвращаешься и вуаля смотришь под другим углом или еще до решения озаряет.
543 1337971
>>37607
Затуп на 1000 лет
544 1337987
>>37846
Да понятно. Фронт-контроллер это точка входа приложения. Просто хочу понять, где эта точка входа: файл, куда направляются все пользовательские запросы или инициация всего приложения из этого файла.
545 1337991
>>37987
Ты можешь даже разные приложения дергать при желании. Вот фронт контроллер этим и занимается. Точка входа самое правильное описание для него, усложнять далее не обязательно.
546 1338016
>>37987
index.php например. Дальше за дело берется роутер.
547 1338085
Анон, который пишет свой фреймворк-велосипед, я думаю сделать к нему официальную документацию, комментарии и т.д. на русском языке и выложить это на гитхаб.
Как думаете, если очередные хабрадауны заметят мое поделие, то много вони поднимется из-за того, что я пишу доки на родном языке, а не на их любимом ангельском?
Также хочу кастомизировать обработчик ошибок и исключений, красиво оформить и национализировать для русскоязычного сообщества.
548 1338087
>>38085

>хабрадауны


Судя по движухе в этой клоаке дауны как раз таки тут.
549 1338095
>>38087
Почему?
550 1338097
>>38095
А ты сравни даунов, которые на хабре пописывают, может даже чегото достигают. С теми, которые тут сидят только ради анонимного перекидывания говном, которое ни одной живой душе не интересно. И все на свои места встанет. А так пиши, можешь даже статейку написать о своем поделии, не обязательно на хабр.Велосипедные темы довольно популярны.
551 1338122
>>37873
Это известный факт, что для обучения нужно время. В идеале ещё и не напрягаться и учить столько, сколько хватает от сессии до сессии и не больше, вот тогда ещё и удовольствие приносить начинает, что, в свою очередь опять улучшает и ускоряет понимание материала. А если напрягаешься во всю, да ещё при этом начинаешь замечать, что туго идёт как-то, то всё - приехали. Стресс, переключение внимания на себя, а не на предмет, потом складывается негативное отношение к процессу и человек ещё на подходе уже угнетать себя начинает. Ну и бросает потом - говно же, как в школе. А нужно именно увлекаться этим, как игрой. В конце-концов в наших тупых играх задачки ещё ебанутее встречаются, и ничего - хаваем.
Такая вот теория.
552 1338132
>>38097
Да это понятно. Тут в основном только новички-вкатывальщики сидят да какие-то трали, считающие себя ветеранами кодирования.
Спасибо за совет насчет статейки, буду иметь ввиду.
553 1338135
Пилите перикард.
15332186779700.jpg89 Кб, 720x682
554 1338160
>>34227
ОП, посмотри мой банкомат (не жадный, с перебором и ограничениями).
https://ideone.com/CRwVJY

Заранее спасибо!
555 1338203
>>38160
А почему не с классами? Опу это не понравится.
556 1338204
>>38203
А зачем делать с классами то, что проще и логичнее делать без них?
557 1338207
>>38204
Надо с самого начала учиться писать правильно.
558 1338210
>>38207

>Надо с самого начала учиться писать правильно.


Уа-ха-ха. Правильно это по твоему только с классами? Это называется ООП головного мозга. Классы нужны там где они нужны. PHP поддерживает ФП. Так что можно вообще без классов обходится если захочется.
559 1338223
>>38207
Почему бы тогда не давать практические задачки на классы, где они НЕОБХОДИМЫ? Ох вейт, таких задач не существует.
560 1338227
>>38207
Класс всего лишь абстрактный тип данных. Можно реализовать тоже самое другими способами.
561 1338232
>>38207
По сути классы дают не более чем модульность. Без классов можно достичь более гибкой абстракции данных.
562 1338252
>>38223

>Ох вейт, таких задач не существует


Любая, где количество строк больше 1к и много модулей.

Хотя >>38207 выразился немного коряво. Надо писать не "правильно", а "как все и не выёбываться", чтобы ты мог понимать что пишут другие люди и люди могли понимать что ты там накалякал. Хотя, конечно, люди вполне и в ФП пишут, но уровень у тех что пишет на ООП, как ни странно, выше.
563 1338257
>>38252

>"как все и не выёбываться"


То есть ООП головного мозга.

>>38252

>но уровень у тех что пишет на ООП, как ни странно, выше


Рассмешил. Тупее оопэшников никого нет. Извини если обидел, но это чистая правда.
564 1338262
>>38257
Толстый тролль томно прячет телеса.
565 1338264
>>38257
Неосилятор как есть.
566 1338265
>>38252

>Любая, где количество строк больше 1к и много модулей.


Никакой корреляции с классами нет. В ФП стиле, даже не так, в функционально-объектном стиле (без классов), можно писать приложения любого размера. И не угробить его, не запутаться в нем. На классах такое невозможно. На классах оно перерастет в банальное неподдерживаемое легаси. Код на выброс как говорится.
567 1338267
>>38262
>>38264
Под вашим ООП на классах (которое и не ООП вовсе) нет никакого формального фундамента. Тоже самое, но уже формализованное, можно реализовывать без классов. Что собственно и делают на таких языках, как например Лисп или Эрланг.
568 1338272
>>38265

>невнятный неаргументированный высер


Ясно.
569 1338275
>>38267
Шизик, ты?
570 1338282
>>38272
>>38275
Ну что, кто из вас в состоянии формализовать ваше ООП? Поднимите литературку что ли. Почитайте там, погуглите. Кое что есть по этой теме. Исследования ученых имею ввиду. Только вряд ли вы вообще про это знаете. Вы же как зомби твердите одно и то же "абстракция, наследование, полиморфизм". На уровне формальной модели там совсем другие формализмы вообще то.
571 1338290
>>38282
Шизик, уймись - всем похуй на твои исследования. Скажи психиатру чтобы таблетки тебе сменил - эти тебя не берут уже. История определили место твоему ФП - у параши, а ты всё не уймёшься. Пришёл в тред ЯП, который не для ФП впринципе, к новичкам, и агитируешь тут свой бред. В других местах тебя уже обоссали, как я понимаю, а то и солёных залуп за щеку натолкали.
Ты смешон и жалок, пойми это.
572 1338296
Что означает строчка
if (getBool('huita') && getBool('pizda') & ( HUI | GOVNO | MOCHA)) {}
?
573 1338297
>>38296
Говнокод.
574 1338298
>>38252

>Надо писать не "правильно", а "как все и не выёбываться"


Лучше таки понимать, что ты пишешь и зачем, а не просто делать как все.
575 1338301
>>38298
Таки про понимание там дальше по тексту.
576 1338302
>>38301
Даже близко не то понимание, о котором я говорил.
577 1338305
>>38302
Начинается.
578 1338310
>>38301
Где про понимание? Опиши формальную модель ООП. Вот ты говоришь с математиком, пытаешься объяснить ему ООП. Как ты это будешь делать, какие формализмы использовать?

Если ты всерьез говоришь, что ООП это что-то имеющее смысл. Так опиши это на языке математики. Если не можешь, то грош цена твоему ООП, и слова твои получаются пустые.
579 1338315
>>38290
Вся суть оопэшника - жопно-сортирный язык речи.
580 1338316
>>38310

>Где про понимание?


В посте, шизик.
581 1338318
>>38305
Что начинается? Я лишь сказал не копировать бездумно, чтобы получилось как "у всех", с такого ничего хорошего не получится. Именно эта чушь про копирование выше и была высказана, или ты не достаточно ясно выразился. Такие копипастеры без понимания хуже чумы, прикрываясь несуществующим пониманием такую херню наделают, что мама не горюй.
>>38310
Не лезь, псих, тут не о твоих галюнах разговор.
582 1338320
>>38318

>Что начинается?


Передёргивание.
583 1338325
>>38310
Так всё просто.

Традиционные в современном понимании ОО-языки (Java, C# и т.п.) - это просто языки с системой типов с поддержкой subtyping'а. Вот и всё описание.
584 1338341
>>38325
Пфф. И все? Какое то бурчание под нос. На большее я конечно не рассчитывал.

Любая вычислительная модель должна быть описана. Машина Тьюринга, Машина Поста, Лямбда-исчисление, - все это описано формальным языком. Где модель ООП?
585 1338344
>>38341
Когда сейчас говорят про системы типов, обычно подразумевается, что речь идёт именно о типизации лямбда-исчислении.

Если про конкретику, то обычно системы типов ОО языков моделируются каким-нибудь тем или иным расширением System F<:
586 1338346
>>38344
Какое отношение Лямбда-исчисление и System F имеет к ООП на классах? Опять похоже на невнятно бурчание.
587 1338349
Пыха норм поддерживает шестнадцатиричную систему счисления?
588 1338350
>>38346
Прямое. Ты можешь большинство языков с классовым ООП таким образом смоделировать.

Открываешь TaPL, главу 18, там прямым образом показано, как это можно сделать.
589 1338352
>>38350
Чувак, ты в каком вузе учился? Как стать таким же инженегром, как ты?
590 1338359
>>38350
Вот это уже конструктивный разговор. Если еще есть похожие книги по теме, напиши, хотелось быть почитать.
591 1338363
>>38359
Именно отдельных книг посвященных целиком ООП и связанную с ним теорию типов я не вспомню. А вот статей на том же arxiv'е и т.п. куча. Из относительно интересного что мне попадалось, можно посмотреть DOT-calculus от Одерски, формальное основание для Scala 3.

А если просто про теорию типов, то можно начать с того же TaPL (после него ещё иногда советуют в ATTAPL от того же автора заглянуть), а дальше пойти в сторону зав. типов и пруверов на них (обычно советуют The Software Foundations) и HoTT (тут прям одноименная книга)
592 1338366
>>38363
Понял, благодарю. От себя добавлю кое-что, что хотел прочесть, но руки не доходили. Может кому интересно будет почитать.

Труды Луки Карделли, который занимался формализацией ООП, в частности статья http://lucacardelli.name/Papers/TypeSystems.pdf
Бертран Мейер Объектно-ориентированное конструирование программных систем, где он также ссылается на Карделли https://www.ozon.ru/context/detail/id/2336754/
593 1338369
Еще одна статья Карделли, более ориентированная на ООП http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf
594 1338376
>>38366
В TaPL достаточно много ссылок на Карделли, как раз в тех главах, где заходит речь о ООП. Ну и TaPL, это прежде всего, учебник, поэтому там по сравнению с оригинальными статьями сильно более разжеван материал.
Задача про банкомат 595 1338388
Аноны, в треде есть комментарии троллей, либо не отвечайте на них, либо отвечайте спокойно и рассудительно - троллям от этого становится скучно.

>>38160

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

Решение задачи про размен с неограниченным числом банкнот есть тут: 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;
}

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

>>38160

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

Решение задачи про размен с неограниченным числом банкнот есть тут: 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 596 1338394
553-595

>>38349

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

>>38310

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

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

>>38296

& и | это битовые операции, почитать можно например тут: https://ru.wikipedia.org/wiki/Битовые_операции

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

>>38290

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

>>38267

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

show me the code

>>38232

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

>>38223

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

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

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

>>38203

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

>>38135

Рано, еще не всем ответили.
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? Или тут имеется ввиду, что твои познания должны быть настолько глубокими в программировании, что они легко лягут на любой язык, и остается вопрос только в изучении синтаксиса?
599 1338461
>>38352
Мало в каких вузах хорошо дают теорию типов, если ты про нее интересуешься. Но это относительно простая тема, её при желании можно спокойно самостоятельно освоить. Нужно только немного логического мышления и отсутствие страха перед математическими обозначениями.

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

Поэтому, достаточно только хоть как-то знать по языку из каждой группы и дальше учить новые будет очень быстро и просто. И в целом советую быть полиглотом в плане ЯП,это сильно улучшает кругозор и учит приемам из кучи разных парадигм и подходов.
600 1338462
>>38431
Не стать профессионалом, а овладеть 2 языками за несколько недель. Это вполне адекватное требование. Оно отсеет тех, кто учил языки, но не понимал их сущность, парадигмы на которых они основаны. Те кто зрят в корень, учат не языки а парадигмы. Они таки могут овладевать языком за несколько недель.
601 1338483
>>31378 (OP)
Аноны, помогите плз как сделать чтобы поле "Комментарий" было скрыто, если оно пустое
602 1338494
>>31378 (OP)
Сап, аноны. Хелп.
Есть вакансия младшего программиста баз данных. Требований там нет(кроме голода новых знаний). Так вот хочу попытаться туда устроиться. Но в Преимуществах:
Опыт написания запросов SQL
Опыт разработки приложений баз данных на любых языках/субд
Опыт составления тестовых кейсов(что это?).
Там же есть вакансия PHP программиста, но в требованиях там опыт от двух лет. Поэтому решил пойти на младшего программиста БД. Но все таки подумал, что с пустыми руками туда лучше не идти. Сейчас прохожу книгу ОПа, но застреваю на заданиях с регулярками(сейчас на главе: Повторим?). Так вот, может кто-нибудь поможет, пожалуйста, составить план(типа интенсива), чтобы я смог по быстрому подготовиться к этой вакансии, но только без изучений ПОКА лишней информации? Ну то есть , чтобы у меня было приложение и я мог отвечать на вопросы?
И кстати, как вы думаете, под младшим программистом БД они имели в виду, что я буду работать на прямую с сайтом или имелось в виду работа с товаром, если учесть, что это вакансия интернет магазина(или обычного магазина)?
Так же есть вакансия Стажера-разработчика в другой фирме. Там из обязанностей общее представление о разработке сайтов, а из требований коммуникативные качества(фак) и отличное знание ПК и Интернет(что они имеют в виду?). Но там полный рабочий день, а я учусь 3 дня в неделю. Так вот, может ли стажер иметь полный рабочий день(у младшего программиста БД гибкий график) или они ошиблись и не это имели в виду?
604 1338507
>>38505
Недописал

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

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

https://ru.hexlet.io/courses/regexp
605 1338574
>>38394

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


Не нужно учить меня разговаривать с мудаками.
606 1338576
>>38483
Хелп, очень нужна ваша помощь. Так и не понял как это сделать
souleater06.png61 Кб, 256x256
607 1338592
ОП, если проверяешь, не забудь мои по верстке глянуть, а то я в самом начале запостил. Заранее пасиба.
>>33346
608 1338608
>>38505
>>38507

>Реляционную алгебру читал?


Что то знаю.
Но я имел в виду... вот допустим задача про список студентов, сделав ее, я могу пойти или еще рано?
609 1338684
>>38461
Разве у каждого языка не существует ещё несколько фрейморвков, из каждого у которого есть свои собственные тонкости?
610 1338685
>>38684
Отличай язык от библиотеки. Фреймворк это просто библиотека кода. Во фреймворках как и языках есть свои подходы. Изучать нужно подходы. Тогда любой новый фреймворк легко освоить.
611 1338690
>>38608
Если ты ещё регулярки осваиваешь, то рано. Это ж детский садик ещё, а ты уже в программисты БД лезешь странное название вакансии.
612 1338699
>>38684
В большинстве случаев количество и важность этих тонкостей сильно переоценивают.

К тому же сейчас в мейнстриме те же веб фреймворки для разных платформ и языков очень друг на друга похожи.
613 1338761
Почему для работы миграций в ларавеле нужно что бы проект ларавеля находился в такой папке C:\xampp\htdocs?
614 1338765
>>38761
Не нужно.
615 1338812
Ананасы, какую литературу можно почитать про новые классы Error, ErrorException и Exception? Мануал прочитал, но там очень общая информация. Когда нужно использовать что-то из этих трех? Я могу в любом месте кода выбросить любой из этих объектов через throw. Допустим, Error я использую для отлова ошибок, а Exception для отлова исключений, получается, что ErrorException это результат множественного наследования от Error и Exception? Что делает этот класс?
616 1338835
почему по ларе так мало инфы?
617 1338843
>>38835
Официальной документации тебе мало?
618 1338922
>>38835
Есть видео уроки там где все объясняется.
619 1338943
Почему при помощи define можно константе присвоить результат работы функции, а const нет? Можно ли это как-то обойти? А то не хочется, чтобы в файле была мешанина из const и define. И еще, хорошо ли это, что я использую const вне классов? А то я читал, что const нужно только в классах использовать.
620 1338955
Допустим, у меня есть интернет-магазин с такой иерархией: есть общий класс продукта, общие классы категорий, например: техника, бытовая химия и бакалея, дальше идут классы конкретных товаров ноутбуки, шампуни, греча. Правильно ли я понял, что общий класс продукта и категории должны быть абстрактными, а конкретные не абстрактными? Можно ли любой класс, экземпляр которого я не хочу создавать, делать абстрактным?
621 1338957
>>38955
Да.
622 1338963
>>38957
Спасибо.
623 1338985
>>38943

>Почему при помощи define можно константе присвоить результат работы функции, а const нет?


Очевидно потому, что define это функция, которая принимает строку и связывает её с значением которое может быть результатом работы функции, а const это объявление константы и только.
624 1339006
Сильно ли замедляет выполнение программы вложенность if-ов более 3-х штук?
https://github.com/asdasdasdasddasasdasdas/StudentList 625 1339036
>>31382

> 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 625 1339036
>>31382

> 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 626 1339037
>>31382

> 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 и применял бы к нему.
https://github.com/asdasdasdasddasasdasdas/StudentList 626 1339037
>>31382

> 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 627 1339038
595-624

>>39006

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

>>38943

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

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

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


В этом ничего плохого нет.

>>38955

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

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


Можно. Хотя абстрактный класс - это недоделанный класс, класс-заготовка, от которого наследуются чтобы получить конкретный класс.
628 1339039
>>38812

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 нет множественного наследования. Также, из твоего описания непонятно, чем у тебя отличаются "ошибки" от "исключений". Думаю, что ничем не отличаются.

> Что делает этот класс?


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

>>38761

Не думаю, что там есть такое требование.
628 1339039
>>38812

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 нет множественного наследования. Также, из твоего описания непонятно, чем у тебя отличаются "ошибки" от "исключений". Думаю, что ничем не отличаются.

> Что делает этот класс?


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

>>38761

Не думаю, что там есть такое требование.
629 1339040
>>38684

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

>>38685

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

>>38608
>>38494

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

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

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



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

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

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



Умение пользоваться браузером, вордом, экселем, электронной почтой, что-то в таком роде.
630 1339041
>>33346
>>38592

> 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().

>>38483

Думаю, нужен яваскрипт.
630 1339041
>>33346
>>38592

> 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().

>>38483

Думаю, нужен яваскрипт.
631 1339044
>>39039

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



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



Я про то, что я в принципе могу выкинуть это через throw new \Error().
Мне нужно ошибки и исключения как-то различать. Но идеалогически верным было бы приводить все исключения к ошибкам, потому что на самом деле мало исключительных ситуаций может возникнуть во время работы программы. Львиная доля всех исключений порождает прерывание работы программы, а значит, это скорее ошибка, а не исключение, которое можно обработать и получить альтернативный, но все-таки положительный результат.
632 1339074
>>39040

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


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

>>39040

>Думаю, что в вакансии нужна не совсем реляционная алгебра.


На ее основе строится работа с данными, в любых базах, даже не реляционных. Даже вне баз используются принципы реляционной алгебры, для проектирования работы с данными. Без знаний ее основ считай калека.
633 1339134
сап, подскажите с регуляркой
https://ideone.com/miZCtl
Не понимаю как добавить игнорирование любого числа скобок, минусов, пробелов.
Благодарю заранее!
634 1339285
Какое пространство имен задать классам?
У меня в разных проектах образовалась пачка классов-утилит, которую часто использую.
Пространство имен сейчас у них везде разное.

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

А далее в композере в проектах тупо подрубать им путь через psr-4, чтобы они грузились. Норм идея?
635 1339286
>>39285
Да.
636 1339289
>>38483
>>39041
Он поддерживает только html в нем нельзя такое запилить, а если можно то как?
637 1339296
>>39289
Не понял, ты хочешь, чтобы все твое добро работало на гитхабе? Он поддерживает только статичные html-css-javascript сайты, для пых-кода нужен интерпретатор и демон, на котором он должен крутиться и принимать запросы.
638 1339454
>>38843
она говно
tool.gif3,4 Мб, 640x365
639 1339463
Аноны, нужна помощь. Не ебу что выкладывать на гитхаб, так же есть страх что если я выложу туда что-то, это кто-то увидит из коллег/друзей и засмеют (работаю в айти конторе не программистом с перспективой перехода в бэкенд). Если бы был фронтовиком уже давно бы захуячил туда портфолио какое + JS и какую-нибудь хуету джаваскриптовую, но в случае с бэкендом я вообще не ебу что туда выкладывать можно. Ведь я еще ниразу не писал ничего сложнее каких-нибудь скриптов. А как начинаю смотреть репозитории из того что мог бы сделать, так охуеваю от того как там все сделано круто у других, и нихуя не понятно как они это сделали. Не хватает чтоли понимания как устроены проекты (даже самые простые, блоги, цмски), их архетиктура, с чего вообще начать, как назвать каталоги/файлы и т.д. До этого работал с Python, когда перешел на PHP, не могу найти толковых гайдов, книг, везде всё описано по разному и сделано по разному, но что-то из этого считается говнокодом, а что-то нет. Короче че запилить, уже после того как вдуплил в синтаксис и можешь сделать что-то типо блога, но всё еще не знаешь как это сделать хорошо, чтобы не стыдно было показать на собеседовании?
640 1339469
>>39039

>Не думаю, что там есть такое требование.


Как раз таки это требование, так как без этого миграции не проходят, таблица в базе данных migrations создается а остальные миграции нет.
image.png272 Кб, 600x400
641 1339661
>>38388
ОП, а почему ну как мне кажется ты любишь "алгоритмические задачи"? Знания алгоритмов нужная вещь в PHP разработке? Ты же обещал, что не будет никакой математики. Тут и так регулярки сложные... Как так то?
642 1339670
>>39661

>регулярки сложные


Что там сложного?
Мимо написал овер сотню спамеров и любую регулярку пишу с закрытыми глазами
643 1339675
>>39670
Ну как сказать. Может я конечно передергиваюгибаю. Написать регулярку рили не так сложно, но вот чтоб сделать ее не громоздкой, тут уж нужны знания.
644 1339679
>>39675
Давай напишу тебе. Че надо
645 1339687
>>39463
Я тоже раньше такие вопросы задавал, про говнокод, про то, что засмеют. Мне тогда и сейчас понравился ответ одного анона: просто пиши, со временем сам увидишь где говнокод а где норм - это просто дело опыта.
А ещё учти такой факт, что все писали лапшу и ничего в этом нет сильно плохого, это просто повод расти дальше.
646 1339689
>>39679
Да нет, спасибо, уже не надо.
Я вот тут писал
>>35517
>>35533
>>35758
Решил кое как, ну и так сойдет.
Сейчас просто решаю задачу про банкомат. Задачу обычным способом решить еще можно ("жадный" алгоритм). А вот если брать осложненную версию, то тут уже тупняк.
По ссылкам проходишь, чтобы изучить метод динамического программирования, но чет не понятно. Ну сейчас >>38388
этот комментарий дочитаю, может понятней будет
647 1339691
>>39675
Не надо об этом думать, словно это какое-то великое знание. Это шаблон строки, заданный спецсимволами. Если чувствуешь неуверенность - поиграйся с ними и всё пройдет.
648 1339697
>>39687
Фишка в другом.
В том, что кукарекать где говнокод - легко, но сами кукаретики хуй напишут то, что считают не говнокодом.

>со временем сам увидишь где говнокод а где норм


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

Я серьезно пришел к выводу, что писать идеальный или даже приближенный к нему код вообще невозможно нахуй, ибо япы не настолько развиты.
Например, хуй в каком популярном языке есть такая фишка, как ссылка на имя метода класса.
Ну или многопоточность. Там тоже все через жопу.
Код на C++ - так вообще один большой костыль, как и сам язык, на нем в принципе абсолютно нихуя нормального не напишешь.
И так везде. Одно говно блять.
Можно лишь научиться более-менее ловко его жрать. Но твой код всегда будет парашей
649 1339717
>>39697
Ты ж сам накукарекал про кукаретиков, и сам же раскукарекался. Как так?
Говнокод обычно там, где не соблюдаются стандарты, т.е. типично-любительский такой джунский код. А костыли там, где без них никак это просто костыли.
650 1339975
>>39717
Да какие в жопу стандарты.
Недавно начал делать проект на laravel и чуть не проблевался с этих роутов, которые захардкаживаются строками блядь.
Причем даже нельзя написать MyController::class, надо руками писать 'MyController'.
Да даже блядь обертку нельзя написать чтобы извлекать базовое имя класса, ибо там все через жопу сделано и то не поможет в случае если контроллер находится в подпапке.
Истинное ебаное говно блять.
И так везде - в сервис-провайдерах, в ядрах опять охуительные тонны стороковых литералов.
При рефакторинге вручную ходишь и идешь это говно.
Эти волшебные методы, которые перехватываются через __callStatic().
Да, в целом любой популярный фреймворк - лучше использовать, чем нет, но говорить что они написаны "хорошо" - это бред.
Нихуя не хорошо.
В крестах же любой сложный проект состоит из подобной пораши чуть менее чем полностью. Ввиду отсутствия какого бы то ни было стандарта в комьюнити и тонн одинаковых инструментов, которые делают то, что даже в пыхе делает стандартная библиотека.
Чего только стоит свой класс строк, который НЕПРЕМЕННО блять есть в каждой крестовой параше и везде он разный, ибо одинакового родного-то нет (точнее есть, но это просто недоразумение, которое использовать нельзя).
651 1340009
>>39975
Стандарты по сути придуманы, чтобы не заблудиться в говнокоде совсем, так сказать последний рубеж, перед полным проигрышем разумным машинам.
652 1340045
>>39469
>>38761
Не может такого быть. Вот накатываю вообще в кастомной конфигурации докера, ларавельскую виртуалку даже не запускал не разу.
653 1340266
>>34227
бамп
654 1340612
>>39463
Откуда пик?
css.gif2,1 Мб, 640x480
655 1340623
>>40612
Уже давно не помню откуда.
656 1340634
>>39134
бамп вопросу
631-656 657 1340725
>>40634
>>39134

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

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

>>39697

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

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

>>39689

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



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

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



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



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

Если что, тут есть примеры задач, которые этим методом решаются: https://ru.wikipedia.org/wiki/Динамическое_программирование#Классические_задачи_динамического_программирования

Я не могу гарантировать, что им можно решить задачу про банкомат, но ты можешь попробовать.
631-656 657 1340725
>>40634
>>39134

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

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

>>39697

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

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

>>39689

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



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

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



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



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

Если что, тут есть примеры задач, которые этим методом решаются: https://ru.wikipedia.org/wiki/Динамическое_программирование#Классические_задачи_динамического_программирования

Я не могу гарантировать, что им можно решить задачу про банкомат, но ты можешь попробовать.
658 1340726
>>39661

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

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

>>39463

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

>>39285

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

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



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

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



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

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



Это лучше сделать в самой библиотеке, добавить в неё composer.json с описанием автозагрузки.
659 1340727
>>39044

> Я про то, что я в принципе могу выкинуть это через 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 660 1340730
>>34227
>>40266

Я смотрю, у тебя много тайп-хинтов, обрати внимание тогда, что в 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
https://github.com/php2ch/vector/blob/master/index.php 660 1340730
>>34227
>>40266

Я смотрю, у тебя много тайп-хинтов, обрати внимание тогда, что в 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
661 1340867
зачем люди учат php если есть руби и дж
662 1340878
>>40867
Покажи как ты на руби и на дж делаешь запрос к стороннему апи и получаешь джсон.
663 1340882
>>40867

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

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

Че делать, помогити
665 1341072
>>40867

>зачем люди учат php


Я начал учить еще очень давно, когда кроме него нихуя не было в вебе.
Теперь просто жру говно по инерции.
Зачем люди в этом треде учат - вообще хуй знает.
Я спрашивал, говорят тип вакансий много то что не менее 50% их них - ковыряние ложкой в сладком хлебе в вебстудиях, где тебе дадут пхп 5.6, обмажут джумлой, битриксом и прочими высерами мирового программирования - их не ебет.
А если говно отсеить, то окажется, что вакансий на тот же жс больше.
Да и кроме него языки есть.
Да и пхп уже не в моде.

Я бы сейчас в 2к19 php не учил.
Есть, как ты заметил, более хайповые и молодежные стеки. Js, Go.
666 1341572
Добрый день, гайс. Подскажите, какие есть сейчас современные методы распарсивания чужих страничек, на которых есть аякс? Мне много не нужно, всего одну маленькую табличку вытягивать, которая у них на ресурсе генерируется джаваскриптом.
667 1341601
>>41072
жс отвратительный язык, на гоу 2 вакансии в моем 1кк
668 1341617
>>41572
Selenium
669 1341619
>>41601

>на гоу 2 вакансии


Ну это пока.жпг

>в моем 1кк


Мухосрани как бы никогда на острие прогресса не стояли.
670 1341625
>>41619
блин вот скажи по ФАКТУ чем будет лучше для бизнеса go
1549284072580.jpg30 Кб, 600x453
671 1341628
>>41625
Меньше платить нужно чуханам, которые повелись на НОВОЕ МОЛОДЁЖНОЕ.
672 1341635
>>41625
В душе не ебу, но го набирает популярность уже несколько лет.
Ну и он более производительный, можно легче писать всякий хайлоад.
673 1341646
>>40730
ОП, а можно в студентах использовать компоненты из фреймворков? Или лучше самому велосипедить?
675 1341668
>>41072
Ну и что теперь, бросать изучать пхп?
676 1341679
Что за хуйня в Laravel вместо моделей?
Почему они называют моделями сраный orm-билдер запросов?
Я привык что модель представляет собой некий интерфейс взаимодействия с данными. Инкапсуляция данных от внешнего кода. Внешний код может взаимодействовать с данными только с помощью методов модели.

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

Это че за наебалово блять.
677 1341684
>>41679
Еще замечу, что в ларавеле нихуя не ActiveRecord, а какая-то левая параша.

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

Сука, зачем я только проект на этом говне начал...
678 1341693
>>41684
То бишь, они предлагают мне писать всю логику выполнения запросов к БД тупо в контроллерах.
Охуенно блять, просто гениально нахуй.
Какая инкапсуляция, это все для лохов, игрушки дьявола
679 1341722
>>41679

Это вроде паттерн ActiveRecord. А так, Ларавель идеи заимствовал из RoR, а там примерно так же.
680 1341723
>>41693

А что тебе мешает сделать там сервисы или писать логику в ActiveRecord моделях?
681 1341725
>>41646

Можно, но идея конечно была разобраться самому, как работать с таблицами в БД, как работать с формами. Компоненты использовать можно, если ты понимаешь их внутреннее устройство и способен сам написать аналогичный.
682 1341744
>>41723
Щас бы писать логику работы с данными в классах, являющимися билдерами запросов.
Это примерно как унаследоваться от какого-нибудь класса DateTime и писать там логику своего приложения.
683 1341755
>>41744

Ты половину моего поста почему-то не прочел. Я еще в сервисах предлагал писать. Что касается моделей - в Ларавель их используют для этого, если тебе такой подход не нравится, то зачем ты этот фреймворк взял?
684 1341760
>>41755

>Я еще в сервисах предлагал писать.


Что именно ты под этим имеешь ввиду? Что такое "сервисы"?
685 1341764
>>41760

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

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

Короче репозиторий. Сервис. Как ни называй это говно, суть в том, что этот класс выполняет запросы к базе в своих методах, а внешний код обращается к этому классу, когда ему надо провзаимодействовать с БД.
Тем самым осуществляются 2 вещи:
1. Внешний код может взаимодействовать с данными только так, как позволяет класс репозитория/сервиса.
2. Как репозиторий выполняет запросы является деталью реализации (хоть в нормальном приложении тебе и никогда не придется подменять эту реализацию)
687 1341771
>>41770
* ларавельскими моделями
Screenshot1.png12 Кб, 795x116
688 1341787
АРХИТЕКТУРА ВЗАИМОДЕЙСТВИЯ С БД В ПРИЛОЖЕНИИ
Так бы называлась эта статья, если бы я писал ее какую-нибудь хабропомойку

Вот чел в 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'ов, но он ничего не знает о реализации этих методов.

Все блять. Что думаете?
Screenshot1.png12 Кб, 795x116
688 1341787
АРХИТЕКТУРА ВЗАИМОДЕЙСТВИЯ С БД В ПРИЛОЖЕНИИ
Так бы называлась эта статья, если бы я писал ее какую-нибудь хабропомойку

Вот чел в 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'ов, но он ничего не знает о реализации этих методов.

Все блять. Что думаете?
689 1341931
>>41787

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

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

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

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



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

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

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

То есть ты обмениваешь удобство и скорость разработки на скорость работы и потребление памяти. По моему опыту, выгоднее всего получается что-то получать через ORM, а что-то SQL запросами.
690 1341935
>>41787

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

Например, я как-то ломал голову на тему: как, например, при выборке списка статей избежать загрузки текста статей? Сделать 2 сущности - Post и FullPost? Это плохой вариант. По факту, надо делать либо лениво загружаемые поля (в Доктрине их нету), либо мапить таблицу постов на 2 сущности: Post и PostDetails, связанные отношением 1-к-1 (Доктрина это тоже не умеет).
691 1341951
>>41935

>для одной сущности разные представления


А как такое может быть? Если они различаются, значит это разные сущности.

>как, например, при выборке списка статей избежать загрузки текста статей?


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

Я думаю, все что высирается в результате любых запросов к БД - должно быть определенным объектом.
Ну или примитивом. Одномерный массив какой-нибудь хуйни - тоже примитивный тип. Как массив айдишников статей.
692 1341961
>>41935
Не знаю, как там в доктрине, но в АР ларки или yii такие выборки поддерживаются с маппингом в модель.
693 1342039
>>41961
Ларка и юи это уже вроде как вчерашний день. Попробуй CakePHP.
694 1342044
>>42039
>>41961
Что по поводу codeigniter 4? Вроде годнотища, но ещё без релиза.
695 1342052
>>42044
Доки на не родном языке. Если инглиш рубишь, то у тебя все получится.
696 1342055
>>42052

> Доки на не родном языке


На секунду показалось что я не в треде по программированию.
697 1342056
Модель должна получать данные, обрабатывать и передавать их в контроллер
ИЛИ
Контроллер должен забирать данные через методы модели и обрабатывать, а если я использую ОРМ, то роль модели здесь стремится к нулю
698 1342066
>>42056
Модель это не только непосредственная работа с бд. Вообще всю бизнес логику проще назвать слоем модели, а эти орм только его часть. Так что эксперементируй. Ну а в контроллерах старайся делать поменьше, это просто посредники между клиентом и твоей логикой.
699 1342131
>>42056
Модель, хуель, все эти слова давно извратили и никто уже в душе не ебет что это вообще значит.

Но что могу сказать - нельзя напрямую обращаться к базе данных в контроллерах.
То бишь, писать там sql-запросы. Ну или обернутые в ORM sql-запросы.
Нужен отдельный слой, который будет этим заниматься, а контроллеры уже будут с ним и работать.
700 1342152
Антоши, а что нужно знать, чтоб в резюме можно было гордо писать миддл?
701 1342160
Ахаха, ларавель, заебися. Умудрился обосраться даже при конвертации модели в массив, расположив ключи в рандомном порядке. Охуенно блять.
Теперь я не могу просто сделать как на третьем пикреле, ибо порядок столбцов неизвестен.
Сука, прямо какое-то стремление жрать говно наблюдается в этом фреймворке и особая тяга к захардкаживанию всего и вся в строковых ключах.
Screenshot6.png24 Кб, 737x227
702 1342184
>>42160
Сука, чтобы я еще раз что-то прогал на этой помойке - лучше убейте меня.
Нахуячили магии половину фреймворка, так для этой параши автокомплит ide (самой лучшей блять) не работает даже при напердоливании родными плагинами ларавеля.
Это какой-то новый уровень говноедства.
703 1342220
>>42184

>Нахуячили магии половину фреймворка


Ух как мне тоже это не нравилось в свое время. Но потом как-то успокоился.
704 1342244
>>31378 (OP)

Мне не нравится ПХП потому что постоянно приходится вводить комбинацию шифт+знак доллара, мизинец устает.
Это можно пофиксить как-нибудь?
705 1342250
>>42244
Я тебе тут с этим не помогу, просто хотел еще до кучи накинуть следующее: -> для образения к методам инстанса, :: для обращения к статическому контексту, точечка для конкатенации.
Меня ничего из этого не парит, но я видел людей которые со всего перечисленного блевали.
tenor.gif118 Кб, 320x240
706 1342266
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, так он на своем месте останется
images.jpg5 Кб, 275x183
707 1342274
По пхп:
Лиличка:
https://3v4l.org/IqEma
Считалка:
https://ideone.com/h8Oe7g
По кругу:
https://3v4l.org/BAtH4
Не понял зачем тут $fromAngle = -80; $toAngle = 260; т.к. не стал вникать в тригонометрию.
708 1342279
>>40045
Все я выяснил в чем проблема, в папки в которой вложен ларавель не должно быть папок с русскими именами.
709 1342326
Оцените, насколько данный код является хуевым:
https://pastebin.com/RRXiNjLC
710 1342378
>>42266

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

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

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

Наверно, тебе интереснее будет разобраться самому, чем увидеть правильный ответ.
711 1342545
Напоминание всем, кто использует PHP7+, почему важно использовать declare(strict_types=1), чтобы потом на продакшене не ловить непонятных багов: https://ideone.com/ompMYj
712 1342571
>>42326
Я так же пишу, когда стараюсь. Вроде норм.
713 1342586
>>42326

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

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

Экспорт в JSON имхо тут делать довольно бессмысленно. Также, на практике, если ты делаешь JSON API, часто нужна не просто копия данных, а надо часть полей скрыть, часть полей преобразовать итд. И твой код с этим не справится.
714 1342587
>>42545

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

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

Ты баг в баг-трекере не пробовал поискать или создать? А то, может, мужики-то не знают.
715 1342620
>>42066
>>42131
Понял, спасибо.
QPtR1oSp2YA.jpg178 Кб, 780x1040
716 1342622
Собираюсь устраиваться на работу в офис в ближайшем будущем, но у меня есть проблема: я еще ни разу не влился ни в один коллектив. Где-то я игнорировал всех, и игнорировали меня, где-то я конфликтовал с другими на ровном месте, где-то со мной конфликтовали. Не сказать, что я полный аутист до мозга костей, но круглосуточное двачевание с 2010 года дает о себе знать. Нормально общаться могу только тет-а-тет.
Еще у меня случается конфуз мозга, когда я слышу или читаю сленг программистов. Например, из последнего, некий анон употребил термин "тип" в значении "подсказка". Что-то типа "накидайте мне типов для хуйня_нейм". Я долго думал, что это значит и как относится к самому кодированию, пока не вспомнил, что пхпшторм мне в самом начале предлагал отключить ежедневные tips из функционала, что я и сделал.
Еще были проблемы со словом паттерн, которого нет в русском языке, но есть английское pattern. И когда я читаю его в английском тексте, я знаю, что это означает и читаю без остановок. Но когда раньше слышал в русском не шаблон, а паттерн, я начинал тупить.
И этого сленга очень много. Скажите, в реальной жизни ведь его тоже употребляют? Как мне зазубрить все эти сленговые словечки, чтобы понимать будущих коллег?
717 1342623
>>42622
Само собой произойдет.
Ну а с коллективом бывает просто не везет, однако чаще всего даже аутисты (например я) вливаются нормально в коллектив. А почему бы и нет собственно? Этож говнокодерство, там многие разной степени аутяги, да и ненависть к менеджерам всяким объединяет.
718 1342624
>>42587
>>42545
С чего вы взяли, что это баг? === - это строгое сравнение, которое помимо значений проверяет еще и типы данных.
В данном случае ты сравниваешь строку с числом. Но в мануале ясно говорится, что если ты не используешь строгую декларацию, то типы будут динамически преобразовываться, где это возможно.
719 1342625
>>42623
Ты наверняка модный и доброжелательный анон с популярными интересами. Я на свои текущие 24 года не нашел ни одного человека, дотягивающего до моего уровня. Так что аутист аутисту рознь.
720 1342626
>>42625
Я необщительный дядька почти 30 лет, модного во мне нет ничего.
721 1342627
>>42626
Давно работаешь говнокодером?
722 1342629
>>42627
Получается больше 8 лет, в 21 первый раз устроился.
723 1342637
Как людям удается так хорошо выглядеть после бессонной ночи и вдобавок работать дальше целый день и оставаться бодрым?
724 1342639
У меня тут вопрос назрел. Я почти дописал свой фреймворк пхпшный, хочу еще прикрутить туда админку и дефолтный шаблон. Это получится уже не фреймворк, а cms?
Правильно ли я понимаю, что что все cms имеют под собой базу в виде небольшого фреймворка?
725 1342748
>>42586

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


Ну все то же самое.
Вообще суть кода в том, что базовый класс создает статический массив с ИМЕНАМИ переменных в ДОЧЕРНЕМ классе. Так как у всех объектов одного класса имена переменных будут одинаковы.
А далее уже toArray() уже напрямую, без рефлексии, то есть, очень быстро обращается по этим именам к полям уже конкретного ОБЪЕКТА.

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

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


Если понадобится - перегружаешь метод и делаешь все что надо вручную.
726 1342792
>>42639
Необязательно, кто-то на чистом пишет, особенно среди древних цмэсок, сейчас больше на фреймворках наверняка, да.
727 1342969
Господа, посоветуйте новичку софт аналог фотошопа (для верстки) - линейка, выгрузка фото из PSD, если это все возможно. Интересует аналог, потому что фотошоп работает достаточно медленно.
728 1343002
>>42969
Тебе в /s.
729 1343044
Скриптач, как в 2019 нужно передавать переменные из пешапе в жс? Я проксирую запросы к внешнему api и в виде жсона отдаю в страничку, но это как-то некрасиво.
730 1343071
>>42587
>>42624
Я (автор ссылки на ideone) и не утверждал, что это баг. Более того, об этой особенности знал ещё пару лет назад, когда PHP7 только вышел. Проблема в том, что программист в больших проектах в 90% времени будет работать с кодом, который писал не он, а потому подобного рода проблемы сложно обнаружить, просто взглянув на код, часто приходится вооружаться отладчиком. Решил сообщить о такой особенности тайпхинтов в PHP для тех, кто не знал.
731 1343088
Анон, где я обсераюсь?

https://ideone.com/21EtbE

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

Ответ:
Всего будет выплачено около 61270 р. за 13 мес.
732 1343146
>>43088
Проверь переменную $pr анон и всё будет
733 1343156
>>42969
Ну ты же понимаешь, что ты с этим далеко не уедешь?
Это как учить раскладку дворак.
Вся хуйня на этой планете заточена под фотошоп, а у тебя видите ли работает медленно.
Ты не сможешь быть профессионалом не юзая фотошоп.
734 1343172
>>42244
Двачую вопрос.

В кач-ве выхода наверное есть способ забиндить знак доллара на нажатие одной кнопки.
735 1343173
>>42152
Мне кажется настоящий мидл понимает, что нужно писать, и не задает таких вопросов. Гугли вакансии, где требуются мидлы, и смотри, соответствуешь ли ты.
736 1343174
>>43156
И это хуево, что нет аналогов, потому что фш с каждой версией становится тормознутее, а монополистическое фш-общество уже трудно будет отказаться от фш в пользу чего-то другого. Должно пройти поколение-другое, прежде чем от фш можно было отказаться как от стандарта в отрасти.
hqdefault.jpg33 Кб, 813x424
737 1343175
>>43172
Изобретатель языка php не случайно ввел знак доллара в инструкцию декларации переменной. Каждый написанный знак доллара притягивает к пишущему деньги. Это псевдоним для священной фразы ГОЛОВА ДАЙ ДЕНЕГ.
А в теге <?php закодированы правила и пик, без которых эта фраза не работает. Сочетание этих символов складывается в особый бинарный код, который и генерирует эти правила и пик с ГОЛОВОЙ. Именно поэтому php код не работает вне этого тега.

ГОЛОВА ДАЙ ЖЕ МНЕ ДЕНЕГ
738 1343212
>>43175

Вообще, знак доллара до PHP для переменных использовался в Perl и в оболочках вроде bash. Он используется перед переменными в Ruby, XSLT. В Pascal он обозначает 16-чные числа. В JS, Java он может быть частью имени переменной. В BASIC обозначает строковые переменные. В Fortran является частью управляющей директивы.
739 1343217
>>42748

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

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

Протестируй свой код.
740 1343266
>>43217

>toArray() при каждом вызове будет возвращать массивы все большего размера.


Черт, да ты прав, это действительно так. Да, я обосрался.

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


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

Вот окончательный вариант:
https://pastebin.com/sX5reRfW
1388317776767.jpg9 Кб, 604x461
741 1343269
Есть одна проблема.

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

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

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

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

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

Так вот, вопрос в том, каким паттерном можно это описать? Вроде это не делегат.
742 1343301
Привет, аноний. Шел я сейчас с работы и думал о всяком разном. И мне в голову ударила одна мысль. Вот есть у нас два файла лежащих в одной папке. Если каждый из этих файлов заrequirить друг в друга, то это будет работать?
Я уже давно не программист, настраивать окружение лень, поэтому обуздайте мое любопытство.
743 1343315
>>43301
В C++ есть похожая хуйня, когда 2 объекта могут ссылаться друг на друга.
То есть, есть класс, там ссылка на объект, компилятор проходит по ссылке, а там ссылка на тот класс, из которого он пришел, но он еще не определен!
Но это там разруливается с помощью какой-то неведомой хуйни, так что да, можно и такое сделать.
Снимок экрана в 2019-02-07 14-46-47.png10 Кб, 333x164
744 1343357
Анон, нужна помощь.
Хули он делает?
Как ему сказать, чтоб открывал не текст, а скрипт?
Пробовал запускать и через хтмл тоже, нихуя, тупо весь код показывает.
Сам локалхост работает, показывает Apache2 Debian Default Page.
ЧЯДНТ?
745 1343359
>>43357
Надо указать веб серверу, чтобы он .php файлы заупскал собственно пыхой.
Снимок экрана в 2019-02-07 15-12-22.png13 Кб, 523x194
746 1343367
>>43359
Все сделал, спасибо.
И директорию свою выбрал для удобства, а то приходилось вечно ползать под админом в var/www/html.
747 1343375
Можно ли как нибудь заменить уебищный стрелочный синтаксис => и -> на человечесике [key: value] и obj.property ???
748 1343376
>>43357
php -v что говорит?
749 1343377
>>43375
Да. Сменой языка.
750 1343380
>>43377
так чо вместо php все таки учить node.js ? Сам js знаю, но 7ая пыха говорят не уступает ноде по быстродействию и с асинхроностью проблем нет.
751 1343384
>>43380
Если ты только начинаешь, то я бы на твоем месте ноду учил. У нее большое будущее.
752 1343388
>>43384
Откуда вещаешь? С дивана или с работы?
753 1343398
>>43388
Ну фактически с дивана, однако знакомый из компании-конкурента рассказывал, что какие-то проекты там стали на ноде пилить и с каждым финансовым годом это число увеличивается.
754 1343410
При заливке проекта на гитхаб, нужно заигнорить папку вендор с зависимостями, выложив лишь композер.джейсон или нужно всю папку тоже выгружать?
755 1343411
>>43410

>выложив лишь композер.джейсон


и лок еще.
756 1343412
>>43410
Просто дело в том, что проект для чайников, и эти чайники не в состоянии установить композер для дальнейшей разработки. Что же мне делать?
Безымянный.jpg240 Кб, 800x600
757 1343463
Анонусы, подскажите, только вкатываюсь в ПДО MySQL
БД настроена, контакт есть. Скрипт выполняется, но данные в БД не приходят. Что за хуйня может быть? Я думаю что проблема возможна в:
A) В переменной $query проебался с синтаксисом или вообще хуйню написал
Б) В самой созданной БД проебался с настройкой таблы, возможно
P.S. Подключение к БД есть
Безымянный.jpg141 Кб, 800x600
758 1343464
>>43463
отлепился сам код
759 1343528
Тэкс, анон. Конкретно туплю.
И в первом и от втором случаях не могу сделать, чтоб первая и вторая строки были различными.
Можно было бы сделать еще три $rand для второй строки.
Но тогда код будет больше и будет повторяться. Стараюсь так не делать.

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

В чем дело? Как это исправить?
760 1343529
>>43464
>>43463
Включи выбрасывание ошибок через исключени и увидишь ошибку:
$pdo->setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

https://pastebin.com/HxiZ2U6T

По-дефолту ошибки не отображаются.
761 1343617
хочу учиться по курсам подскажите годноту пжл)
762 1343623
>>43617
Двачую вопрос, есть нормально структурированные курсы начиная с типов данных, строках строковых операторах, массивах, итераторах итд. А не как написать хелоу ворд в html? Можно на инглише.
763 1343628
>>43623
>>43617
SoloLearn или курс с ОП- поста. Не?

> У нас есть свои уроки по основам PHP, они собраны и выложены по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не читайте, не сохраняйте, не запоминайте его, он временный).

764 1343644
>>31378 (OP)
Что нужно написать в PATH, чтобы не писать полностью путь php в командной строке?
D:\tmp\php - вот папка, где распакованы php компоненты
Снимок экрана в 2019-02-07 23-03-06.png83 Кб, 1581x650
765 1343649
>>43528
Бамп и еще вопрос.
Хули ему тут не нравится?
766 1343678
>>43649
Точку с запятой пропускаешь. 8 и 17 строка.
767 1343684
>>43623

Официальный мануал: http://php.net/manual/ru/index.php
768 1343756
>>43044
Бамп вопросу
769 1343765
Есть гайды, как написать свой автозагрузчик классов с неймспейсами?
770 1343790
>>43528
>>43649
Б А М П
А
М
П

>>43678
Верно, спасибо.
Но мне надо как- то "прогнать" все значений, а то мне кажется, что он сравнивает только первый ($symb) и последний ($rev). И от этого всегда выдает "Палиндром".
771 1343791
>>43765
Композер
772 1343802
Анон.
Поясни за $this.
Можно его не использовать при выведении чего- либо через конструктор __construct(), так как появляется = при использовании текста.
773 1343808
>>43802
Конкатенируй строки.
Можешь еще попробовать заключать в фигурные скобки {$this->name}
774 1343818
>>43808
Конкатенация и правда работает. А вот фигурные скобки - не всегда.
Наверно это от компилятора зависит, так как некоторые переваривают перенос строки через /n, а некоторые только <br/>.
775 1343824
>>42637
Уже несколько лет так живу. Тянки говорят, что выгляжу норм. Но стараюсь делать всетаки зарядку каждый день - может это помогает. Хотя лысеть начал всетаки
T0jeCSQdJgU.jpg137 Кб, 699x446
776 1343832
Анон, как быть в такой ситуации и избавить себя от написания таких всратых условий?
777 1343833
>>43528

Ты сгенерировал случайное слово 1 раз, положил его в переменную и вывел 2 раза одно и то же значение. Ты можешь хоть 10 раз его вывести, значение, положенное в переменную, само по себе не меняется.
778 1343835
>>42244
Чем плох доллар? Никак не пойму той предьявы. Наоборот же удобно - сразу видишь что это переменная
779 1343849
>>43833
Ну как тогда быть?

И чтобы не было:

> Можно было бы сделать еще три $rand для второй строки.


> Но тогда код будет больше и будет повторяться. Стараюсь так не делать.



Ящитаю, есть способ сделать это без копирования однообразных действий.
Screenshot233.png46 Кб, 632x544
780 1343861
>>43833
Ебать я даун, братишка.
Надо было всего лишь выполнять рандом в цикле.
images.jpg3 Кб, 225x225
781 1343872
Как начать писать РЕАЛЬНЫЙ код на PHP?
Какие то шаблонизаторы, верстка ебаная вообще охуеть
782 1343889
>>43808
В пхп новых версий советуют не конкатенировать вообще.
783 1343905
>>43889
Ну охуеть теперь, может еще и двойные кавычки не использовать?
784 1343914
>>43861
че пишешь? интересно стало
785 1343959
>>43872
Добро пожаловать в высокоуровневое программирование.
Можешь и 2 недели абстракцию на абстракцию наворачивать, так ничего осязаемого и не написав.
786 1344160
>>43914
Это задачки из учебника в ОП посте.
http://codedokode.github.io/phpbook в теме "Строки, хакеры и шифровки".
Аноним 787 1344180
тупа бамп

уже 3 дня учу js на русском сайте, не собираюсь останавливаться
только вот пугают долги по сессии и англицкий
788 1344187
>>44160
ой, какой классный аниме-учебник)) я бы такой бумажный в каком-нибудь магазине купил
789 1344207
>>44187
а я бы отсосал тому кто его написал
790 1344230
>>44207В низу страницы есть ссылки на ВК ФБ и почту. Можешь предложить автору свои услуги.
15357553945530.jpg35 Кб, 424x409
791 1344246
Где мы свернули не туда?
Композер падает от нехватки оперативки на вдс с гигом RAM.

Сука, ебаный пхп не может установить свое говно, как жить блять
792 1344248
>>43765
Зачем тебе гайд? Регаешь свою функцию в spl-загрузчике, которая на вход берёт полное имя класса, с неймспесом. Ну и делаешь шо хочешь там.
Только ошибку не вызывай, если не нашёл класс - неположено, т.к. там могут быть и другие, а ошибку тебе сам пых покажет.
793 1344251
>>43889
Если слушать всех советчиков, то ты для хелловорлда с десяток классов создашь, либу с гитхаба загрузишь и обязательно где-нибудь обосрёшься.
Давно уже такое заметил за сообществом кодеров.
794 1344257
>>44251
Нормально, мировая практика.
Вот я тот, кто писал выше как композер падает от нехватки памяти.
Устанавливал пак локализации для фреймворка (без выбора языка, эта хуйня тупо грузит ВСЕ имеющиеся) и эта хуйня падает.
Пошел в исходники этой хуйни и выдрал 1 (ОДИН блять) файл на несколько килобайт, который вручную добавил и все заебись.
795 1344264
>>44251
И на всё надо создать интерфейсы, как же мы без интерфейсов - не поймём же что куда втыкается! Нужны интерфейсы даже для обосрамса.
Безымянный.jpg277 Кб, 800x600
796 1344269
Бля, анонесы, подскажите плз. Заебался уже какого хуя эта блядская форма не отправляется к ебливому серверу.
Я этот кун >>43463
Ошибка высветилась, подправил хуй знает как и куда нажал
Теперь другая ссанина вылетает, мать её.
Буду благодарен <3
красным ошибка
Хотя бы дайте пинка куда смотреть, потому что я сериоузли думаю что проебался в скрипте и имеет смысл удалить всё нахуй и попытаться переписать с нуля
797 1344273
>>44269
Передаешь строку 'score' в столбец score, где тип smallint (не строковый нахуя тебе smallint в эпоху bigint, поехавший?)

Просто читай что написано в ошибке, также гугли по КОДУ ошибки. Тексты ошибок могут совпадать, но код всегда однозначно говорит о проблеме.
798 1344275
>>44269
Ему не нравится тип данных, которые ты посылаешь - в 'score' используется smallint, а ты ему integer посылаешь. Либо тип в таблице меняй, либо то, что посылаешь.
799 1344277
>>44273
>>44275
огромное спасибо анончики! Буду копаться дальше
800 1344344
>>44269

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

У меня ощущение, что ты туда строку пытаешься вставить.
801 1344350
>>44269

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

>>44257

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

>>44251

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

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

>>43765

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

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

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

>>43872

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

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

>>43959

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

>>43849

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

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

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

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

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

>>43802

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

$this->name = $name;

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

Использовать this ты не обязан, но судя по вопросу, ты просто не понимаешь, что это такое и зачем нужно. Можешь открыть и почитать главу про ООП в учебнике из ОП-поста или любом другом учебнике.
804 1344358
>>43410

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

>>43412

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

>>43301

Если require то будет вечный цикл, и PHP упадет. Если require_once, то все ок.
805 1344359
>>43269

Неправильно усложнять код из-за того, что ты его правишь. Используй опции рефакторинга в IDE или поиск/замену по файлам.
это просто охуенно.webm183 Кб, webm,
320x180, 0:03
806 1344413
Почему трейты так хороши?
Раньше думал бесполезное говно, но как узнал, что трейты могут определять абстрактные методы, устанавливая требования к родительскому классу - все резко изменилось.
Причем 2 разных трейта могут определять одинаковый абстрактный метод и базовый класс, использующий 2 таких трейта будет работать, эти методы как бы наложаться друг на друга (а одинаковые переменные разные трейты определять не могут).

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

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

Прям аж охуел с пхп, жалко в других языках нет трейтов.
807 1344442
Итак, доброго времени суток аноны, я тот самый который выше не мог отправить данные из формы в БД по PDO
В общем вчера я решил упростить себе задачу, дабы разобраться. С отправкой форм. И ограничился пока только текстовыми полями.
Также переименовал названия в таблице, ибо были какие-то эроры связанные с отправкой формы из NAME и Second-name.
Теперь мой код выглядит таким образом. Однако данные из форм по-прежнему не отправляются в бд. Из-за этого:
Invalid parameter number: number of bound variables does not match number of tokens
Все колонки я уже проверил.
Почему решил переписать код? Потому что вчера я решил трайнуть в ту самую неблагополучную колонку 'score' отправить текстовые данные. Однако в итоге в БД пришли только названия колонок.
Код конечно сейчас приятнее выглядит, но какой с этого толк, если он не работает?
Заранее благодарен.
808 1344447
>>44442

>number of bound variables does not match number of tokens


Ебаный ты аутист, ты начнешь когда-нибудь читать что тебе пишут в текстах ошибок?
Число переменных не совпадает с числом плейсхолдеров.
Олсо, полагаю что при назначении параметров надо их тоже с двоеточием указывать.
Да и вообще используй вопросики и и не еби мозг. ? ? ? ? ?.
809 1344459
>>44447
да я прочитал бля, только число переменных 5, в бд их тоже 5, как и в хтмл коде 5. Я убрал нахуй двоеточия и эта ебатека исчезла, теперь мне в бд приходят ПРОСТО МАТЬ ИХ ПУСТЫЕ ЗНАЧЕНИЯ БЛЯТЬ
5.JPG27 Кб, 630x160
810 1344462
>>44459
причем не в одну линию, а по 5
Вот так выглядит
811 1344492
>>44442

Откроем мануал: 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 сам поймает и выведет это исключение (если не включен - запишет в лог (журнал) ошибок).

>>44447

Надо быть культурнее.
812 1344494
>>44492
О, спасибо за конструктивный ответ! Буду исправляться.
813 1344502
>>44462

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

Во-первых, если ты укажешь для колонки 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

Я бы советовал писать такие ограничения, так как они защищают тебя от ошибок.
813 1344502
>>44462

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

Во-первых, если ты укажешь для колонки 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

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

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

Как это грамотнее сделать?
815 1344509
>>44442

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

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

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

>>44413

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

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

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

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

>>43044

Так же, как раньше: конвертировать в JSON и встраивать прямо в страницу в тело скрипта.
816 1344511
>>44508

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

В общем случае твоя проблема напоминает проблему "наследования" таблиц, для которой есть 3 паттерна: https://www.google.com/search?q=паттерны+наследования+таблиц&gbv=1&sei=D8JeXM2EC6LmmwX63L7wBg
817 1344513
>>44511
Ну хуй знает, даже не думал об этом в контексте наследования.
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.
818 1344516
>>44513

В твоем случае проще всего сделать общую таблицу social_networks и ссылаться на нее. А не по таблице на каждую соцсеть.
819 1344517
>>44516
Дело в том, что у каждой соц-сети свои уникальные столбцы и вообще разное их количество, эти таблицы не одинаковы.
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 соц-сети и более - ничего страшного не случится. Небольшая цена за удобство.
821 1344526
>>44523
А, ну еще забыл сказать, что структура вида id, facebook_id, vk_id, twitter_id все же имеет нормальные реляционные ключи на другие таблицы и к ней может применяться каскадное удаление/изменение.

В отличие от id, social_network_type, social_network_id
822 1344530
>>44523

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

Оно же есть в Postgres и других системах.
2019-02-0916-04-13.png37 Кб, 1920x345
823 1344553
Привет, аноны!

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

Киньте плиз ссылку на мануал или подскажите, если все не так сложно.
824 1344588
>>44509
Да, я именно её и начал делать. Но уже с подключением к бд и отправкой формы потратил 4 дня, сейчас почитаю.

>>44502
Ещё одна благодарность тебе.
825 1344589
>>44553
Устанавливай виртуалку с debian, устанавливай туда нормально пхп и все что угодно.
826 1344590
>>44530
Вот это и имел ввиду.
Но как там сделать проверку на 3+ столбца?
Только на 2 можно.

CHECK (col1 NOT NULL XOR col2 NOT NULL)
Можно ли дописать XOR col3 XOR col4...?
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. При этом изменять количество входных параметров функции тоже нельзя.
То есть, запускаем функцию и она уже внутри должна подключить файл и считать из него переменную. Но не считывает. Как это пофиксить?
828 1344656
>>44590

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

>>44553

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

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

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

Спрашивай, если непонятно.
829 1344658
>>44650

require_once выполняет файл только первый раз, как следует из ее названия. Тебе нужен require.
830 1344679
>>44658
Спасибо.
Однако, мистика. Попробовал require - получилось. Попробовал снова require_once - снова получилось. никаких ошибок. А раньше были.
831 1344750
Антуаны, я наконец сделал свою ЙОБУ >>44442 и я счастлив!
Спасибо всем кто помог итт!
832 1344763
>>44350

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


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

>Возможно


А ещё не надо фантазировать надо моими постами. Возможно ты умственны инвалид, у которого проблемы с пальцами и ты не можешь сам написать ничего.
Вообще, какой смысл разбираться в технологиях, если потом только чужие либы юзать?
ttmp.jpg64 Кб, 1115x709
833 1344778
>>44750
А я неделю от веба отдохнуть решил, продолжая изучать основное направление.
834 1344779
>>44679
Хм. После перезагрузки компа, пхпшторм подчёркивает $a и предупреждает, что она "Undefined variable", но в браузере всё отрабатывает без ошибок и нотисов. Прогуглил всё, что смог придумать для поискового запроса, нигде не пишут, что в функции require и require_once работают как-то по другому. Вот теперь думаю, можно в таком виде отправлять, или нет. то ли это просто пхпшторм не видит переменной в подключённом файле и можно забить, то ли это грубая ошибка на видимость переменных и её допускать нельзя.
Screenshot16.png10 Кб, 463x280
835 1344881
Что за хуйня происходит, помогите.

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

В итоге массив не изменяется блять.
Как так?
836 1344899
>>44881
Отбой тревоги, дело оказалось в реализации ->toArray() в объектах EntityEnterface.
Короче если у EntityEnterface в качестве члена другой EntityEnterface, то он не конвертился в массив, а прямо передавался.
Сделал рекурсивно, теперь заебись.

Рекурсия в рекурсии, кажется я познал дзен программирования.
837 1344919
>>37481
во втором случае у тебя бессмыслица, ты по чему сортировать собрался? сортировать по колонке можно, там байнд не нужен, когда ты байнд делаешь у тебя вместо колонки строка обычная подставляется, и это перестает быть колонкой
838 1345110
как вам елисеев с "неделей ооп"
839 1345228
Аноны, подскажите кто-то, заебался уж.
Есть форма авторизации, есть бд с логинами и паролями. Пароли которой хэшируются по принципу:
$hash = password_hash($password, PASSWORD_DEFAULT);
В бд приходят пароли в виде $2y$.....
Загвостка в том, что при авторизации приходит в бд совершенно другой хеш пароля. Соответственно один и тот же парольчто вносится в базу при регистрации, и который вводится при авторизации имеют различный хэш.
Как это решается?
840 1345321
>>45228

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

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

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

>куда копать?


Как там файл открыт, с каким флагом?
Читается как, до записи или после?
Ну ты понел...
843 1345807
>>45794
пишу данные file_put_contents,
читаю file_get_contents,
кеширование в пхп.ини убрал
844 1345815
>>45807
Попробуй через fopen с файлом поработать, на ручной передаче, так сказать.
845 1345847
>>45815
тож самое
846 1345883
>>45773

Код кривой.
847 1345887
>>45847
Ну значит у тебя логика неправильная в приложении.
848 1345929
>>45773
>>45794
>>45807
>>45815
>>45847
>>45883
>>45887

в идеоне не запустится, т.к файл создается
https://ideone.com/PMk9XX
849 1345941
>>45929
как всегда нашел ошибку после того как написал в тред, не совсем понял почему так призошло, но хотелось бы услышать мнение от более опытных людей, если их это говно заинтересует
850 1346261
Как перестать дрочить на красоту кода? я больше времени трачу на оформление чем на разработку и тестирование.
bitardsuicide.jpg124 Кб, 1600x1200
851 1346263
Пишу на пхп несколько лет, считаю себя далеко не самым хуевым программистом, сегодня впервые увидел в коде ключевое слово yield.
Я вообще ничего до этого время не слышал про это дерьмо и генераторы.
Пиздец блять.
Есть что-то еще, о чем мне стоит знать?
852 1346265
>>46261
Что ты имеешь ввиду под красотой?
Надеюсь не форматирование?
853 1346274
>>46265
и форматирование и структура и общая гармония.
я когда редактор ставлю, то два часа настриваю цветовую схему и подстветку кода, чтобы приятно было смотреть на код
854 1346277
>>46263
И что? Ты это высрал, чтобы выебанутся тут?
855 1346311
>>46263

>Есть что-то еще, о чем мне стоит знать?


Да есть - ты хуёвый программист, раз не обращаешь внимание на развитие твоей платформы, ну и сам не развиваешься значит. Добро пожаловать в стагнацию, говнокодер.
856 1346343
Аноны, подскажите кто-нибудь куда смотреть хоть. Вот у меня есть сайт на котором регистрация и авторизация, после авторизации создаётся сессия и происходит переход на ссылку. Если не авторизировался, то кидает обратно на форму авторизации. Вопрос в следующем. Как мне сделать так, чтобы неавторизованные пользователи не могли пройти дальше авторизацииибо можно просто ввести в url адрес этой страницы и он открывается
Т.е. при отсутствие кук и сессии-доступ к этому url закрыть. Как это правильно реализовать?
857 1346354
>>46343
забей, во современных фреймворках это делается в одну строчку при создании нового роута
858 1346377
>>46354
ну подскажи в каких фреймворках, и с какой строчкой :)
Я совсем недавно начал заниматься пхп, мало понимаю.
859 1346394
Аноны, подскажите, умоляю. Как управлять чужой сессией? Есть 2 стула 2 человека и некая группа, один админ, другой мембер. Мне нужно сделать возможность админу передать админку или выбросить мембера из группы, но дело в том, что для минимизации запросов в бд я положил токен доступа к группе и ее названию в сессии и в след раз когда админ выкидывает пользователя, юзер все равно продолжает как бы находиться в группе до близжайшего релога. И вот я думаю либо переделать эту механнику с сессиями, либо просто отключать пользователя, но это тоже не лучший вариант. Помогите
860 1346416
>>46343
создаешь файл пхп где происходит проверка сессий, если не прошло выкидывает через хедер на страничку авторизации, и подключаешь файл через реквайр куда тебе надо
861 1346422
>>46343
Я лично это прописал в роутере т.е. если человек, который заходит на сайт, не имеет сессии, он всегда попадает в разрешенные ему каталоги даже не получая доступ к контроллеру этого адреса. Либо можно сделать как написал этот анон >>46416 , но его способ у меня лично вызвал небольшую жопную боль и раздувание кода (если я правильно понял о чем он)
jpeg 1.jpg46 Кб, 488x333
862 1346477
Пацаны, вы пишите тесты в свои приложениях на пхп?
863 1346482
>>46311
Я всегда знал что я дебил...
864 1346484
>>46274
В нормальных IDE сложнее блокнота всегда есть автоформатирование по нажатию комбинации клавиш.
1 раз настроил и далее твой код всегда идеально отформатирован.

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

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

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

Этот код обхода в цикле может быть как в самом шаблоне, так и в функции высшего порядка, смотря как сделаешь
868 1346510
>>46503
Писать шаблонизатор - не вариант. По условию ОПа надо на чистом PHP выводить, как я понял. А на чистом - там надо городить проверку на каждое поле ввода, или обязательно заполнять по ключу. Или отключать вывод ошибок и срать в логи сотнями.
Можно ещё класс написать, чтобы обрабатывал эти запросы по несуществующему ключу, но я тяжелыми наркотиками не балуюсь.

Не понимаю как выкрутиться.
869 1346511
>>46263
Да, много чего. Кури http://php.net/manual/en/, полезно бывает.
870 1346515
>>46505

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


>Этого можно достичь помещая ошибки в массив, а далее обходя его в цикле.


Но тогда у меня ошибки будут выводиться в кучу, а по проекту надо под полем ввода, где непрошла валидация.
Хотя способо через цикл годный, хоть что-то. Если не придумаю лучше за вечер, то им и сделаю.
871 1346523
Доброго дня, макаки, и снова я со своей велосипедной cms. Дабы не ебаться с лицензиаром такой вещи, как ORM, начал писать свою собственную. Сначала навертел абстракцию над pdo, сейчас наворачиваю другую абстракцию над абстракцией, где будут человекочитаемые методы типа selectAll(), selectOne(), push() и прочее. Так как методов этих много, а о реалиции их я пока что не думал, может быть вы знаете какие-нибудь простые библиотеки с открытым кодом, откуда можно понапиздить методов, переписав под себя?
Посмотрел пока исходник redbeanphp, не нашел там нужного.
872 1346524
>>46511
Нахуя кидать ссылку на английский ман, когда есть русскоязычный?
873 1346569
>>46523

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

Также, может быть тебе поможет статья про паттерны работы с БД: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
874 1346574
>>46394

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

>>46493

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

{{ form_errors(form.email) }}

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

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

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

>>46510

Такого условия нет, если я не путаю. Нотисов в коде не должно быть, они считаются ошибкой разработчика.
875 1346593
>>46574

>Тебе еще и экранировать данные придется при выводе


Надо ли? Если разработчик в строку ошибки вставляет теги, когда есть шаблон и там вывод оформлен, то земля ему пухом, братишке. Разве нет?
Но с функцией тоже интересный вариант. У меня есть уже одна - для сборки УРЛа с параметрами, значит и вторая туда же пойдёт.
Их значит уже 2 + метод рендера(в контроллере) + заголовков ХТМЛ можно выделить место. Значит мне писать отдельно класс Представления, как я понимаю? А то у меня простое подключение шаблонов.

Вроде же простое приложение, а целый фреймворк городить надо.
876 1346605
>>46524
Не подозревал, что русский есть, он дописан хоть? На английском и так все понятно же и родные названия все.
877 1346606
>>46515
А, ну тогда через функцию вида getError ("name").
Внутри проверяй, есть ли ошибка для этого поля и если есть - возвращай.

Можешь сократить в шаблоне:
e("name");
878 1346608
>>46523
Чувак, ты почти точно делаешь бесполезное говно.
Если в твоей ORM не будет таких вещей, как many-to-many отношения и полиморфные отношения - она является просто обёрткой над SQL.
879 1346627
Оп, допустим у меня есть функция save($student) в классе StudentDataGateway. Можно ли в ней разбирать объект функцией serialize() и посылать разобранным в бд? Насколько такой подход уместен для этой задачи?
880 1346753
>>46569
Cпасибо за ссылочку, как раз то, что нужно.

>>46608
Да, значит, я неверно выразился. Для меня ORM и есть просто обертка над SQL.
881 1346842
>>44230
мне кажется ты тролль и пососать мне не удастся (
882 1346988
>>46627
Смысла у тебя БД тогда немного. В БД хранят данные, чтобы можно было быстро делать выборки по индексам, джойнить, анализировать и прочее. Если у тебя весь объект хранится как строка, то никаких операций кроме выгрузки-загрузки невозможно. Еще и будет медленнее все, если таких объектов через serialize много грузить.
883 1347083
>>46988
Да serialize тут не к чему, ты прав.
884 1347084
>>46627
Вопрос снимается и тут же новый появляется.

Есть ли какой-то встроенный способ для передачи объекта в таблицу бд? Ведь можно получить готовые объекты из таблицы прописав $request->fetchAll(\PDO::FETCH_CLASS, User::class);
885 1347144
>>46263

>Есть что-то еще, о чем мне стоит знать?


Рефлекшены, тайпхинтинг, етц
14607193951160.jpg134 Кб, 768x1024
886 1347165
Анончики, пишу мини-cmsку на коленке, выручайте, если вам не трудно. Мозги уже плавятся.

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

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

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

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

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

И дальше у меня на каждую строчку уже свой массив идет:

$mkey0 = $mkeyarr[0];//title
$mkey1 = $mkeyarr[1];//image_url
$mkey2 = $mkeyarr[2];//text
$mkey3 = $mkeyarr[3];//cats
$mkey4 = $mkeyarr[4];//tags через запятую

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

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

2. Вывести массивы тех же тегов, что и совпадают с текущим
14607193951160.jpg134 Кб, 768x1024
886 1347165
Анончики, пишу мини-cmsку на коленке, выручайте, если вам не трудно. Мозги уже плавятся.

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

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

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

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

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

И дальше у меня на каждую строчку уже свой массив идет:

$mkey0 = $mkeyarr[0];//title
$mkey1 = $mkeyarr[1];//image_url
$mkey2 = $mkeyarr[2];//text
$mkey3 = $mkeyarr[3];//cats
$mkey4 = $mkeyarr[4];//tags через запятую

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

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

2. Вывести массивы тех же тегов, что и совпадают с текущим
887 1347183
>>47165

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


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


>2. Вывести массивы тех же тегов, что и совпадают с текущим


Почему ты не хочешь загружать csv в БД и уже оттуда доставать как тебе надо одной строкой? Зачем колесо изобретать?
888 1347189
>>47165
Ну а вообще это легко делается через foreach. Или через array_filter\walk какой-нибудь.
Проходим по всему массиву и сохраняем в результирующий массив те, где совпадает что тебе там надо. Одной функцией наверное даже можно.
Но лучше БД.
889 1347190
>>47183
У меня задача - без БД, там есть еще нюансы.
>>47189
Спасибо
890 1347193
1. Тестовое задание для кандидата: Написать крестики-нолики на PHP для работы в консоли на поле 3х3. Состояние игры храним в файлике рядом со скриптом в json формате. Все оформить в ООП стиле. Какие должны быть команды в консоли: 1. Начать игру 2. Сделать ход (указываем номер ячейки и тип). После каждого хода отображаем результат хода: 2.1. если успех то п.4. 2.2. если ошибка, то ошибку. 3. Завершить игру 4. Отрисовать текущее состояние. 5. About - выводим информацию об авторе и пр.

задание на ждуна, я даже не понял какую консоль они имеют ввиду
891 1347205
>>47193
Ебанутенько.
892 1347241
Аноны, что почитать? Потому как мое развитие медленно начало скатываться в стагнацию, очко горит пиздец
893 1347292
>>47193
Збс. Неужели пыха наконец-то начинает признаваться не только как язык для сайтоклепства
894 1347293
>>47241
Обрати внимание на:
М.Зандстра - PHP, объекты, шаблоны и методики программирования
895 1347371
>>47193

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

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

Если ты не понял, то значит, надо учиться.
896 1347376
>>46627

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

Если вдруг ты принимаешь данные от пользователя и десериализуешь их - это уязвимость. Используй JSON в таких случаях.
897 1347381
>>46593

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



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

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

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

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

Тут, чтобы проверить, что все безопасно, надо изучить весь код. включая функцию X и откуда в нее приходят данные. Более того, другой программист может модифицировать функцию X, сделав так, что она перестанет быть безопасной. Он ведь не знает, что эти данные потом выводятся без экранирования.
898 1347385
>>46593

Можно сделать вспомогательный класс со статическими методами, например. Можно сделать класс для View и поместить методы туда, но при росте приложения это не очень удобно, так как все будут туда добавлять методы и он разрастется.
899 1347397
>>47292
Писать крестики-нолики на PHP это как клепать сайты на C. А требовать такое от джунов - это слабоумие.
900 1347404
Вот я хочу написать бэк своего магазина при помощи шаблона активная запись. Бэк mvc-шный. Есть базовая модель от которой наследуются модели каждого контроллера. Насколько я понял идею, мою архитектуру можно спроецировать на этот шаблон ->
базовый класс активной записи это базовый класс модели, от которого наследуются конкретные классы активных записей - конкретные классы модели (типа Отзыв или Продукт).

Я все правильно описал?
901 1347406
>>47397
Не совсем то, у тебя от сложного к простому, а крестики нолики это от простого к сложному.
902 1347452
запускаю composer папка vendor в laravel не появляется, сижу на убунте
903 1347457
>>47452
В чем проблема-то?
904 1347461
пользователь убунты разобрался, все ок
905 1347464
>>47293
Спасибо большое, запишу. А помимо этого? Какие-нибудь каналы на ютубе или статьи еще, книги
906 1347473
>>47406
Да никому в здравом в голову не придёт писать крестики-нолики на PHP, когда есть более удобные для этого ЯП.
Вообще, в норме людям такие тестовые давать, которые макс приближены к тому, чем они там в конторе занимаются. По крайней мере станет видно умеет человек нормально в разработку веб или нет.
А вот такое - бред сивой кобылы. Что этот тест покажет? Ни знания фреймворков, ни паттернов(разве что из геймдева лол), ну и тд. Придёт это ждун и будет им там крестики-нолики писать вместо продукта.
907 1347474
>>43889
Интересно, кто, где и почему?
Расскажите подробнее. пожалуйста.
908 1347480
>>47381
Как-то тоже об этом задумывался - неявные штуки получаются.

>>47385

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


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

>Можно сделать вспомогательный класс со статическими методами, например


А этот класс не будет разрастаться, если всё подряд туда сливать? Это же получится просто свалка разнородных функций, которые делают совершенно разные вещи.
909 1347510
У меня есть объект Request, где чистятся вилкой на входе куки, пост и гет, и думаю, что напрямую тогда не надо обращаться к этим суперглобальным массивам. Практикуется ли обнуление $__GET, $__POST и тп?
910 1347564
>>47473

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

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

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

Задача. Напишите функцию, находящую различия между двумя массивами строк аналогично утилите 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/Наибольшая_общая_подпоследовательность

Если вы просматриваете результат работы программы в браузере, то стоит сделать еще визуализацию результата, например, вроде такой: https://www.tecmint.com/wp-content/uploads/2016/07/DiffMerge-Compare-Files-in-Linux.png
910 1347564
>>47473

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

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

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

Задача. Напишите функцию, находящую различия между двумя массивами строк аналогично утилите 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/Наибольшая_общая_подпоследовательность

Если вы просматриваете результат работы программы в браузере, то стоит сделать еще визуализацию результата, например, вроде такой: https://www.tecmint.com/wp-content/uploads/2016/07/DiffMerge-Compare-Files-in-Linux.png
911 1347605
>>47564

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


У нас тут вроде прикладное программирование, а не школа информатики, где детки дрочат алгоритмы.
Я лучше очередной класс напишу для своего проекта, чем на это полвечера убью безрезультатно.
912 1347632
Котаны, такой вопрос.
Я немного знаю пхп, получше знаю JS и средне знаю sql.
Мне нужен паттерн/шаблон/проект типичного сайта на пхп. Структура сайта, если угодно, скелет.
Или сурс дайте.
Очень нужно!
913 1347648
>>47397
Как по мне то норм. Хз я пилю гору консольных скриптов на пыхе, если бы мне надо былобы заниматься онли сайтошлепством - укатился бы в питон.

Не пойму чем пыха не подходит
914 1347764
>>47648

>Не пойму чем пыха не подходит


Дело не в пыхе, а в таких задачках.
Какой в них смысл, если это в 99% проектах не используется? Вот убьёт какой джун на твою ерунду день и что? Ему это в вебе не пригодится вообще.
Лучше бы почитал чего нужного в это время.
Такие задачки бессмысленны ещё потому, что ничему не обучают впринципе - суходрочка одна на алгоритмы. Без постоянного применения такие вещи из головы вылетают быстро. Писал в своё время сортировки и задачки аналогичные - сейчас я это всё фуфлом для ЧСВшных студентов считаю.
915 1347767
>>47648

>Хз я пилю гору консольных скриптов на пыхе


И что ты там за скрипты пишешь? Поди велосипеды изобретаешь раз за разом с таким подходом.
916 1347769
>>47632
MVC гугли.
917 1347789
>>47632

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

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

>>47764

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

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

Я понял, что алгоритмы тебе не интересны и на твоей работе не требуются, прекрасно, но у других людей может быть другое мнение и другой карьерный путь.
918 1347798
Подскажите, как распарсить сайт?
919 1347802
>>47789

>расширяет кругозор,


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

>и полезно


Туда же.

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

И не надо смешивать теорию, типа структур данных, со своей бессмысленной задачкой. И не дай бох ты будешь так писать в рабочем проекте, как в этих задачках. Алгоритмы вообще отдельная песня и нечего пихать это везде где можно.
920 1347843
>>47798
Первая же ссылка, блин, в яндексе
https://tproger.ru/digest/parse-html-via-php/
921 1347883
>>47764

>Ему это в вебе не пригодится вообще


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

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

Я уже не говорю о том при работе с сайтом - твой код живет 1 секунду, консольный же скрипт может работать неделями, что заставляет учитывать совсем другие проблемы (сохранение состояния при падении, утечки памяти и пр.)
922 1347909
>>47193
Я б тебе работу не дал, если ты даже сосоль не знаешь. Но вообще задание простейшее, тупо в лоб команды из консоли, по ним вывод соответствующих классов, даже никакого интерфейса не выводить.
923 1347964
бамп
924 1348010
Анон, как передать значение токена в неотправленную форму?
925 1348011
>>46608
есть где-то описания, как это в orm реализовано? интересно внутреннюю механику таких штук узнать
926 1348014
Вкатываюсь в ПХП. Такие вопросы, на старте фриланс или работа в офисе? Мне кажется что то, что то сложно найти. Какие минимальные для работы знания нужны? PHP/CSS/HTML/JS? За сколько времени реально найти работу с 0 или минимума знаний? Хочу как то распланировать что учить, гайд в оп посте норм(полный), или лучше искать другие источники, книги там или видео?
927 1348016
>>48014
Я вот несколько лет в офисе, на фриланс так и не получилось до сих пор. Не знаю, кто там с фриланса сразу начинает, это сложнее намного, знаний много надо.
928 1348017
>>48014
Гайд неполный, но основы дает. Дальше придется курить уже документации и книги по отдельным технологиям, это большую часть времени на изучение и съедает. Но сначала основы из оп поста знать надо, иначе будешь плавать во всем и не понимать как и что с чем связано.
929 1348114
>>47843
Не сработает, если на странице будет джава. Мне нужен рабочий способ для всех случаев.
931 1348213
почему все так плохо относятся к битрикс? самая эффективная система в снг, больше половины вакансий на php требуют знания битрикса и только его
932 1348237
>>48213
Почему там все ЗАГЛАВНЫМИ БУКВАМИ?
Почему там используется синтаксис доисторической пыхи?
Почему он не запускается на пыхе 7.3?
Почему там лезут постоянно предупреждения об ошибках из самого ядра?

Заставили пилить сайт на оном. Моя жеппа в щепки порвана
933 1348267
Помогите, пожалуйста. Есть вордпресс говно на плагине elementor.

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

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

Я бы написал сам, сука, но эта дрянь не дает, а сама такого функционала не предоставляет
934 1348268
>>48267

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

element = getelementbyid

element.style.display==''block''
935 1348288
>>48267
>>48268

А, все. Пиздец. Плагин-антивирус блочил js, а не elementor.
аут.JPG52 Кб, 568x583
936 1348338
Сап всем, анонасы молю-выручайте, я запилил форму авторизации и аутентификации. Выглядит сие вот таким образом (пик). Далее если персонаж авторизировался-его перебрасывает на страницу. Иначе-бросает на главную. Так вот, суть в том, что я не уверен, что мой код работает верно. Ибо не ебу как его проверить, вроде заходит на сайт при верном логине и пароле. А создаётся ли сессия и отправляются куки-не пойму.
И второе, как сделать так, чтобы при вводе url следующей страницы обходя форму авторизации пассажира выкидывало на index например. Опыта у меня не много, но я что-то совсем запутался с этой хуетой и уже не понимаю в какую сторону мне нужно копать.
937 1348463
>>48338
Лопни мои ебанные глаза! Чувак, найди в инете готовое решение. Твой код даже комментировать бесполезно - это сплошной кусок говна.
938 1348466
>>46394
Гугли rbac. А потом гугли решения на php или пиши свое.
939 1348470
>>48463
Проиграл в голос, ты прав. Но, я думаю мне стоит как-то дособирать это говно из палок и чтоб оно как-то держалось. Дабы апнуть свои знания.
940 1348476
>>48338

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

Также, ты неправильно делаешь, что выводишь исключение на экран. В логи оно не попадет, ты о нем не узнаешь, а пользователю оно ничего не скажет.
941 1348485
>>48470
Ладно, попробую тебя направить:
1. try catch должен обрамлять только тот участок кода, где может вылезти исключение. В твоем случае это подключение к базе. Его и оберни, а логики вынеси из try нехуй ей там делать.
2. Пришедший постом логин может содержать sql injection. Пихать его в таком виде в sql запрос даже не выстрел в ногу, а в голову.
3. Нахрена ты стартуешь сессию до подключения к бд?
942 1348503
>>47769
>>47789

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

Еще вопрос - я так понимаю что в браузере исполняться может только JS? Тоесть если php шаблон отдан клиенту, то все изменения в DOM либо с помощью JS прямо на месте, либо отправка данных о изменении на сервер, и перерисовка php-страницы полностью?
Для примера - событие допустим hover в браузере php никак не перехватит? И допустим нет JS. Кто то провел курсором над элементом, возникло событие, как тут может среагировать php?
943 1348519
>>48463
>>48476
т.е. вас не смутило что это написано в обычном блокноте, без подсветки синтаксиса?
944 1348520
>>48503
аяксом
945 1348521
>>48519
протестую, я тот самый анон, я просто открыл страницу в браузере!
phpstorm не влез одним скрином.
946 1348522
>>48476
благодарю, учту и допилю. Однако я спрашивал о другом.
947 1348523
>>48485
окей, я тебя понял. Лови благодарность, няша :3
948 1348546
>>47883

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


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

>консольный же скрипт может работать неделями


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

>сохранение состояния при падении


Есть куча готовых либ и софта для этого, но Чингачгук у нас всё сам.
949 1348547
Вы че ебанутые, зачем вам ORM? Какие преимущества она даёт в сравнении с чистым майскул? И нет, код выходит не чище.
950 1348569
>>48547
у соседа есть, чем я хуже?
951 1348578
Кому интересна моя история вката? Могу расписать в паре абзатцев.
952 1348579
Пыхач, я чот ебанулся и записался на олимпиаду по веб-программированию. Обещают пхп, а я вообще нихуя не понимаю. Есть пара дней. Как вообще запускать пхп на локалке, из консоли там? Как читать данные из файла построчно? Или как аргументы? Я пока смотрю всякие костыли олимпиадные с графами, а с технической стороны я не шарю
953 1348581
>>48578
Выкладывай свою морозную. 3 часа ночи - самое время для былины.
954 1348630
Есть блог на laravel с комментариями на vue. Комментарии приходят json'ом. Лучше сделать для этого апи с авторизацией или просто роутов хватит?
955 1348752
ОП постоянно говорит, что без ООП сложно сделать задачу вроде вектора.
Предлагаю на проверку свободный от сайд-эффектов, строго типизированный вектор, включая антикризисные меры: https://codesandbox.io/s/github/kubk/vector-fp/tree/build/?expanddevtools=1&hidenavigation=1&module=/index.ts&view=editor
Например, если в тип Employee добавить новую должность, то код не скомпилируется, так как для новой должности не описаны все необходимые характеристики (ЗП, кофе и т.д). Тоже самое если добавить новый ранг. Если в демо навести курсор над любой переменной, то можно увидеть тип, который вывел тайпскрипт. Знания ФП у меня поверхностные, только то что в статьях-туториалах почерпнул. Думаю какую книгу взять, интересует возможность доказывать корректность программы на стадии компиляции.
14762210194491.jpg404 Кб, 1800x1136
956 1348760
Как скопировать структуру многомерного массива?

Многомерный массив может содержать различные объекты в качестве значений.
Мне надо обойти этот массив и создать массив с такой же структурой, но в качестве значений использовав свои значения.
957 1348762
>>48547
Никаких - свистоперделка. Используешь ОРМ - всеравно пишешь методы-обертки для своих задач, точно также как на чистом мускуле
958 1348763
>>48752
Почему вкладка браузера с этим говносайтом жрет у меня 30% процессора? Чтобы у тупых жс-блядей печень отсохла блядь
959 1348764
>>48760
А, ну самое главное - исходный массив изменять нельзя.
array_walk_recurcive ($arr, function (&$value){$value = 'hui';}) не катит
960 1348765
>>48546

>И почему ты решил, что бэкэнд делать просто?


По опыту

>Студентов сделал уже?


Я не делал ни одной задачи из ОП поста

>PHP в принципе не создан для того, чтобы висеть в памяти


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

>Есть куча готовых либ и софта


Нету
961 1348779
>>48763
Специально открыл. 800мб памяти и 10% скайлейка в ПРОСТОЕ. Прелесть какая.
962 1348780
>>48763
Там в браузере запускается полноценный редактор кода с автокомплитом/go to definition и прочим: https://medium.com/@compuives/whats-unique-about-codesandbox-f1791d867e48
IDE на Java тоже много отъедают. Если тебе просто текст, то в левом верхнем углу есть ссылка на гитхаб репозиторий, из которого создан codesandbox.
963 1348806
Здрасте, вопрос есть.
Шукал по поводу работы с тегами, набрёл на https://ru.stackoverflow.com/questions/148204/Организация-тегов-в-бд-и-запросах
Подаскажите, нафига столбец `tag_count`?
964 1348817
>>48806
Гугли что такое many to many отношения.
965 1348827
>>48817
По схеме, что на stackoverflow выходит, что чтобы сохранить запись с тегами, нужно сохранить саму запись, сохранить новые теги (если такие будут), сделать n записей (где n - кол-во тегов) в таблицу связи тег-запись.
Чтобы найти записи по тегу, достаточно узнать id тега и сделать выборку по нему в таблице связей. Смысла `tag_count` по-прежнему не понимаю.
ЗЫ Many to many погуглил, не помогло.
ЗЗЫ https://toster.ru/q/250728 - тут тоже в таблице связей нет третьего столбца...
966 1348836
>>48581
напишу как только вкачусь
967 1348839
>>48765

>Я не делал ни одной задачи из ОП поста


Я не сомневаюсь.

>Тем не менее с задачей висения в памяти он справляется


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

>Нету


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

Тебя к реальным проектам на пушечный выстрел лучше не подпускать - такого наворотишь со своими алгоритмами.
968 1348906
>>48760
Классическая задача по рекурсивному обходу дерева. Гугли по этому словосочетанию.
969 1348912
>>48579
Бамп, мне до понедельника надо подготовиться
970 1348917
>>47193
Разве пшп умеет задавать вопросы в консоли? Типа, открываешь скрипт, а он тебе предлагает соснуть хуйца или сделать бочку, и тебе нужно в консоль букву напечатать
971 1349007
>>48917
конечно
<?php
$answer = '';
while ($answer != 'da' . PHP_EOL) {
echo 'Sosnut\'? ( da ): ';
$answer = fgets(STDIN);
}
echo 'Pristupaj' . PHP_EOL;
972 1349090
Щас был в /xo/ там все говорят шо ПХП ненужен, смысла учить его нет и "PHP нужен только для старых проектов которые его используют, чтобы запилить очередной костыль и надеяться, что этот монстр не развалиться." Это правда? Нет смысла развиваться в этом напралении?
973 1349096
еще грят шо пхп мертвая технология гспди
974 1349123
Вопрос по задаче про будильник:

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

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

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

заранее ивиняюсь если расписал все непонятно
975 1349127
>>49090
Чем задавать тупые вопросы в 10000 раз ,зайди на хедхантер и посмотри вакансии по разным языкам
976 1349160
>>48839

>можно реализовать


>Есть куча готовых либ и софта для этого



Предлагает пердолить свой костыль с редиской как готовое решение. Ясно
977 1349196
>>49160

>пердолить свой костыль


Лучше известные решения, чем костыли очередного хеллоуворлдщика.
Алсо, с каких это пор кэширование является костылём?
978 1349269
>>49123
В конструктор будильника передать массив тревог.Создать метод у будильника который пробежит по тревогам и будетвызывать нужные тревоги
979 1349313
>>49196
Госпади. Какой же ты даун блядь.
ЭТО НЕ ГОТОВОЕ РЕШЕНИЕ, долбоеб. Испанский стыд от таких знатоков-советчиков
Screenshot51.png17 Кб, 698x616
980 1349334
Двач, какого хуя?
1. При клонировании примитивные типы копируются по значению.
2. При клонировании, если член является объектом, копируется ссылка на него.
3. При этом массивы всегда копируются по значению в пхп.

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

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

- проверить соответствие ОС требованиям MySQL, может эта ОС не поддерживается
- попробовать взять более старую версию mysql
Без имени 1.png135 Кб, 794x1123
987 1350506
Сап, пыханы. Я тут накидал схему, расскажите, кто знает, как правильно?

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

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

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

Расскажите, пожалуйста, как должна выглядеть структура модели, чтобы она соответствовала всем канонам активной записи.
988 1350524
как учить laravel, помогите
989 1350566
у книги Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования 5 издание есть?
990 1350569
>>50566
Есть, но только на английском, на русский уже год переводят и постоянно откладывают. Вроде на рутрекере было и на nnm-club.
991 1350605
>>50524
лучше всего смотреть как кто-то применяет технологию и пытаться подражать
также нужно вчитываться в документацию на английском
992 1350654
>>48917

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

>>48579

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



Урок:

- 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

>>48839

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



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

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

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

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

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

Ну и вы тут флуд развели на 5 постов без единого примера кода или примера задачи, с которой PHP справляется хорошо или плохо.
992 1350654
>>48917

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

>>48579

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



Урок:

- 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

>>48839

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



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

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

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

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

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

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

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

>>48806

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

>>50524

Убеждаешься, что ты знаешь базовые вещи (ООП, MVC, ActiveRecord, шаблонизация, проектирование БД). Если не знаешь - почитай статьи, например, тут: https://github.com/codedokode/pasta/ или где-то еще.

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

Вот для начала совсем уж простой туториал: https://laravel.com/docs/5.1/quickstart
994 1350683
Анон с Вектором на TypeScript (@kubk), я глянул, интересно, но прокомментировать пока не успел. Типизация мне нравится. Скажу только, что там из-за иммутабельности неудобно менять свойства рабочих (т.к. по сути надо пересоздавать Департамент ради изменения свойства 1 рабочего, а самого рабочего надо клонировать, при этом, если кто-то на него ссылался, то он продолжит ссылаться на старую копию. Пример: есть объект Задача, и у него есть поле Исполнитель - оно будет ссылаться на старую версию работника), и нельзя поменять зарплату одному отдельному рабочему. Также, список Департаментов и ТаблицуЗарплат можно было объединить в тип Компания.

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

>>48806

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

>>50524

Убеждаешься, что ты знаешь базовые вещи (ООП, MVC, ActiveRecord, шаблонизация, проектирование БД). Если не знаешь - почитай статьи, например, тут: https://github.com/codedokode/pasta/ или где-то еще.

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

Вот для начала совсем уж простой туториал: https://laravel.com/docs/5.1/quickstart
995 1350685
>>50506

Первый подход имхо это и есть 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/Доменный_объект

В третьем подходе, который ты описал, есть что-то похожее на 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, или подключаешь его как трейт - это не меняет сути паттерна, что модель умеет сама себя сохранять.

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



Как описано у Фаулера или в других статьях.
995 1350685
>>50506

Первый подход имхо это и есть 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/Доменный_объект

В третьем подходе, который ты описал, есть что-то похожее на 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, или подключаешь его как трейт - это не меняет сути паттерна, что модель умеет сама себя сохранять.

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



Как описано у Фаулера или в других статьях.
996 1350686
>>49123

Действительно, непонятно описал.

> 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();

>>49334

При клонировании все работает так же, как при присваивании:

- массивы клонируются (но не объекты внутри них)
- дочерние объекты (в полях или в массивах) не клонируются, просто копируется ссылка на них:

class A
{
public B $b;
public $list; // B[]
}

При клонировании этого объекта $b не будет склонирован, $list будет скопирован (будет создана независимая копия массива), но ссылки в нем останутся ссылками на те же объекты.

Если тебя это не устраивает, то определи метод __clone и в нем клонируй руками все вложенные объекты.
996 1350686
>>49123

Действительно, непонятно описал.

> 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();

>>49334

При клонировании все работает так же, как при присваивании:

- массивы клонируются (но не объекты внутри них)
- дочерние объекты (в полях или в массивах) не клонируются, просто копируется ссылка на них:

class A
{
public B $b;
public $list; // B[]
}

При клонировании этого объекта $b не будет склонирован, $list будет скопирован (будет создана независимая копия массива), но ссылки в нем останутся ссылками на те же объекты.

Если тебя это не устраивает, то определи метод __clone и в нем клонируй руками все вложенные объекты.
997 1350715
Сап,Делаю сайт на WP.Вообщем такая проблема.Нужно сделать личный кабинет с возможностью заливать pdf файлы на свой профиль.Подскажите, как вообще это можно осуществить.
999 1350725
>>50654

>Я бы использовал файлы или БД


>использовать другие динамические языки (JS, Питон) неудобно из-за более низкой производительности


Ну-ну. Файлы у нас пишутся быстро, а JS с Питоном медленно работают.
Ясно всё.
1000 1350726
>>50654

>Тем более, кеш плохо годится для сохранения состояния


Алсо, тот же редис можно подключит в php.ini и просто переназначить на него сессии. И не надо костылить бесконечные скрипты.
Ну вы даётё блин.
1001 1350728
>>50685
Спасибо тебе за такой всеобъемлющий пост.

>Я не очень понимаю, как ActiveRecord совмещается с репозиторием: суть "активной записи" в том, что объект, представляющий строку в таблице, умеет сам себя сохранять в БД. Соответственно, репозитории при таком подходе не требуются.



Я читал, что там вся разница в методе save.
Классический AR этот метод вызывает прям в сущности, а репозиторий в связке с AR сохранение и обновление берет на себя, и логика из сущности содержится в нем. Читал, что сам по себе AR это плохо. AR с репозиторием это не дата маппер, потому что нужен еще один слой адаптера.

Подожди, то есть все это выше мною прочитанное это ложь?
1002 1350730
>>50726
Редис твой говнецо.
1003 1350734
>>50728

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

>>50726

Там вроде речь шла про состояние вообще а не сессии.

>>50716

Для 5.7 туториала что-то нет. Ну пусть анон тогда сам по документации узнает, что изменилось в сравнении с 5.1.

>>50725

Типизации все равно нет. Хотя я Питон успешно использую в Jupyter Notebook. Ну и еще PHP вроде как проще в использовании и фреймворков под него много.
1004 1350735
>>50734

>Типизации все равно нет


В /б это называют манёврами.

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

Теперь я даже начинаю понимать почему ПХПшников в массе своей макаками называют.
1005 1350737
>>50686
Методы изменения параметров тревоги должны быть у тревоги или у будильника?
1006 1350945
>>50737

Можно сделать у тревоги, если у тебя Тревогу можно создать или получить из будильника. Так скорее всего будет удобнее. Но ты можешь для эксперимента попробовать сделать их у Будильника и посмотреть, что получится.
1007 1351074
>>50734

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



Что значит из AR-объекта? Из сущности, в которой используется трейт AR? Или из самого трейта?
Никак, наверное. Они подключают трейт к сущности, а в репозитории создают ее объект, где уже вызывают метод сейв и проводят с сущностью манипуляции.
Там еще каким-то боком Query Builder работает, но это наверное к вышеописанному не относится.
1008 1351098
Если на мой вопрос может ответить только ОП, это значит, что я уже достаточно далеко продвинулся в изучении технологий?
1009 1351145
Расскажите пожалуйста с чего вы начинали и каким образом осваивали данный яп. Пиздец нахуй, не знаю с чего начинать и с какой стороны зайти.
1010 1351147
подскажите куда копать, не представляю как сделать такое простое задание

Предположим, у нас есть код, позволяющий вывести список групп товаров, а также товары, находящиеся в каждой группе. Задача заключается в том, что необходимо добавить к имеющемуся коду функциональность вложенных групп товаров.
В приложенном файле test_base.sql находится дамп базы данных MySQL, содержащий две таблицы:
1.groups – таблица групп товаров, содержит поля:
•id – идентификатор группы
•id_parent – идентификатор «родительской» группы
•name – название группы
2.products – таблица товаров, содержит поля:
•id – идентификатор товара
•id_group – идентификатор группы товаров
•name – название товара
Необходимо написать PHP-скрипт, удовлетворяющий следующим требованиям:
1.При запуске выводит список (ul) групп товаров первого уровня (groups.id_parent=0), название каждой группы является ссылкой, которая вызывает этот же скрипт с GET-параметром “group”, равным id группы. Возле названия должно быть написано общее количество товаров в группе (количество товаров в самой группе и во всех ее подгруппах). Пока не выбрана ни одна группа – также выводится список всех товаров.
2.При переходе по ссылке (выборе группы товаров первого уровня) – кроме списка групп товаров первого уровня выводится также список всех подгрупп выбранной группы, все имена подгрупп также являются ссылками, и возле названия подгруппы находится количество товаров, содержащихся в этой подгруппе. Также выводятся все товары, отнесенные к выбранной группе (и всем ее подгруппам).
3.Количество уровней вложенности групп не ограничено.
4.Набор используемых технологий ограничен: php, mysql, html, xslt (не обязательно). При реализации использование каких-либо библиотек или фреймворков разрешается только для шаблонизации (вывода информации).
5.Допустимо добавление новых полей в таблицы. Изменять логику работы или типы полей, удалять поля в любой таблице запрещено в целях сохранения обратной совместимости с имеющимся кодом (предполагаем что он есть). В случае добавления полей для всех вновь добавленных полей необходимо подготовить запрос/скрипт, заполняющий их данными, либо описать словами логику работы такого запроса/скрипта.
6.Никакое специальное оформление не требуется, оцениваться будет логика работы с вложенными группами товаров – sql-запросы и код php, реализующий эту логику, а также html код, реализующий вложенные списки.
1010 1351147
подскажите куда копать, не представляю как сделать такое простое задание

Предположим, у нас есть код, позволяющий вывести список групп товаров, а также товары, находящиеся в каждой группе. Задача заключается в том, что необходимо добавить к имеющемуся коду функциональность вложенных групп товаров.
В приложенном файле test_base.sql находится дамп базы данных MySQL, содержащий две таблицы:
1.groups – таблица групп товаров, содержит поля:
•id – идентификатор группы
•id_parent – идентификатор «родительской» группы
•name – название группы
2.products – таблица товаров, содержит поля:
•id – идентификатор товара
•id_group – идентификатор группы товаров
•name – название товара
Необходимо написать PHP-скрипт, удовлетворяющий следующим требованиям:
1.При запуске выводит список (ul) групп товаров первого уровня (groups.id_parent=0), название каждой группы является ссылкой, которая вызывает этот же скрипт с GET-параметром “group”, равным id группы. Возле названия должно быть написано общее количество товаров в группе (количество товаров в самой группе и во всех ее подгруппах). Пока не выбрана ни одна группа – также выводится список всех товаров.
2.При переходе по ссылке (выборе группы товаров первого уровня) – кроме списка групп товаров первого уровня выводится также список всех подгрупп выбранной группы, все имена подгрупп также являются ссылками, и возле названия подгруппы находится количество товаров, содержащихся в этой подгруппе. Также выводятся все товары, отнесенные к выбранной группе (и всем ее подгруппам).
3.Количество уровней вложенности групп не ограничено.
4.Набор используемых технологий ограничен: php, mysql, html, xslt (не обязательно). При реализации использование каких-либо библиотек или фреймворков разрешается только для шаблонизации (вывода информации).
5.Допустимо добавление новых полей в таблицы. Изменять логику работы или типы полей, удалять поля в любой таблице запрещено в целях сохранения обратной совместимости с имеющимся кодом (предполагаем что он есть). В случае добавления полей для всех вновь добавленных полей необходимо подготовить запрос/скрипт, заполняющий их данными, либо описать словами логику работы такого запроса/скрипта.
6.Никакое специальное оформление не требуется, оцениваться будет логика работы с вложенными группами товаров – sql-запросы и код php, реализующий эту логику, а также html код, реализующий вложенные списки.
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
Помогите, молю
1013 1351605
>>51147
Обычное тестовое на работах. Решается элементарно, если знаешь запросы MySQL и PDO в PHP. Остается только сделать обработку GET параметров и соединить в контроллере с вызовами к PDO.
1014 1351610
>>51497
Шли json массивы через POST или используй разные имена параметров через GET, если они у тебя друг друга перебивают - например sort_by_direction, show_direction. Как у тебя по 3 штуки одинаковых выходит, не пойму, что-то ты не так в обработке видно делаешь. Простейший путь - ставь в скрипте переменную $sortDirection один раз и потом на ссылках по условию из нее выводи.
1015 1351675
Я уже приблизительно придумал как решить эту проблему, когда делал постраничную навигацию. Правда, теперь это будет, вероятно выглядеть как example.com/lists?&asd=123 (Именно как ?&, но оно вроде не является большой проблемой и все равно работает). Три раза я для примера написал, сортировочные фильтры идут вместе. И именно они перебивают свойства отображения. Через пост не хочу чтобы была возможность скопировать ссылку вместе со всеми фильтрами
national-geografic-Сова-глаз-песочница-532835.jpeg649 Кб, 1600x1200
1016 1351731
>>31378 (OP)
Есть смысл тут искать себе разраба? Нужен толковый чувак, веб-разработчик широкого профиля (фуллстак). Мне пофиг, какой у вас стиль одежды, откуда вы, в какое время суток предпочитаете работать (если работаете в целом, а не дрочите).

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

Языки программирования: PHP (7.2+), JS, HTML/CSS, SQL (MySQL или MariaDB).
Фреймворки: Yii, jQuery.
Технологии и инструменты: scss(sass), gulp, git, PHPStorm.
Короче, ничего сверхъестественного.

ЗП 40-45 на руки. Минусы - сам проект так себе по интересности, иногда приходится переделывать некоторые вещи по паре раз, двигать туда сюда текстики-кнопочки, нежелательно уходить в запой и проёбываться.
dvachheadhuntingANUSygNdandexPUNCTUMryC$u
1017 1351732
>>51731
Ну или пишите тележку, если удобнее, постучусь.
1018 1351739
>>51675
>>51497

Генерацию ссылок лучше всего вынести в какую-то функцию. Не надо лепить костыли и разбирать 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 ).

>>51147

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

Конкретно в задаче надо знать PHP и SQL.
1018 1351739
>>51675
>>51497

Генерацию ссылок лучше всего вынести в какую-то функцию. Не надо лепить костыли и разбирать 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 ).

>>51147

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

Конкретно в задаче надо знать PHP и SQL.
1019 1351740
>>51074

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



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

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

> Там еще каким-то боком Query Builder работает, но это наверное к вышеописанному не относится.



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

>>50715

Нужно:

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

Как "добавить страницу в личный кабинет" можно, наверно, нагуглить. Я сделал поиск по "wordpress member area" или "wordpress allow file upload for users" и там выдаются статьи по этой теме.

Там даже кто-то гайд нарисовал: https://chrislema.com/wp-content/uploads/chrislema-guide-membership-plugins.png - но естественно, тебе надо тщательно проверить, подойдет ли плагин для твоих целей.
1020 1351741
>>50681

В программы проверки кода можно добавлять свои правила. Но проверка переменных потребует полноценный синтаксический анализ кода. Так что, не знаю. IDE вроде PhpStorm вроде это умеют делать.
1021 1351742
Аноны, погодите немного, через день-два перекатимся.
1022 1351897
>>51731
Деньги никакие, какой тебе фуллстак за такое пойдет. Разве с глухой провинции.
1023 1351940
Почему пишут вот так:
dirname(__FILE__)

Вместо того, чтобы написать вот так:
__DIR__

Это болезнь?
1024 1351998
>>51940
Кто так пишет? Я видел только dirname(__DIR__) и просто __DIR__. Наверное просто кто-то не знает, что есть такая константа или дело привычки.

>>51740

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



Еще я задал этот вопрос на тостере, а мне ответили, мол, сущность не должна сама себя сохранять, ибо это противоречит принципам SOLID, то есть, нарушается принцип единственной ответственности. Поэтому создается репозиторий от каждой сущности, куда передается логика сохранения и прочего. И я вот думаю, правильно ли эти люди понимают шаблоны проектирования, или это я неправильно тебе объясняю.
Книгу-то я не читал, но на сайте его смотрел описания. Эти шаблоны еще у Зандстры вроде описываются в последних главах, но я еще не дошел до них.
1025 1352016
>>51998
А еще тот же человек на тостере ответил, что он "против AR", лол.
1026 1352018
>>51897
Ну, зп раза в 2 выше медианной по какому-нибудь Омску, причем на руки, а не по бумажкам. А так да, по меркам ДС/Европ не густо.
1027 1352134
>>51739
Я уже к этому решению и пришел, но все равно спасибо. Еще не начинал писать функцию, потому твоя информация мне очень поможет
1028 1352137
>>52018
У нас на такую не проживешь, тупо денег не хватит после оплаты квартиры и коммунальных расходов. Минималка в крупном городе это тысяч 70.
1029 1352144
>>52137

>У нас на такую не проживешь


>Минималка в крупном городе это тысяч 70


У вас это где? Средняя (не медианная, не модальная) по Москве около этой суммы или чуть выше (Мосгорстат как-то, в 2017 что ли, насчитал 90, а потом его поправили как раз до 70).
К слову, я в ДС, в районе рядом с ТТК, трачу на

>платы квартиры и коммунальных расходов


значительно меньше 45.
1030 1352145
>>52137
>>52144
Я к тому, что, понятное дело, вакансия рассчитана на удаленщиков из провинции, где 45 это охуенная зп, а не на постоянно живущих в ДС.
1031 1352175
>>52145
Я удаленщик из провинции, сейчас работаю за 60к и без всяких фулкаков, а на чистом пых-беке.
Чет ты реально мало предлагаешь.
1033 1352192
>>31378 (OP)
<?php

error_reporting(-1);
$random=0;
echo 'pull';

$random = mt_rand(1,6);
echo 'PC pulled $random';

?>
WHERES THE MISTAKE ANON?
1034 1352195
>>52175
Ну извините.
1035 1352209
Пачаны, есть такая функция, которая выводит сообщения.
Смысл в чем. Из одного файла вызывается эта функция и передает текст. А во втором файле сама эта функция.

1 файл
MessageSend ('Поле "Ваш Ник" пустое.');

2 файл
function MessageSend($p1){
header('Location: '.$_SERVER['HTTP_REFERER']);
$Massage = 'Ошибка: '.$p1.' !!!';
echo $Massage;
}

Вот в чем проблема, после вызова "header('Location: '.$_SERVER['HTTP_REFERER']);", дальнейшие команды "echo" не срабатывают.

Как принудить их сработать?
1036 1352233
>>52209
А никак. Все, что после хедера вызывается, исполнено не будет, ты ведь очищаешь $_SERVER и передаешь новые заголовки.
Хотя вроде бы переменная массаж инициализируется, но у тебя не будет к ней доступа. Тут даже трюки с ob_start и ob_get_clean не сработают, потому что заголовки превыше всего.
1037 1352238
>>52192
А есть варианты, как сделать такую конструкцию другим способом?
1038 1352265
>>52192
Строка в одинарных ковычках не парсится на предмет наличия переменных.
1039 1352283
Всем, кому в соседних тредах нарасказывали про то, что PHP сейчас не самый модный - в Яндексе новый проект пишут на PHP (Symfony) и прямо сейчас ищут разработчика: https://moikrug.ru/vacancies/1000049016
1040 1352339
>>52283
Хуяндексе
1041 1352369
Парни, есть один вопрос
Пытаюсь спарсить сайт CURlом, на сайте штук 15-20 тегов <a> под одним классом, а курл видит только половину из них. Есть идеи почему так происходит?
1042 1352405
>>52369
Потомучто в xdebug стоит ограничение на вывод символов в консоль?
1043 1352406
>>52283
Лан поясняю.
ПХП был немодным за бугром до ООП и вообще до 7 версии. Он объективно был непригодным. Но до местных пидорах, этот тренд начал доходить только недавно, поэтому существует парадокс - пыха - ацтой, но почему - никто не может объяснить. Пидораха кукарекает, что на швитом жападе так скозали, а то что сказали это 100500 лет назад ему неведомо.

Пыха в тренде нынче везде. Как за бугром так и в рашке. Язык занял свою нишу и стабильно ее удерживает.
1044 1352413
Посоны, PHPSTORM на рутреке без вирусов, качать можно? Если бы работал и были бы деньги, однозначно бы купил, сейчас лишний бакс на счету. Мне чисто перед поиском работы обкатать его, хотя мб и триальную качну если есть. Сейчас sublime 3 настроил с плагинами и прочим в недо IDE. Netbeans пробовал но не то, еще в IDE есть встроенный форматтер кода по PSR вот это тоже прикольно
1045 1352424
>>52413
В смысле netbeans не то? Он в ряде вещей даже лучше, чем шторм.
14988500358560.png302 Кб, 700x700
1046 1352425
>>52424
я с ide игрался вообще только, но заметил что при наведении мышкой на класс ide его не ищет, а в том же сублиме можно кликнуть и он сам по неймспейсу находит нужный класс, или хз, там можно как-то включить.

Вообще, у Нетбинса такие же возможности, чем лучше, чем хуже, его можно так же кастомизировать? И еще нет карты документа чтобы быстро скроллить
1047 1352428
>>52406
После JS современный PHP мне вполне нравится. В Питоне например я бугуртил от лямб в одну строку, В JS в колбэк пол-программы завернуть можно.
Единственно в PHP какая то кривая система области видимости переменных. В JS как то более естественно чтоли.
И пишут что с 7 версии быстрее Питона.
А вообще конечно рыночек решает. Если человеку нужен магазин - то нахуя ему на Node/Jango например городить, если с той же эффективностью он реализует это на ПХП, на котором разработчиков гораздо больше.
1048 1352499
>>52406

>пыха - ацтой, но почему - никто не может объяснить


мне на ебаное ит сказали, что у погромил есть своя иерархия
похописты - пидоры ёпта
1049 1352502
>>52428

>PHP мне вполне нравится


а я когда на пыхе чё-нить пишу представляю что кодю не на нём, а на жаваскрэп или на пайтхон
т.е. это когда тню ебёт какой-нить карлан, а она представляет у ся в башке своей сраной, што в пизде у неё хуй альфача, а не омеги
вот точно так же у меня дела обстоят с пиэйчпи
1050 1352506
>>52502
...
представляю, что вместо знаков доллара я вижу вары
вместо точек плюсы
вместо стрелочек точки
а вместо фигурных скобок мне мерещиться индентация
1051 1352515
>>52502
>>52506
Проиграл с тебя.
1052 1352524
>>52425
Пишу в нетбинс онли. Пробовал штор - не зашел.
Нетбинс обвешал плагинами и вуаля. Все есть и дебагер и хуягер и карту поставил. Мне нравица
1053 1352536
>>52413
зачем качать на рутрекере, если можно скачать с офф сайта и ввести просто сервак активации левый, который тебе на год мб и навсегда активирует его?
1054 1352567
>>52502
они правда так представляют??? не может быть...
1055 1352570
>>52502
ответьте пожалуйста, скажите что это не так
Image 1.png1 Кб, 288x160
1056 1352651
>>47193
Я написал тестовое.
Rate me /pr/
https://github.com/rollertinqq/-tictactoe/
1057 1352655
>>52651
Нахуя на гит залил?
1058 1352657
>>52655
а куда надо было?
1059 1352663
>>52657
Да никуда не надо. Серваки блять уже лопаются от ваших бесполезных велосипедов и учебных задач, которые не только никому, они даже вам нахуй не сдались.
1060 1352666
>>52663
У тебя спросить забыли
1061 1352695
аноны, поясните деревянному. Как закрыть доступ к html странице, запилил скрипт, авторизация и всё такое. Нужно сделать проверку наличия кук и если их нет, то переадресовывать на другую страницу тем самым закрывая доступ к контенту, я правильно понимаю логику? Я написал скрипт, но не знаю как его прикрутить к html документу, каким тегом и т.д.
P.S. Скрипт на куки я написал.
1062 1352758
>>52695

>Как закрыть доступ к html странице


Через .htaccess.

>не знаю как его прикрутить к html документу


Если js, то <script></script>
Если php, то меняешь расширение с .html на .php и вставляешь скрипт в <?php ... ?>
1063 1352775
>>52758
теперь при открытии этого html у которого поменял расширение на php просто в текстовом виде строки с разметкой html и вставленным кодом
1064 1352778
>>52758
под закрыв доступ я имею ввиду вход только для авторизованных/зарегистрированных пользователей, правильно ли я понимаю, что это нужно делать через .htaccess?
1065 1352806
>>52413
>>52425
В нетбинс тоже форматтер кода есть, по PSR настраивается. Карта навигации по классу там есть. Переходы по названию класса тоже. В PHPStorm есть конечно пара штук, каких в нетбинс нет вроде этих неймспейсов, но они не особо ценные и работу как-то существенно не ускоряют. В нетбинс повседневная работа с кодом вполне комфортна, у нас на фирме на нем работают с кучей проектов без проблем. Phpstorm имхо оверхайпнут, за такие бабки, какие они там за него требуют, он особых преимуществ перед бесплатным нетбинсом не дает.
1066 1352813
>>52806
Дополню.
Меня перегоняли постоянно на пхпшторм, мол там можно настроить работу с удаленным сервером. Поковыряся и оказалось в нетбинсе такая шляпа тоже есть.

Я если честно хз что еще там надо. Форматирование кстати там неоче настраивается, например or и and не понимает и плохо перенос строк настраивается. Ебался с этим
1067 1352847
>>52695
бамп вопросу, заебался голову ломать. Уже нихуя не понимаю.
После верной авторизации пользователь получает куки, как написать скрипт проверки кук и если не совпадает/или их нет, то соответственно кикать посетителя со страницы
1068 1353155
>>52847
у тебя есть страница:

index.php

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

<?php

if huiv и т.д, и если что-то не так, делаешь переадресацию, все, дело закрыто

>как написать скрипт проверки



ну мануалов дохуя в интернете, первое что тебе нужно научится - гуглить
1069 1353262
>>52813
Нетбис это ведь та же идея, только кастрированная. Такое чувство, что нетбинс это такой тестировочный полигон для остальных платных продуктов джетбрейнс. Туда запиливают всякие штуки новички, только-только пришедшие в эту компанию. Как только они надрочатся с кодом, их уже берут работать с платными средами разработок.
1070 1353336
>>53262
>>52813
>>52806
Ну нихуясе теперь. Сравнили жопу с небом.
Разумеется phpstorm гораздо лучше.

>есть форматтер и автопереход, хуле еще надо епта бля


Да вы охуели?
СТАТИЧЕСКИЙ АНАЛИЗ. Запусти 1 раз пых-шторм на своем говнокоде и ты охуеешь от количества хуйни, которую ГОЛЫЙ шторм там нашел ну просто сходу.

ПРОДВИНУТЫЙ АВТОКОМПЛИТ И PHPDOC.
Пых-шторм умеет то, чего не умеет нетбинс. Например, слабо переименовать несуществующий, описанный в пых-доке метод в 25 разных файлах?

ПЕРЕМЕЩЕНИЕ КЛАССОВ И ИЗМЕНЕНИЕ НЕЙМСПЕЙСОВ.
В нетбинсе это целая трагедия. Там тупо нет возможности одной сука кнопкой переместить корректно класс с изменением его неймспейсов (в том числе в овердохуя других файлов, что его импортируют).
А тут CTRL+M и готово.

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

ЕДИНАЯ ЭКОСИСТЕМА INTELLIJ
Все иде жид-бреинсов очень похожи. 1 раз привыкнув, ты можешь вообще легко менять иде под нужный язык и все настройки будут в точно тех же местах, что и в другой иде. Интерфейс тот же. Более того, все проблемы и баги тоже там везде едины.

phpstorm-сектант
1071 1353348
Кстати, качал на the pirate bay версию 2018.3 - она точно работает.
1072 1353419
Часто ли рефлекшн апи используете в проектах?
1073 1353538
>>53419
IoC на рефлексии работает
1074 1353544
Какой фреймворк лучше использовать: Yii2, Laravel, Symphony?
1075 1353548
>>53544
точнее, какой актуален и быстр в освоении?
1076 1353599
>>53544
смотря что нужно делать
1077 1353600
>>53599
побыстрому сделать сервак маленькой соц сети
1079 1353613
>>53602
спасибо, посмотрю. Олсо, читал в одной статье что ларавел глючит иногда, типа может не распознать некоторые методы, хотя они есть. Такое может быть?
1080 1353646
>>53538
А что это такое? Я читал, что это просто особенность фреймворков такая. Я вот даже сейчас пишу свой фрейм и вижу, что код из контроллеров, который я пишу, вызывается в совершенно другом месте. Код вдругих классах тоже вызывается в других классах и его результат передается в другие классы, где уже подтягивается другой мой код.
Это оно?
И причем тут Inversion of Control?
1081 1353649
>>53646
Имею ввиду, как инверсия контроля связана с рефлексией?
1082 1353655
>>53336
Сектанство какое-то точно, все это в работе ни разу не нужно было. Классы рефакторил в нетбинсе, пока хватало. Автокомплитом не пользуюсь, напечатать быстрее бывает, чем тыкать там в нем. Для статического анализа тулзы есть специальные, у нас в интеграционных тестах подключаются. Phpdoc в нетбинсе есть с автозаполнением из типизированных параметров, пока тоже хватало.
1083 1353662
>>53544
Переводили с тимлидом проект на Ларавел, че-то говно сложное и мутное оказалось, документация малопонятная, джунов пытались подключить - им вообще темный лес, потом пересели на Симфонию - все просто, логично и понятно, стандартам соответствует, все новые фишки там, дока понятная, джунов достаточно быстро подтянулись, еще вроде как и побыстрее, на ней и остановились. До Yii2 не дошло, симфонии на все хватило. Теперь на новых проектах ее ставим.
1084 1353677
>>53649
Dependency injection с ней связан.
Ioc-контейнер получает тип аргументов метода с помощью рефлексии.
1085 1353678
>>53419
Нет, трюков с рефлексией в коде обычных сайтов быть не должно, так как она позволяет извлечь внутренности объекта, поменять приватные свойства/методы на публичные и не только, то есть программа может менять себя по ходу выполнения. Рефлексия может использоваться в библиотеках для генерации документации по коду, либо библиотеках для обнаружения багов в коде (PHPStan, Psalm). Нужно понимать как работает рефлексия (почитать мануал на php.net), так как будешь часто натыкаться на неё в коде библиотек, но в своих проектах стоит её избегать.

>>53538
IoC это один из подходов для организации слабой связанности между частями системы: https://martinfowler.com/bliki/InversionOfControl.html
К рефлексии это не имеет никакого отношения, ты путаешь с autowiring - там да, на рефлексии: https://symfony.com/doc/current/service_container/autowiring.html

>>53649
Никак.

>>53348
Поставь EAP версию (месяц бесплатно) и просто переустанавливай каждый месяц, до тех пор пока не начнёшь зарабатывать программированием деньги. Если студент - можешь отправить фото студбилета, дадут лицензию на год (я так 4 года продлевал). Ещё у них бывают скидки на день дружбы 40%. В общем, не воруй, лучше поддержи отечественного производителя.
1086 1353689
>>53649
В обычном классе у тебя в конструкторе будет написано куча $var = new SomeClass($arg1, $arg2, ...). При инверсии контроля у тебя в phpdoc класса будет написано что-то вроде @inject SomeClass.
Дальше работа контейнера зависимостей будет в том, чтобы при создании классов через него эти строки через рефлексию понаходить, подбирать нужные аргументы/объекты/классы и инжектить их в конструктор класса. При всем этом часто нужно бывает посмотреть в методы и phpdoc класса до его инстанциирования через рефлексию.
1087 1353708
Можно переходить в новый тред >>1353705 (OP)

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

>Yii, jQuery



к-к-комбо
tumblrpjy0t6gIjK1rp8y35o11280.jpg705 Кб, 1191x1684
1089 1354219
Laravel
1. Не понимаю в чем профит сервис контейнера? Уже пересмотрел много видео и статей и примеры. Но я не понимаю через сервис провайдеры мы как бе можем подменять реализации интерфейсов того что будет храниться в сервис контейнере, но мы как бы можем сделать это и без него в чем профит использовать именно его? Да реализация через него синглтона довольна удобно и ясна, но она не так часто нужна, так для чего еще?. Так что вопрос зачем?
2. Заодно вопрос какая структура папок должна быть для контрактов и их реализации.
3. Если бороться с жирными контроллерами через сервисный слой то какую выбрать структуру папок чтоб можно было вернуться к проекту через месяц?
1090 1354594
Пиздон или Джава? На чей хуй пересесть? Что анон посоветует?
1091 1354826
>>31378 (OP)
Объясните, как писать код с HTML и PHP одновременно? В одном файле хранить код или отдельно?
Прочитал про шаблоны ОПа, но че то не понял.
1092 1356078
>>54826
Сначала обрабатываешь данные которые пришли от пользователя, потом работаешь с базой данных и только потом делаешь шаблон страницы на ХТМЛ с вкраплениями ПХП кода для вывода динамического содержимого страницы.
можно все писать в одном файле, но нахуя? тебе жалко места в папке для еще одного файла?
15498749681870.jpg572 Кб, 1419x1806
1093 1358835
Какую книжку по основам php имеет смысл почитать, если не Котерова? Знаю, что есть куча сайтов, но в форме книги мне легче.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 11 марта 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски