Ну что, у кого-то начался рабочий год, у кого-то - учебный. А мы по-прежнему изучаем язык 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.mdhttps://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? — Да, однозначно. Посмотри любую вакансию.
Код нужно писать не как попало, а аккуратно и по правилам. Почему? Потому, что на неакуратно написанный код не хочется даже смотреть. Если каждый будет оформлять код как хочет, будет бардак.Если тебе лень выравнивать код руками, закачай его на 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.mdPSR-2: https://github.com/samdark/fig-standards-ru/blob/master/accepted/ru/PSR-2-coding-style-guide.md
Напомню себе проверить: 16/01/19 >>1328089 https://github.com/asdasdasdasddasasdasdas/StudentList Кроме этого, я в прошлом треде ответил на все вопросы, проверил все задачки. Зайдите и посмотрите, если вы что-то спрашивали: >>1305368 (OP)Если вас пропустили, напомните о себе в этом треде.
АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ АЛЛИЛУЙЯ
Как новичок должен относиться к людям, которые пишут, что ООП это антипаттерн и он должен самоискорениться из мира проектирования програмного обеспечения?
>>1331389Хочешь сказать, что ООП и паттерны это самое важное в программировании, верх мастерства разработчика?
>>1331384В том виде, в котором это существует сейчас - да, антипаттерн, дешевый понт, не являющийся чем-то выдающимся, хотя адепты поют об обратном. Современное ООП и паттерны - не более чем лозунги, а кто им следует - не более чем сектанты. Потому что оно ничего выдающегося из себя не представляет, с точки зрения грамотного инженера, но хайп такой огромный, как будто это лучшее изобретение человечества.
>>1331397Так никто и не говорит про современное оопэ, где пишут процедурный код в классах. Я лично читаю старые книжки 20 века и черпаю идеи оопэ оттуда. Вот это действительно годнота, вот тогда реально умели люди программировать.
>>1331397>>1331396КАКАЯ НАХУЙ РАЗНИЦА, КТО КАК ПИШЕТ???Люди, программисты, составляют договоренности по написанию кода. Так рождаются конвенции. Им нравится так писать, здесь нет правильного или неправильного подхода, как у врачей, здесь царит полная свобода действий.А всякие сектанты, как вы, навязываете людям, которым удобно писать в стиле ООП, свою маниакальную идею отказа от современного ООП в угоду хуй пойми чему. Что вы забыли в треде языка, который может писать любыми способами? Идите в джаву и сисярп навязывайте свое мнение этим лохам, у которых в основе языка уже ООП-подход.
Кто-нибудь совмещает с основной работой? Если да, то как, удачно? Кто-то уже ушёл со своей специальности на кодера?
>>1331402Ну попробуй откажись от активрекорда или датамапера или или адаптеров в любой dbal или фасадов в ларавеле, от декораторов которые используются повсюду, от эвентлисенеров.
>>1331406По-русски можно? Ненавижу проггеров за то, что они смешивают инглиш и русиш. Учись, блять, разговаривать на русском, а не на неологизмах.
>>1331400Идея ООП изначально была глупой. Алан Кей же был биологом, и еще очень любил громкие высказывания, якобы он все понимает лучше других. В математике насколько мне известно он ничего не открыл. Из этого следует, что у него была прочная профессиональная деформация в сторону биологии. Биология имеет мало общего с техническими науками, и инженерией. Но Кей все равно решил скрестить бульдога с носорогом. И насколько мне известно не реализовал свои громкие заявления. Его модель ООП так и осталась никому не известной, но из-за него появились другие модели, которые еще более провальны.Поэтому книги по ООП, старые или новые, априори содержат в себе чепуху. Так как сама идея чепуха, а реализация еще хуже. И не стоит забывать, что ООП на классах не единственная модель. Есть еще прототипное ООП из языка Self, и якобы тру-модель из языка Smalltalk, которая потом (в Smalltalk-80 и далее, а может чуть раньше) тоже была сильно извращена.
>>1331402Разница в том, что грамотного инженера сразу видно по темам, которые его интересуют. Если интересуется паттернами и ООП, значит априори кодер без знаний математики, без желания осваивать науки, без способности отличать хорошее от плохого. Человек вроде тебя, громкие истерики с матами, нежелание учиться, и т.д. и т.п.
>>1331406Что ты сказать хотел? То что есть некий activerecord не означает, что ООП и паттерны это центр вселенной. Подходы могут быть и другие, не основанные на ООП, на объектах, и т.д. Ты цепляешься за слова, не понимая их сути. Ведь что такое объект? Вопрос не простой. Кто сказал, что объект это экземпляр класса? В ФП языках функции - объекты.То есть, пересматривая ООП, нужно пересматривать и все термины. Потому что они уже как паразиты.То что ты пишешь, можно назвать "Гради Буч головного мозга". Красивые термины, много слов, а смысла под ними никакого. Просто заучил и все. Это глупость, антинаучно, не может инженер быть таким, как обезьяна повторять одно и тоже. Он должен уметь мыслить.
>>1331410Да давайте в пхп треде филиал рентв устроим! Идея ООП глупая. Альберт Эйнштейн мошенник. Древние гиперборейцы умели летать в стратосфере. Как лечить геморрой огурцами...
>>1331410Обезвоженный вариант твоего поста: "мне не нравится ООП".А почему, знаешь? Ты не привел еще ни одного доказательства того, что ООП это говно. Нет никаких тру в программировании и проектировании. Для компьютера это всего лишь единицы и нули. А проекты пишут люди так, чтобы им было удобно. Если бы идея ооп была говном, она бы уже давно провалилась, как ты выразился.>>1331411Я вообще считаю, что программа (любая) должна иметь одну точку входа и одну точку выхода. Программа должна выполняться построково, линейно, без гото и прочей мешанины классов. Программа, которая находится в одном файле и каждая строчка выполяется последовательно - это идеальная программа. А то, как разрабатывают современные разрабы это спагетти ебаное, в котором разбираться придется не один месяц.
>>1331415>Если бы идея ооп была говном, она бы уже давно провалилась, как ты выразился.Все наоборот. Глупые идеи всегда выстреливают, потому что умных людей, хорошо понимающих науку и инженерию единицы. Кто отвергнет ООП? Школьники, кодеры без образования? Только тот кто понимает математику, науку, и инженерию. Таких очень мало. Кто использует ООП? Все кому не лень. Но у них у всех есть общая черта, они не знают и не понимают математику. Так как не понимают математику, то не понимают и науку с инженерией в целом.В математике никогда не бывает лишних абстракций. Поэтому она служит маркером для инженеров, показывая их уровень, и вообще предрасположенность к профессии. ООП полностью построено на идее множества абстракций, которые не решают никаких задач.Математики и инженеры начала, середины, и немного конца 20-го века, были последними кто мог создавать шедевры. Делать вещи простые, компактные, функциональные, но без лишнего. Как пример Лямбда-исчисление Чёрча, и комбинаторная логика Шейнфинкеля-Карри. Кто из современных кодеров додумался до подобной идеи? Никто. Все только плодят бездумно лишние абстракции. Да еще и гордятся этим, задирают нос, думая что они умные.
>>1331415>Я вообще считаю, что программа (любая) должна иметь одну точку входа и одну точку выхода. Программа должна выполняться построково, линейно, без гото и прочей мешанины классов. Программа, которая находится в одном файле и каждая строчка выполяется последовательно - это идеальная программа.Не идеальная. Как тогда быть с параллельностью, если все линейно и построчно? В математических вычислениях нет течения времени, нет хранимого изменяемого состояния. А ты предлагаешь подход противополжный, где состояние будет постепенно изменяться, моделируя ход времени. Такие программы трудно параллелить, они ограничены по возможностям.
>>1331431>Лямбда-исчисление Чёрча, и комбинаторная логика Шейнфинкеля-Каррибесполезная хуета как впрочем и вся маняматика.
>>1331432В математике нет параллельности. Соответственно, нет времени, которое бы эту параллельность имитировала. >нет хранимого изменяемого состоянияДля этого и была придумана динамическая память.>>1331431Глупые идеи выстреливают не потому что все люди долбоебы, а потому что эта идея этим долбоебам подходит. Ведь почему сейчас все пользуются ООП? Потому что эти паттерны решают задачи большинства людей. А непонятые гении, как ты, сидят на задворках науки и пытаются что-то кукарекать. Но нуда им до голоса со стороны параши. >В математике никогда не бывает лишних абстракций.>Все только плодят бездумно лишние абстракции. Ну это вообще ПУШКА. Ты похоже не выспался совсем.
>>1331441Любое математическое вычисление можно распараллелить. Так как нет течения времени. Время не имитирует параллельность. Время течет едино, как оно может быть параллельным? Наоборот, когда есть течение времени как в императивных и ООП программах, становится сложно выполнять параллельные вычисления. А так как архитектура компьютера без параллельного выполнения не может уже выдать больше мощности, программы приходится параллелить.
>>1331441>Для этого и была придумана динамическая память.Что? О какой памяти идет речь? Я говорил о том, что изменяемое состояние не позволяет параллелить, и приносит много других ограничений. Это решается очень просто, декларативными языками программирования, а все манипуляции с состоянием происходят на уровне уже процессора, после трансляции кода из декларативного языка.
>>1331441>Глупые идеи выстреливают не потому что все люди долбоебы, а потому что эта идея этим долбоебам подходит. Ведь почему сейчас все пользуются ООП? Потому что эти паттерны решают задачи большинства людей.Вот именно, большинство это просто пользователи. Они пользуются не задумываясь. Создать свое они не могут, они не умеют этого делать. А других создателей уже нет. За последние годы ничего не создано нового. Все основы Computer Science были заложены в 20-ом веке. Те кто формировал CS уже умерли, либо уже не у дел.
>>1331441>Ну это вообще ПУШКА. Ты похоже не выспался совсем. Покажи что в математике является лишним. Это та сфера, где все создано и используется для решения задач. Ничего лишнего. В отличие от программирования.
>>1331447Ты понимаешь принцип параллелизма? Это значит, что программа начала выполняться в одной точке, из которой вызвались еще две программы, например, подключение к двум базам данных, а может и не из этой, а из другой программы, и пока эти процессы не завершатся, программа не продолжит выполнение. Это два процесса, которые могут зависеть друг от друга, а могут и не зависеть. И вторая программа может ждать первую, когда она завершится. Вопрос времени налицо.>>1331449> говорил о том, что изменяемое состояние не позволяет параллелитьЗачем по-твоему процессору кэш? Он ведь так же распараллеливает задачи и хранит временные данные, которые изменяются.
>>1331433>бесполезная хуета как впрочем и вся маняматика.Если бы не было математики, не было бы и программирования. Не было бы Лямда-исчисления, скорее всего не было бы и работ Тьюринга. Несколько математиков (Тьюринг, Чёрч, и другие) конкурировали между собой, поэтому родилось несколько фундаментальных основ программирования и вычислительной техники. Не будь конкуренции, у нас бы не было компьютеров.
>>1331441>>1331447>>1331449>>1331451>>1331452>>1331457>>1331459Дебилов и шизиков полон тред.Все же пыхыпы - это диагноз и приговор, вот и очередная иллюстрация.
>>1331457Ты все запутываешь. Изменяемое состояние на уровне кода программы не позволяет просто и эффективно распараллелить. Потому что данные нужно как то синхронизировать. Если состояния нет, то и синхронизировать ничего не нужно. Поэтому ФП сейчас пошло в мейнстрим. Все ФП языки позволяют легко параллелить программы.Причем тут кэш процессора? Кэш не параллелит, и не для этого вообще создан и используется.
>>1331460Еще один быдло-кодер определился. С чего ты взял что я пишу на PHP? Это для начала, второй вопрос, чем PHP хуже других языков? Язык это инструмент. Грамотный инженер может писать код с помощью любого инструмента. Быдло-кодеру дай даже самый лучший инструмент, все равно он будет быдлокодить.Не инструменты красят инженера, а инженер инструменты. Вот дадут тебе самый лучший язык, что изменится? Ты же так и будешь чепуху писать, называть всех дибилами, и писать говнокод.
>>1331461>Изменяемое состояние на уровне кода программы не позволяет просто и эффективно распараллелить.Я тебе об этом и пишу. Есть два состояния: до распараллеливания и после него. В первом случае данные рассекаются на потоки и обрабатываются программой, во втором - данные синхронизируются и образуют единое целое. Такой принцип работает в видеокартах, например, и в ЦП.А кэш нужен для того, чтобы эти переходные значения хранить. Я и не говорил, что кэш параллелил что-то.
>>1331467Я могу писать почти на любом языке. Когда я был таким как ты, мне тоже не нравился PHP. В основном потому что такие как ты его поливают грязью. С опытом, увидев много других языков, я понял что язык это инструмент, и можно писать и на PHP в том числе. Все зависит не от инструмента, а от того кто его использует.Назови 3-5 хороших языков по твоему мнению.
>>1331468Ты говоришь об императивной модели, а я о декларативной. В ней все под другому. Посмотри на математические вычисления. В них в принципе нет состояния, а значит и синхронизации. Можно распараллелить любой кусов вычисления.
>>1331475Вали нахуй отсюда, если бы ты знал что-то кроме жиквери и фреймворка пыховского, то ты бы тоже умел писать на всех языках. Ибо все языки, как бабы - одинаковые.
>>1331468Зачем вообще смотреть на процессор? Есть ОС, которая дает абстракции процессов и прочего, есть язык программирования, который дает языковые абстракции. На этих уровнях нужно решать задачи. А на уровне процессора пусть решает ОС и компилятор.
>>1331478Напрямую ты, конечно, не повлияешь на работу процессора, но сможешь сильно упростить ему жизнь, если оптимизируешь свой код. Компилятор - машинка простая, она все переведет в инструкции для проца, а ебстись с утечками какими-нибудь тебе. Поэтому важно знать работу проца, ящитаю.>>1331474Я тебя понял. Мне как раз декларативная и не нравится тем, что там нельзя снаскоку понять, что происходит и сколько памяти затребует программа. При кажущейся краткости кода, куча неоптимизированных рекурсий может запросто засрать всю память. Собственно, как и циклы в импере, поэтому циклы - зло. Но зато более изящно решаются некоторые задачи, матан твой тот же самый.
>>1331484Вот есть к примеру Haskell. На нем легко писать параллельные программы. И не нужно ни о чем заботиться, потому что всю грязную работу делает компилятор.
>>1331488Писать функциональный код можно на любом языке. Как сказано - "программист на Фортране может написать программу на Фортране на любом языке программирования".Первый язык определяет все. Поэтому ты мне тут и доказываешь, что функциональщина лучше ООП, с чего и начался наш спор, собственно.
>>1331490Ничего ты не угадал. Это пример декларативного языка с возможностью легко писать параллельный код. Еще один пример Erlang.
>>1331503На Фортране нельзя. В нем нет даже рекурсии (раньше не было, сейчас может и есть). Писать можно, если в языке есть ФВП хотя бы. Только этот код все равно будет сложно параллелить. Так как транслятор языка не ориентирован на это.ООП создавали люди далекие от науки. Поэтому имеем то что имеем. Сравнивать его с ФП глупо, потому что ФП имеет математический базис, и очень долгую историю, фактически почти 100 лет. По сравнению с этим ООП детская поделка.
>>1331488Хаскелл - прекрасный язык и полезен для расширения кругозора любому программисту. Непонятно только, зачем ты тут разводишь флуд вместо того, чтобы писать на нем свои прекрасные программы.Не нравится PHP - не пишите. А вы разводите тут флуд на полтреда, что намекает на то, что вы в последнее время ничего не пишете, раз у вас так много свободного времени. Это тред для изучающих веб-программирование, так что выкатывайтесь обратно.Алсо, https://habr.com/ru/post/315152/
>>1331508Ты же понимаешь, что делать интернет-магазин на ФП это все равно что ездить на работу на ламборгини? Не тот это язык, чтобы пилить программы с простыми вычислениями %%и даже без оных%. Людям, далеким от науки, нужен был подход, который бы решал их задачи бизнеса. Вот они и придумали классовый подход для решения этой задачи. Они не были математиками, они высрали все, что смогли. И ты, инженер, сравниваешь себя с ними. Не стыдно?
>>1331509Ах, ты оказывается даже не знал, что ФП основано на математических моделях. Конечно, откуда быдло-кодер может это узнать.
>>1331511Об этом я и говорил. Что в программную инженерию поналезли все кому не лень, и лепят кривые поделия с умным видом. А потом школьники, и прочие битарды, с не менее умным видом рассуждают об ООП, и пишут что математика не нужна, Лямбда-исчисление говно, и тому подобное. Смешно на это смотреть.>>1331510Не нравится не читай. Причем тут Haskell? У некоторых как будто мозг деревянный. Им про фундаментальные основы говоришь, они не понимают без примеров. Приводишь в пример какой то язык, начинают беситься что язык не тот. Ты вообще хоть что нибудь понял из того что прочитал? Haskell пример умного транслятора. Просто пишешь параллельный декларативный код, а транслятор его переводит в императивный.
>>1331521Прекрасно, пишите декларативный код на любом языке, с или без ооп, только без флуда на 50 постов.
Няши, у меня вордпресс генерирует в одну определённую страницу неизвестный Javascript код. Мне нужно сделать правку в этом коде, но я не пойму, откуда он берётся. Когда захожу в окно редактирования страницы в самом ВП, то его там нет, файла с таким содержимым я тоже не нашел (смотрел с wp-content/themes... и wp-included. Сам ньюфаг в вордпрессе, взял задание на JS, а заказчик не сказал, что у него сайт на ЦМС. С меня няши :з
>>1331511С одной стороны это так, но с другой это выглядит чепухой. Если есть более совершенный подход, то его нужно использовать. Чем лучше решение тем лучше для всех. Если кто-то говорит, что нужно использовать более кривой подход, то он кто вообще? Получается уже наоборот, чем хуже тем лучше. Как я уже писал в одном из тредов, что подход ООП именно такой, чем хуже тем лучше. И вы все ему следуете, при этом пишите глупые детские шуточки про математику, Лямбда-исчисление, ФП языки.
>>1331521>Об этом я и говорил. Что в программную инженерию поналезли все кому не лень, и лепят кривые поделия с умным видом. Я понимаю, что ООП говно, и что между точкой входа и точкой выхода у этой программы мешанина из разных сортов спагетти, которая вдобавок еще и разложена по разным кастрюлям. И пока соориентируешься во всем этом дерьме, уже ничего не хочется делать. ООП все еще на плаву, потому что в проекты, написанные по этой технологии, вливаются тонны бабла. И будет вливаться дальше, потому что макаки дрочат ООП и делают на них свои сайтики, которые потом поддерживают другие макаки и так длаее. >>1331541>Как я уже писал в одном из тредов, что подход ООП именно такой, чем хуже тем лучшеЯ помню тебя.> И вы все ему следуете, при этом пишите глупые детские шуточки про математику, Лямбда-исчисление, ФП языки.Ты ебаный фанатик, который везде насаждает ФП. Оно может и лучше во многом, но точно не для клепания сайтиков с их ебучей вариативностью. Иначе это будет та же самая мешанина.
Доброго дня, вкатываюсь в тред успешных людей.Хочу рассказать свою историю.Программист, уже 23 года, заканчиваю профильный вуз.Ранее пробовал искать работу на c#, но не прошел собес на джуна, к которому очень готовился, и перепутал паттерных. Меня не взяли. Потом было одно тестовое задание, но я не успел поднять asp.net mvc, и не смог его сделать.Сейчас я работаю на php + html + js, пишу под один популярный шаблон магазинов, не важно. Делаю я это бесплатно, проект долгий, как закрою наверное заплатят.Мне интересен веб, я прошел курсы по html + js, но из - за того что в моей работае эти почти не используется, я почти все уже забыл. Я постоянно смотрю вакансии, иногда прохожу собес (успешно), мне высылают тестовое, я думаю что меня все равно не возьмут и не делаю его. Уже не представляю себя на нормальной работе в офисе, хотя раньше этого очень хотел. Для меня дико проходить безцельные интервью и ТЗ раз за разом, но нужны деньги.Вот так и сижу на тухлом стартапе с обещаниями золотых гор, и забываю то что знал ранее.Сейчас хотя бы пишу дипломы на c# подзаказ, надеюсь смогу оплатить арендное жилье.
>>1331567Ну, скореллирую со своей историей.>Ранее пробовал искать работу на c#, но не прошел собес на джунаЯ поначалу тоже на шарпе наяривал. Да и сейчас иногда. Но в моей мухосрани вообще такого не было и я пошел на первую же попавшуюся пхп галеру, как только деньги позарез стали нужны.В будущем и на нем поработал, но немножко, и на других направлениях. Главным в итоге все равно бекенд остался, причем язык не важен, просто вакансий пруд пруди именно на пхп. Да и душа к нему лежит немного.>Делаю я это бесплатно, проект долгий, как закрою наверное заплатят.Тут смотри, как ты знаешь людей с которыми работаешь, и если что указывай авторство на интеллектуальную собственность, а не просто жди оплаты. А лучше всегда так делай, если не составлял договоров.>мне высылают тестовое, я думаю что меня все равно не возьмут и не делаю его.Делал тестовые в кучу разных контор, когда уже с более зрелым опытом работу повкуснее искал. С тебя не убудет, особено раз ты безработный по факту и не сильно устаешь. Делай, что сможешь, и забей. Потом их вообще не будут спрашивать, байки потравишь с техническим специалистом в конторе и вакансия твоя.>Сейчас хотя бы пишу дипломы на c# подзаказКак-то раз я за конченный диплом заломил цену, которую студентики не смогли потянуть - как же меня обосрали, ууух. А так тоже мелочью по несколько часиков балуюсь. Это скорее отдых, чем работа.28, помидор с зп 250к.
До сих пор не совсем понимаю нужду в интерфейсах и абстрактных классах.Может кто oбъяснить на примерах?Это просто как шаблон реализовав по которому класс, oн тoчнo будет верно работать?
Есть ли возможность конструировать объявление namespace динaмически? Из строки например?Или можно ли как-то сделать, чтобы неймспейсы по дефолту задавались в сooтветствии с путем к файлу, а не в глобал пихались?
Анон, как пользовaтьcя sublime text? Я вот скачал, установил и все. Написать я в нем могу, а как запустить этот скрипт?
>>1331617Нельзя. Каждый класс относится к какому-то неймспейсу и это определяется еще до выполнения кода.Что значит "в глобал пихaлись"? Ты ничего не путаешь? Если тебе тяжело руками писать неймспейсы и use, поставь плагин к редактору, который это делает.
>>1331623Тут дело в версионирoвании модулей.Неймспейсы меняются абсолютно везде при создании новой версии, руками можно прaвить, но это пиздец долго и шанс накосячить ебливый.
>>1331619Редактор для редактироания кода, а не запуска скриптов. Запускать скрипт надо из консоли:рhр d:\tеmр\1.рhрПочитай пасту про консоль из ОП поста.Также, можно настроить саблайм чтобы он по какой-то кнопке запускал PHP, гугли как именно.
>>1331567И я вкачусь. Студент-мeханик ИTТ, 23 гoда. Заканчиваю магистратуру по направлению механика. Год проработал на заводике инженером-исследователем, думал пойти в науку, но что то совсем не идет у меня это дело. Все время хотел вкатиться в айти, но только начав изучать какой нибудь ЯП через день - два желание пропадало. У вас тут уютненько в тредике, буду пытаться сделать студентиков!
>>1331617Объявление - нет. Использование можно, рефлексия работает с зарегестрированными автозагрузчиками. А вообще изза автозагрузки можно вообще на неймспейсы не ориентироваться (не делай этого, просто как пищу для размышлений дал).>а не в глобал пихалисьОни не пихаются. Ну вернее пихаются конечно, директивы же, но автозагрузку по стандартам можно как угодно извратить. Делать так не надо, но он же об этом спрашивал.>>1331629А вот тут я тебя понял. Я писал костылик для версий для одного проекта. Смена версий не была частой конечно, но нужно было сделать обратную совместить, то есть не терять код. Тут нихуя не поделаешь. Только оставить код прошлой версии позади например в другом неймспесе, а продолжать работать уже в новом.
>>1331647>А вот тут я тебя понял. Я писал костылик для версий для одного проекта. Типа когда версия апнулась и изменилась какая-нибудь мелочь и старые версии приложений начинают отваливаться, пока не обновятся? У нас старые версии затребовали оставлять на случай этого кaк раз. Старые приложения работают со старым апи, обновятся - работают с новым. Как-то так.
>>1331629Что значит версионирование модулей? Тебе надо в одной программе иметь 10 копий одного класса? Ты явно делаешь что-то не так.Заменить нeймспейс в большом количестве файлов можно также функцией "поиск/замена" в твоем редакторе кода.Но я ни разу с таким не сталкивался и интуиция подказывает мне что ты делаешь что-то неправильно. Какое еще версионирование, наркоман?
>>1331658Да, именно для этого. Бывает и хуже. Например когда между версиями меняется схема хранилища, а надо и то и другое держать. В таких ситуациях та еще война идет между разработчиками и менелджерами. Первые опнимают, что проще плюнуть и заставить обновляться, вторым важно не потерять стареньких клиентов, которые или не умеют обновляться, или принципиально не хотят. Но так то все решаемо, просто не по красоте.
>>1331658Версионирование API это другое дело. Обычно в API действительно используют версию в URL, например: /api/v2/citiesНo для этого не требуется генерировать неймспейсы. Просто сделай для работы со старой версией АПИ старое приложение со старым кодом, а для новой - новую. Не надо все версии АПИ запихивать в одно общее приложение.Если же речь о классах, и ты пишешь например библиотеку, то надо тоже сделать несколько версий библиотеки - наример lib1 для старых приложений и lib2 для новых, не стоит пытаться объединить это в одной универсальной библиотеке.
>>1331666У меня было по другому. Определенное апи - это точка входа и логика только в этой части приложения. Но ее надо соотнести с прошлыми, чтобы не было и там и там поломок. И с соседними, где логика немного отличается и должна адаптироваться под общую схему. Копировать в такой ситуации было не вариант, хранилище на любое количество и тип приложений было одно - только выкручиваться оставалось.
>>1331602Ну смотри, допустим у тебя в приложении есть форма логина, пишешь для нее класс.Затем тебе понадобилась форма регистрации, пишешь для нее класс.Тут замечаешь, что добрая половина методов и свойств первой и второй формы совпадает.Если ты быдлокодер и тебе нaсрать на качество твой работы, ты так и оставишь, тем более что ты никогда не писал приложение с более чем 2-3 формами.Но если ты ответственный программист, то догадываешься, что копипастить куски кода из одного класса в другой наверное неправильно. Тем более что в серьезных приложениях родственных классов будет не 2-3, а десятки-сотни.Пишешь абстрактный класс, который содержит в себе все общее, что есть у классов форм, называешь AbstractForm.Наследуешь LoginForm и RegisterForm от AbstractForm, в них прописываешь только уникальные для данного класса свойства и методы.Что касается интерфейса, то это набор требований к классу, то есть буквально мы пишем: "у всех классов, которые имплементируют данный интерфейс, должен быть определенный функционал (метод), неважно как они будут реализованы, но они должны быть". Пример не знаю какой привести.Вот чувак приводит пример со столами https://toster.ru/q/10682>Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.Обрати внимание, что Rollable (с колесиками) может быть не только стол, но и стул, кровать, то есть совершенно другие типы объектов. Метод roll() будет у них всех реализован по-разному, поэтому мы не используем тут абстрактный класс типа НечтоКатящееся. Тем более что один класс может реализовывать множество интерфейсов, а абстрактный класс можно унаследовать только один. Стол должен быть одновременно с колесиками и складывающимся. Мы не можем создать абстрактный класс НечтоКатящееся, затем НечтоСкладывающееся, и создать класс Стол наследующий оба абстрактных класса. Да и не для этого они придуманы, класс всегда описывает объект, а интерфейс функционал. Абстрактный класс это обобщенное описание категории объекта, допустим стол, или стул, или кровать. От него наследуем уже какую-то конкретную разновидность, например СтолПисьменный расширяет АбстрактныйСтол реализует Складывающийся интерфейс.А можно и оба интерфейса, пусть стол будет Складывающийся и Катящийся.Затем создаем класс КроватьДвуспальная расширяет АбстрактнуюКровать реализует Катящийся интерфейс.Короче абстрактный класс это обобщение, чтобы не копипастить общие методы и свойства по всем классам-наследникам, мы их группируем в одном классе.Интерфейс это описание функционала, один класс может реализовывать множество интерфейсов. И один и тот же интерфейс может быть использован множеством классов.Интерфейс не имеет реализации, он только декларирует, что у класса обязан быть определенный метод, а реализация может быть какая угодно, нас это не интересует, она инкапсулирована внутри.
>>1331411>кодер без знаний математикиО, я смотрю ты опытный разработчик! Можешь прояснять новичку какая глубина знаний математики требуется пхп/веб разрабочику? С первого взгляда кажется, что можно обойтись арифметикой из начальных классов. Хотелось бы услышать развернутый ответ от специалиста.>паттернами и ООПНо ведь почти в каждой вакансии их указывают в требованиях?!
>>1331675Спасибо С абстрaктным классов всё ясно. Ну а для чего и когда используют и стоит использовать интерфейс, я так и не понял особо?В том случае когда мы не знаем какой объект ожидать и хотим что бы это был хотя бы наследник интерфейса?
Короче, по-моему я слишком тупой для математики даже элементарной.Объясните мне хоть, чтобы я понял, где мой мозг отказывается работать.Вот там в уроке про циклы предлагают написать цикл с умножением числа на само себя.Ну окей, решил, пусть до 9 умножается включительно. Написал цикл:for ( $a = 1; $a <= 9; $a++) { echo "должно быть произведение двух чисел $a и $a = \n";}И вот тут моё слабоумие даёт о себе знать. Я не понимаю, как мне впихнуть в цикл произведение этих чисел.
>>1331685тут ответа нет? https://github.com/codedokode/pasta/blob/master/php/interfaces.mdИнтерфейсы реализуют, а не наследуют. Интерфейс это набор требований (требований, чтобы был определенный метод с определенным функционалом).
>>1331683>какая глубина знаний математики требуется пхп/веб разрабочику?/Логика и здравый смысл нужны. Математика бонусом идет в любом деле, но фанатизм в таком виде - это минус уже. Заебали ваши срачи, тем более с этими пастами, котоыре я еще лет 5 назад видел. Только тред перекатили и уже все засрано бессмысленной эзотерической хуйней о том, как один обиженный приперся толсто потроллить, а ему решили все ответить. Тред в несущественных спорах о вкусах превратился.
>>1331687Бля, я догадался, что произведение надо просто в цикл засунуть, и что так тоже можно.Ну может я и не такой уж и слабоумный.
>>1331685Чтобы показать что класс относится к данной группе или имеет данное свойство. Ну анон привел пример выше, интерфейсом Rollable мы можем пометить классы, которые можно катать. Ну или если попробовать придумать более серьезный пример, например в какой-нибудь соцсети можно ставить лайки фотографиям, постам и пользователям. Классы, которые описывают эти сущности (Photo, User, Post), можно пометить интерфейсом Likeable. Допустим в этом интерфейсе определены 2 метода: добавить лайк (addLikeFrom(User $user)) и убрать лайк (removeLikeFrom(User $user)). Каждый класс может реализовать эти методы по своему, лишь бы они были реализованы.После этого, когда мы пишем функцию, и хотим сказать что на вход ей надо подать любой объект, который можно лайкнуть, мы используем интерфейс: function setLikeTo(Likeable $object) {...}Теперь любому программисту понятно какие объекты можно подать на вход этой функции. С другой стороны, функция получает гарантию что у переданного ей объекта есть методы addLikeFrom, removeLikeFrom. Более того, в будущем список таких объектов можно расширить, не трогая старый код. ну например если нам надо сделать чтобы комментариям можно было ставить лайк, мы делаем чтобы класс Comment реализовал интерфейс Likeable, добавляем ему нужные методы и его теперь тоже можно передавать в функцию setLikeTo, и она будет корректно с ним работать. То есть интерфейс это что-то вроде договоренности, которая проверяется интерпретатором PHP и он гарантирует что либо договоренность выполняется, либо программа прервется с ошибкой. Наследование - это другое. Наследование это когда мы делаем класс расширяя другой класс. Наследуются однотипные вещи: например мы можем унаследовать Танк от СредсвоПередвижения, но мы не можем унаследовать Комментарий от Фото так как у них нет ничего общего. Интерфейсы позволяют объединять не связанные наследованием классы. Конечно, программа будет работать и без интерфейсов, и без абстрактных классов. Она будет работать даже вообще без классов. Но качество кода будет неприемлемым. Интерфейсы и другие средства ООП позволяют разработчику задать правила использования его классов и методов, описать их. Например, если сделать функцию setLikeTo выше без исплоьзования интерфейсов, нет гарантий что на вход ей дадут правильный объект, и вообще непонятно что ей можно дать на вход. Код становится менее понятным, требует больше времени на работу с ним, легче допустить ошибку. ООП в первую очередь делался для больших проектов, где очень много кода. Без соблюдения правил ООП код станет настолько запутанным, что любые правки будут вызывать ошибки и будет уходить много времени на их исправление. В коде на 100 или 1000 строчек конечно это не заметно. А например, код ОС андроид содержит тысячи классов (хоть они и не на PHP, а на Яве, но ООП там примерно такой же). Обычно интерфейсы используются во всяких фреймворках и библиотеках. Ну к примеру фреймворк может содержать в себе код для проверки прав пользователей, но не содержать конкретного класса который представляет пользователя, а только интерфейс. В этом случае ты дeлаешь свой класс как тебе надо, реализуешь интерфейс и фреймворк может с твоим классом взаимодействовать.Если ты не уверен где надо применять интерфейсы, не применяй их пока.
>>1331683Требуется для чего? Смотря какие у тебя цели. Я не смотрю на требования. Мне интересно изучать в глубину и ширину. Чтобы не было областей, где я не понимаю что происходит. Это влечет за собой изучение математики, физики, и много чего еще. Просто изучай то чего не знаешь.Не знаешь архитектуру компьютера, - изучай. Не знаешь как работает процессор, - изучай. Алгоитмы, базы данных, математика, физика, машинное обучение, etc, - изучи это. Изучай то, что тебе нужно. А если изучать только то, что требуют, типа ООП, паттернов, то будешь расти не так как тебе нужно, а как хочет кто-то другой. Это очень ограниченное обучение получится. Потому что в какой-нибудь веб-студии создают сайты из говна и палок, и не хотят ничему учиться. Если следовать требованиям вакансий, то можно научиться какой-нибудь ерунде, про которую кто-то придумал, что она очень важна. Нужно мыслить своей головой.
>>1331687Циклы не имеют отношения к математике. В математике нет даже изменяемых переменных. В мперативном программировании все не так как в математике.
>>1331685Вообще, в ООП много средств, которыми ты задаешь правила работы со своим классом: - с помощью тайп хинтов ты указываешь что надо передать на вход функции- с помощь конструктора ты определяешь обязательные аргументы, без которых не создать объект- с помощью public/protected/private ты определяешь, какие методы откудa можно вызывать и инкапсулируешь данные внутри объекта- с помощью abstract методов ты определяешь правила наследования от данного класса- с помощью интерфейсов ты помечаешь классыВажно пользоваться всеми этими возможностями правльно. Их мы изучаем в задачах про Вектор и кошки-мышки.
>>1331703Хм. Но дело в том, что у ОПа в главе про OОП нет этой информации и предлагается решать их не зная всего этого
>>1331718Он идет в паре с "usе strict;"Позволяет oбъявлять переменные только явно "my $result", и избежать ошибки типа "return $reslt;". Сегодня решил попробовать пых, мне такого очень не хватает.
>>1331695>То есть интерфейс это что-то вроде договоренностиЗахотелось добавить, что часто для описания подобной "договоренности" используется слово "контракт". На самом деле повседневное совершенно дело встретиться с тонной контрактов хоть в пхп, хоть в джаве, хоть где либо еще. Просто ремарка, чтобы увидев контракты репозиториев каких-нибудь не было остолбенения.
>>1331723>мне такого очень не хватаетТам надо добавить error handler - функцию для обработки ошибок. И по ошибке "встретилaсь необъявленная переменная" что-нибудь сделать, например, выбросить исключение.Но не надейся там особо. Ни один из динамических языков лучше от этого не станет. Проверено уже.
Увидел на странице рекламу: > Как установить игру?> На компьютер или телефон. Смотрите прямо в поиске Яндекса! 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ды распространения вредоносных программ настолько эффективны что даже яндекс не может от них удержаться.
Возник вопрос по студентам. Каким образом лучше проверять переданные через форму данные?Я вижу такой сценарий:Перед тем как передать форму на сервер проверяем её жсом и если есть ошибки - выводим их, если нет данные идут в контроллер, который создает модель с переданными значениями. Если значения неправильные, у сеттеров модели выбрасываются исключения, которые мы перехватываем в контроллере. После этого завершаем приложение, пишем в лог ошибки и показываем пользователю какую-нибудь заглушку.В правильном ли я направлении думаю?
Аноны, а просто любопытно, как вы читаете тред? - заходите на главную, ищетe тред, переходите в него? - сохраняете в закладкти? - просто держите открытым постоянно и обновляете (я так делаю)И как находите ответ на свою задачу если ОП часто их проверяет только несколько дней спустя, и за этой время успевают запостить 300-400 постов?
>>1331745>Перед тем как передать форму на сервер проверяем её жсом и если есть ошибки - выводим ихПравильно, первая линия обороны так сказать, фактически иллюзорная, но лучше пусть будет, чем нет.>выводим их, если нет данные идут в контроллер, который создает модель с переданными значениямиИ в том и другом случае ты валидируешь все от а до я, как минимум не менее тщательно, чем на фронте.>Если значения неправильные, у сеттеров модели выбрасываются исключения, которые мы перехватываем в контроллере.Это от твоих предпочтений зависит. Кто исключения кидает на такую мелочевку и ловит их потом по иерархии. А кто составляет стек ошибок. Результат один и тот же. Выводить не обязательно. Что с ними делать решать тебе и под конкретный этап разработки.
>>1331738>Видимо сомнительные метoды распространения вредоносных программ настолько эффективны что даже яндекс не может от них удержаться.Что забавно, яндекс накладывает санкции на сайты с подобным видом монетизации.
>>1331749Добавлен в избранное двача. Обязательно добавляю в сообщение с решением какое-нибудь ключевое слово (чаще всего название задачи), по нему нахожу свой пост и ответы к нему. Если задачу нужно переделывать, ваш ответ сохраняю в ворд-файл, чтобы не искать каждый раз.
>>1331738Ага, а я кое-какой торрент качал с китайского (по моему) сайта, и там была страница с информацией о нем и большая зеленая кнопка скачать, а чуть ниже надпись "Яндекс-браузер". Интересно, все эти люди, кто в Яндексе или Гугле работают, они наверно гордятся тем, какие они умные, как они с закрытыми глазами могут нейросеть на Хаскелле написать (не то что эти крудописатели на PHP), но затем они идут на работу придумывать, как обмануть неискушенного пользователя и заставить установить их программу или ввести свои данные и согласиться на слежку, сохраняя при этом видимость свободного выбора (а также, как обойти GDPR, сохраняя видимость его соблюдения). Обе компании по сути зарабатывают на слежке и монетизации собранных данных.
>>1331750>И в том и другом случае ты валидируешь все от а до я, как минимум не менее тщательно, чем на фронте.class Controller{ // Получается где-то тут, перед передачей в модель нужно валидировать $name, $email? try { $model = new Model($name, $email); } catch () { // Что-то делаем }}
>>1331745Стандартный вопрос: урок читал? Там есть алгоритм (хотя ты можешь сделать и свой): https://github.com/codedokode/pasta/blob/master/forms.md> Перед тем как передать форму на сервер проверяем её жсомХватит HTML5 валидации.> Если значения неправильные, у сеттеров модели выбрасываются исключенияЕсть такой вариант, когда в модель встроена валидация, но он имеет недостатки. Что, если для проверки уникальности email надо обратиться к БД? Где ты возьмешь объект для работы с БД в модели? Потому выгоднее может быть сделать отдельный сервис-валидатор и в нем метод валидации: $studentValidator = new StudetnValidator(...);$errors = $studentValidator->validate($model);Использование исключений не позволяет передать несколько ошибок.
>>1331765Контрллер валидирует только инупт, потом слой модели валидирует данные.Например контроллер чекает что передано число больше 0, а модель уже валидирует на это число от 2 до 25. Конкретизируй отвественность, сначала контроллер, который ловит самые грубые ошибки, потом модель, которая ловит логические ошибки. Во всяком случае контроллер спокойно число от строки отделит, и многие другие вещи сделает без привязки к бизнес логике, а модель добьет остальное. (Модель в это случае не датакласс или активрекорд, не путай)
Короче, я нихуя не понял, что я сделал, но вышла такая херня в первой задачке, в циклах, там где каждый год на 10% сумма росла до миллиона.<?phpfor ( $a = 10000; $a < 1000000; $a = $a + $c ) { $c = $a * 0.1; $dayZ = $dayZ + 1; echo "идёт $dayZ год, и размер суммы составляет $a рублей, а вкладчику стукнуло уже N лет\n";}?>А как сделать, чтобы ещё и года от 16 отсчитывались вперёд?А то я сам не понял как сделал, чтобы отсчёт лет был, а вот года чёт не выходит.
>>1331465Опять этот коммивояжёр с обострением шизоидного артрита. Втирал за лямбду, посоны, или нет ещё?
>>1331465>Не инструменты красят инженера, а инженер инструменты.Лол. Нормальные люди инструментами пользуются. Нах их надо красить? Тебе их цвет не нравится?
>>1331789>Математики и инженеры начала, середины, и немного конца 20-го века, были последними кто мог создавать шедевры. Делать вещи простые, компактные, функциональные, но без лишнего. Как пример Лямбда-исчисление Чёрча, и комбинаторная логика Шейнфинкеля-Карри. Кто из современных кодеров додумался до подобной идеи? Никто. Все только плодят бездумно лишние абстракции. Да еще и гордятся этим, задирают нос, думая что они умные.#мюслиДушевнобольных
Ларавел-герои, поясните за такую штуку.Делаю простое CRUD приложение типа блог$post->body - тут хранится текст одной записи блога.Вот у меня есть в Blade шаблоне строчка:{{$post->body}}Она выводит текст. В случае, если в туда записаны html-теги, они тоже выведутся как текст, однако если записать так:{!!$post->body!!}То текст вернется с учетом разметки.Объясните, в чем цимес и теория стоящая за этими двумя записями? (ну с восклицательными знаками и без)
>>1331793Не делай вид что не понял. Хорошо, не инструмент украшает программиста, а программист инструмент. В умелых руках и PHP становится нормальным инструментом. А говно-кодеру дай самый лучший язык, все равно говнокод получится.
>>1331813Зачем бы программисту украшать инструменты?Ну и говнокодерами были все программисты. Кто был, кто есть. Тебе то что от этого, шизик?
Поясните пожалуйста за некоторые моменты MVC.Допустим, есть какое-то стороннее апи, которое возвращает джсон. Я хочу на страничке вводить параметр, который пойдёт в URL, потом по этому URL будет проведён запрос к апи, я получу в объект джсона, и ответ я хочу записать в базу данных.У меня должен быть один view с текстовым полем и кнопкой, откуда информация передаётся в контроллер, контроллер передаёт параметр в model, там выполняется запрос к апи. А вот дальше я не знаю, как это должно работать. Создавать ещё одну модель, куда будет передаваться джсон и который будет записывать инфу в БД через элоквент? Или всё делать в одной модели? Как правильно, памагити!!111
>>1332081Игра мне тоже понравилась. Действительно почему бы в оппосте не поддержать отечественного производителя!
>>1332067Ты должен решать проблемы применением паттернов, а не умножать их. Даже так - ты должен решить проблему, а паттерн нужен, чтобы объяснить другим как ты ее решил. В твоем ларавеле даже есть возможность сразу в роуте вьюху прописать. Т.е ты не обязан всегда MVC в голове держать.
>>1332089Тогда что мне делать конкретно в моем случае? С мвц или без него, мне важно понять как правильно в этом конкретном случае.
>>1332093Чтобы работало я слепил бы на коленке в одном пхп файле. Но я собираюсь выкладывать в общий доступ, а значит моя задача сделать ПРАВИЛЬНО (я уже третий раз повторяю это слово, а не слово АБЫ РАБОТАЛО). Если не можешь помочь, то зачем овтетчаешь?
>>1332103>моя задача сделать ПРАВИЛЬНОТы выбрал не ту профессию значит. Иди в физику или химию, хотя и там есть элемент творчества, особенно в химии.Лучше говорить не правильное решение, а приемлемое. Любое решение приемлемо, если оно хотя бы работает. А дальше его можно улучшать постепенно. Эволюция.
>>1332106>>1332104Я и так физик (точнее механик), а мвц учу ради своего маленького проекта. И как я должен его учить, если я запутался, а ответ мне дать не могут?
Что заставляет лютей юзать 1 мадженту? Это же лютая лапша из хрен пойми по какому принципу построенного наследования, кучи блять конфигов и шаблонов, которые немногим лучше xslt. Разбираться в этом всем аду особенно трудно, когда у тебя нет никаких контактов с тимой (особенно физических), которая около 2 лет своими руками возводила дополнительные круги ада, в которых на одну страницу приходится по 200 запросов к базе, а в половине из них не меньше 3 джоинов. А в довесок ко всему еще нашлась функция, которая почти в каждый из них добавляла джоин по селекту в котором был еще один джоин и один left join , который тоже блять по селекту в котором еще(!) один джоин.А самый пиздец в том, что это все в тырпрайз версии. Столько платить за цмс и сотворить с ней такое. Просто пиздец, никогда такой хуйни не видел.
>>1332107короче сове1. делаешь штобы работало2. (опционально) переделываешь, шоб было красиво/быстро3. (опционально) идёшь нахуй из профессии
>>1332107Тебе же говорят, не бывает правильного и не правильного в программировании. Это сугубо творчество. Делай как понимаешь сам. Если тебе сказать делай так или так, то ты ничему не научишься. Кто просто повторяет, становится макакой. Учись думать. Принимать решения. Пробовать разные варианты. Для инженера это самое главное.Спроектировать, собрать, найти слабые места и улучшить, - вот работа программиста-инженера.
>>1332067Я бы создал дополнительный класс, что-то вроде components/ApiHelper, передавал бы в него параметр, после чего он возвращал json который уже через модель записывался в базу.
>>1332130Разделение ответственности. Работа с апи может меняться и обрастать дополнительным функционалом. Или потребоваться в другом контроллере.
>>1332138А почему это нельзя сделать, когда придется разделить ответственность за дополнительный анал?
>>1332138А что функция это не разделение ответственности? Ее можно сделать универсальной. СИКП почитай. Ты предлагаешь преждевременную оптимизацию. Это overengineering чистой воды. Сразу видно почерк адепта ООП. Использую, да по-больше, но не знаю зачем.
>>1332146Потому что в твоем случае все обрабатываемые аналы считаются обычными. Условие для создания их как дополнительных не срабатывает.>>1332148Да ты же поехавший. Лапшу по всему проекту собирать потом легче будет? Очередной препод-теоретик их техникума в ебенях с нулем опыта пришел повыебываться.
так шо тут у нас? ооп нинужно? найс, 30 лет уже это слысу, но всё равно ооп еще здеся. а знаете почему? я заню почему, но вам не скажу)) ибо вы эгоисты, а ооп не для эгоистов придуман, а для командных работников
>>1332184Я благодарю не за содержание, а за тот факт, что он единственный ответил по делу. А хорош его совет или нет мне предстоит ещё определить.
>>1332148>Ты предлагаешь преждевременную оптимизациюКласс наваять для этих дел - минутное дело. Зато потом голова болеть не будет, собирая всё это дело в одном месте.
Почему у нас, пхпшников, нет такого набора модных и гламурных книжечек, как у рубистов??Как можнo выучиться красивому коду без современных и структуированных книжек на английском от профессионалов?
>>1332365И еще, правильно ли я понимаю что похапе устаревшая бекэнд штука для связи с БД формочек, обычный информационный(редкообновляемый) сайт можно написать без нее, верно?
>>1332374>похапе устаревшая бекэнд штукасчитай, што пыха это хуета, которой ты рулишь протоколом хттп напрямую. врядли это когда-нибудь устареет
>>1332413Напиши мне на своей ноде или ещё на чём запрос к стороннему API, да так чтобы ты потом не кричал НУ АНИ ДАЛЖНЫ СНАЧАЛА СПЕЦИАЛЬНА В НАСТРОЙКАХ РАЗРЕШИТЬ МНЕ ТЯНУТЬ ИНФОРМАЦИЮ С ДЖАВАСКРИПТА!!1.
>>1332451>к стороннему APIесли опенсорс, то особых проблем возникнуть не должноhttps://aws.random.cat/meow
>>1332502на локалхосте вполне норм, пока девелопишь и тестишьа в продакшн выкатывать куда? тоже на локалхост?ведь задача например - написать самый крутой аппликэйшн с котиками и утонуть в море говна бабла
>>1332499Код где, который я скопирую и вставлю в ноду, которую ты привёл в пример? Давай мне код, я его продублирую у себя, вставлю свою ссылку чужого апи и мы чекнем как оно работает (никак) и сколько строк занимает в сравнении с пхп (овердохуя).
Кажется у меня проблема.Я не знаю как коротко называть методы.Это уже совсем пиздец какой-то блять.Что делать? Как бы вы назвали этот метод?Просто убрать ByStatusChannelbotIdAndMessageSource нельзя, ибо там и по другим критериям методы есть.
>>1332576Впринципе тебе было бы удобнее билдер критериев иметь, чем городить эти обертки с детальным описанием в названии.С билдером мог бы сделать например $builder->nthOrEqualFrom(...params)->right()->byStatus(status)->byMessageSource(source)->get();и это более переиспользуемый и гибкий вариант. Правда я понятия не имею насколько это реально у тебя по коду реализовать.
>>1332576А нахуя вообще вливать всю суть в название метода?Бери пример с си-блядей. Они буквально несколько (1-3) букв берут от слова и разбивают его _. Да, это может показаться трудночитаемым, но в си все функции из stdlib хуевочитаемые да и нахуй не нужны, но у тебя же ЕБАНЫЙ ВЕБШТОРМ, навел мышкой на метой и у тебя уже документация подсветилась.
>>1332594Билдер и называется, только придется фантазию проявить. Примеры и объяснения по учебнику не для таких ситуаций. Наверняка видел аналоги в виде QueryBuilder всяких. Суть та же.
>>1332606Вообще я знаю паттерн, (но забыл название, лол), который позволяет создавать цепочки вызовов методов типа как ты выше написал. Если вкратце, суть в том, чтобы возвращать $this везде.Но вообще это уже какая-то ORM нахуй получается, в рот я ебал еще и орм на коленке писать тут, совсем говноедство какое-то будет, никто блядь не поймет потом мой код
>>1332628Ну вот в твоей ситуации это как бы билдер критерии для метода getNthOrEqualFromThis. Вариантов много, вон аж 6 параметров, один из которых массив. Делаешь class ShittyBuilder {private $id;private $otherParam;private $otherOtherParam;// other paramspublic function byId($id) {$this->id = $id; return $this;}// other methodspublic function fetch() {return $someInstance->getNthOrEqual($allYourParams);}} Вот тебе и билдер конкретно для того страшного метода с кучей параметров. Как ты понимаешь это на коленке и сделать можно лучше во много раз, просто как пример что тут нет ничего сложного. Полноценная орм и прочее, кстати, тоже пригодились бы. Раз у тебя ее нет можешь взять да доктрину подтянуть, там много чего есть.
>>1332635Тогда придется на тонны других методов тоже отдельные классы писать? Это же просто ебанутся как долго.Насчет орм и доктрины - да. В следующий раз, пожалуй и буду их юзать. Сейчас уже нет смысла тонны кода переписывать на нее.
>>1332642Ну как посмотреть. Вот у тебя есть метод getNthOrEqualFromThis. Первая же обертка над ним получилась с длиннющим именем. А таких оберток, судя по количеству параметров, может быть до ебаной жопы. Помоему лучше уж один раз сделать даже самый глупенький билдер и дергать через него, чем делать 100500 длиннющих методов вместо этого каждый раз. Сам же сказал, что есть и другие критерии к нему, значит проблема не в одном только том конкретном методе.
>>1332643Но тогда это будет практически эквивалентно прямым запросам в БД, только через обертку.Инкапсуляция, мам...Нужно создать несколько методов с выборками по определенным критериям, а не просто разрешить ебать таблицу в рот и жопу как хочешь.
>>1332598А мне нравится это сишное iInterfaceName и всякое подобное. Коротко и понятно, главное контекст знать.
>>1332647А через эти методы типа только в писечку ебешь, но никак не в рот и жопу как содомит какой-то? Чтобы полноценно выбрать решение надо разобраться в причинах, которые привели к той обертке, а не только на метод имени Льва Толстого посмотреть.
>>1332651>А через эти методы типа только в писечку ебешь, но никак не в рот и жопуНу вообще да, в том и смысл!
>>1332676Я как-то не вижу этого. Обертка с именем на целый фанфик по сути прячет всего 1.5 реальных параметра, притом сама целых 5 принимает. И реально спрятанный параметр всего лишь бул. Судя по всему есть еще и вторая такая, где _is_less тру. Шо так ебать можно, шо эдак.
>>1332576У тебя еще в phpdoc лишние @param, которые не несут никакой информации и которые стоит убрать.getNeighbourId/getNthId. Насчет bystatus... - это же явно можно назвать короче. Например, getNthIdByBotAndSource
>>1332589Выше дали совет про билдер.А если неохота делать билдер, можно сделать передачу массива: findNthId(['source' => ...., 'botId' => ...]);или сделать объект-фильтр (отличие от билдера: билдер создает объект, фильтр ничего не создает):$filter = new TgFilter;$filter->bySource(...);findNthId($filter);или findNthId(byTgFilter()->withSource(...)->withBotId(....));findNthId(TgFilter::create()->withSource(...)->withBotId(....));Как тебе? Без сверхсложных билдеров, объект фильтра типизируемый, документируемый и проверяемый. Для примера, поиск элементов в клиенте Селениум от фейсбука: https://github.com/facebook/php-webdriver$element = $driver->findElement(WebDriverBy::id('element id'));
>>1332576Также, возможно эту функцию просто стоит по другому назвать? Вроде getSimilarMessages или как-то так?
>>1332683Впринципе то, что я ему предложил больше похоже на фильтр как раз. Запомню это название, а то хуйню одну другой назвал.
Фреймворк yii2. Такая проблема: в верстке используется более свежая версия jQuerty, чем в фреймворке. В ассете отключаю jQuery, которая идет с вёрсткой - верстка корректно работает (меню сворачивается в бургер и работает), но не работает валидация от Yii. Делаю наоборот - верстка перестает корректно работать, но валидация отрабатывает своё. Какими путями можно решить эту штуку?
>>1332703Правильнее всего переделать верстку на использование jQ от Yii. Либо мучаться с jQuery.noConflict(), загружая 2 копии библиотеки и используя в верстке приватную копию.
Недавно столкнулся с проектиком на php 4. Ну как проектиком. Там весь код был в нескольких файлах. Забавно было то, что в одном из них я нашел аццкую смесь из всех языков веба. В index.php был php с подготовленными sql запросами, html, css в head и js в скриптовых тегах. И задумался, как же раньше было лампово, ни тебе стандартизаций, ни тебе менеджеров, которые наставляют писать по тз. Программистов вообще считали элитой своих наций. Никто не понимал, что они делают. Когда же все стало меняться? Я не помню этот момент. Но руку к этому приложили большие корпорации со своими стажировочками и пиаром высоких технологий среди масс. Ублюдки.
Почему PhpStorm1. Игнорит все SPL-исключения. Тупо все что унаследовано от двух главных SPL-классов исключений LogicException и RuntimeException - игнорится.2. Имеет глубину сканирования исключений равную единице.Если в методе, который вызывается у тебя в методе кидается исключение, ты об этом не узнаешь.Я нашел как это все включить, но блядь, какого хуя они так сделали по-дефолту?
>>1333161Пошел нахуй с такими идеями блядь.Без исключений ему писать. Говножоры ебаные.Половина стандартной библиотеки и все новые ее функции кидают исключения, а они НУ ЭТО БЕЗ ИСКЛЮЧЕНИЙ ЕБАШЬТЕ))0)В языке всегда должен быть нормальный метод обработки и проброса ошибок. Обычно это исключения. Могут быть и другие методы, но они должны быть реализованы на уровне языка.В пыхе это тоже исключения.Ява так хороша во многом блядь благодаря тому, что там на каждый пук кидается исключение и ты обязан его ловить.Поэтому скомпиленная прога на яве падает раз в 10 меньше, чем на пыхе и раз в 100 меньше чем на крестах.КИДАЕШЬ ИСКЛЮЧЕНИЕ В МЕТОДЕ ПРИ НЕКОРРЕКТНОЙ СИТУАЦИИ@ОБЕЗЬЯНА-ПРОГЕР ВЫРУБИЛ ВСЕ ИНСПЕКЦИИ В IDE И ЛОВИТ ВСЕ ЭКЗЕПШЕНЫ ГОЛОЙ ЖОПОЙ@- НУ МАМ, ПОЧЕМУ ПАДАЕТ, ВОТ ЖЕ КЛЯТЫЕ ГОВНОКОДЕРЫ! НАДО БЕЗ ИСКЛЮЧЕНИЙ ПИСАТЬ!
>>1333173Метод возвращает значение типа int. Возникает ошибка, из-за которой невозможно возвратить корректное значение.Как ты сообщишь об ошибке?А если в методе могут возникнуть 3 разные ошибки?
>>1333172Так а нахуя ты сравниваешь божественные кресты с богомерзким похапэ? Если бы у пыхи был компилятор, то разрабы идеи заморочились бы немножко и сделали по умолчанию чуть иначе, в глубоким уровнем сканирования исключений. Но тебе, мудаку, дали интерпретатор и отсутствие ебли с исключениями, а тебе не нравится. Что за хуйня? Это программисты? Делаешь, как лучше, а им не нравится. Если у тебя программы на пхп падают, то это уже твои кривые руки виноваты, видать, не из плеч растут, а из жопы. Писать программы надо сначала на бумажке карандашиком, а потом уже ручками своими корявыми в идэе лезть.
>>1333179>на бумажке карандашикомДедуля, тебе к земле уже привыкать пора.Выключай кудахтер и сходи исповедуйся.
>>1333177Двачую. Правильно методы проектируй, чтобы не было ошибок. Для тебя придумали операторы условий, чтобы отдавать некорректное значение.
>>1333179Иди на бумажке карандашиком найди все исключения, которые может высрать некий говнокод, с которым ты должен работать, написанный не тобой.От этого могут зависеть бизнес-процессы на дохуя денег, а IDE, несмотря на то, что может их все найти, не делает этого.Самое смешное что ты даже не понимаешь причину, по которой жопбрейнс ограничили глубину сканирования исключений в пыхе и почему в яве она не ограничена.
>>1333182>>1333177Вы реально конченые или тралите?Задача: спроектировать метод, который принимает на вход html-файл и возвращает содержимое его тега <titile>.ВНЕЗАПНО (никогда такого не было и вот опять) некие кривожопые говнокодеры передали в ваш метод несуществующий файл, не html-файл, некорректный html-файл, анус пса, небо, аллаха и хуй знает что еще.Что будете делать?
>>1333185Значит ты простой пыхыпыдебил - разновидность обычного наследственного дебила особой вонючести.Впрочем, все вы такие.
>>1333188Лично я тралюУж не знаю насчет идиотика >>1333182>принимает на вход html-файл>Что будете делать? Ебальник вскрою дегенерату, осмелившемуся мне подобное дерьмо затирать.
>>1333189Пошел нахуй. Еще я буду париться, что там мне какие-то верстальщики насували в iostream, раз по их вине прошла ошибка, им и исправлять.
>>1333193>либу для парсинга невалидных файловАга, написанную такими же кончеными дебичами, что и ты, которая при невозможности распарсить файл высрет тебе что-то string:"NE MOGU RASPARSIT! OSHIBKA!"
>>1333196Да ладно, признайся, что исключения нужны только в строго типизированных языках, а в пыхе эта фича нахуй не сдалась.
>>1333198В согласованной разработке, где каждый знает, что делает, прод не падает. У тебя был печальный опыт работы, я смотрю.
>>1333199Пыха и есть строготипизированный в последних версиях, с подключением, маня. Или ты там еще без тайпхинтов лапшедерьмо пишешь?Хотя что от такого ебача ожидать
>>1333205>>1333204>>1333203Надеялся на норм срач, а вы только на переходы на личности способны. Ни капли сути по теме. А ты дебил, а ты маня, а ты хуево пишешь, а ты еще хуевее, тут тебе капсболд, тут бомбанулей. Вот бы еще разок сюда зашел тот анон из начала треда, было бы весело.
>>1333214>на личностиНе льсти себе, дебилушка, ну какая у тебя личность - сплошные спиномозговые рефлексы и обиженный скулеж.Типичный пхпшник, хаха.
В каких случаях следует кидать RuntimeException а в каких LogicException?В чем семантический смысл каждого из них?
Иногда бывают такие ситуации, когда происходит какая-то дичь, которая никогда не должна происходить.Например, есть ланг-файл формата key=value.Класс, отвечающий за мультиязычность пытается найти такой-то ключ, но его там не оказывается.Такая хуйня является фатальным недостатком программы и возникает, если прогер забыл внести ключ в ланг-файл.При таком раскаладе дальнейшее выполнение программы вообще не имеет смысла, ибо она как бы недоделана.Какое исключение я должен кинуть в этом случае?Я к тому, что есть исключения, которые НЕ НУЖНО ловить.То бишь, если уж такое исключение возникло, то это знак для программиста, что в программе произошел полнейший пиздец и его надо исправить на уровне редактирования кода.То бишь, это не какое-то "обычное" исключение, которое является лишь сигналом об ошибке и может быть нормально поймано.Исключение типа отсутствия ключа в ланг-файле невозможно исправить никакими вменяемыми способами, кроме как блять добавить ключ в файл.Склоняюсь к тому, чтобы кидать \RuntimeException или его потомка и вырубить в IDE обнаружение всех таких исключений, чтобы они не мозолили глаза.Но тогда другой вопрос. Я же не один пишу все это говно.Что если другие люди срут этими исключениями, не имея под ними ввиду неисправимые ошибки?Тогда я скрою важную информацию и не буду учитывать то, что должен.Не помню точно, но да, опять в этой яве исключение RuntimeException можно не ловить, что является исключением (лол) из общей ситуации, где ты обязан ловить все.То есть если метод генерит такое исключение это как бы знак того, что все, пизда, приехали.
https://pastebin.com/AGuEC61gвыбранная бд из запроса пуста (следовательно, результат любой выборки равен нулю). При попытке вернуть количество условий, удовлетворяющих выборке, возвращает единицу при любом заполнении формы.Где обосрался?
10http://jsfiddle.net/8w256gev/3/ - тута не понял как выравнять сноску [..] относительно строки, абсолют или флоат ее смещает вверх, и еще можно ли ее через флоат как-то сделать? Кароче что-то я намудрил кажется.11http://jsfiddle.net/rmouc3aj/ - тут доп.пункт подсветка по фокусу с клавы - фокус и при нажатии делается, есть focus visible но он только в лисе.
Объясните, пожалуйста, разницу между переопределением метода и его перегрузкой в наследовании. И где это может пригодиться. Объясните так, чтобы даже чайник понял.
>>1333330Автор этой дрисни репортин ин.Поставленная задача решена : форма стала пропускать на страничку только пользователей, что присутствуют в бд. https://pastebin.com/wbJNMKaP - решение.1)Насколько критичны ошибки уровня notice? Речь идет о коротких именах переменных после подключения к субд.2)Очень коротко: насколько целесообразно в показателях "эффективность/затраченное время" вникать в это сейчас (непонятный ответ на вопрос: " почему решение с mysqli_num_rows() не сработало?".>Поведение mysqli_num_rows () зависит от того, используются ли буферизованные или небуферизованные наборы результатов. Для небуферизованных наборов результатов mysqli_num_rows () не будет возвращать правильное количество строк, пока не будут получены все строки в результате.
Бамп из закреплённого.Как в хтмл прописать путь до другого диска? Апач лежит на диске С, нужно иметь доступ к изображениям с диска Е (удаленный). Все что нагуглил -- нужно идти от корня сервера, но нихуя не получается изображение вывести через img src.
>>1333681Веб-сервер обычно отдает картинки только из корневой папки и подпапок. Может, тебе проще сделать отдельный виртуальный хост и сделать его корнем папку на e: (например: основной - http://site.dev, картинки - http://images.site.dev). Если хочется извернуться и обойтись одним хостом, то велкам в документацию Апача по роутингу: https://httpd.apache.org/docs/2.4/urlmapping.htmlДиректива Alias явно подойдет. Учти, что кроме директивы Alias, надо еще дать Апачу доступ к той папке директивой Require в блоке Directory (там есть пример).Не давай доступ к лишним папкам, проверяй правила.
>>1333681А, если ты имел в виду, что Апач установлен на диск C, а надо корнем сайта сделать папку на e:, то хватит DocumentRoot + Require в Directory. Если не работает - включи лог ошибок и посмотри, что в него пишется при попытке открыть какой-то URL.
Писториусы, поясните за етот момент. Крч наслайсал макет в фотошопе, открываю его в Дримвивере, а там допотопная разметка с таблицами (пикрел). Вопрос, как это говно превратить в бутстрап верстку (которая была в макете в виде слоя полосок/ребер).Я могу, конечно, вручную брать и раздавать классы родителям и детям, попутно отмеряя кому в каких колонках сидеть.Я мог бы даже вместо бутстрапа всякие грид эреа и флексбоксы кастомные выставить. Но все это ебатория. Вопрос - есть ли вариант проще с пика перейти на бутстрап?Алсо вы вообще также делаете через слайсы (ну или просто чекая размеры в ПС слоях, кому как удобно) или уже какие-то другие, более автоматизированные способы есть?
Коль скоро у двачеров обед, а есть они любят прям за пекой, то вот вам блиц-опрос с собеседования, которое я не прошел, устраиваясь пхп-джуном в одну известную контору в моем городе:1. Сколько ключевых слов зарезервировано языком, что это за слова?2. Что значит слово “инициализация”?3. Какие унарные и бинарные арифметические операции вы знаете?4. Какой оператор используется для перехода к следующей итерации цикла?5. Как правильно организовать доступ к полям класса?6. Дайте определение понятию “конструктор”.7. Что такое сигнатура метода?8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.9. Чем отличается переопределение метода от перегрузки?10. Можно ли объявить метод абстрактным и статическим одновременно?11. Можно ли перегрузить static метод?12. Что будет, если единственный конструктор класса объявлен как final?13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
>>1333833Что ещё спрашивали, задачи какие давали? Сам проекты свои какие показывал? Что из задач опа решал?
>>1333833Ой, да пошли они нахуй. Отвечаю, что га все эти вопросы готов дать ответ с гуглом под рукой, потому что и в работе его юзаю. Какой смысл в зазубривании.
>>1333833>Сколько ключевых слов зарезервировано языком, что это за слова?Без знания этого факта нельзя софт писать, да?>Что значит слово “инициализация”?Предварительная подготовка.>Какие унарные и бинарные арифметические операции вы знаете?Из бинарных and, or, xor, not. Но вообще это хуета.>Какой оператор используется для перехода к следующей итерации цикла?Continue;>Как правильно организовать доступ к полям класса?Поля позакрывать, как границу при СССР, доступ через сеттеры-геттеры, как у чекистов принято.>Дайте определение понятию “конструктор”.Инициализация и запуск объекта. Внезапно.>Что такое сигнатура метода?В душе не ебу.>Расскажите об особенностях класса с единственным закрытым (private) конструктором.Бесполезная херня, если кроме этого закрытого конструктора там ничего нет.>Чем отличается переопределение метода от перегрузки?Понятия не имею.>Можно ли объявить метод абстрактным и статическим одновременно?А зачем?>Можно ли перегрузить static метод?Статик метод этож вроде глобал функции. Не знаю.>Что будет, если единственный конструктор класса объявлен как final?Не пользовался.>Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?Х.з. Вопросы как-то совсем из другой плоскости, как по мне. Всегда говорят - учите технологии, а не синтаксис. А тут спрашивают хуйню, которую нагуглить за 10 минут можно.
>>1333860Так логика в том, что ты можешь дать ответы на эти вопросы без гугла. Иначе зачем их тебе задавать?
>>1333833>Сколько ключевых слов зарезервировано языком, что это за слова?Не, ну можно на месте в уме посчитать все, что вспомнишь, однако это какойто сюр. Ниодин вменяемый человек число ключевых слов в голове не держит, это полностью бесполезная информация.
>>1333872>Так логика в том, что ты можешь дать ответы на эти вопросы без гугла. Тебя в лесу работать посадят, среди медведей?
>>1333871>Без знания этого факта нельзя софт писать, да?Нет. Вдруг ты назовешь свойство ключевым словом?>Предварительная подготовка.Неверно.>Из бинарных and, or, xor, not. Но вообще это хуета.Арифметических, а не логических.>Continue;Молодец.>Поля позакрывать, как границу при СССР, доступ через сеттеры-геттеры, как у чекистов принято.Молодец.>В душе не ебу.Это классика, это надо знать.>Бесполезная херня, если кроме этого закрытого конструктора там ничего нет.Молодец.>Понятия не имею.Классика.>А зачем?Нужно. Иди кароч мат.часть учи.
>>1333879>Вдруг ты назовешь свойство ключевым словом?Вы там в блокнотах до сих пор разрабатываете?>Неверно.Что не мешает мне пользоваться ей. Я учебники не пишу и знать мне это необязательно.>Арифметических, а не логических.Как бы пользоваться ими я тоже умею, без красивых слов.>Это классика, это надо знать.Понадобится - узнаю. Это не такая сложная для восприятия информация. Впрочем, как и всё остальное.Вопросы, судя по всему, ждун и писал. Я-то ожидал, про MVC, паттерны, покажите ваш код и т.д., а тут детсад.
>>1333879>Нет. Вдруг ты назовешь свойство ключевым словом?Меня вот эта формулировка бесит. Ну понятно вопрос чекает что там претендент помнит, а может и вовсе знает. Почему бы просто не спросить "перечислите все ключевые слова пхп, которые знаете", а не начать вопрос с "сколько ключевых слов в языке?". Или это попытка глянуть, скажет ли претендент честно, что точное число не заучивал и просто перейдет к перечислению?Кстати говоря с 7 пыхи все ключевые слова доступны для использовании в качестве имен свойств, констант, методов, трейтов, интерфейсов. Только class нельзя использовать в качестве конснтанты в классе, т.к. там и так есть ::class.
>>1333852Да все почти сделал из оповских задачек, кроме банкомата и прочего, что требует познаний в математике. Выучил даже основные алгоритмы и научился их применять, но завалился на такой простой хуйне. Написал на хх оригинальное резюме, прикрепил туда ссылки (магазин + гитхаб с оповскими задачами). Откликнулся с сопроводительным письмом на вакансию, пригласили через два дня.Магазинчик на вукомерсе, простенький, но он реальный и работает. Я торгую всякой мелочью с алиэкспресса.Сказали, что тестирование будет состоять из теста и тестового задания. Т.к. тест я завалил, то до тестового даже не допустили. Там достаточно кандидатов было на эту вакансию. Такое чувство, что все эти рассказы про дохуя вакансий придумывают эйчары, которым надо делать вид, что они чем-то занимаются.
>>1333886>Ну понятно вопрос чекает что там претендент помнит, а может и вовсе знает.Всё равно вопрос странный. Я вот на память мало вспомнить могу - для меня это конструкция, а не просто слова.
>>1333833Судя по вопросам контора ни о чем. В такой никакого профессионального роста не жди, а для джуна это важно.
>>1333860Лол, я толком не писал ничего, но и то знаю ответы на большинство без гугла. Если ты не знаешь, то непонятно что ты за погромист.
>>1333887Обратись к логике. Конкуренция в PHP наверное самая большая из всех языков. Но уровень кандидатов очень низкий. Поэтому зная чуть больше среднего можно легко их обойти. Искал бы ты работу на Хаскеле, там был бы уровень конкурентов во много раз выше.
>>1333913>Искал бы ты работу на Хаскеле, там был бы уровень конкурентов во много раз выше.А на нём работа есть? Больше похоже на клуб илитистов.
>>1333787Бамп вопросу. После просмотра еще пары промежуточных степ бай степ видосов на ютубе прихожу к выводу, что средств автоматизации в основном нет - люди берут вручную создаю бутстраповую сетку и вручную по ней разносят, прсото чекая пиксели из ФШ. Это так? Блин дримвивер получается юзлесс тогда, раз созданная им табличная сетка нах не нужна, а создавать самостоятельно бутстрап и прочий грид он не умеет.Алсо, второй вопрос. Вот я вижу как все в видео по СД - ХТМЛ вставляют пиксели в бутстрапные элементы. Но ведь бутстрап ужимает при брейкопйнтах разрешения только сами колонки? Шрифты он сам не меняет,Ж правильно? Шрифты надо вручную менять? Тогда зачем они используют пиксели, а не рем-ем-проценты? Вообще, пошагово:1.ФШ2. Пиксельперфект в пикселях.3. В бутстрап или кастом грид.4. Пиксели -в рем? Надо ли? ПОмогите, прочитал и просмотрел кучу всего, сам забилдил два-три макета, но не пойму вот общий шаблон, указанный выше, 4й щаг.
>>1333902> знаю ответы на большинство без гуглаЕсли ты что-то знаешь с гуглом, то ты нчего не знаешь. Сейчас очень упала ценность чистого знания, когда все появилось в интернете. Ненышнее поколение считает интернет своей памятью и искренне удивляется, что кто-то нодобряет такой подход.
А зачем в стандартной библиотебе пыни есть функции вычисления косинусов и синусов? Кому-нибудь вообще это хотя бы раз пригодилось?
>>1333974Если ты не знаешь элементарные вещи, значит ты не писал кода. Когда пишешь код, все само запоминается. Все таки они правильно делают, что хотя бы такие вопросы задают. Иначе поналезут нулевые гуглята.
Аноны, изучаю новые фичи пхп 7, добрался до методов.Правильно ли я понял, что после перечисления аргументов через двоеточие идет возвращаемый тип?func idiNahuy123(idi, na, huy): string{}А что ставить, если метод ничего не возвращает? Void и null не работают, ошибка ссылается на пространство имен.
>>1333987>Иначе поналезут нулевые гуглята.Как-то в твиче у работников гугла был флешмоб - они писали как здорово нихуя не знают элементарных вещей, на которых постоянно валят джунов разные говноконторки.Программист должен понимать что делает и как, а не учить синтаксис наизусть. Вообще, всё знать не возможно в ИТ, и основная доля программера - читать документацию и гугл.>Когда пишешь код, все само запоминается.Вот именно - когда пишешь, а не когда судорожно пытаешься вспомнить сколько там конструкций в языке.
>>1334096>а не когда судорожно пытаешься вспомнить сколько там конструкций в языке.Я кстати погуглил эти ключевые слова из интереса, чтобы подсчитать. Оказалось некоторые из них я например вообще не видел ниразу, не довелось, соответственно я бы их и не назвал. Например insteadof.
>>1334096>Программист должен понимать что делает и как, а не учить синтаксис наизусть.Если ты не знаешь унарные и бинарные операторы, то ты ноль, очевидно что код не писал. Они везде одинаковые. Про изучения синтаксиса никто не говорил. Тут как раз не синтаксис, а семантика.
>>1333833>1. Сколько ключевых слов зарезервировано языком, что это за слова?не ебу>2. Что значит слово “инициализация”?установление первоначального состояния>. Какие унарные и бинарные арифметические операции вы знаете?+,-,/,,%, mod. Остальное вроде не арифметическоеунарный знаю минус>4. Какой оператор используется для перехода к следующей итерации цикла?continue>5. Как правильно организовать доступ к полям класса?сделать их константными>6. Дайте определение понятию “конструктор”.функция, возвращающая новый экземпляр класса>7. Что такое сигнатура метода?его тип и имя (тут я бы загуглил на самом деле, потому что может это просто его тип?)>8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.без статического метода хуй такой создашь>9. Чем отличается переопределение метода от перегрузки?первое ad-hoc полиморфизм, второе сабтайпинг>10. Можно ли объявить метод абстрактным и статическим одновременно?зачем?>11. Можно ли перегрузить static метод?зачем?>12. Что будет, если единственный конструктор класса объявлен как final?синтаксическая ошибка, я же не пишу на богомерзкой жабе>13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной? аналогичнос++-сеньер-300к-в-секунду*
>>1334115Это не семантика даже, причем тут семантика, это фундаментальные знания, на которых программирование и построено.
>>1334122>его тип и имя (тут я бы загуглил на самом деле, потому что может это просто его тип?)Тип не имеет значения. Сигнатура это имя метода со списком параметров.
>>1334140Семантика это значение единиц языка. Любое вычисление основывается на формальном языке. Это может быть даже не язык программирования. Но у него всегда есть единицы, а них значение. Бинарные операторы на самом деле пришли из математической логики. Они могут обозначаться по разному в разных формальных языках, но значение всегда одинаковое. Поэтому семантика все таки.
ОП ЗАКЛИНАЮ ТЕБЯ УБЕРИ ПОЖАЛУЙСТА УЗКОГЛАЗЫХ ШМАР ИЗ ОП-ПОСТ ЗАПОСТИ ЛИБО ЕВРОПЕЙСКИХ ЛИБО ВООБЩЕ НЕ ПОСТИ
>>1334143Ладно, ты победил. Я до сих пор и не знал толком, что такое семантика, но благодаря тебе узнал.
>>1334142А вот и "я с гуглом все умею" подкатили.Проблема вот таких "я с гуглом отвечу на вопрос" в том, что тебе никто не гарантирует, что ты не нарвешься на тупого индуса-копирайтера, который пишет хуйню, но поверишь, и дальше будешь распространять хуйню по свету. Ты вообще понимаешь, что такое тип метода? Это типы его параметров плюс тип возвращаемого значения. Но у тебя может быть два метода с одинаковым типом, поэтому нужно еще и имя.А вот имена параметров не важны, поэтому и определение "имя метода со списком параметров" тупое, неверное, и написанное индусом-копирайтером.
>>1334144Та что справа на девченку даже не похожа. Трап наверное. Я бы тем кто трапов постит, вообще запретил создавать треды. Хоть бери и конкурирующий тред создавай.
>>1334154Вообще-то это определение не из гугла, а из книжки по жабе от О'Рили. Тип метода это не типы его параметров, а только тип возвращаемого значения. Как ты понимаешь, на вход может придти массивчик, а выйти строка. А сигнатура метода это его название + список параметров. Так как методы можно еще и перегружать, то нужно указывать тип данных этих параметров. Их имена не играют роли, важен их порядок.
>>1334155Я уж не смогу отличить трапа от не-трапа, но азиатские рожи терпеть не могу.Надеюсь, что он прислушается и внемлит мольбам анонов.
>>1334183ответил выше.Просто у опа один аргумент - "пишешь для ЗАКАЗЧИКА, а не для себя", а так как я пишу для себя, то и в рот ебал эти стандарты и ООП. Мой код все равно никто не увидит, свою задачу он выполняет, остальное мне видимо не нужно. Изначально хотел развиваться, но теперь не вижу смысла.Фейсбуки с вк точно так же делали: хуяк хуяк и в продакшн, если взлетело - переделываем нормально. Такого подхода буду придерживаться и я, т.к. перфекционизм убьет все мои начинания.
>>1334199Заказчику врядли важно как оно там, если работает как надо. А вот коллегам и тебе не насрать. Ну дело твое. Пишешь только для себя, и сам же от этого наплевательства пострадаешь в будущем.>Фейсбуки с вк точно так же делали: хуяк хуяк и в продакшн, если взлетело - переделываем нормально.Это в целом разумно, только тот же вк например так и не переделали нормально. Подозреваю, что и фейсбук тоже.
>>1334204>Это в целом разумно, только тот же вк например так и не переделали нормально. Двачую. Никакого MVC там и в помине нет. Еще уродливые гет-параметры, которые не помещаются в адресную строку.
>>1334204>Пишешь только для себя, и сам же от этого наплевательства пострадаешь в будущем.Каким образом?>Это в целом разумно, только тот же вк например так и не переделали нормально. Подозреваю, что и фейсбук тоже.Поясни, что с твоей точки зрения у них не так. Работает, не тормозит, что еще нужно?>Двачую. Никакого MVC там и в помине нет. Еще уродливые гет-параметры, которые не помещаются в адресную строку.Вы просто размышляете как погромисты, пользователю похуй что там в адресной строке и есть ли там mvc.
Аноны, нормально ли это в разработке, что я подробно комментирую каждую строчку? Просто когда я возвращаюсь к собственному коду, я понимаю, что происходит вот конкретно здесь, но у меня нет общей картины, зачем это, откуда и куда идет. Поэтому приходится на каждой строчке объяснять самому себе, что тут происходит, а еще каждый метод и класс описываю через / */ с парамсами и ретурнами. В общем, это занимает довольно много времени. Нужно ли себя от этого отучать?
>>1334211Так мы и есть погромисты, нам похуй, что там у пользователя будет. Нам код поддерживать нужно, и чем удобнее это будет, тем лучше.
>>1334214ну кароч я поэтому и сказал что не быть мне программистом, извините если кого чем обидел. Не хочу писать код ради написания кода, хочу решать задачи.
>>1334216У тебя практические намерения в кодировании, тебе хочется что-то созидать, а не хуярить класс за классом ради того, чтобы охуеть, какую структуру я могу написать. Создай какой-нибудь интернет-магазин, настрой seo и продавай через него что-нибудь. Вот это годно будет.
>>1334219да я это и делаю, но зачитывался вашими тредами и дух захватывало - "ничего себе, может и я так могу?" Оказалось, что не могу, или не хочу, хз.Проблем больше доставило то, что мы говорим на разных языках, и мне с моим подходом нереально будет влиться в какой-то коллектив потом.
>>1334222Столько я тебе всего написал, а оказалось тебе и правда это не нужно. Бери готовое решение, написанное другими людьми, и работай тогда, в этот тред действительно можно было не заходить.
>>1326386Доработанный вектор, https://github.com/php2ch/vector/blob/master/index.phpУчёл почти все замечания, а именно:- Методы подсчёты значений сотрудника перенесены в департамент, в него же добавлены методы select() и isHead().- Применил spaceship-оператор при сортировке. - В функцию printCompany() добавил анонимные функции, теперь её можно запускать многократно. - Среднее значение теперь вычисляется отдельной функцией.- Методы антикризисного класса теперь статические, компанию не нужно добавлять в конструктор.А, чтобы задать сотруднику индивидуальную з/п можно заменить содержащийся в нём объект профессии на новый (уникальный). Правда, тогда придётся проверять все объекты профессий в антикризисных мерах, но это уже другая история.
>>1334222Ты это я. Это смешно, но я уже с 2015 года вкатываюсь попеременно. То забиваю, то снова играет страсть что-то писать/изучать и т.д. Но я понял, что суть была в том, что у меня не было конкретной цели. Теперь я ее нашел. Я пилю свой проект с использованием всех последних бек-энд технологий и потом обязательно применю это на практике. Ну а если не получится, то и хуй с ним, проектом буду заниматься. Но я уверен, что получится, потому что я знаю уже больше, чем все здесь вместе взятые. Но это просто теория, практики у меня мало, щас вот наверстываю.
>>1334228>Но я уверен, что получится, потому что я знаю уже больше, чем все здесь вместе взятыеХуя громкие заявления из-за первого опыта написания собственного проекта. Многие тут лет по 10 тернистый путь этот преодолевают, не забивая на качество кода и умудряясь при этом построить карьеру. Ну да, ты шаришь лучше всего треда канеш, уникальный весь.
У меня есть маленький проект, первую рабочую версию которого я захуярил за пару часов в один файл под пхп4 без ооп и забыл. А теперь решил сделать вторую версию по-уму, поставил пхп7.1, фреймворк, добавил бутстрап, начал оформлять мвц. В результате уже три дня ебусь, всё никак не могу сделать выборку из БД через элоквент.То ли лыжи не едут, то ли я ебанутый.
>>133423010 лет учить php и фреймворки? Хуя ты зелень. Да даже если бы ты 5 сказал, это тоже много.Даже несмотря на это, я могу ответить за свои слова. Помимо пыхи я знаю еще несколько языков, даже в асме ковырялся. Да что там, когда я сегодня днем вбросил список вопросов, многие отсюда просто сказали, мол, а нахуя это вообще надо? Действительно, нахуя? Чтобы крудить, фундаментальные знания не нужны, а чтобы стать профи, нужно заглянуть дальше переменных со знаком доллара.
>>133423510 лет я в целом занимаюсь кодингом, около 7 лет работаю. Есть куча своих проектов, и тоже всегда стремился свое писать. Работал не только на пхп, но и на шарпе, джавке, жсе и питоне. И свои проекты тоже разные совершенно. С чего ты решил, что тут в треде только изучающие?
>>1334225зайду завтра, чтоб найти работников за лапшу которые будут писать мне модули к симфони (по факту половина из вас пилит вордпресс на фрилансе, а в этом треде все такие девелоперы пиздец)
>>1334228Я обычно сюда захожу после того, как напишу за пару часов какое-то убогое и кривое поделие под свою задачу. Оно настолько плохое (даже мне очевидно), что прямо больно смотреть. И я иду сюда, чтоб попытаться начать заново и в следующий раз делать все правильно. И каждый раз я ломаюсь и возвращаюсь к началу.Впрочем мои душевные пиздострадания не имеют никакого отношения к php, так что не буду портить тред своим присутствием.
Зачем проверять кнопку у формы перед ее отправкой?Инбифо: чтобы узнать, что форма была отправлена с конкретной страницы
>>1334242Можно было бы и язык еще написать, ну да ладно.== и equals без перегрузки для ссылочных типов сравнит ссылки.В шарпе можно перегрузить и то и другое, в джаве только equals, перегрузки операторов нет. (или есть в новых версиях, не следил) Так же в шарпе для тех же стрингов уже есть перегрузка ==, чтобы сравнивать значения. В джаве этим не заморачивались и будут сравнены ссылки, для сравнения значений переопределены equals у встроенных типов. Ну и == не ругнется на нулл в отличии от equals в левом операнде, что в общем-то очевидно.
>>1334248Потому что внезапно на странице может быть не одна форма. И я сейчас не имею ввиду формы в типичном представлении пользователя, а именно тег form. Например, ты реализуешь отправку поста в базу по одной кнопке одной форме, а удаляешь пост из базы по другой кнопке в другой форме с одним полем из этой кнопки.И это две разные формы с двумя разными кнопками.Ну и так исторически сложилось, что нужно проверять именно кнопку.
>>1334247на php, но без стандартов. Имею ввиду, что портить тред про обучение не хочу, т.к. и сам не научился, и другим мешаю.
>>1334257>Например, ты реализуешь отправку поста в базу по одной кнопке одной форме, а удаляешь пост из базы по другой кнопке в другой форме с одним полем из этой кнопки.>И это две разные формы с двумя разными кнопками.Две разные формы с одинаковыми post параметрами?
>>1334256Слушай, а я вот читал, что в жабе, если ты удалишь объект, то не факт, что он удалится незамедлительно, и некоторое непродолжительное время он будет жить, что может повлечь за собой некоторые баги. В общем, это зависит от того, с какой скоростью сборщик мусора его приберет. Это правда?
>>1334263>позаботься хотя бы об элементарной безопасности.Разверни мысль. Или банальное экранирование переменных уже считается чем-то необычным?А стиль написания кода на безопасность никак не повлияет, в отличие от стада мартышек, слепо действующих по мануалу.
>>1334272Какое экранирование переменных? Ты про SQL?>>1334275Мужик, здесь не С++, и в ногу себе выстрелить никак нельзя.
>>1334260Я не особо шарю в gc, работает на фоне и работает. В пыхе кстати тоже есть, но тут об этом обычно не думают, пока пилишь простое веб приложение и не покоряешь долгоживущие. Удаляется то, на что не остается ссылок. Конкретно самому удалять объекты, как в крестах например, не надо прямо. А то ты вроде именно удаление озвучил. Впринципе для удаления в таких языках можно параноидально обнулить все ссылки на объект и оставить остальное gc.Какие там баги кроме утечек без понятия. Проще всего понять (да и обосраться) можно на статичных ссылках. Статика живет на уровне класса, поэтому даже после смерти инстансов такая ссылка остается валидной и gc ее не не тронет. Внутренние классы и потоки тоже легкий способ выстрелить в ногу gc. Много об этом не могу сказать, у меня серьезных утечек не было, только мелочевка вполне очевидная, и поэтому не приходилось вдаваться. В голове держу только сам факт, что за этим надо следить.
>>1334289>>Например, ты реализуешь отправку поста в базу по одной кнопке одной форме, а удаляешь пост из базы по другой кнопке в другой форме с одним полем из этой кнопки.>>Мужик, здесь не С++, и в ногу себе выстрелить никак нельзя.Да вы тут поехавшие какие-то. Если ты сам себе шлешь данные пост запросом, то никаких проблем нет. Если ты шлешь данные не себе с одинаковыми полями, то не надо так делать.
>>1334294>В пыхе кстати тоже есть, но тут об этом обычно не думают, пока пилишь простое веб приложение и не покоряешь долгоживущие.В нетбинсе последнем есть фича принудительного запуска сборщика мусора. И еще есть динамический счетчик памяти, занимаемой скриптом в рантайме.
>>1334306У тебя были серьезные проблемы с утечками? По какой причине смог выяснить? Интересно опыт в этом плане отличный от своего услышать.
>>1334373Тащемта, анус затощен под анускрипт, он даже написан на нем. Поэтому треба ставить плагины. Хуевый редактор, если честно. Саблайм и брекеты уделывают его в два счета.
>>1334260Баги это не должно повлечь. Если на объект не осталось ссылок в переменных программы, то с ним ничего нельзя сделать и есть он или нет - ничего не меняет. Хотя, конечно, при желании можно и в такой системе создать баг. Но это сложнее, чем в языках без сборки мусора, где программирование напоминает хождение по минному полю. На Си пишут лет 30-40 и до сих пор классические проблемы вроде buffer overflow или ошибок работы с памятью они лечить не научились. До сих пор есть шизанутые, которые пишут нечитаемый код в стиле a[i++] = b[j--];
>>1334208>Никакого MVC там и в помине нет.Вордпресс тоже MVC не имеет, а сколько сайтов на нём крутятся? Вообще, в веб с норм технологиями как-то не повезло, один говнокод повсюду.
>>1334212Каждую строку не надо комментировать, только методы\функции, ну и описания классов там, или файлов, немножка - одной строкой. В сам алгоритм вообще лазать не надо, если он написан нормально и работает. Зачем его комментировать?
!http://([a-z0-9.-]+)(/\\S+)?!Аноны, у меня вопрос по этому выражению. Я смотрю на часть шаблона "http://([a-z0-9.-]+)" и интерпретирую его следующим образом. После двух слешей есть один из указанных в квадратных скобках символов, и за ним может следовать любое количество равно таких же символов или не следовать вообще ничего. То есть, строки типа aaa, 11, --------, но не ab--1 или georgebush. Я верно размышляю? И, если да, то зачем [a-z0-9.-]+ заключать ещё и в круглые скобки? Они же содержат установленую последовательность символов. А в конкретно этом случае они ничего не поменяют. Или?
>>1334481Проверил такой код:<?php$text = 'Samwise Gamgee'; // will put "a" in $empty?$expression = '/[a-z0-9.-]+/';$empty = [];preg_match($expression, $text, $empty);echo var_dump($empty);?>Выдал "amgee". Как-то я не допираю. Как вообще функция сканит текст?
>>1334488В общем, делаю вывод, что [characters_list]+ просто совпадает с любой строкой, в которой есть символы, которые содержатся внутри скобок. Не важно в каком порядке и каком количестве - главное, чтобы был хотя бы один символ. Это показалось мне странным, потому что я думал, что из квадратных скобок выделается какой-то один символ, если после них не стоит никакого кватификатора. А добавление плюса просто означает, что именно один из указанных символов может повторятся любое количество раз. Но это будет другая конструкция - ([characters_list])+Сложно уложить это в голове почему-то.
>>1334491Совет всем на будущее и тебе тоже.1. Выкладывайте код на ideone или делайте скриншот из своего редактора, так будет легче всем воспринимать код.2. Пишите как можно кратче без лишних витиеватых конструкций и воды. Я уже много раз переставал читать просто потому что слишком много букв. У нас ведь есть свои дела, а чтение длинного поста это трата времени.3. Будьте благоразумны. Если не получается решить задачу, отдохните и попробуйте решить ее снова. Погуглите. Не целесообразно спрашивать ответы здесь сразу. Кайф от самостоятельного решения задачи, хоть и с гуглом, не сравним с банальной вычиткой ответа из треда.
Не знаю, куда написать, напишу сюда. Меня в вузе учили, что у программы и подпрограммы должна быть одна точка входа, одна точка выхода, один тип возвращаемого значения. Что же я вижу в пыхе? Пикрилейтед. Зачем здесь нужны тайпхинты вообще, если одна и та же подпрограмма может вернуть кучу разных значений?
>>1334621в идеологии структурного программирования под единой точкой выхода подразумевается введение оператора return и запрет (либо использование только в необходимых случаях) так называемых "длинных переходов", аналогов setjmp/longjmp в сите формально фции php уже соответствуют этому требованию
хачу сделать парсер юзеров одного сайта вот только есть одна праблемаПАЦАНЫ КАК СПАРСИТЬ ЭТУ СТРАНИЦУ ШТОБЫ ЗАДЕЙСТВАВАТЬ ВОТ ЭТАТ ПАРАМЕТР newface-1file_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/');ШТО ДЕЛАТЬ? НАУЧИТЕ И ПАМАГИТЕ ПАЦАНЫ
>>1334626бля, это же php тред!не заметил и отписалсяя теперь зашквареный, бляне отмытся перед пацанами
Зачем в абстрактном супер-классе нужен конструктор? Он нужен для того, чтобы его можно было вызвать у классов-потомков?
>>1334646Или не вызвать, как захочешь. Ты можешь и не переопределять конструктор в дочерних классах. Или переопределить и насрать на базовый. Видал как много вариантов?
Аноны, я щас почти дописал свой велосипед (легкий мвс-фреймворк для создания инет-магазина). Если я его выложу на гитхаб и приложу к резюме, насколько высоко повысятся мои шансы на то, что я найду годное место?
>>1334653Ну повыше станут - кодеры из контор хоть посмотреть смогут как пишешь. Это всё же лучше, чем наугад джуна брать.
>>1334621Неправильно утверждать, что функция всегда должна возвращать один тип. Функцию можно использовать как абстракцию данных. Она может возвращать другую функцию, которая в свою очередь не зависит от типа, и может возвращать разные типы, в зависимости от передаваемых аргументов.В этом суть абстракции данных. Нам как и функциям, не нужно знать какой тип мы обрабатываемым. Мы можем обрабатывать разные типы одинаковыми функциями. Это дает универсальность и модульность. При таком подходе, не нужно переписывать верхние уровни абстракций, чтобы начать работать с новым типом. Достаточно изменить нижний уровень.
>>1333833Ну давай ублюдок, иди сюда, думаешь меня трахнуть? Я сам тебя трахну> 1. Сколько ключевых слов зарезервировано языком, что это за слова?Серьезно? Не помню точное количество. Ориентировочно 30-50. Перечислять тоже лень.> 2. Что значит слово “инициализация”?Первичное присвоение значения переменной.> 3. Какие унарные и бинарные арифметические операции вы знаете?Унарные: унарный плюс/минус, инкремент/декремент. Бинарные: +-*/%> 4. Какой оператор используется для перехода к следующей итерации цикла?continue> 5. Как правильно организовать доступ к полям класса?Поля непубличные, через геттеры.> 6. Дайте определение понятию “конструктор”.Метод, вызываемый при инициализации объекта> 7. Что такое сигнатура метода?Аргументы и их типы + возвращаемые значения и их типы> 8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.Бля, ну тут хуй знает. Видимо невозможно создать обьект такого класса напрямую. Можно создать в статическом методе такого класса, в его потомке. Скорее всего переопределить private конструктор в потомке тоже нельзя.> 9. Чем отличается переопределение метода от перегрузки?Перегрузка в япах обычно означает возможность создания методов с одинаковым названием, но разными аргументами. В пыхе такой хуйни нет.Переопределение - создание метода с таким же названием в потомке.> 10. Можно ли объявить метод абстрактным и статическим одновременно?А хуле бы нет, да.> 11. Можно ли перегрузить static метод?Конечно, хуле нет.> 12. Что будет, если единственный конструктор класса объявлен как final?Нельзя его перегрузить?> 13. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?Хуй знает, в анонимных функциях надо все внешние переменные передавать через use. Таким извратом как создание анонимных классов не занимаюсь
>>1334793>Ориентировочно 30-50.Я вчера нагуглил. И уже забыл. Около 70. Почти все реально в памяти не держатся, постоянно используемых гораздо меньше (и от конторы к конторе может разниться то, основной или альтернативный синтаксис юзается).
>>1334795А, ну в пыхе же ещё куча всякой хуиты уровня endfor и т.п.Тогда возможно.Лол, зато я помню, что в Go около 30 ключевых слов
Читаю мануал от ОПа, появился вопрос по циклам (точнее, по математике внутри echo). Пишу такой код:<?phperror_reporting(-1);for ($x = 1; $x<=10; $x++) { echo "{$x}x{$x} = $x$x\n";}?>Выдает1x1 = 112x2 = 223x3 = 334x4 = 445x5 = 556x6 = 667x7 = 778x8 = 889x9 = 9910x10 = 10*10ЧЯДНТ? Пробовал pow($x,$x) и миллион вариантов расстановки круглых и фигурных скобок вокруг переменных, он их просто выводит строкой.Алсо, ОП, у тебя в первых уроках сказано, что принцип, по которому дают имена переменным, называется camelCase, полез гуглить. Википедия говорит, что CamelCase - это когда каждое слово, включая первое, начинается с большой буквы, а то, как в пыхе называют переменные, называется lowerCamelCase. Ну и прослезился на задачках про доллар по 32 рубля.
>>1334793>Унарные: унарный плюс/минус, инкремент/декремент. Бинарные: +-*/%Аллилуйя, хоть кто-то ответил правильно.>Аргументы и их типы + возвращаемые значения и их типыНеверно.>Хуй знает, в анонимных функциях надо все внешние переменные передавать через use. Таким извратом как создание анонимных классов не занимаюсьДа по тем же правилам, что и к обычной переменой.
>>1334819С этим разобрался, теперь другой вопрос возник. Как в один цикл впихнуть 2 действия? Например, если есть 2 переменные, и если одна переменная меньше 100, то прибавить 4 к ней, а к другой прибавить 1?
>>1334844Не пихай в определение цикла такие вещи. А так через запятую 1 и 3 секция фора делится на действия.
>>1331405Ушёл из сервисного центра в пыхокодеры где-то три четверти года назад.Сложно, но учиться всегда сложно.
>>1334846Спасибо, помогло. Действий сколько угодно можно добавить, надо полагать?>Не пихай в определение цикла такие вещиЭто не я, это всё ОП! Я просто повторяю, что в мануале написано.
>>1334846Асмобляди вообще делают так:for(;;) {тут какой-то кодусловие прерывания}Так что не надо тут.
>>1334862Я в курсе, что это можно. Дальше то что? И вообще любой цикл можно описывть через (другой цикл) while(true) или тот же for (;;), только в теле придется побольше написать. Это не значит, что это пиздец хорошая практика и погнали так делать все и всегда.
>>1334865Просто так нагляднее. Видишь фор, ага, значит цикл, смотришь, что происходит за одну итерацию, так, тут инкрементится, тут складывается, тут ансеттится, тут условие, хуе-мое, а в случае с фор (что-то;что-то;что-то) смотришь что и где, примеряешь каждую итерацию к условию, мысленно прогоняешь итерацию за итерацией и в какой-то момент говоришь: так падажжи ебана.
>>1334870Я так то ему посоветовал в случае фор использовать только счетчик в определении, все остальное в теле цикла для читаемости (возможно за редкими исключениями), а не добавлять туда всю кучу счетчиков и условий из тела цикла, хоть это и возможно. Он для того и создан, чтобы банальный счетчик итераций из тела вынести, вот пусть так и используется. Для других случаев другие вещи подойдут.
>>1334880Ты не прав. Нужно опираться на логику, а не на твое "Я сказал". Если нужно использовать составное выражение, то нужно использовать составное выражение. Выражения никогда не засоряют код, а вот лишние инструкции еще как. Цикл все равно будет в функции, будет скрыт, один раз написал и все. Потом используешь функцию как хочешь.
Аноны, доброго времени суток, только вкатился. Решаю задачки вот. Подскажите я сильно хуёво тут написал? Заебался голову ломать, не варит нихуя.. До этого задачки не вызывали особых затруднений, а тут с этими строками пиздаhttps://ideone.com/q3MrtHНадо написать программу явл палиндромом.С этими mb функциями пиздец просто в голове и массивы, и циклы и условия, ебись они конём с этой задачей нихуя не выходит. Целый день блять эти задачи решаю.Заранее благодарю. Соре, пригорело.
>>1334962Не годится. Создай функцию, которая будет принимать строку.Прежде чем решать, расписывай алгоритм на бумажке. Эта техника очень помогает.
Какой вариант из двух предложенных ниже предпочтительнее использовать и почему? Они дублируют друг друга?Первый: $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
>>1335016Ни один. Что ты хотел показать и что хочешь сделать вообще? Если изменить глобальную переменную, то это антипаттерн.
>>1334986>расписывай алгоритм на бумажкеДа зачем бумагу переводить? Прямо так пускай и пишет в редакторе:// инициализировать переменные// запустить такой-то цикл// с таким-то телом// и т.д.А потом по этому скелету собирает.
>>1335027Два разных способа сделать одно и то же. Спросил, какой предпочтительнее. Выходит - вообще нельзя менять по нормальным правилам? Тогда зачем существует ссылка на переменную?
>>1335030На бумаге намного эффективней. Лучше использовать блок-схемы. То что ты написал - птичий язык. Он не формализован. По нему составить нормальный алгоритм невозможно. Для алгоритмов есть специальные формальные языки, - блок-схемы например.
>>1335032Непонятно что ты делал. Учись подробно и четко объясняться. Чем лучше будешь объяснять, тем точнее получишь ответ на вопрос. Попробуй еще раз.
>>1335016Зависит от того, что ты хочешь. В первом случае глобальная переменная изменится после вызова функции, во втором - нет.
Что делать, если мне надо возвращать несколько разных значений из метода?Есть группа однотипных методов, которые принимают одинаковый параметр и возвращают один из возможных вариантов ответа.Переписывать не вариант, уже пробовал, на архитектуру лучше всего ложится вариант, когда методы могут возвращать разные значения.Какие есть варианты:1. Не объявлять возвращаемый тип, а далее проверять через instanceof и функции вроде is_string что мне высрали. Не слишком хороший путь как по мне, ибо за счет динамической природы php будут ебнутые конвертации типов вроде string -> int.2. Возвращать nullable-тип в связке с каким-то другим типом, то бишь, 2 возможных значения. Остальные значения записывать в члены класса и считывать потом. Тоже какое-то говно.3. Создать свой класс, содержащий возможные значения и везде возвращать его. Плюсы: методы получаются чистыми, все четко и удобно. Минусы: надо городить очередной value-объект, бесполезный везде кроме этих нескольких методов.4. out-параметры. Записывать некоторые или вообще все значения в переданные по ссылке переменные. Плюсы: аргументы типизируемы. Я могу передать "безтиповые" пустые переменные, а метод заполнит их нужными типами. Минусы: методы получаются нечистыми и ?? Вроде не такой уж хуевый вариант.На какой стул сесть?
Привет, аноны. Начал немного осваивать PHP по учебнику из ОП поста. Прошу, подскажите, что делаю не так? Готовое решение не хочу, хочу сам понять, где обосрался. https://ideone.com/VGi2VJ. Заранее благодарю.
>>1331378 (OP)Анончики, вопрос по регуляркам.Задача с проверкой номеров телефонаСделал первую часть: ^(\s?(\+\s?7|8))А потом, в книге пишут:>за ними ровно 10 цифр, между которыми может быть любое число скобок, минусов, пробеловКак это сделать? 10 цифр это понятно: [0-9]{10}А как сделать, чтобы между ними учитывались скобки, пробелы и минусы? Можно ли как то это сделать за один раз, либо придется что то типа: сначала идут 3 цифры, потом возможно скобка или пробел или минус, потом еще три цифры и опять может пробел или минус и т.д.?
>>1335517Вот такая регулярка получилась, не понял, можно ли сделать так как говорили в подсказке к заданию^\s?(\+\s?7|8)\s?-?\(?\s?[0-9]{3}(\s?-?\)?\s?){1,3}[0-9]\s?-?\)?\s?[0-9]\s?-?\)?\s?[0-9](\s?-?\)?\s?){1,2}[0-9](\s?-?\)?\s?)[0-9](\s?-?\)?\s?)[0-9]{2}$Вот примеры для проверки https://regex101.com/r/qF7vT8/3.Конечно получилось так, что он в основном проверяет примеры, которые даны в учебнике, потому что нужно было бы учитывать каждый пробел, тире после цифры, а это еще бы увеличило регулярку. Поэтому если знаете, скажите можно ли как нибудь записать регулярку по типу есть 10 цифр, а между ними может быть либ0 строчка, либо тиру, либо скобки?
>>1335533Короче сделал увот так вот ^\s?(\+\s?7|8)([\s-\(\)0-9]*)$Но теперь выделяется вся строка(то есть не только номер телефона, но и вся строка), но сократил как смогпросто увидел регулярку из четвертой части
>>1335405Во-первых, какие <br/>? Это же не html, хотя не знаю, может в php тоже так можно, но все равно используй \nНу и твоя функция ничего не возвращает. ТО есть ты не используешь return
>>1335769В командной строке? Ты троллишь что ле? У меня по этой ссылке https://ideone.com/VGi2VJ выходит <br/><br/><br/> и все. Если изменить его на \n он работает
>>1335780Потому что айдеон парсит код перед выполнением и заменяет все \n на <br>, а <br>, написанные тобой выводит, как есть, вот и работает. Такая вот имитация реальности. Как в VR-шлеме.
Супец, братаны-пыханы. Есть у меня поля в таблице, некоторые заполняются сразу, некоторые потом. Есть также поле с датой и временем. Как только я записываю данные в незаполненные ячейки строки, то дата с временем обновляются. Как сделать так, чтобы была обновлена только та ячейка в таблице, в которую идет запись?
ОП, а зачем ты советуешь местным макакичам учить pdo? Пусть сразу учатся в ORM разбираться. Это проще намного и используется в проде повсеместно. То есть практически применимо.
Аноны, есть вот такая структура. обертка( другая_обертка( какой-то_метод() ) );Обертка лежит в одном классе и передает данные в другую_обертку, которая лежит во втором классе, и она уже запрашивает данные у метода из того же (второго) класса и возвращает первой обертке в первый класс. Мне нужно из обертки вызвать какой-то_метод, причем, заранее неизвестно, какой именно это метод.Может можно как-то передать сигнатуру метода в другую_обертку, чтобы она с ее помощью вызвала этот метод? Возможно такое в php?
https://ideone.com/RjqkmCНикак не могу понять, почему у меня буква w меняется на заглавную. Помогите сообразить, пожалуйста. Хочу обойти ucfirst()
>>1336242А что не так? Ты разбираешь предложение по знакам препинания и делаешь каждую первую букву заглавной. Перед w у тебя точка. W - начало нового предложения.
>>1336277str_replace заменяет все вхождения, переданные первым аргументом. Первый аргумент у тебя w, соответственно функция заменяет все w в строке $sentence на toUpperCase(w). Очевидно же, анониус.
Поясните вот за что. Раньше я точно помню как кодеры на пхп гордились отсутствием типизации и говорили всем (в том числе и мне) что она нахуй не нужна и будет отмирать во всех ЯП. А теперь я читаю что в версии пхп 7+ ввели типизацию и даже выделили её как основную фишку пхп этой версии. Собственно, когда произошла смена коней и как отреагировало ваше комьюнити? Как быстро вы переобулись из одного лагеря в другой и какие оправдания себе находите?
>>1336422Шизик, кто знает что тебе там показалось на заре твоей болезни? Никто не должен перед твоим манямиром оправдываться. Просто пей таблетки, которые врач прописал.
>>1336422А с чего ты взял, что это одни и те же люди? На пыхе типизация не обязательна, можешь юзать ее, а можешь и не юзать. Можешь юзать частично. Вариантов масса. Да и к тому же, насколько я понял, указывать типы в пыхе это все равно что вставлять палки в свои колеса. Толку от них, все равно, если не укажешь тип - нихуя не произойдет, просто ошибка не выкинется.
>>1336422Знал такого одного, но он вообще не очень был и все на массивах делал и методах по 1к строк. Типизация так то не обязательная, типа пиши как хочешь, хозяин барин. Хотя по хорошему обязательная во всех случаях, кроме тех, где нестрогость предусматривается логикой. Да и то эта тема доступна только в сигнатурах методов (хотя за версии типа 7.3 не в курсе изменений).
>>1336431>насколько я понял, указывать типы в пыхе это все равно что вставлять палки в свои колеса. Толку от них, все равно, если не укажешь тип - нихуя не произойдет, просто ошибка не выкинется.ты всё неправильно понялВообще, типизация, лучшая вещь, которая случалась с пыхой за последние 5 лет. В версии 7.4 добавили типизацию переменных класса при объявлении. Новичкам советую приучаться и юзать всё с типами.
>>1333694>>1333692Только дополз до работы, чтоб разобраться.Сервер на диске C. Как мне, например, через хтмл (img src) вывести изображение pic.jpg, которое лежит на диске S? Алиасы, кажется, делают не совсем то, что мне нужно.
Ребята, я не могу понять порядок работы функции preg_split().Сначала долго вкуривал, как работают утверждения в регулярке, но в итоге разобрался в самом принципе. Однако теперь меня ввёл в ступор последний элемент массива в примере ОПа:preg_split("/(?<=\d)/u", "12abc3"). Значения элементов массива будут такими: ['1', '2', 'abc3', '']. Насколько я понял, функция будет посимвольно проходить по тексту, начиная с первого символа, и на каждой "остановке" делать проверку, не находится ли слева цифра. Если находится, то всё, что левее этой "остановки" попадёт в массив. Но мне не ясно почему работа регулярки не останавливается на последнем символе строки - 3. Там ведь дальше ничего вообще нет - куда она прёт?То есть, изначально я думал, что функция сканит строку до символа 3. Остановившись на 3 и не зарегистрировав цифру слева, почему функция вообще выкидывает значение элемента abc3? А последний элемент - это вообще пушка. Как вообще логически туда могло попасть пустое значение?В общем, я запутался. Помогите разобраться, пожалуйста.
>>1336480Плохое я время выбрал для своего проекта. Каждые пару месяцев приходится с версии на версию перекатываться.
>>1336737Я тебе только из головы могу сказать, а я нихера не шарю совершенно, кроме как на мажорку с миноркой ориентироваться, остальное не самое каждодневное. Ну вот есть такая довольно общепринятая модель нумерования версии. Мажорка с миноркой понятно. Первая - это финиш, практически новый проудкт, вторая тот же продукт, но другое апи. Далее идут сборка и ревизия. Стадия кучи багфиксов так сказать и мелких правок. Сборка - это уже законченные билды, такие себе патчи с множеством фиксов, которые пользователям той же винды подсовывают под видом "нужно обновление" на минутку. Ревизия - тестовые билды конкретной сборки. Типа 3 билд 1452 ревизия означает билд номер 3 и 1452 ревизии этого билда хер знает кем, должно быть контролем качества.Так то это не закон, иначе бы в школах учили, но полезно хотя бы первые две цифры нормально читать. Остальные уже при углублении.
>>1336750Я ничего не понял, что ты написал. Шизофазия какая-то. С термина на термин прыгаешь. Тебе никогда не говорили, что ты не логичен?
>>1336702>>1336750Гуглите семантическое версионирование: https://semver.org/lang/ru/#вступление>>1336422Ещё со времен PHP 5.3 ведущие фреймворки на полную использовали типизацию, может твои данные устарели лет на 10.>>1336684В PHP очень медленно и лениво добавляются изменения, для обновления минорной версии достаточно пару строк в проекте поправить (переводил проекты через 7.0 -> 7.1 -> 7.2). Конечно, при условии, что deprecation warnings исправляются сразу же. Это не JS, где каждые полгода проекты переписываются на новом стеке / фреймворке.
>>1336928>может твои данные устарели лет на 10.Я так смотрю - пол интернета судит пхп по версии 10-летней давности. Что самое забавно примерно столько же легаси говна на нём уже налепили.
>>1336989Я тебе больше скажу: не все знают, что вышла 7 версия, и до сих пор продолжают лепить проекты на 5.6 версии по привычке.
>>1336999>не все знают, что вышла 7 версияКак можно назвать человека, который в своей профессиональной деятельности не следит за индустрией?
>>1337062А ты пенсионер что ли, с паркинсоном и амнезией?Давай не будем оправдывать свою лень и устаревший говнокод возрастом.
Некропостинг>>1331410> Биология имеет мало общего с техническими науками, и инженерией.Скорее технические науки и инженерия имеют мало общего с биологией. Потому что технические науки и инженерия созданы человеком только за последние сотни лет, а биология это миллионы лет эволюции. Даже имея наши знания в технических сверх, мы до сих пор не можем понять устройство биологии. Даже имея возможность заглядывать на миллионы световых лет в даль, даже имея атомные источники энергии - это всё не дает на понимания как устроен природный код ДНК. Потому что наши представления и парадигмы программирования так примитивны. И более того наши технические устройства не так совершенны. К примеру, любое технологическое устройство, даже которое является венцом технологий (к примеру компьютерные сервера, производственные машины), рано или поздно ломаются, если за ними не следить, и им нужна постоянная поддержка человека. А биологические виды способны самостоятельно подстраиваться и использовать среду, способны самостоятельно восстанавливать себя, и самое главное способны к собственной репродукции.>>1331431>Все наоборот. Глупые идеи всегда выстреливают, потому что умных людей, хорошо понимающих науку и инженерию единицы. Кто отвергнет ООП? Школьники, кодеры без образования? Только тот кто понимает математику, науку, и инженерию. Таких очень мало. Кто использует ООП? Все кому не лень. Но у них у всех есть общая черта, они не знают и не понимают математику. Так как не понимают математику, то не понимают и науку с инженерией в целом.Всё с точностью да и на оборот. Человек подвержен к человеческому фактору, и единицам ошибиться проще, чем большинству. Иными словами, если один человек что-то упускает, то другой сможет исправить эту ошибку. И методом бесконечных проб и ошибок ООП становиться более мощным инструментом. Это его плюс. >Математики и инженеры начала, середины, и немного конца 20-го века, были последними кто мог создавать шедевры. Делать вещи простые, компактные, функциональные, но без лишнего. Как пример Лямбда-исчисление Чёрча, и комбинаторная логика Шейнфинкеля-Карри.Древние технологии это тонкий и острый инструмент, да. Но каждый инструмент имеет свои плюсы и минусы. Как ты и сказал, ООП предназначено для решения любой абстрактной задачи, но в перевес этому, оно не может решить так эффективно конкретную задачу, как это сделали бы те технологии.Мастерство заключается в умении правильно применить те или иные плюсы и минусы.
>>1331749>>1331762>Аноны, а просто любопытно, как вы читаете тред? >Добавлен в избранное двача.This.>И как находите ответ на свою задачу если ОП часто их проверяет только несколько дней спустя, и за этой время успевают запостить 300-400 постов?>Обязательно добавляю в сообщение с решением какое-нибудь ключевое слово (чаще всего название задачи), по нему нахожу свой пост и ответы к нему. Если задачу нужно переделывать, ваш ответ сохраняю в ворд-файл, чтобы не искать каждый раз.Специально для таких случаев уже позаботились об этом - на сайте https://phpclub.tech можно получить конкретную цепочку обсуждения в течении всех тредов! Чтобы это сделать нужно нажать на иконку "Цепочки" на интересующем вас посте. https://phpclub.tech/pr/chain/1331762/
>>1336656Алгоритм работы preg_split такой: - найти в строке все подстроки (части строки), которые соответствуют выражению. Поиск совпадений производится слева направо, с первого символа до последнего. Подстроки не пересекаются, то есть, если регулярка нашла подстроку с 1 по 10 символ, то далее поиск совпадений продолжается с 11 символа- вырезать из строки найденные подстроки и вернуть кусочки, которые были между ними + кусочек перед первым совпадением и после последнегоПри этом регулярка из утверждений не "захватывает" символы и потому возвращает подстроки нулевой длины.Пример: строка "abc", выражение "/./ui". Оно найдет подстроки "a", "b", "c". После "вырезания" из строки этих подстрок остается 4 пустых подстроки: ['', '', '', ''] - подстрока слева от a, между a и b, между b и c, после c.Пример поинтереснее: выражение //ui, строка "ab". Пустое регулярное выражение совпадает с любой строкой, но не захватывает символы из нее. Потому оно "найдет" в строке 3 подстроки: перед a, между a и b и подстроку после b, все подстроки нулевой длины. Разбиение по этим подстрокам даст массив ['', 'a', 'b', ''].Проверка, угадал ли я результат: https://repl.it/repls/CluelessRaggedAbstractionsПо той же причине в твоем примере есть пустая строка - это подстрока, которая была справа от последнего найденного совпадения. Для отладки ты можешь использовать флаг PREG_OFFSET_CAPTURE в preg_match_all, который покажет позицию найденных подстрок (в байтах, а не символах, но для латиницы 1 байт = 1 символ).Если ты хочешь зайти глубже, можно скачать библиотеку pcre, к которой приложены отладочные утилиты вроде pcretest ( https://www.pcre.org/ ). Они вызываются из ком. строки. Обрати внимание, что для некоторых платформ библиотека распространяется в исходных кодах и ее надо будет компилировать.
>>1336194>Возможно такое в php?Да, это называется callback. https://ru.wikipedia.org/wiki/Callback_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)https://secure.php.net/manual/ru/language.types.callable.php
>>1336424>Ребята, как вы тестируете авторизацию?https://github.com/someApprentice/Portfolier/blob/master/tests/AuthorizationTest.phpLogin/logout выполнен с помощью Symfony Security, но и это тестируется точно так же.Почитай урок codedokode о тестировании и у тебя появится представление об этом.https://gist.github.com/codedokode/a455bde7d0748c0a351a
>>1335448Ты сам-то запускал что понаписал там, оно же, блядь, банально не работает! ОПу еще и дебажить за тебя что-ли?Никто не обязан твоё говно разбирать, а на галере тебя за такое ебать грязной шваброй будут. Приведи код в порядок и рабочее состояние, чтобы смотреть приятно было. Имей уважение к своему труду и чужому времени, дружок.
>>1337322Свой негатив можешь оставить в /b/, а здесь люди пытаются научиться программированию на своих ошибках.Тебя это так раздражает, потому что ты сам не можешь справиться с этим кодом. Ты даже не указал где конкретно ошибка, иными словами, всё что ты сделал, это только показал какой ты слабый и не уравновешенный.Пожалуйста, займись своими эмоциями в тематических для этого тредах, а в этом треде, и тем более, разделе занимаются программированием.
>>1337361>Ты даже не указал где конкретно ошибкаОн не работает и человек выложил это на проверку, на всеобщее обозрение. Т.е. он сам неудосужился его проверить. Ошибка между стулом и клавиатурой.>Свой негатив можешь оставитьА ты мне рот не затыкай, фашист.
>>1337373Пыхыпыдебил - это хуже всего вообще, даже хуже червя-пидора.Чему ты, гнида, наглядная иллюстрация.
>>1337373Дружок, ты выложил свой код на оценку - его оценили так как он того заслужил. Он не работает и тебя заслуженно обосрали, отчего ты начал обвинять просмотревшего в неуравновешенности. Заказчику ты тоже такое скажешь?
>>1337226Спасибо за ссылку, ОП. Благодаря тебе я нашел свой первый пост от 2015 года, где приложил скриншот своей первой имиджборды на html+php, такая-то ностальгия.
Подскажите пожалуйста:есть кусок кода, который должен выполнятся только первый раз. при перезагрузке страницы ничего не должно выполнятся.
>>1337389Было бы забавно посмотреть, когда у заказчика падает весь магазин китайских поддельных сумок из-за такого вот кода в твоём плагине, а ты ему в ответ про неуровнавешенность лекции читаешь.
>>1337390Я не, ОП. Я основоположник этого сайта и всего лишь учусь у него.Прикньте у этого чувака так бомбануло, что он начал семенить от моего имени >>1337389 >>1337391 >>1337397 . Ахахахах жалко что нельзя отсылать голосые в тред, у него бы тогда ещё больше бомбануло от того как я смеюсь с него))))Что это за люди что они делают зачем им всё это)))P.S. На этом можно прекратить флуд.
>>1337397>Ты эмоционально неуравновешен.Тебе показалось.А вот ты неуважаешь ни свой труд, ни время других людей и вообще мудак по жизни, судя по треду - твой код ОП уже проверял, так ты, сделал минимальные правки и опять код-ревью на нерабочее говно просишь. Ты совсем шынгыс?
>>1337401>Я не, ОП>Ахахахах >голосые >)))Ясно.>>1337402У тебя неуравновешенность, не способен помочь - проходи мимо
Наверное, этот вопрос тут уже тысячу раз задавали, но я задам еще раз. Зачем в php нужно деление на статичестие и не статические методы? В чем между ними разница? Я ведь могу обращаться к методу через экземпляр или напрямую через класс, какая разница?
>>1337471>В чем между ними разница?Если по простому - их можно ползовать без инициализации объекта. А ещё они выдаются в единственном экземпляре на все объекты этого класса, что иногда удобно и позволяет не размазывать функционал по приложению.
>>1337475То есть если я вызову нестатический метод в одном объекте, то он повлияет только на него, а если статический вызову из класса, то он повлияет на все?
Аноны, есть некоторый запрос в бд. Мне его нужно отсортировать по, пусть будет, именам. Я через 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' будет в кавычках. Что я делаю не так? Не гуглится нихуя
>>1337481Разница есть.ORDER BY a - сортировать по значению поля aORDER BY 'a' - сортировать по строке 'a' (то есть как попало, так как мы сортируем по массиву одинаковых строк)Через плейсхолдеры можно подставлять только значения - числа, строки, null. Имена таблиц или колонок подставлять нельзя. Их придется вставлять напрямую, проверяя по белому списку разрешенных значений.>>1337493Не сказал бы. Хотя тут правильнее использовать bindValue, bindParam используется для двухстронней привязки, когда данные из БД заносятся обратно в переменную.
>>1337479Статические методы из вызываются не столько из объекта, а из класса, вроде бы, и доступа к внутренним полям конкретного объекта у него нет, только, опять же, к статическим полям класса.Ну сам напиши да попробуй, недолго ведь.
Что такое фронт контроллер? Это точка входа в приложение типа index.php или вызываемый в этом индексе главный класс приложения App, от которого танцуют все остальные классы?
>>1337505Впервые слышу об этом. Я могу получить доступ к полям класса из статического и из нестатического метода.
>>1337481Я вчера вот точно с такой же хренью сражался. В итоге плюнул и написал костыль сортировки через switch, который ORDER BY тупо соединяет с нужным значением. Думаю меня за это обоссут.
>>1337510А у меня вроде не получалось - писал, что-то в стиле "нельзя использовать этот метод\ссылку в таком контексте", хотя могу путать - давненько дело было.
>>1337508>Это точка входа в приложение типа index.phpГоворят это. Я там обычно окружение настраиваю - ошибки, дебаг там, пшеница, рожь, вот это всё. Потом бутстрап.пхп подключаю и понеслася.
А я вот думал, какая к черту разница, с ООП мы пишем или все в одном файле? Все равно интерпретатор превращает наш код в лапшу, выполняя строчку за строчкой
>>1337548Важно понять процедурную абстракцию (функции). Это основа. И обязательно функции высшего порядка.
>>1337558Ну, смотря что ты хочешь сделать. Можно наугад просто выбрать или же взять и прочитать то, что пишут в интернетах.Взять можно фреймворк посложнее, если тебе нужно не просто очередной магазин запилить: делаешь фреймворки, которые отвечают твоим задачам, запоминаешь стек фреймворков и расписываешь все плюсы и минусы. Так и сравниваешь потом плюсы и минусы и потом, если тебе нужна какая-то киллерфича, ищешь ее и выбираешь фреймфорк исходя из нее. Размер фреймворка и его архитектура элементов на стиль твоего кода не влияют.
ну чо суки, объясняйте нахуй. Вкатился я в это ваше ебливое php. Вторую неделю дрочу этот "учебник" для дурачков от ОПа. Ебать то ли я такой "индивид", то ли ОП ебанутый. В этом нахуй учебнике, по-моему может быть ограниченному мнению-нихуя не понятно после массивов. Я уже неделю вешу, вроде бы что-то понимаю и блять опять нихуя не понимаю. У меня ща пукан в файер шоу превратился. Может ещё кто-то какие-то лёгкие гайды распишет? Или ресурс какой подкинет.
>>1337572Там минимальный вычислительный элемент - транзистор. Нет там никаких команд на таком уровне. Один набор нулей с единицами - одна команда, другой - другая.
>>1337577Архитектура ЭВМ имеет 7 уровней. Ты говоришь про один из нижних. А я говорил про уровень микроархитектуры.
>>1337583Что тебе именно непонятно? Строки, функции, регулярки?В этом учебнике только азы, потом повеселее будет, с ООП и студент-листом, где ОП, вроде бы, объясняет, но нифига не всё, а скорее пинает в нужную сторону и катись сам дальше.
>>1337587На самом деле этот учебник просто сборник задачек с неплохим зазывающим началом. Остальное там хуита ненужная.
>>1337598Вполне нужная хуита там. Нужная и полезная. Уж точно лучше гугла, который до сих пор в поиске выдаёт советы от знатоков, которые через msql на БД ходят.
>>1337587В общем я вкатился с полным Nullем знаний, я прошёл задачки в темах Массивы, Циклы и Условия и всё до них. И у меня какое-то зависание теперь происходит. К слову я это именно задрачиваю, т.е. приходя домой с работы в 17.30, я ем и начинаю заниматься до 21-22, а потом намертво падаю до 6.20. И по новой каждый день. Так вот последние 2 дня, я просто нихуя не понимаю что от меня хотят в задачах, какие переменные и куда что засовывать. Я думаю, я просто заебался.И, кстати учу я так:1) Читаю гайд от ОПа2) Мануал ПХП обязательно листаю по подходящей теме3)Решаю задачи4)Ищу решения в интернете и осмысляю ихА по факту последние 2 дня я выполняю 1, 2 и всё, даже не уверен что в голове что-то откладывается.Стоило бы отдохнуть пару дней хотя бы от этого или продолжать тыкаться-мыкаться в эту закрытую стену?
>>1337607Советую тебе просто умереть и не создавать мне конкуренцию, сидящему на шее у мамки и каждый день с утра до ночи пидорящему пыху и смежное.
>>1337607Просто такие вещи требуют времени для понимания, если никогда раньше ничего такого не делал. Понимание машинной логики не всем сразу даётся: все эти циклы, ветвления, переменные. Просто дай себе время чтобы переварить инфу, не гони. Закинул себе тему новую, попробовал задачку - вышла\не вышла, но отдохни день-два, просто возвращайся иногда в мыслях к этой теме, обдумывай её и через пару дней увидишь как всё просто на самом деле. А сдуру и хуй сломать можно.И поменьше эмоций - успеется ещё жопой пригорать к стулу.
В чем разница между ошибкой и исключением с точки зрения фреймворков? Вот я начал ковырять один из них и вижу, что ErrorHandler обрабатывает не ошибки, а исключения. Разрабы опечатались просто или что?
Хочу сделать викторину, почти как "борьба умов" на телефоны, только в виде сайта. С чего начать? Какие темы гуглить?
>>1337660Ты хочешь чисто на эрудицию делать вопросы или на находчивость? Если первое, то обратись к вике, если второе у нас на дваче куча разделов с тематикой, откуда можно почерпнуть вопросов.
>>1337661Не про вопросы для сайт спросил. Интересно как реализовать сам сайт, я изучаю пхп всего 1.5 месяца, и понимаю только синтаксис, так же еще сделал по видеоуроку интернет магазин, но из него я пока подчерпнул знания с БД и не более. В общем интересна сама реализация.Например я захожу на сайт и регистрируюсь или просто имею случайное имя типа "гость111", выбираю например сложность вопросов, ищу случайного оппонента либо играю с опредленным, статистика ответов, награды за победы и т.д.
>>1337660Ты понимаешь как сделать роутинг? Сессии, БД, вот это вот все изучал? Для такого сайта скорее всего нужно SPA.
>>1337508Это паттерн проектирования, описанный например тут: http://design-pattern.ru/patterns/front-controller.htmlКогда все запросы проходят через Front контроллер и дальше уже направляются на обработку Page controller, контроллеру конкретной страницы.
>>1337508PHP рожден чтобы умирать. У него такая модель жизни приложения. Запустилось и умерло. Поэтому раньше делали роутинг приложения с помощью веб-сервера. Он запускал для каждого запроса отдельный .php файл.Единая точка входа, это когда все запросы идут в один файл. А там запускается роутер, который вызывает нужные функции, в зависимости от запроса.
>>1337502Пиздец, спасибо аноне. В итоге просто сделал для сортировки разные препеиры. Но код пиздец раздулся
>>1337764Вообще, этот паттерн, когда скрипт отрабатывает и завершается - это скорее плюс, так как он убирает лишнее состояние и делает работу приложения на PHP более близкой к функциональной парадигме, и к идее stateless из REST: выполнение одного экземпляра скрипта не влияет на выполнение другого экземпляра. Также, это обеспечивает простоту масштабирования на много серверов, и избавляет от проблем с утечками памяти, которыми часто страдают приложения на других языках. Хуже того, для многих языков при этом нет доступных и удобных средств поиска источника утечек.
>>1337785Утечки не совсем на уровне скрипта, а на уровне процесса. Так то они все равно существуют, ибо процесс все же не создается полностью с нуля на каждый реквест - не самое шустрое дело. Можно и так конечно, но работа будет нихера не отзывчивой. Просто это дело проходит безболезненно обычно. Тот же php-fpm чаще всего конфигурируется на заданное количество реквестов на один процесс в пуле, после чего тот нормально убивается (соответственно чистится память) и запускается новый. Можно и без перезапуска процессов, но тогда надо убедиться что утечек реально совсем нет, что не всегда вообще от тебя зависит.
>>1337785SPA как делать в таком случае? Производительность при умирающем приложении очень низкая, 1000 rps потолок, а то и меньше. Еще бывает нужно что-то делать в фоновом режиме.ФП к этому не относится. В ФП пропагандируется не изменять состояние переменных. Но в базу писать нужно все равно, и запросы обрабатывать. Если каждый раз создавать соединение с базой, производительность будет плачевной.
>>1337790>Производительность при умирающем приложении очень низкая, 1000 rps потолокОткуда ты эти цифры берешь? Зависимость от конкретной реализации конкретного приложения и мощностей машины напрямую присутствует.>SPA как делать в таком случае?И это тут совершенно не причем.Для начала просто выясни сколько рпс тебе нужно. Потом поищи узкие места, если все еще актуально будет. 1к рпс в большинстве случаев потащит больше 10к пользователей одновременных. (цифры умозрительные, зависит от логики потому что, просто усреднил. в одной прилоге один пользователь может генерить в среднем 1 запрос за минуту, в другом может 10 запросов за секунду, не угадаешь) Уверен, что у тебя достигается нужная посещаемсоть для преодоления отметки в 1к рпс? Я просто не в курсе по твоему проекту, так что вполне может быть ты раньше времени паниковать начинаешь.
>>1337798>Откуда ты эти цифры берешь? Зависимость от конкретной реализации конкретного приложения и мощностей машины напрямую присутствует.Уже давно все протестировано. На хорошем i7 не более 1000 rps держит, при умирающем приложении.>>1337798>И это тут совершенно не причем.Как это не причем. Каждый раз поднимать приложение? Это будет говеное SPA, будут задержки.>>1337798>1к рпс в большинстве случаев потащит больше 10к пользователей одновременных.Сомневаюсь. Если это просто информационный сайт, то может быть, а взять хотя бы интернет-магазин, пользователь может напинговать за минуту десятки запросов. Не говоря уже о чем то более интерактивном.
>>1337802>Каждый раз поднимать приложение? Это будет говеное SPA, будут задержки.Угу, и на приложениях для телефончиков всяких тоже, котоыре все через те же апишки работают, которые очень часто на пхп. Или браузерки возьми какие-нибудь - их там тоже до задницы на самом обычном коде с пхп, как хороших так и плохих. Если у тебя ощутимые задержки без проблем с интернетом - скорее всего узкое место в твоей реализации и тебе нужно фиксить именно его.При замерах рпс неважно спа там или нет, потому что ты замеряешь только выносливость приложения на текущей развертке. Среднее время на запрос тогда смотри. Интересно узнать кстати, какое среднее время запроса ты считаешь приемлимым.>взять хотя бы интернет-магазинНа таких проектах при высокой нагрузке у тебя больше проблем с базой будет, чем с приложением. Там в бд страсти христовы часто.>Каждый раз поднимать приложение?Если не лень замерь именно сколько времени тратится на подъем приложения на разных фреймворках, интересненько будет посмотреть.
>>1337806>Угу, и на приложениях для телефончиков всяких тоже, котоыре все через те же апишки работают, которые очень часто на пхп.Извини, но это глупость. Создание процесса не быстрое дело. Для SPA нужен мгновенный отклик. Поэтому вероятно сейчас много SPA приложений тормознутые. По хорошему, для SPA нужно активное соединение, и соответственно запущенный процесс. Каждый раз поднимать это глупость. Так могут делать либо дилетанты, либо пофигисты, кто не заботится о пользователях.>>1337806>Если у тебя ощутимые задержки без проблем с интернетом - скорее всего узкое место в твоей реализации и тебе нужно фиксить именно его.У меня все в порядке. Мне ничего фиксить не нужно.>>1337806>Если не лень замерь именно сколько времени тратится на подъем приложения на разных фреймворках, интересненько будет посмотреть. Я говорил о чистом PHP. С фреймворками оверхед еще больше.
>>1337811Ну тогда не поднимай каждый раз прилогу, раз сам для себя решил этот вопрос уже. Это возможно и легко гуглится, просто не так часто с этим люди работают и не думаю что ты помощь в этом треде найдешь особенную по этому вопросу.https://github.com/walkor/WorkermanВот как пример. Можно еще аналогов найти не мало.
>>1337812Я разве задавал вопросы? Я отвечал на вопрос. Ты вклинился и начал мне объяснять как у меня все неправильно и плохо.
>>1337826Это были наводящие вопросы. А не вопросы ответы на которые я не знаю. Если бы я тупо начал писать, что ты все говоришь не правильно, а нужно так и так, то это был бы не аргументированный текст.
>>1337617Да всегда работает, лол, видимо с мышлением как-то связано, случается какой-то заклин на определенной метакогниции относительно задачи, откладываешь, возвращаешься и вуаля смотришь под другим углом или еще до решения озаряет.
>>1337846Да понятно. Фронт-контроллер это точка входа приложения. Просто хочу понять, где эта точка входа: файл, куда направляются все пользовательские запросы или инициация всего приложения из этого файла.
>>1337987Ты можешь даже разные приложения дергать при желании. Вот фронт контроллер этим и занимается. Точка входа самое правильное описание для него, усложнять далее не обязательно.
Анон, который пишет свой фреймворк-велосипед, я думаю сделать к нему официальную документацию, комментарии и т.д. на русском языке и выложить это на гитхаб. Как думаете, если очередные хабрадауны заметят мое поделие, то много вони поднимется из-за того, что я пишу доки на родном языке, а не на их любимом ангельском? Также хочу кастомизировать обработчик ошибок и исключений, красиво оформить и национализировать для русскоязычного сообщества.
>>1338095А ты сравни даунов, которые на хабре пописывают, может даже чегото достигают. С теми, которые тут сидят только ради анонимного перекидывания говном, которое ни одной живой душе не интересно. И все на свои места встанет. А так пиши, можешь даже статейку написать о своем поделии, не обязательно на хабр.Велосипедные темы довольно популярны.
>>1337873Это известный факт, что для обучения нужно время. В идеале ещё и не напрягаться и учить столько, сколько хватает от сессии до сессии и не больше, вот тогда ещё и удовольствие приносить начинает, что, в свою очередь опять улучшает и ускоряет понимание материала. А если напрягаешься во всю, да ещё при этом начинаешь замечать, что туго идёт как-то, то всё - приехали. Стресс, переключение внимания на себя, а не на предмет, потом складывается негативное отношение к процессу и человек ещё на подходе уже угнетать себя начинает. Ну и бросает потом - говно же, как в школе. А нужно именно увлекаться этим, как игрой. В конце-концов в наших тупых играх задачки ещё ебанутее встречаются, и ничего - хаваем.Такая вот теория.
>>1338097Да это понятно. Тут в основном только новички-вкатывальщики сидят да какие-то трали, считающие себя ветеранами кодирования.Спасибо за совет насчет статейки, буду иметь ввиду.
>>1334227ОП, посмотри мой банкомат (не жадный, с перебором и ограничениями).https://ideone.com/CRwVJYЗаранее спасибо!
>>1338207>Надо с самого начала учиться писать правильно.Уа-ха-ха. Правильно это по твоему только с классами? Это называется ООП головного мозга. Классы нужны там где они нужны. PHP поддерживает ФП. Так что можно вообще без классов обходится если захочется.
>>1338207Почему бы тогда не давать практические задачки на классы, где они НЕОБХОДИМЫ? Ох вейт, таких задач не существует.
>>1338207По сути классы дают не более чем модульность. Без классов можно достичь более гибкой абстракции данных.
>>1338223>Ох вейт, таких задач не существуетЛюбая, где количество строк больше 1к и много модулей.Хотя >>1338207 выразился немного коряво. Надо писать не "правильно", а "как все и не выёбываться", чтобы ты мог понимать что пишут другие люди и люди могли понимать что ты там накалякал. Хотя, конечно, люди вполне и в ФП пишут, но уровень у тех что пишет на ООП, как ни странно, выше.
>>1338252>"как все и не выёбываться"То есть ООП головного мозга.>>1338252>но уровень у тех что пишет на ООП, как ни странно, вышеРассмешил. Тупее оопэшников никого нет. Извини если обидел, но это чистая правда.
>>1338252>Любая, где количество строк больше 1к и много модулей.Никакой корреляции с классами нет. В ФП стиле, даже не так, в функционально-объектном стиле (без классов), можно писать приложения любого размера. И не угробить его, не запутаться в нем. На классах такое невозможно. На классах оно перерастет в банальное неподдерживаемое легаси. Код на выброс как говорится.
>>1338262>>1338264Под вашим ООП на классах (которое и не ООП вовсе) нет никакого формального фундамента. Тоже самое, но уже формализованное, можно реализовывать без классов. Что собственно и делают на таких языках, как например Лисп или Эрланг.
>>1338272>>1338275Ну что, кто из вас в состоянии формализовать ваше ООП? Поднимите литературку что ли. Почитайте там, погуглите. Кое что есть по этой теме. Исследования ученых имею ввиду. Только вряд ли вы вообще про это знаете. Вы же как зомби твердите одно и то же "абстракция, наследование, полиморфизм". На уровне формальной модели там совсем другие формализмы вообще то.
>>1338282Шизик, уймись - всем похуй на твои исследования. Скажи психиатру чтобы таблетки тебе сменил - эти тебя не берут уже. История определили место твоему ФП - у параши, а ты всё не уймёшься. Пришёл в тред ЯП, который не для ФП впринципе, к новичкам, и агитируешь тут свой бред. В других местах тебя уже обоссали, как я понимаю, а то и солёных залуп за щеку натолкали.Ты смешон и жалок, пойми это.
>>1338252>Надо писать не "правильно", а "как все и не выёбываться"Лучше таки понимать, что ты пишешь и зачем, а не просто делать как все.
>>1338301Где про понимание? Опиши формальную модель ООП. Вот ты говоришь с математиком, пытаешься объяснить ему ООП. Как ты это будешь делать, какие формализмы использовать?Если ты всерьез говоришь, что ООП это что-то имеющее смысл. Так опиши это на языке математики. Если не можешь, то грош цена твоему ООП, и слова твои получаются пустые.
>>1338305Что начинается? Я лишь сказал не копировать бездумно, чтобы получилось как "у всех", с такого ничего хорошего не получится. Именно эта чушь про копирование выше и была высказана, или ты не достаточно ясно выразился. Такие копипастеры без понимания хуже чумы, прикрываясь несуществующим пониманием такую херню наделают, что мама не горюй.>>1338310Не лезь, псих, тут не о твоих галюнах разговор.
>>1338310Так всё просто. Традиционные в современном понимании ОО-языки (Java, C# и т.п.) - это просто языки с системой типов с поддержкой subtyping'а. Вот и всё описание.
>>1338325Пфф. И все? Какое то бурчание под нос. На большее я конечно не рассчитывал.Любая вычислительная модель должна быть описана. Машина Тьюринга, Машина Поста, Лямбда-исчисление, - все это описано формальным языком. Где модель ООП?
>>1338341Когда сейчас говорят про системы типов, обычно подразумевается, что речь идёт именно о типизации лямбда-исчислении. Если про конкретику, то обычно системы типов ОО языков моделируются каким-нибудь тем или иным расширением System F<:
>>1338344Какое отношение Лямбда-исчисление и System F имеет к ООП на классах? Опять похоже на невнятно бурчание.
>>1338346Прямое. Ты можешь большинство языков с классовым ООП таким образом смоделировать. Открываешь TaPL, главу 18, там прямым образом показано, как это можно сделать.
>>1338350Вот это уже конструктивный разговор. Если еще есть похожие книги по теме, напиши, хотелось быть почитать.
>>1338359Именно отдельных книг посвященных целиком ООП и связанную с ним теорию типов я не вспомню. А вот статей на том же arxiv'е и т.п. куча. Из относительно интересного что мне попадалось, можно посмотреть DOT-calculus от Одерски, формальное основание для Scala 3. А если просто про теорию типов, то можно начать с того же TaPL (после него ещё иногда советуют в ATTAPL от того же автора заглянуть), а дальше пойти в сторону зав. типов и пруверов на них (обычно советуют The Software Foundations) и HoTT (тут прям одноименная книга)
>>1338363Понял, благодарю. От себя добавлю кое-что, что хотел прочесть, но руки не доходили. Может кому интересно будет почитать.Труды Луки Карделли, который занимался формализацией ООП, в частности статья http://lucacardelli.name/Papers/TypeSystems.pdfБертран Мейер Объектно-ориентированное конструирование программных систем, где он также ссылается на Карделли https://www.ozon.ru/context/detail/id/2336754/
Еще одна статья Карделли, более ориентированная на ООП http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf
>>1338366В TaPL достаточно много ссылок на Карделли, как раз в тех главах, где заходит речь о ООП. Ну и TaPL, это прежде всего, учебник, поэтому там по сравнению с оригинальными статьями сильно более разжеван материал.
Аноны, в треде есть комментарии троллей, либо не отвечайте на них, либо отвечайте спокойно и рассудительно - троллям от этого становится скучно.>>1338160Я хотел еще подсказать варианты визуализации решения этой задачи. Вдруг это поможет придумать более эффективный алгоритм. Эта задача напоминает задачу про размен (дана сумма, неограниченное число банкнот, надо выразить эту сумму минимальным числом банкнот), и у задачи про размен есть визуализация, которая позволяет ее легче понять.Решение задачи про размен с неограниченным числом банкнот есть тут: http://labs.org.ru/dp-3/Полный перебор потребовал бы проверить порядка N ^ M вариантов, где N = (сумма/номинал самой мелкой купюры), M - число видов купюр. Однако, использование динамического программирования позволяет обойтись выполнением около N * M шагов (ценой чуть более высокого потребления памяти).Оптимальное решение можно визуализировать таблицей ( Визуализация задачи без ограничений.PNG ), где колонки представляют номиналы купюр, строки - сумму, которую можно выдать, а числа на пересечении - минимальная комбинация купюр для выдачи этой суммы. Первой идет сумма 0, которая, очевидно, выдается нулевым числом купюр. Затем мы пытаемся выдать сумму 100. Очевидно, тут только один вариант выдачи. Затем сумму 200. Тут есть уже 2 варианта: либо добавить еще одну 100-ю купюру (получается всего 2 купюры), либо добавить 200-ю купюру и убрать 100-ю. Вариант с 200-й купюрой выгоднее, и мы берем его и записываем в таблицу. И так мы добавляем строчки, пока не дойдем до требуемой суммы, и получаем оптимальную комбинацию для выдачи этой суммы. На каждом шаге мы просто берем предыдущую строчку и пробуем добавлять по одной купюре каждого номинала, выбираем самый выгодный вариант и записываем в новую строчку. Очевидно, что этот путь быстрее полного перебора.Но эта задача предполагает неограниченное кол-во купюр. Вопрос, можно ли это решение применить к случаю с ограниченным числом купюр? Не факт. Допустим, у нас есть запас 1x5000, 3x2000, 1x100 и нам надо выдать 6000. Если мы начнем считать комбинации для выдачи сумм, кратных 100, то мы придем к сумме 5000, которая выдается через 5000x1. Но добавляя по описанному выше алгоритму к этой сумме по одной купюре, мы уже никак не получим 6000.Вот второй вариант визуализации ( Визуализация задачи с ограничением.png ). Мы можем нарисовать горизонтальную табличку, в которой по горизонтали идет номинал купюр, а по вертикали - отложено их количество. Запас купюр я обозначил штриховой линией. Вариант размена выглядит как линия из 6 точек, по одной в каждой колонке (рисунок 1, вариант размена показан стрелочкой). На первый взгляд, для поиска ответа нам придется перебирать по N вариантов точек в каждой колонке, что дает N ^ 6 комбинаций.Но мы можем попробовать пройтись по таблице справа налево (и сверху вниз) и в каждой ячейке записать все возможные суммы, которые можно выдать, используя только купюры из данного столбца и столбцов справа от него. В таком случае нам только останется пройтись по заполненной таблице слева направо, выбирая в каждом столбце самую нижнюю ячейку, где есть требуемая сумма ( Идея с хранением всех сумм.png ). Это позволяет избежать многократных прохождений по одному и тому же пути, которые присутствуют в рекурсивном решении с полным перебором.Единственное, что меня тут беспокоит - как оценить сложность заполнения таблицы и объем нужной для хранения массивов чисел памяти? Выгоднее ли это, чем перебор N ^ M вариантов? Есть ли какие-то способы эффективно хранить/сжимать наборы чисел в ячейках? Как-нибудь в виде списка "от X до Y с шагом Z + от A до B с шагом C"? Битовую маску какую-нибудь использовать? Без оптимизации, если номиналы купюр не кратны друг другу, в первом столбце будут гигантские списки чисел, как раз размерности порядка N ^ M.Можешь подумать, и все остальные аноны, приглашаю вас тоже поломать голову. По твоему коду.> while ($requiredAmount > 0 && $amountOfBills >= $tempSum) {> // Если есть остаток - рекурсируем функцию> if ($tempSum > 0) {> getBillsAndAmount($tempSum, $tempBills, $result, $tempResult);Внутри цикла значение $tempSum не меняется, и потому нет особого смысла делать эту проверку на каждом шаге - её достаточно сделать один раз перед циклом, таким образом: if ($tempSum == 0) { $result = $tempResult; return;}> if ($requiredAmount > $amount) $requiredAmount = $amount;Тут можно было использовать функцию min()Вместо ссылок можно было возвращать результат функции через return.Также, вместо этого огромного if: if ($bill <= $sum && $amount > 0) {....}Можно было написать короче: if ($bill > $sum || $amount <= 0) { return;}Так, неплохо. Но можешь поломать голову над поиском оптимального решения, если хочешь.
553-595>>1338349Поддерживает.>>1338310ООП все же в первую очередь предназначен для разработки программ. Тебе не нужна математика, чтобы спроектировать объектную модель текстового документа или векторного изображения, или системы для учета работников.Потому нельзя сказать, что "грош цена ООП". Со своими задачами - разработка программ - оно справляется.>>1338296& и | это битовые операции, почитать можно например тут: https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8Чтобы их понять, надо перевести числа в двоичную систему счисления, почитай про неё, если не знаком.>>1338290Не нужно писать в таком стиле.>>1338267Наверно можно, но неудобно в прикладных задачах. Ты можешь показать код на этих языках для решения прикладных задач - вроде редактора электрических схем, интернет-магазина или чего-то подобного? А ООП там прекрасно работает.
>>1338265show me the code>>1338232Инкапсуляцию и наследование же. Плюс интерфейсы еще есть. >>1338223Задача: сделать модель дерева текстового документа с картинками и таблицами, например. Или представление электрической схемы.У нас есть учебные задачи на ООП: - ООП-Будильник: https://phpclub.tech/pr/res/1232710.html#1263399- ООП-Гостиница: https://phpclub.tech/pr/res/1082507.html#1097078>>1338203Тут они не требуются.>>1338135Рано, еще не всем ответили.
Смотрю требования к вакансии почтового сервиса 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? Или тут имеется ввиду, что твои познания должны быть настолько глубокими в программировании, что они легко лягут на любой язык, и остается вопрос только в изучении синтаксиса?
>>1338352Мало в каких вузах хорошо дают теорию типов, если ты про нее интересуешься. Но это относительно простая тема, её при желании можно спокойно самостоятельно освоить. Нужно только немного логического мышления и отсутствие страха перед математическими обозначениями.>>1338431Многие языки программирования очень похожи друг на друга, как во внутреннему устройству, так и по принятому стилю. Т.е., например, знаешь С# - очень быстро сможешь писать на Java, Kotlin и базовой скале. Знаешь какой-нибудь из лиспов - опять-таки, запросто перейдешь на другой. То же самое и с ML-подобными, и с современными скриптовыми, да и с низкоуровневыми тоже (умея писать в современном стиле на крестах, пересесть на раст вообще не проблема).Поэтому, достаточно только хоть как-то знать по языку из каждой группы и дальше учить новые будет очень быстро и просто. И в целом советую быть полиглотом в плане ЯП,это сильно улучшает кругозор и учит приемам из кучи разных парадигм и подходов.
>>1338431Не стать профессионалом, а овладеть 2 языками за несколько недель. Это вполне адекватное требование. Оно отсеет тех, кто учил языки, но не понимал их сущность, парадигмы на которых они основаны. Те кто зрят в корень, учат не языки а парадигмы. Они таки могут овладевать языком за несколько недель.
>>1331378 (OP)Сап, аноны. Хелп.Есть вакансия младшего программиста баз данных. Требований там нет(кроме голода новых знаний). Так вот хочу попытаться туда устроиться. Но в Преимуществах:Опыт написания запросов SQLОпыт разработки приложений баз данных на любых языках/субдОпыт составления тестовых кейсов(что это?).Там же есть вакансия PHP программиста, но в требованиях там опыт от двух лет. Поэтому решил пойти на младшего программиста БД. Но все таки подумал, что с пустыми руками туда лучше не идти. Сейчас прохожу книгу ОПа, но застреваю на заданиях с регулярками(сейчас на главе: Повторим?). Так вот, может кто-нибудь поможет, пожалуйста, составить план(типа интенсива), чтобы я смог по быстрому подготовиться к этой вакансии, но только без изучений ПОКА лишней информации? Ну то есть , чтобы у меня было приложение и я мог отвечать на вопросы? И кстати, как вы думаете, под младшим программистом БД они имели в виду, что я буду работать на прямую с сайтом или имелось в виду работа с товаром, если учесть, что это вакансия интернет магазина(или обычного магазина)?Так же есть вакансия Стажера-разработчика в другой фирме. Там из обязанностей общее представление о разработке сайтов, а из требований коммуникативные качества(фак) и отличное знание ПК и Интернет(что они имеют в виду?). Но там полный рабочий день, а я учусь 3 дня в неделю. Так вот, может ли стажер иметь полный рабочий день(у младшего программиста БД гибкий график) или они ошиблись и не это имели в виду?
>>1338494Реляционную алгебру читал?https://ru.hexlet.io/courses/rdb-basicshttps://ru.hexlet.io/courses/postgresql-ddl
>>1338505Недописалhttps://ru.hexlet.io/courses/rdb-basicsИ в довесок регулярки на PHPhttps://ru.hexlet.io/courses/regexp
ОП, если проверяешь, не забудь мои по верстке глянуть, а то я в самом начале запостил. Заранее пасиба.>>1333346
>>1338505>>1338507>Реляционную алгебру читал?Что то знаю.Но я имел в виду... вот допустим задача про список студентов, сделав ее, я могу пойти или еще рано?
>>1338461Разве у каждого языка не существует ещё несколько фрейморвков, из каждого у которого есть свои собственные тонкости?
>>1338684Отличай язык от библиотеки. Фреймворк это просто библиотека кода. Во фреймворках как и языках есть свои подходы. Изучать нужно подходы. Тогда любой новый фреймворк легко освоить.
>>1338608Если ты ещё регулярки осваиваешь, то рано. Это ж детский садик ещё, а ты уже в программисты БД лезешь странное название вакансии.
>>1338684В большинстве случаев количество и важность этих тонкостей сильно переоценивают. К тому же сейчас в мейнстриме те же веб фреймворки для разных платформ и языков очень друг на друга похожи.
Почему для работы миграций в ларавеле нужно что бы проект ларавеля находился в такой папке C:\xampp\htdocs?
Ананасы, какую литературу можно почитать про новые классы Error, ErrorException и Exception? Мануал прочитал, но там очень общая информация. Когда нужно использовать что-то из этих трех? Я могу в любом месте кода выбросить любой из этих объектов через throw. Допустим, Error я использую для отлова ошибок, а Exception для отлова исключений, получается, что ErrorException это результат множественного наследования от Error и Exception? Что делает этот класс?
Почему при помощи define можно константе присвоить результат работы функции, а const нет? Можно ли это как-то обойти? А то не хочется, чтобы в файле была мешанина из const и define. И еще, хорошо ли это, что я использую const вне классов? А то я читал, что const нужно только в классах использовать.
Допустим, у меня есть интернет-магазин с такой иерархией: есть общий класс продукта, общие классы категорий, например: техника, бытовая химия и бакалея, дальше идут классы конкретных товаров ноутбуки, шампуни, греча. Правильно ли я понял, что общий класс продукта и категории должны быть абстрактными, а конкретные не абстрактными? Можно ли любой класс, экземпляр которого я не хочу создавать, делать абстрактным?
>>1338943>Почему при помощи define можно константе присвоить результат работы функции, а const нет?Очевидно потому, что define это функция, которая принимает строку и связывает её с значением которое может быть результатом работы функции, а const это объявление константы и только.
>>1331382> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/12042279530b7358e443fdb759db3083a3e1cc1d/users.sql#L32> `hash` varchar(100) NOT NULL,Здесь бы не помешал комментарий к колонке (COMMENT '...'), что это за хеш. > groupaЭто и не английское слово, и не транслит с русского. Не стоит выбирать такие идентификаторы, так как при работе с кодом ты будешь делать ошибки в написании, и тратить время на их исправление. В идеале надо использовать английский язык или хотя бы транслит.> `gender` varchar(1) NOT NULLТут бы лучше подошел тип ENUM> `email` varchar(20) Я бы сделал побольше символов.> CHARSET=utf8;Кодировка utf-8 обозначается в MySQL как utf8mb4. utf8 - это урезанная кодировка (utf8mb3), я бы не советовал ее использовать, так как в ней, например, нет кодов эмодзи. Далее, у тебя нет публичной папки, у тебя все файлы по сути в открытом доступе. Это небезопасно, и надо сделать отдельную папку для публичных файлов, это описано в комментариях к задаче. Это не так сложно, всего лишь надо в конфиге веб-сервера поменять корневую папку для сайта. В Апаче, например, это делается директивой DocumentRoot.Сейчас получается, любой может скачать SQL-дамп с данными пользователей.> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/12042279530b7358e443fdb759db3083a3e1cc1d/index.php#L6Здесь в автозагрузчике получается относительный путь вроде "Some/file.php". Этот путь будет интерпретироваться относительно текущей директории процесса (не обязательно относительно папки с файлом index.php), а также искаться во всяких include_path. Лучше составить полный путь, используя константу __DIR__. > https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/bootstrap.phpКонфиг лучше бы вынести в отдельный файл, который находится в gitignore (это вроде описано в комментариях к задаче). А то сейчас, если один разработчик впишет туда свой пароль и закоммитит изменения, то эти изменения появятся у других разработчиков. > https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/core/Router.phpЗдесь пока плохо с форматированием. Тебе надо либо приучиться сразу писать код в правильном стиле, либо использовать какую-то IDE c встроенным форматированием. Например, Netbeans, PhpStorm, VS code (могут понадобиться плагины). Вот пример, обрати внимание на пробелы вокруг знака равно и запятой: > $params = trim(parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH),"/");> $params =explode('/',$params);Плохое оформление кода произведет негативное впечатление, если ты будешь делать тестовое задание, так что учись сразу оформлять код правильно.Далее, тут: > if($params[1]) {Если в массиве нет элемента с индексом 1, то будет ошибка (notice или warning). Надо проверять через array_key_exists, empty или isset.> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/12042279530b7358e443fdb759db3083a3e1cc1d/app/core/Router.php#L33> try {> } catch (\Exception $e) {Здесь скорее всего неправильно исопльзуются исключения. Если ты хочешь ловить и обрабатывать исключения, тебе надо сделать свой класс исключений для каждого вида ошибки. А так, ты ловишь вообще все исключения в программе, и вместо записи их в лог (что PHP делает по умолчанию, если ты их не ловишь) просто выводишь на экран, не записывая в лог. Почитай урок https://github.com/codedokode/pasta/blob/master/php/exceptions.mdТакже, для ошибки "страница не найдена" надо отдавать HTTP код 404. Если ты не знаешь, что такое HTTP и код статуса, почитай что-нибудь по этой теме, например урок https://github.com/codedokode/pasta/blob/master/network/http.md> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/ControllerFactory.phpНельзя ли создание контроллеров делать в DI контейнере? А то получается дублирование тут его функционала. Правда, контроллер надо каждый раз создавать новый, а твой DI контейнер, увы, так не умеет. Если это слищком сложно, можно оставить так, но можно бы и попробовать сделать. Для этого надо в DI контейнер передавать не созданные объекты, а функции для их создания, и он будет вызывать их при необходимости.https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/controller.phpИмя файла должно совпадать с именем класса с учетом регистра. У тебя файл с маленькой буквы. Под Windows, чтобы поменять регистр букв в имени, может понадобиться переименовать файл под другим именем сначала.> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/MainController.php> private $model;Лучше бы давать более понятное название, например, studentTG или как-то так. Так код будет понятнее.> $search=$_GET['search'];Лучше делать strval и trim. Так как могут передать массив вместо строки, а также, там могут быть лишние пробелы.> setCurrentPage($_GET['page']);Здесь тоже безопаснее принудительно преобразовать данные от пользователя к числу.> paginator->countPageНеточное название, лучше setRecordCount или setItemCount, или как-то так. > https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/ProfileController.php> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/controller/RegistrationController.phpТут много общего кода. Лучше всего было бы объединить его, а не копипастить. > https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/controller/RegistrationController.php#L21> if(!$this->auth->checkHash())А что, если пользователь залогинен? Выводим белую страницу? Надо эту ситуацию тоже обрабатывать.> header("Location:/profile");die();Тут наверно лучше использовать return, вдруг ты захочешь в index.php или в роутере что-то делать после обработки запроса. Хотя можно пока и так. > if($this->auth->checkHash())> {> $student = $this->model->getStudentByHash($_COOKIE['hash']);Тебе не кажется, что правильнее было бы инкапсулировать (скрыть) всю работу с куками в AuthService и сделать в нем готовый метод для получения текущего пользователя? А то у тебя нет единого ответственного за работу с кукой hash, вместо этого работа с кукой размазана по всему коду. Плохо.> public function __construct($model,$validator,$auth)Здесь нужны тайп-хинты для защиты от ошибок и повышения понятности кода. > private function grabPostValues()Здесь бы нужен тайп-хинт на возвращаемое функцией значение.https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/app/helpers/Authorization.phpНазвания функций можно улучшить, также стоит добавить тайп-хинты на возвращаемые значения функций.Вместо checkHash лучше написать что-то вроде isLoggedIn().> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/helpers/DIContainer.php#L35Тут правильнее было бы сделать свой класс исключений, если уж делать все идеально. А то как ловить такое исключение и отличать от других? https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/helpers/DIContainer.php#L9> public $dependencies = [];А почему public? Думаю, тут лучше ограничить доступ к полю. Ты не читал про инкапсуляцию? ---------Инкапсуляция. У этого слова есть разные определения, в том числе такие что ничего не понять, потому объясню простыми словами.Суть инкапсуляции в том, что класс скрывает (инкапслирует) в себе логику работы с данными и сами данные, а наружу выставляет только методы. Пользователю этих методов не важно, как класс устроен внутри, как он хранит данные, какие у него есть поля, ему достаточно вызвать нужный метод чтобы получить результат.Кроме нескольких публичных методов, остальные методы и свойства закрываются от доступа снаружи модификаторами private или protected. То есть с объектом снаружи ничего нельзя сделать, кроме вызова публичных методов.Это упрощает понимание кода: тебе не надо читать и разбирать код класса, достаточно прочитать название публичных методов (и может быть комментарии к ним). Также, это упрощает изменение кода: если какое-то свойство имеет уровень private, то доступ к нему возможен только из того же класса и тебе не надо бегать по всему коду и смотреть что там с этим свойством делается, тебе достаточно просмотреть один файл с этим классом. При инкапсуляции автор класса таким образом задает ограничения, что можно делать с объектом. Как плюс, мы можем поставить какие-то проверки в методах, и запретить установку неправильных значений свойств. Таким образом, снаружи записать неправильное значение в объект будет нельзя и автор класса может гарантировать его корректную работу в любой ситуации. Если у нас есть публичные свойства, то в них можно записывать что угодно, а приватные свойства изменять снаружи нельзя, можно только вызвать методы, которые что-то делают.Инкапсуляция это хорошо. Так как весь код, который занимается одной задачей, оказывается заключен внутри одного класса. Противоположный случай это когда код (или знание о его внутреннем устройстве) вылезает из класса и размазывается по всей программе.Если проводить аналогии, то можно представить кофе-машину. Ты нажимаешь кнопку (=вызываешь публичный метод) и получаешь кофе (=результат вызова этого метода), при этом ты не видишь что происходит внутри нее и тебе не надо в этом разбираться.---------
>>1331382> public function countPage($cstudents)Тут нужен тайп-хинт и надо бы переименовать функцию. > https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/helpers/Paginator.php#L26> return "/?page=".$previousPage.'&search='.$_GET['search'];Вот это плохо. Почему класс лезет куда-то в параметры запроса? Откуда он знает, что там хранится параметр поиска? У тебя нет разделения ответственности между пагинатором и контроллером. Не надо вообще в GET/POST лезть откуда-то, кроме контроллера. Вдобавок, ты еще и неправильно подставляешь данные в ссылку, не исплоьзуя процентное кодирование спецсимволов через urlencode. А что, если там встретятся символы & или # ? Наконец, гибче было бы, если бы пагинатор вообще не знал про поиск, а просто принимал дополнительные параметры для ссылки. И еще. Сейчас у тебя некоторые методы пагинатора неявно полагаются на то, что ранее были вызваны другие методы. Например, метод setCurrentPage() ожидает, что перед ним будет вызван countPage(), но это никак не проверяется и даже никак не задокументировано. Как другому программисту разобраться в этом? Это признак плохого кода.Исправить это можно так: - сделать передачу обязательных параметров в конструкторе, так, что не получится создать пагинатор без их указания- или сделать проверку на заполнение нужных параметров в фукнции, которая их используетПервое наверно проще.> public function ValidateAll($student)Нужен тайп-хинт, а в идеале еще комментарий. Имена методов пишут с маленькой буквы.> public function fill($post) :void> {> $this->name = $post['name'];А тут есть гарантия, что в массиве всегда есть такой элемент? Также, нужен тайп-хинт.> return $stmt->fetchAll(PDO::FETCH_CLASS);Имей в виду, что у FETCH_CLASS есть странность: http://phpfaq.ru/pdo/fetch#oop> По умолчанию PDO присваивает значения свойствам класса до вызова конструктора. При помощи же данной константы это поведение можно изменить - сначала будет вызываться конструкторЭто реально странно, так как конструктор в теории может сбрасывать значения свойств. > public function countAllStudent() : int> return $result->fetchColumn();fetchColumn() возвращает строку, а не число. Ты увидишь ошибку, если включишь strict_types=1 в начале файла.https://github.com/asdasdasdasddasasdasdas/StudentList/blob/89c01482b1e548fb1b258bf2b7708aa687911571/app/model/StudentTableGateway.php#L133Здесь ошибка в логике. Если в БД есть совпадающий email, но первой вернется строчка с id пользователя, то это не будет замечено. Перепроверь логику работы функции.https://github.com/asdasdasdasddasasdasdas/StudentList/tree/ads/public/viewВообще, view не надо выкладывать в паблик. Их исходный код ведь пользователю видеть не надо.https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/public/view/layouts/def.phpФорматирование кода очень плохое. Отступы неправильные.> if(!$this->auth->checkHash()) : ?>Лучше было бы наверно передавать переменную loggedIn.> href=<?=$this->paginator->getPreviousPageUrl();?>А где экранирование? Не забывай, что & это спецсимвол в HTML.> https://github.com/asdasdasdasddasasdasdas/StudentList/blob/ads/public/view/partials/form.phpФорматирование плохое. > <?= $errors['surname_error'] ?>Тут лучше бы экранировать все на всякий случай.> <input class="form-control " type="number" name="balli" value=<?=htmlspecialchars($student->balli) ?> required>А нельзя ли тут ограничить мин/макс значения? > <?= $student->gender == 'f' ? Лучше бы конечно использовать константу.> html,body{> height:1000px;> overflow-y: hidden;> overflow-x: hidden;По моему, это плохая идея. Если что-то не поместится на экран, то это будет никак не увидеть. > thead th{Ты зря задаешь стили для всех таблиц на сайте. Лучше применять только к таблицам с определенным классом. Это тебе потом помешает при развитии сайта. > form{То же самое.> span.text-danger{То же самое.> .table-responsive{То же самое. Сделал бы класс вроде student-table и применял бы к нему.
595-624>>1339006Думаю, что нет, но лучше измерить и проверить.>>1338943Если почитать мануал http://php.net/manual/ru/language.constants.syntax.php , то можно увидеть упоминание, что константы определяются при компиляции скрипта. Видимо, вычисление выражений в этот момент все усложнило бы. Да и это, наверно, усложнит чтение кода, так как значение константы явно не указано.Возможно, тебе нужна переменная, а не константа. > И еще, хорошо ли это, что я использую const вне классов?В этом ничего плохого нет.>>1338955Обычно тут не используют такое наследование, как ты описал. То есть, делают просто 1 класс для категорий, и 1 класс для любых товаров. Зачем тут делать несколько классов? > Можно ли любой класс, экземпляр которого я не хочу создавать, делать абстрактным?Можно. Хотя абстрактный класс - это недоделанный класс, класс-заготовка, от которого наследуются чтобы получить конкретный класс.
>>1338812ErrorException обычно используют для случая, когда PHP-ошибки, варнинги, нотисы превращают в исключения. Как это описано в мануале. Так как в PHP действует две параллельных системы: исключения и просто ошибки/варнинги/нотисы и многие педпочитают свести их к одной системе исключений.Класс Error - как описано в мануале, базовый класс для внутренних ошибок PHP. Его использует PHP. Тебе его использовать не надо.Exception - базовый класс исключений, от которого они все должны были наследоваться, до введения интерфейса Throwable. Ты можешь от него наследовать свои исключения или можешь не наследовать, если не хочешь.> Когда нужно использовать что-то из этих трех? Обычно используют Exception для создания своих классов исключений на его основе.> Я могу в любом месте кода выбросить любой из этих объектов через throw.В такой ситуации принято делать свой класс исключений, так как на каждый тип ошибки в идеале делается свой класс, чтобы их можно было различать и ловить только нужные. Например, если ты не смог прочесть файл, то можешь выкинуть IOException. Или у пользователя нет прав для выполнения действия - выкидываешь AccessDeniedException. Также, в PHP есть несколько готовых классов исключений на распространенные случаи: http://php.net/manual/ru/spl.exceptions.phpЕсли класс Error обозначает внутреннюю ошибку PHP, как ты можешь его выкидывать? Ты ведь не интерпретатор PHP пишешь, у тебя такая ошибка не возникнет. Мой урок по исключениям, советую прочесть: https://github.com/codedokode/pasta/blob/master/php/exceptions.md> Допустим, Error я использую для отлова ошибок, а Exception для отлова исключений, получается, что ErrorException это результат множественного наследования от Error и Exception? В PHP нет множественного наследования. Также, из твоего описания непонятно, чем у тебя отличаются "ошибки" от "исключений". Думаю, что ничем не отличаются. > Что делает этот класс?Объект исключения хранит подробности ошибки. Что это за ошибка, какие-то дополнительные подробности. Класс описывает свойства и методы, которые есть у объекта.>>1338761Не думаю, что там есть такое требование.
>>1338684У многих языков только один распространенный фреймворк вроде RoR в Ruby или Django в Питоне.>>1338685Фреймворк это все же не совсем библиотека. Бибилиотека - это когда ты вызываешь функцию. А фреймворк - каркас приложения - часто сам вызывает твои функции.>>1338608>>1338494Думаю, что в вакансии нужна не совсем реляционная алгебра. Есть среды разработки, где ты можешь создавать базу данных и писать дополнительные скрипты, формы, отчеты для работы с ней. Например: MS Access. Возможно, имеется в виду знание чего-то такого. Или, возможно, требуется умение писать хранимые процедуры на PL/SQL. Или, например, 1С - там тоже БД + фреймворк для разработки приложений для взаимодействия с ней. А может просто имеется в виду навык работы с phpMyAdmin, кто их знает. Написано не очень понятно, стоило бы уточнить.Формально, конечно, список студентов отдаленно подходит под "приложение базы данных" (хоть и запросы там простейшие), но я думаю, что имелось в виду что-то другое.> Опыт составления тестовых кейсов(что это?).http://www.protesting.ru/testing/testcase.htmlДумаю, это описание того, как надо тестировать тут или иную фичу. То есть что-то вроде "алгоритма" для человека-тестера. Возможно, имеется в виду также не просто опыт написания тест-кейсов, а опыт работы с определенной программой для их составления.> отличное знание ПК и Интернет(что они имеют в виду?)Умение пользоваться браузером, вордом, экселем, электронной почтой, что-то в таком роде.
>>1333346>>1338592> http://jsfiddle.net/8w256gev/3/ > тута не понял как выравнять сноску [..] относительно строки, абсолют или флоат ее смещает вверх, и еще можно ли ее через флоат как-то сделать?Думаю, что вертикально можно выровнять, добавив паддинг/маргин сверху вручную. Флоат имеет то отличие, что если в строке два em, то флоаты можно поместить друг над другом с помощью clear (ценой разрыва текста), а абс. поз. элементы нельзя. В принципе, годятся оба варианта.В твоем решении картинка не ужимается при уменьшении размеров окна. У тебя на картинке есть min/max-width, но этого недостаточно. Картинка - это замещаемый (replaced) элемент (как и input, button, select, form, object и тд), и если ей не указать ширину явно, то она берется из размеров картинки (350px). Потому ты должен указать width + max-width явно, чтобы картинка сужалась при уменьшении ширины окна.> span {Плохая идея ставить стили на span, лучше явно указать название класса, так как на странице может быть куча других спанов.> min-height: 150px;Это может приводить к искажению пропорций картинки, если ты будешь её уменьшать. > http://jsfiddle.net/rmouc3aj/Тут можно было обернуть переключатель в див, и повесить класс на него, чтобы не вешать его на каждый label. > label.super-button input {> position: fixed;Это плохая идея, ты закрепляешь его где-то поверх других элементов, и он хоть и невидим, но может перехватывать клики по своей области, перекрывая элемент под ним.Что касается фокуса, то есть псевдокласс :focus для сфокусированных элементов. Достаточно добавить outline для input:focus + i. > фокус и при нажатии делаетсяДумаю, это не проблема, пусть подсвечивается в ллюбом случае. Это лучше, чем отсутствие подсветки.Если стоит цель подсвечивать только при нажатии Tab (что было бы красивее), увы, тут решение только с помощью яваскрипта вроде описанного тут: https://stackoverflow.com/questions/23705055/input-effect-on-keyboard-tab-focus-but-not-on-clickТакже, если ты знаешь JS, то можно повесить обработчик на кнопки, и, если над кнопкой была отпущена кнопка мыши, и элемент сфокусирован (document.focusedElement), то отдавать фокус функцией blur().>>1338483Думаю, нужен яваскрипт.
>>1339039>Если класс Error обозначает внутреннюю ошибку PHP, как ты можешь его выкидывать? Ты ведь не интерпретатор PHP пишешь, у тебя такая ошибка не возникнет. >Класс Error - как описано в мануале, базовый класс для внутренних ошибок PHP. Его использует PHP. Тебе его использовать не надо.Я про то, что я в принципе могу выкинуть это через throw new \Error(). Мне нужно ошибки и исключения как-то различать. Но идеалогически верным было бы приводить все исключения к ошибкам, потому что на самом деле мало исключительных ситуаций может возникнуть во время работы программы. Львиная доля всех исключений порождает прерывание работы программы, а значит, это скорее ошибка, а не исключение, которое можно обработать и получить альтернативный, но все-таки положительный результат.
>>1339040>Фреймворк это все же не совсем библиотека. Бибилиотека - это когда ты вызываешь функцию. А фреймворк - каркас приложения - часто сам вызывает твои функции.Фреймворк это библиотека. Код на языке, для последующего использования. Вот пакетный менеджер обычно отдельное приложение. В фреймворке также вызываются функции, скафолдинг, миграции, и другие.>>1339040>Думаю, что в вакансии нужна не совсем реляционная алгебра.На ее основе строится работа с данными, в любых базах, даже не реляционных. Даже вне баз используются принципы реляционной алгебры, для проектирования работы с данными. Без знаний ее основ считай калека.
сап, подскажите с регуляркой https://ideone.com/miZCtlНе понимаю как добавить игнорирование любого числа скобок, минусов, пробелов.Благодарю заранее!
Какое пространство имен задать классам?У меня в разных проектах образовалась пачка классов-утилит, которую часто использую.Пространство имен сейчас у них везде разное.Как поступить? Думаю залить это говно на гитхаб и в пространстве имен тупо задать им namespace MyGithubNickname\SomeUtil;А далее в композере в проектах тупо подрубать им путь через psr-4, чтобы они грузились. Норм идея?
>>1339289Не понял, ты хочешь, чтобы все твое добро работало на гитхабе? Он поддерживает только статичные html-css-javascript сайты, для пых-кода нужен интерпретатор и демон, на котором он должен крутиться и принимать запросы.
Аноны, нужна помощь. Не ебу что выкладывать на гитхаб, так же есть страх что если я выложу туда что-то, это кто-то увидит из коллег/друзей и засмеют (работаю в айти конторе не программистом с перспективой перехода в бэкенд). Если бы был фронтовиком уже давно бы захуячил туда портфолио какое + JS и какую-нибудь хуету джаваскриптовую, но в случае с бэкендом я вообще не ебу что туда выкладывать можно. Ведь я еще ниразу не писал ничего сложнее каких-нибудь скриптов. А как начинаю смотреть репозитории из того что мог бы сделать, так охуеваю от того как там все сделано круто у других, и нихуя не понятно как они это сделали. Не хватает чтоли понимания как устроены проекты (даже самые простые, блоги, цмски), их архетиктура, с чего вообще начать, как назвать каталоги/файлы и т.д. До этого работал с Python, когда перешел на PHP, не могу найти толковых гайдов, книг, везде всё описано по разному и сделано по разному, но что-то из этого считается говнокодом, а что-то нет. Короче че запилить, уже после того как вдуплил в синтаксис и можешь сделать что-то типо блога, но всё еще не знаешь как это сделать хорошо, чтобы не стыдно было показать на собеседовании?
>>1339039>Не думаю, что там есть такое требование.Как раз таки это требование, так как без этого миграции не проходят, таблица в базе данных migrations создается а остальные миграции нет.
>>1338388ОП, а почему ну как мне кажется ты любишь "алгоритмические задачи"? Знания алгоритмов нужная вещь в PHP разработке? Ты же обещал, что не будет никакой математики. Тут и так регулярки сложные... Как так то?
>>1339661>регулярки сложныеЧто там сложного?Мимо написал овер сотню спамеров и любую регулярку пишу с закрытыми глазами
>>1339670Ну как сказать. Может я конечно передергиваюгибаю. Написать регулярку рили не так сложно, но вот чтоб сделать ее не громоздкой, тут уж нужны знания.
>>1339463Я тоже раньше такие вопросы задавал, про говнокод, про то, что засмеют. Мне тогда и сейчас понравился ответ одного анона: просто пиши, со временем сам увидишь где говнокод а где норм - это просто дело опыта.А ещё учти такой факт, что все писали лапшу и ничего в этом нет сильно плохого, это просто повод расти дальше.
>>1339679Да нет, спасибо, уже не надо.Я вот тут писал>>1335517>>1335533>>1335758Решил кое как, ну и так сойдет.Сейчас просто решаю задачу про банкомат. Задачу обычным способом решить еще можно ("жадный" алгоритм). А вот если брать осложненную версию, то тут уже тупняк.По ссылкам проходишь, чтобы изучить метод динамического программирования, но чет не понятно. Ну сейчас >>1338388 этот комментарий дочитаю, может понятней будет
>>1339675Не надо об этом думать, словно это какое-то великое знание. Это шаблон строки, заданный спецсимволами. Если чувствуешь неуверенность - поиграйся с ними и всё пройдет.
>>1339687Фишка в другом.В том, что кукарекать где говнокод - легко, но сами кукаретики хуй напишут то, что считают не говнокодом.>со временем сам увидишь где говнокод а где нормПодсказываю: говнокод будет всегда и везде из-за фундаментальных ограничений самих япов + в любом проекте сложнее хеллоуворда будет овердохуя узких и спорных мест и компромисов, которые являются самым настоящим говнокодом.Возьми код любого популярного фреймворка и охуей от этого кала.Костыль на костыле и костылем погоняет. Но за счет большого форса в комьюнити и хорошей документированности этим пользуются.Я серьезно пришел к выводу, что писать идеальный или даже приближенный к нему код вообще невозможно нахуй, ибо япы не настолько развиты.Например, хуй в каком популярном языке есть такая фишка, как ссылка на имя метода класса.Ну или многопоточность. Там тоже все через жопу.Код на C++ - так вообще один большой костыль, как и сам язык, на нем в принципе абсолютно нихуя нормального не напишешь.И так везде. Одно говно блять.Можно лишь научиться более-менее ловко его жрать. Но твой код всегда будет парашей
>>1339697Ты ж сам накукарекал про кукаретиков, и сам же раскукарекался. Как так?Говнокод обычно там, где не соблюдаются стандарты, т.е. типично-любительский такой джунский код. А костыли там, где без них никак это просто костыли.
>>1339717Да какие в жопу стандарты.Недавно начал делать проект на laravel и чуть не проблевался с этих роутов, которые захардкаживаются строками блядь.Причем даже нельзя написать MyController::class, надо руками писать 'MyController'.Да даже блядь обертку нельзя написать чтобы извлекать базовое имя класса, ибо там все через жопу сделано и то не поможет в случае если контроллер находится в подпапке.Истинное ебаное говно блять.И так везде - в сервис-провайдерах, в ядрах опять охуительные тонны стороковых литералов.При рефакторинге вручную ходишь и идешь это говно.Эти волшебные методы, которые перехватываются через __callStatic().Да, в целом любой популярный фреймворк - лучше использовать, чем нет, но говорить что они написаны "хорошо" - это бред.Нихуя не хорошо.В крестах же любой сложный проект состоит из подобной пораши чуть менее чем полностью. Ввиду отсутствия какого бы то ни было стандарта в комьюнити и тонн одинаковых инструментов, которые делают то, что даже в пыхе делает стандартная библиотека.Чего только стоит свой класс строк, который НЕПРЕМЕННО блять есть в каждой крестовой параше и везде он разный, ибо одинакового родного-то нет (точнее есть, но это просто недоразумение, которое использовать нельзя).
>>1339975Стандарты по сути придуманы, чтобы не заблудиться в говнокоде совсем, так сказать последний рубеж, перед полным проигрышем разумным машинам.
>>1339469>>1338761Не может такого быть. Вот накатываю вообще в кастомной конфигурации докера, ларавельскую виртуалку даже не запускал не разу.
>>1340634>>1339134Довольно просто. Сначала мы пишем выражение вида "ровно 1 цифра, за ней любое число скобок, минусов, пробелов". Затем мы оборачиваем его в круглые скобки и указываем 10 повторений: (....){10}Также, замечание. [+7,8] значит "ровно один символ: плюс, семерка, запятая или восемь".>>1339697В PHP, кстати, есть ссылка на метод конкретного объекта: $ref = [$object, 'getValue'];$value = call_user_func($ref);>>1339689> А как сделать, чтобы между ними учитывались скобки, пробелы и минусы? Можно ли как то это сделать за один раз, либо придется что то типа: сначала идут 3 цифры, потом возможно скобка или пробел или минус, потом еще три цифры и опять может пробел или минус и т.д.?Процитирую ответ выше: > Довольно просто. Сначала мы пишем выражение вида "ровно 1 цифра, за ней любое число скобок, минусов, пробелов". Затем мы оборачиваем его в круглые скобки и указываем 10 повторений: (....){10}> По ссылкам проходишь, чтобы изучить метод динамического программирования, но чет не понятно.Он применяется к похожей, но другой задаче (дана сумма и неограниченный запас купюр, надо найти способ представить эту сумму минимальным числом купюр). Суть этого метода, что мы находим способ, как от представления суммы x перейти к представлению суммы x + 1 (попробовать добавлять по 1 купюре разных номиналов, и выбрать комбинацию с наименьшим числом купюр). И так, увеличивая x от 0 до искомой суммы, мы постепенно найдем решение.Если что, тут есть примеры задач, которые этим методом решаются: https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5#Классические_задачи_динамического_программированияЯ не могу гарантировать, что им можно решить задачу про банкомат, но ты можешь попробовать.
>>1339661Мозги развивают. Я бы советовал тем анонам, у которых нет работы (и есть время) пробовать решать олимпиадные задачи. Регулярки станут не такие сложные, когда ты с ними разберешься и научишься использовать. Это всего лишь способ записать шаблон для поиска последовательности символов в строке.>>1339463Тебе надо изучать ООП, MVC и фреймворки. Начать будет проще всего с микрофреймворка вроде Slim. На нем как раз можно и блог сделать.>>1339285Обычно используют название проекта, и если он большой, то названия компонентов. Ну например: \Symfony\Component\HttpFoundation\Request. > У меня в разных проектах образовалась пачка классов-утилит, которую часто использую.Вынеси их в библиотеку с названием XyzTools и соответственно так же назови пространство имен. > Как поступить? Думаю залить это говно на гитхаб и в пространстве имен тупо задать им namespace MyGithubNickname\SomeUtil;Хороший вариант.> А далее в композере в проектах тупо подрубать им путь через psr-4, чтобы они грузились. Норм идея?Это лучше сделать в самой библиотеке, добавить в неё composer.json с описанием автозагрузки.
>>1339044> Я про то, что я в принципе могу выкинуть это через throw new \Error(). Правильнее так: либо используй классы исключений из SPL, либо делай свои классы исключений. Класс Error не для тебя сделан. Использовать объект класса Error неправильно, так как он выкидывается при ошибках PHP, и ты не сможешь отличить ошибки PHP от своих ошибок. Error - это не ошибка, а исключение. Так как он реализует интерфейс Throwable и выкидывается через throw. Ошибка в PHP формально - это то, что генерируется вызовом trigger_error. Ты считаешь ошибкой исключение, которое ловится, но это лишь твое мнение. Также, есть еще вариант, если ты ожидаешь ошибку, можно не выкидывать ее через throw, а возвращать через return.
>>1334227>>1340266Я смотрю, у тебя много тайп-хинтов, обрати внимание тогда, что в PHP7.4 добавили тайп-хинты для свойств: https://wiki.php.net/rfc/typed_properties_v2> // Увольняем сотрудников, вызывая соответствующий метод департамента> array_filter($engineers,Это с точки зрения не очень правильно, так как array_filter предназначена для отбора элементов массива. Тебе бы больше подошла функция array_walk или просто foreach. Также, ты переносишь тут аргументы не по PSR-2.> @param Company $companyЭто не несет никакой новой информации и, по-хорошему, можно было бы и не писать.> $profession = $analyst->getProfession();> $profession->setBaseRate(1100);Если объект profession у всех сотрудников один, то эта строчка повысит зарплату всем аналитикам во всех компаниях. Там в задаче ведь требуется создать несколько копий компании и к каждой копии применить свои меры, но ты повысишь зарплату во всех копиях компаний. > $department->select(> function ($employee) {> if ($employee->getProfession() instanceof Manager && $employee->getRank() < 3) {> $employee->setRank($employee->getRank() + 1);Это плохо с точки зрения читабельности, так как вызывается функция select(), которая судя по названию, лишь отбирает работников, но не делает изменений в них. Плюс, в теории нет гарантий, что твоя функция вызывается из select() ровно один раз для каждого работника, если select() будет по каким-то причинам вызывать её 2 раза, то ты повысишь всех на 2 ранга. Ты мог бы сделать функцию tranform, forEach или с похожим названием, если хочешь, чтобы она обходила работников и что-то с ними делала.> if ($coffeeVolume < 1) {> 'Переданное значение меньше нуля'Небольшое расхождение.Так, в общем, сделано хорошо, если не считать проблемы с профессией и с тем, что ты применяешь 3 меры к одной компании, а надо применить 3 меры к 3 копиям компании и вывести 3 результата. Если хочешь еще порешать задачки на ООП, то ищи "будильник" и "гостиницу" тут в треде или на phpclub.tech
>>1340867Можно такой же вопрос спросить про Руби. И кстати, тайп-хинты в Руби завезли? А вообще, https://habr.com/ru/post/315152/
Почему система аутентификации/авторизации в Laravel такая сложная блять?Я уже ебанулся это читать. Passport какой-то - это вообще нахуй какой-то фреймворк в фреймворке с кучей свистоперделок и даже собственными (!) таблицами в бд и собственными миграциями.Я всего-то хотел простейшую авторизацию по токенам для апи сделать, а мне суют в ебало O-Auth и прочую бесовщину.Сука, вынуждают блять просто взять и наговнокодить себе свою авторизацию на коленке тупо через middleware, привязанные к роутам.Че делать, помогити
>>1340867>зачем люди учат phpЯ начал учить еще очень давно, когда кроме него нихуя не было в вебе.Теперь просто жру говно по инерции.Зачем люди в этом треде учат - вообще хуй знает.Я спрашивал, говорят тип вакансий много то что не менее 50% их них - ковыряние ложкой в сладком хлебе в вебстудиях, где тебе дадут пхп 5.6, обмажут джумлой, битриксом и прочими высерами мирового программирования - их не ебет.А если говно отсеить, то окажется, что вакансий на тот же жс больше.Да и кроме него языки есть.Да и пхп уже не в моде.Я бы сейчас в 2к19 php не учил.Есть, как ты заметил, более хайповые и молодежные стеки. Js, Go.
Добрый день, гайс. Подскажите, какие есть сейчас современные методы распарсивания чужих страничек, на которых есть аякс? Мне много не нужно, всего одну маленькую табличку вытягивать, которая у них на ресурсе генерируется джаваскриптом.
>>1341601>на гоу 2 вакансииНу это пока.жпг>в моем 1ккМухосрани как бы никогда на острие прогресса не стояли.
>>1341625В душе не ебу, но го набирает популярность уже несколько лет.Ну и он более производительный, можно легче писать всякий хайлоад.
>>1340730ОП, а можно в студентах использовать компоненты из фреймворков? Или лучше самому велосипедить?
Что за хуйня в Laravel вместо моделей?Почему они называют моделями сраный orm-билдер запросов?Я привык что модель представляет собой некий интерфейс взаимодействия с данными. Инкапсуляция данных от внешнего кода. Внешний код может взаимодействовать с данными только с помощью методов модели.А тут вообще нихуя не так. Модель всего лишь привязывается к определенной таблице и все, далее любой хуй может дрочить ее как хочет, фактически напрямую делая sql-запросы (но с помощью моднявой орм).Это че за наебалово блять.
>>1341679Еще замечу, что в ларавеле нихуя не ActiveRecord, а какая-то левая параша.ActiveRecord сам по себе является хуйней, так в ларавеле к нему прикрутили еще и целый анальный поезд с клоунами.Сука, зачем я только проект на этом говне начал...
>>1341684То бишь, они предлагают мне писать всю логику выполнения запросов к БД тупо в контроллерах.Охуенно блять, просто гениально нахуй.Какая инкапсуляция, это все для лохов, игрушки дьявола
>>1341679Это вроде паттерн ActiveRecord. А так, Ларавель идеи заимствовал из RoR, а там примерно так же.
>>1341646Можно, но идея конечно была разобраться самому, как работать с таблицами в БД, как работать с формами. Компоненты использовать можно, если ты понимаешь их внутреннее устройство и способен сам написать аналогичный.
>>1341723Щас бы писать логику работы с данными в классах, являющимися билдерами запросов.Это примерно как унаследоваться от какого-нибудь класса DateTime и писать там логику своего приложения.
>>1341744Ты половину моего поста почему-то не прочел. Я еще в сервисах предлагал писать. Что касается моделей - в Ларавель их используют для этого, если тебе такой подход не нравится, то зачем ты этот фреймворк взял?
>>1341755>Я еще в сервисах предлагал писать.Что именно ты под этим имеешь ввиду? Что такое "сервисы"?
>>1341760https://martinfowler.com/eaaCatalog/serviceLayer.htmlКласс, содержащий методы бизнес-логики. Вроде зарегистрировать пользователя или удалить товар. Просто класс с методами, который не представляет какую-то сущность, а обычно существует в одном экземпляре.
>>1341764Ну вот примерно так я и собираюсь сделать.Вот в этой статье чел понял какая проблема с ларавельскими проблемами: https://habr.com/ru/post/350778/(Но зачем-то замутил еще один дополнительный слой абстракции, нахуя он это сделал - хуй знает).Короче репозиторий. Сервис. Как ни называй это говно, суть в том, что этот класс выполняет запросы к базе в своих методах, а внешний код обращается к этому классу, когда ему надо провзаимодействовать с БД.Тем самым осуществляются 2 вещи:1. Внешний код может взаимодействовать с данными только так, как позволяет класс репозитория/сервиса.2. Как репозиторий выполняет запросы является деталью реализации (хоть в нормальном приложении тебе и никогда не придется подменять эту реализацию)
АРХИТЕКТУРА ВЗАИМОДЕЙСТВИЯ С БД В ПРИЛОЖЕНИИТак бы называлась эта статья, если бы я писал ее какую-нибудь хабропомойкуВот чел в 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'ов, но он ничего не знает о реализации этих методов.Все блять. Что думаете?
>>1341787Ты путаешься. ORM используют не для того, чтобы писать запросы через Query Builder (стрелочками и скобочками). Наоборот, Query Builder используют, когда запрос надо собирать в зависимости от кучи условий (на SQL склеивание строк будет выглядеть довольно коряво). Обычно это всякие выборки с филтьрацией по разным условиям.И не для того, чтобы менять одну базу данных на другую (хотя некоторые проекты это делают). Он для того, что написано в его названии (object-relational mapping).Это хорошо, что ты хочешь написать критику, но хорошо бы сначала получше разобраться в том, что ты критикуешь, и зачем оно придумано.> Далее можно навернуть ActiveRecord, DataMapperТак Доктрина и есть ORM по схеме DataMapper. Ты сам себе противоречишь, потому что в начале пишешь, что она не нужна.Плюсы ORM в том, что тебе не надо писать руками код загрузки объектов из БД и рутинные запросы вида "найти по id". Это быстро надоедает. Также, ORM умеет делать связи между сущностям, включая ленивую загрузку (где она в твоем самописном ORM), также, ORM умеет сам находить изменения в графе сущностей и сохранять их обратно в БД.И все это самому написать довольно сложно. Попробуй хотя бы спроектировать, как ты будешь все это сам реализовывать. Получается, либо ты берешь Доктрину, либо мучаешься с написанием рутинных запросов и маппингом массивов на объекты руками.То есть ты обмениваешь удобство и скорость разработки на скорость работы и потребление памяти. По моему опыту, выгоднее всего получается что-то получать через ORM, а что-то SQL запросами.
>>1341787Также, насчет объектов.Крайне нежелательно делать для одной сущности разные представления (в виде разных объектов), так как в этом случае полезные методы смогут работать только с одним представлением, но не с другим. Например, я как-то ломал голову на тему: как, например, при выборке списка статей избежать загрузки текста статей? Сделать 2 сущности - Post и FullPost? Это плохой вариант. По факту, надо делать либо лениво загружаемые поля (в Доктрине их нету), либо мапить таблицу постов на 2 сущности: Post и PostDetails, связанные отношением 1-к-1 (Доктрина это тоже не умеет).
>>1341935>для одной сущности разные представленияА как такое может быть? Если они различаются, значит это разные сущности.>как, например, при выборке списка статей избежать загрузки текста статей?Ох уж эти проблемы орм-зависимых.Массив id - разве не примитивный тип?Не вижу проблемы.Я думаю, все что высирается в результате любых запросов к БД - должно быть определенным объектом.Ну или примитивом. Одномерный массив какой-нибудь хуйни - тоже примитивный тип. Как массив айдишников статей.
>>1341935Не знаю, как там в доктрине, но в АР ларки или yii такие выборки поддерживаются с маппингом в модель.
Модель должна получать данные, обрабатывать и передавать их в контроллерИЛИКонтроллер должен забирать данные через методы модели и обрабатывать, а если я использую ОРМ, то роль модели здесь стремится к нулю
>>1342056Модель это не только непосредственная работа с бд. Вообще всю бизнес логику проще назвать слоем модели, а эти орм только его часть. Так что эксперементируй. Ну а в контроллерах старайся делать поменьше, это просто посредники между клиентом и твоей логикой.
>>1342056Модель, хуель, все эти слова давно извратили и никто уже в душе не ебет что это вообще значит.Но что могу сказать - нельзя напрямую обращаться к базе данных в контроллерах.То бишь, писать там sql-запросы. Ну или обернутые в ORM sql-запросы.Нужен отдельный слой, который будет этим заниматься, а контроллеры уже будут с ним и работать.
Ахаха, ларавель, заебися. Умудрился обосраться даже при конвертации модели в массив, расположив ключи в рандомном порядке. Охуенно блять.Теперь я не могу просто сделать как на третьем пикреле, ибо порядок столбцов неизвестен.Сука, прямо какое-то стремление жрать говно наблюдается в этом фреймворке и особая тяга к захардкаживанию всего и вся в строковых ключах.
>>1342160Сука, чтобы я еще раз что-то прогал на этой помойке - лучше убейте меня.Нахуячили магии половину фреймворка, так для этой параши автокомплит ide (самой лучшей блять) не работает даже при напердоливании родными плагинами ларавеля.Это какой-то новый уровень говноедства.
>>1342184>Нахуячили магии половину фреймворкаУх как мне тоже это не нравилось в свое время. Но потом как-то успокоился.
>>1331378 (OP)Мне не нравится ПХП потому что постоянно приходится вводить комбинацию шифт+знак доллара, мизинец устает. Это можно пофиксить как-нибудь?
>>1342244Я тебе тут с этим не помогу, просто хотел еще до кучи накинуть следующее: -> для образения к методам инстанса, :: для обращения к статическому контексту, точечка для конкатенации.Меня ничего из этого не парит, но я видел людей которые со всего перечисленного блевали.
9http://jsfiddle.net/b1wmyoe8/1/10http://jsfiddle.net/zgerh70m/1/ - пофиксил>В твоем решении картинка не ужимается при уменьшении размеров окна.Нагуглил решение(в блоке img), но не понимаю как оно работает толком. Что дает max-width: 100% + width: auto?11http://jsfiddle.net/0wbntouz/1/ - пофиксил, сделал подсветку> position: fixed; Это плохая идея, ты закрепляешь его где-то поверх других элементов, и он хоть и невидим, но может перехватывать клики по своей области, перекрывая элемент под ним.сделал absolute, так он на своем месте останется
По пхп:Лиличка:https://3v4l.org/IqEmaСчиталка:https://ideone.com/h8Oe7gПо кругу:https://3v4l.org/BAtH4Не понял зачем тут $fromAngle = -80; $toAngle = 260; т.к. не стал вникать в тригонометрию.
>>1340045Все я выяснил в чем проблема, в папки в которой вложен ларавель не должно быть папок с русскими именами.
>>1342266img - картинка - это replaced element, то есть элемент, у которого есть "внутренний размер" (размер картинки). Правила вычисления ширины для таких элементов описаны в спецификации CSS2.1: - https://www.w3.org/TR/2011/REC-CSS2-20110607/visudet.html#inline-replaced-widthЕсли ты понимаешь английский, попробуй прочесть, там написано, как вычисляются размеры, если они не указаны явно. Если непонятно, спрашивай.Наверно, тебе интереснее будет разобраться самому, чем увидеть правильный ответ.
Напоминание всем, кто использует PHP7+, почему важно использовать declare(strict_types=1), чтобы потом на продакшене не ловить непонятных багов: https://ideone.com/ompMYj
>>1342326Что вернет toArray(), если его вызвать несколько раз подряд? По коду - нет комментариев и объяснений, зачем этот класс, то есть вcя информация о классе есть только в твоей голове. Это не подходит для работы в команде.Экспорт в JSON имхо тут делать довольно бессмысленно. Также, на практике, если ты делаешь JSON API, часто нужна не просто копия данных, а надо часть полей скрыть, часть полей преобразовать итд. И твой код с этим не справится.
>>1342545Интересный баг, не знал.Я вообще не понимаю, зачем они сделали не-строгий режим, хотя бы для новых функций вроде тайп-хинтов на return values, которых не было в старом коде. Вроде как разум вернулся в головы разработчиков и в тайп-хинтах для свойств они сделали строгую проверку типов. Ты баг в баг-трекере не пробовал поискать или создать? А то, может, мужики-то не знают.
Собираюсь устраиваться на работу в офис в ближайшем будущем, но у меня есть проблема: я еще ни разу не влился ни в один коллектив. Где-то я игнорировал всех, и игнорировали меня, где-то я конфликтовал с другими на ровном месте, где-то со мной конфликтовали. Не сказать, что я полный аутист до мозга костей, но круглосуточное двачевание с 2010 года дает о себе знать. Нормально общаться могу только тет-а-тет. Еще у меня случается конфуз мозга, когда я слышу или читаю сленг программистов. Например, из последнего, некий анон употребил термин "тип" в значении "подсказка". Что-то типа "накидайте мне типов для хуйня_нейм". Я долго думал, что это значит и как относится к самому кодированию, пока не вспомнил, что пхпшторм мне в самом начале предлагал отключить ежедневные tips из функционала, что я и сделал.Еще были проблемы со словом паттерн, которого нет в русском языке, но есть английское pattern. И когда я читаю его в английском тексте, я знаю, что это означает и читаю без остановок. Но когда раньше слышал в русском не шаблон, а паттерн, я начинал тупить.И этого сленга очень много. Скажите, в реальной жизни ведь его тоже употребляют? Как мне зазубрить все эти сленговые словечки, чтобы понимать будущих коллег?
>>1342622Само собой произойдет.Ну а с коллективом бывает просто не везет, однако чаще всего даже аутисты (например я) вливаются нормально в коллектив. А почему бы и нет собственно? Этож говнокодерство, там многие разной степени аутяги, да и ненависть к менеджерам всяким объединяет.
>>1342587>>1342545С чего вы взяли, что это баг? === - это строгое сравнение, которое помимо значений проверяет еще и типы данных.В данном случае ты сравниваешь строку с числом. Но в мануале ясно говорится, что если ты не используешь строгую декларацию, то типы будут динамически преобразовываться, где это возможно.
>>1342623Ты наверняка модный и доброжелательный анон с популярными интересами. Я на свои текущие 24 года не нашел ни одного человека, дотягивающего до моего уровня. Так что аутист аутисту рознь.
Как людям удается так хорошо выглядеть после бессонной ночи и вдобавок работать дальше целый день и оставаться бодрым?
У меня тут вопрос назрел. Я почти дописал свой фреймворк пхпшный, хочу еще прикрутить туда админку и дефолтный шаблон. Это получится уже не фреймворк, а cms? Правильно ли я понимаю, что что все cms имеют под собой базу в виде небольшого фреймворка?
>>1342586>Что вернет toArray(), если его вызвать несколько раз подряд? Ну все то же самое.Вообще суть кода в том, что базовый класс создает статический массив с ИМЕНАМИ переменных в ДОЧЕРНЕМ классе. Так как у всех объектов одного класса имена переменных будут одинаковы.А далее уже toArray() уже напрямую, без рефлексии, то есть, очень быстро обращается по этим именам к полям уже конкретного ОБЪЕКТА.Как раз это и сделано затем, чтобы на каждый объект не дрочить рефлексию.Допустим, когда у тебя массив из сотни таких объектов, рефлексия и поиск имен свойств будет выполнен 1 раз, а далее все последующие объекты будут преобразовываться в массив уже прямым обращениям по именам.>Также, на практике, если ты делаешь JSON API, часто нужна не просто копия данных, а надо часть полей скрыть, часть полей преобразовать итд.Если понадобится - перегружаешь метод и делаешь все что надо вручную.
>>1342639Необязательно, кто-то на чистом пишет, особенно среди древних цмэсок, сейчас больше на фреймворках наверняка, да.
Господа, посоветуйте новичку софт аналог фотошопа (для верстки) - линейка, выгрузка фото из PSD, если это все возможно. Интересует аналог, потому что фотошоп работает достаточно медленно.
Скриптач, как в 2019 нужно передавать переменные из пешапе в жс? Я проксирую запросы к внешнему api и в виде жсона отдаю в страничку, но это как-то некрасиво.
>>1342587>>1342624Я (автор ссылки на ideone) и не утверждал, что это баг. Более того, об этой особенности знал ещё пару лет назад, когда PHP7 только вышел. Проблема в том, что программист в больших проектах в 90% времени будет работать с кодом, который писал не он, а потому подобного рода проблемы сложно обнаружить, просто взглянув на код, часто приходится вооружаться отладчиком. Решил сообщить о такой особенности тайпхинтов в PHP для тех, кто не знал.
Анон, где я обсераюсь?https://ideone.com/21EtbEЗадача:W5.1. Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон?Ответ:Всего будет выплачено около 61270 р. за 13 мес.
>>1342969Ну ты же понимаешь, что ты с этим далеко не уедешь?Это как учить раскладку дворак.Вся хуйня на этой планете заточена под фотошоп, а у тебя видите ли работает медленно.Ты не сможешь быть профессионалом не юзая фотошоп.
>>1342244Двачую вопрос.В кач-ве выхода наверное есть способ забиндить знак доллара на нажатие одной кнопки.
>>1342152Мне кажется настоящий мидл понимает, что нужно писать, и не задает таких вопросов. Гугли вакансии, где требуются мидлы, и смотри, соответствуешь ли ты.
>>1343156И это хуево, что нет аналогов, потому что фш с каждой версией становится тормознутее, а монополистическое фш-общество уже трудно будет отказаться от фш в пользу чего-то другого. Должно пройти поколение-другое, прежде чем от фш можно было отказаться как от стандарта в отрасти.
>>1343172Изобретатель языка php не случайно ввел знак доллара в инструкцию декларации переменной. Каждый написанный знак доллара притягивает к пишущему деньги. Это псевдоним для священной фразы ГОЛОВА ДАЙ ДЕНЕГ. А в теге <?php закодированы правила и пик, без которых эта фраза не работает. Сочетание этих символов складывается в особый бинарный код, который и генерирует эти правила и пик с ГОЛОВОЙ. Именно поэтому php код не работает вне этого тега. ГОЛОВА ДАЙ ЖЕ МНЕ ДЕНЕГ
>>1343175Вообще, знак доллара до PHP для переменных использовался в Perl и в оболочках вроде bash. Он используется перед переменными в Ruby, XSLT. В Pascal он обозначает 16-чные числа. В JS, Java он может быть частью имени переменной. В BASIC обозначает строковые переменные. В Fortran является частью управляющей директивы.
>>1342748Ты свой код проверял? Я уверен, что не проверял. Зачем ты тогда так уверенно пишешь, что все правильно, если тебе намекают, что это не так? toArray() при каждом вызове будет возвращать массивы все большего размера. Далее, я не уверен, что если отнаследовать от твоего класса несколько классов, то в них будут разные экземпляры $reflection и $propertyNames. Даже если так, это все равно получается переусложненный и запутанный код, в котором легко допустить ошибку при правке. Протестируй свой код.
>>1343217>toArray() при каждом вызове будет возвращать массивы все большего размера. Черт, да ты прав, это действительно так. Да, я обосрался.>не уверен, что если отнаследовать от твоего класса несколько классов, то в них будут разные экземпляры $reflection и $propertyNames.Тот код несколько неверный, я уже переписал. Теперь там ни одного слова self, только static.Вот окончательный вариант:https://pastebin.com/sX5reRfW
Есть одна проблема.Есть базовый контроллер, у него есть зависимости, которые указываются в конструкторе и подключаются через IoC.Дочерние контроллеры тоже могут указывать свои зависимости в своих конструкторах и они тоже подключаются через IoC.Но папкин конструктор-то они все равно должны вызывать! И все его зависимости тоже должны перечислять и передавать в базовый.Так вот, проблема в том, что список этих зависимостей постоянно меняется по ходу разработки и поэтому меняются сигнатуры конструкторов ВСЕХ дочерних контроллеров.Так вот, я придумал создать объект, содержащий все базовые зависимости контроллера, в который они будут передаваться, как вы уже поняли, через IoC.А базовый контроллер будет принимать в конструктор себе только 1 этот объект и оттуда вытягивать все зависимости.При изменении списка зависимостей я меняю только объект зависимостей, а сигнатуры дочерних контроллеров никогда не меняются при этом.Так вот, вопрос в том, каким паттерном можно это описать? Вроде это не делегат.
Привет, аноний. Шел я сейчас с работы и думал о всяком разном. И мне в голову ударила одна мысль. Вот есть у нас два файла лежащих в одной папке. Если каждый из этих файлов заrequirить друг в друга, то это будет работать? Я уже давно не программист, настраивать окружение лень, поэтому обуздайте мое любопытство.
>>1343301В C++ есть похожая хуйня, когда 2 объекта могут ссылаться друг на друга.То есть, есть класс, там ссылка на объект, компилятор проходит по ссылке, а там ссылка на тот класс, из которого он пришел, но он еще не определен!Но это там разруливается с помощью какой-то неведомой хуйни, так что да, можно и такое сделать.
Анон, нужна помощь.Хули он делает? Как ему сказать, чтоб открывал не текст, а скрипт? Пробовал запускать и через хтмл тоже, нихуя, тупо весь код показывает.Сам локалхост работает, показывает Apache2 Debian Default Page.ЧЯДНТ?
>>1343359Все сделал, спасибо. И директорию свою выбрал для удобства, а то приходилось вечно ползать под админом в var/www/html.
Можно ли как нибудь заменить уебищный стрелочный синтаксис => и -> на человечесике [key: value] и obj.property ???
>>1343377так чо вместо php все таки учить node.js ? Сам js знаю, но 7ая пыха говорят не уступает ноде по быстродействию и с асинхроностью проблем нет.
>>1343388Ну фактически с дивана, однако знакомый из компании-конкурента рассказывал, что какие-то проекты там стали на ноде пилить и с каждым финансовым годом это число увеличивается.
При заливке проекта на гитхаб, нужно заигнорить папку вендор с зависимостями, выложив лишь композер.джейсон или нужно всю папку тоже выгружать?
>>1343410Просто дело в том, что проект для чайников, и эти чайники не в состоянии установить композер для дальнейшей разработки. Что же мне делать?
Анонусы, подскажите, только вкатываюсь в ПДО MySQLБД настроена, контакт есть. Скрипт выполняется, но данные в БД не приходят. Что за хуйня может быть? Я думаю что проблема возможна в:A) В переменной $query проебался с синтаксисом или вообще хуйню написалБ) В самой созданной БД проебался с настройкой таблы, возможноP.S. Подключение к БД есть
Тэкс, анон. Конкретно туплю.И в первом и от втором случаях не могу сделать, чтоб первая и вторая строки были различными. Можно было бы сделать еще три $rand для второй строки. Но тогда код будет больше и будет повторяться. Стараюсь так не делать.Во втором случае тупо ловлю ошибку.В чем дело? Как это исправить?
>>1343464>>1343463Включи выбрасывание ошибок через исключени и увидишь ошибку:$pdo->setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);https://pastebin.com/HxiZ2U6TПо-дефолту ошибки не отображаются.
>>1343617Двачую вопрос, есть нормально структурированные курсы начиная с типов данных, строках строковых операторах, массивах, итераторах итд. А не как написать хелоу ворд в html? Можно на инглише.
>>1343623>>1343617SoloLearn или курс с ОП- поста. Не?> У нас есть свои уроки по основам PHP, они собраны и выложены по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не читайте, не сохраняйте, не запоминайте его, он временный).
>>1331378 (OP)Что нужно написать в PATH, чтобы не писать полностью путь php в командной строке?D:\tmp\php - вот папка, где распакованы php компоненты
>>1343528>>1343649Б А М ПАМП>>1343678Верно, спасибо. Но мне надо как- то "прогнать" все значений, а то мне кажется, что он сравнивает только первый ($symb) и последний ($rev). И от этого всегда выдает "Палиндром".
Анон. Поясни за $this. Можно его не использовать при выведении чего- либо через конструктор __construct(), так как появляется = при использовании текста.
>>1343808Конкатенация и правда работает. А вот фигурные скобки - не всегда. Наверно это от компилятора зависит, так как некоторые переваривают перенос строки через /n, а некоторые только <br/>.
>>1342637Уже несколько лет так живу. Тянки говорят, что выгляжу норм. Но стараюсь делать всетаки зарядку каждый день - может это помогает. Хотя лысеть начал всетаки
>>1343528Ты сгенерировал случайное слово 1 раз, положил его в переменную и вывел 2 раза одно и то же значение. Ты можешь хоть 10 раз его вывести, значение, положенное в переменную, само по себе не меняется.
>>1342244Чем плох доллар? Никак не пойму той предьявы. Наоборот же удобно - сразу видишь что это переменная
>>1343833Ну как тогда быть? И чтобы не было:> Можно было бы сделать еще три $rand для второй строки. > Но тогда код будет больше и будет повторяться. Стараюсь так не делать.Ящитаю, есть способ сделать это без копирования однообразных действий.
>>1343872Добро пожаловать в высокоуровневое программирование.Можешь и 2 недели абстракцию на абстракцию наворачивать, так ничего осязаемого и не написав.
>>1343914Это задачки из учебника в ОП посте. http://codedokode.github.io/phpbook в теме "Строки, хакеры и шифровки".
тупа бампуже 3 дня учу js на русском сайте, не собираюсь останавливатьсятолько вот пугают долги по сессии и англицкий
Где мы свернули не туда?Композер падает от нехватки оперативки на вдс с гигом RAM.Сука, ебаный пхп не может установить свое говно, как жить блять
>>1343765Зачем тебе гайд? Регаешь свою функцию в spl-загрузчике, которая на вход берёт полное имя класса, с неймспесом. Ну и делаешь шо хочешь там. Только ошибку не вызывай, если не нашёл класс - неположено, т.к. там могут быть и другие, а ошибку тебе сам пых покажет.
>>1343889Если слушать всех советчиков, то ты для хелловорлда с десяток классов создашь, либу с гитхаба загрузишь и обязательно где-нибудь обосрёшься.Давно уже такое заметил за сообществом кодеров.
>>1344251Нормально, мировая практика.Вот я тот, кто писал выше как композер падает от нехватки памяти.Устанавливал пак локализации для фреймворка (без выбора языка, эта хуйня тупо грузит ВСЕ имеющиеся) и эта хуйня падает.Пошел в исходники этой хуйни и выдрал 1 (ОДИН блять) файл на несколько килобайт, который вручную добавил и все заебись.
>>1344251И на всё надо создать интерфейсы, как же мы без интерфейсов - не поймём же что куда втыкается! Нужны интерфейсы даже для обосрамса.
Бля, анонесы, подскажите плз. Заебался уже какого хуя эта блядская форма не отправляется к ебливому серверу.Я этот кун >>1343463Ошибка высветилась, подправил хуй знает как и куда нажалТеперь другая ссанина вылетает, мать её. Буду благодарен <3красным ошибкаХотя бы дайте пинка куда смотреть, потому что я сериоузли думаю что проебался в скрипте и имеет смысл удалить всё нахуй и попытаться переписать с нуля
>>1344269Передаешь строку 'score' в столбец score, где тип smallint (не строковый нахуя тебе smallint в эпоху bigint, поехавший?)Просто читай что написано в ошибке, также гугли по КОДУ ошибки. Тексты ошибок могут совпадать, но код всегда однозначно говорит о проблеме.
>>1344269Ему не нравится тип данных, которые ты посылаешь - в 'score' используется smallint, а ты ему integer посылаешь. Либо тип в таблице меняй, либо то, что посылаешь.
>>1344269Прочитай, что за тип smallint, и какие у него есть ограничения (и что значит число в скобках). Выведи число, которое ты пытаешься туда вставить, с помощью var_dump, и проверь, соответствует ли оно ограничениям. Также, если не понятно, покажи кусочек кода, возможно, найдется эксперт по теме работы с БД. У меня ощущение, что ты туда строку пытаешься вставить.
>>1344269Какой смысл удалить? Ты от этого знаний не получишь. Чтобы получить знания, надо понять причину ошибки, и больше ее не делать. >>1344257Памяти мало наверно. Ну или баг, что тоже возможно, который стоит тогда зарепортить, а лучше разобраться и исправить.>>1344251Преувеличение. Наоборот, не понимаю, в чем удовольствие писать то, что уже кем-то написано. Много времени лишнего? И сторонняя библиотека скорее всего будет содержать тесты, документацию, ее будут поддерживать, а у твоей самоделки всего этого скорее всего не будет. Вот радости-то, разбирать чей-то кривой велосипед без комментариев и документации.Возможно, ты делал только небольшие скрипты и не понимаешь плюсов, или же ты не прочел документацию композера (читал?), не разобрался в нем, и из-за этого им недоволен.>>1343765Есть: https://github.com/codedokode/pasta/blob/master/php/autoload.md
>>1344246По моему опыту, 700 Мб обычно хватает. У тебя случайно сервер не на технологии OpenVZ, который потребление памяти умножает на два? Если не так, то попробуй взять более старую версию композера, отключить xdebug. Кстати, если есть желающие с головой погрузиться в композер и понять, что ему мешает потреблять меньше памяти, можем этим заняться, я помогу советами и идеями.>>1343872Если ты не знаешь шаблонизаторы, то писать "реальный" код тебе еще рано. Только какие-то учебные простые примеры. Кстати, простым языком шаблоны описаны в моей статье: https://github.com/codedokode/pasta/blob/master/php/templates.mdПрограммирование - это не работа в макдональдсе, где достаточно посмотреть на других и делать так же.>>1343959Это только если ты изучаешь эти абстракции. На практике, злоупотреблять ими не стоит, а стоит писать простой, понятный другим код.>>1343849Поместить выбор случайного слова внутрь тела цикла. Третья строка делается по другому шаблону и её в цикл поместить не выйдет.Или же, как описано в подсказках к задаче, сделать массив, где каждый элемент содержит варианты слов, которые могут быть в этом месте, пройтись по нему циклом и сгенерировать стих.
>>1343818Не \n, а <br>. \n это перенос строки, но если ты вываливаешь вывод скрипта в браузер, то он интерпретирует вывод как HTML, а в HTMl перенос строки равносилен пробелу. Выход - либо использовать br, либо указать в заголовке Content-Type тип содержимого text/plain. Версия интерпретатора тут не при чем. Интерпретатор вообще никак не трогает выводимый текст и ничего в нем не заменяет.>>1343802У тебя неправильный код. Ты должен писать команду присваивания $this->name = $name;как отдельную команду, а не внутри строки. Использовать this ты не обязан, но судя по вопросу, ты просто не понимаешь, что это такое и зачем нужно. Можешь открыть и почитать главу про ООП в учебнике из ОП-поста или любом другом учебнике.
>>1343410Нет, ты включаешь игнорирование папки vendoк гитом файле .gitignore и и сохраяешь в репозиторий только composer.json + compoder.lock. Тот, кто скачает твой код, установит заисимости композером.>>1343412Сделай инсталлятор или оболочку, не знаю. >>1343301Если require то будет вечный цикл, и PHP упадет. Если require_once, то все ок.
>>1343269Неправильно усложнять код из-за того, что ты его правишь. Используй опции рефакторинга в IDE или поиск/замену по файлам.
Почему трейты так хороши?Раньше думал бесполезное говно, но как узнал, что трейты могут определять абстрактные методы, устанавливая требования к родительскому классу - все резко изменилось.Причем 2 разных трейта могут определять одинаковый абстрактный метод и базовый класс, использующий 2 таких трейта будет работать, эти методы как бы наложаться друг на друга (а одинаковые переменные разные трейты определять не могут).Раньше страдал от такой хуйни, как большие контроллеры и всякие "базовые" классы для других классов, это говно могло разрастаться до 1000 строк.Теперь я выношу связанные компоненты по трейтам и сам класс содержит только методы логики, а не свистоперделки и хелперы.Заебись.А еще фишка трейта в том, что он ни от чего не зависит, ну то есть вообще от нихуя. Любой трейт ты можешь тут же выдрать из любого проекта и всунуть в любой другой. И если класс определяет абстрактные методы трейта, все будет работать.Прям аж охуел с пхп, жалко в других языках нет трейтов.
Итак, доброго времени суток аноны, я тот самый который выше не мог отправить данные из формы в БД по PDOВ общем вчера я решил упростить себе задачу, дабы разобраться. С отправкой форм. И ограничился пока только текстовыми полями.Также переименовал названия в таблице, ибо были какие-то эроры связанные с отправкой формы из NAME и Second-name. Теперь мой код выглядит таким образом. Однако данные из форм по-прежнему не отправляются в бд. Из-за этого: Invalid parameter number: number of bound variables does not match number of tokensВсе колонки я уже проверил.Почему решил переписать код? Потому что вчера я решил трайнуть в ту самую неблагополучную колонку 'score' отправить текстовые данные. Однако в итоге в БД пришли только названия колонок. Код конечно сейчас приятнее выглядит, но какой с этого толк, если он не работает?Заранее благодарен.
>>1344442>number of bound variables does not match number of tokensЕбаный ты аутист, ты начнешь когда-нибудь читать что тебе пишут в текстах ошибок?Число переменных не совпадает с числом плейсхолдеров.Олсо, полагаю что при назначении параметров надо их тоже с двоеточием указывать.Да и вообще используй вопросики и и не еби мозг. ? ? ? ? ?.
>>1344447да я прочитал бля, только число переменных 5, в бд их тоже 5, как и в хтмл коде 5. Я убрал нахуй двоеточия и эта ебатека исчезла, теперь мне в бд приходят ПРОСТО МАТЬ ИХ ПУСТЫЕ ЗНАЧЕНИЯ БЛЯТЬ
>>1344442Откроем мануал: http://php.net/manual/ru/pdostatement.execute.php> Запускает подготовленный запрос> input_parameters> Массив значений, содержащий столько элементов, сколько параметров заявлено в SQL-запросеТы должен вызывать execute 1 раз, но с полным массивом параметров. Если ты хочешь добавлять параметры по одному, то используй bindvalue на объекте PDOStatement: http://php.net/manual/ru/pdostatement.bindvalue.phpЭто не страшно, что ты делаешь тут ошибки, но начинай всегда с чтения официального мануала по используемой функции и может быть, в следующий раз, ты это ошиюку не совершишь.Также, try/catch писать не нужно. Если у тебя включен display_errors = 1,то PHP сам поймает и выведет это исключение (если не включен - запишет в лог (журнал) ошибок).>>1344447Надо быть культурнее.
>>1344462Давай я еще научу тебя, как защититься от вставки в базу совсем неправильных значений, вроде пустых полей.Во-первых, если ты укажешь для колонки NOT NULL, это потребует обязательно указывать ее значение при вставке. У тебя это сделано. Но если ты не включил "строгий" режим в MySQL, то MySQL по доброте душевной все равно разрешает не заполнять поля и подставляет для них сама пустые значения. Потому стоит включить "строгий" режим в MySQL. - Официальный мануал про то, как его включить (англ, сложный): https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-strict- Статья: https://dev-tips.ru/blog/post/ustanovka-strict-mode-dlya-mysqlЭто можно сделать либо в конфиге my.ini, либо в твоем коде, сделав запрос SET SESSION sql_mode = ...Проверить текущий режим можно, сделав запрос SELECT @@sql_mode.Если ты используешь новейшую версию MySQL (8 и выше), то скорее всего он уже включен по умолчанию.Во-вторых, при создании таблицы ты можешь указать выражение, которому должно соответствовать вставляемое значение. Это делается опцией CHECK в запросе CREATE TABLE. Например, ты можешь указать. что значение колонки должно быть от 10 до 20: CREATE TABLE t1 (age INT CHECK age BETWEEN 10 AND 20)или, что длина поля должна быть не менее 3 символов: CREATE TABLE t1 (name VARCHAR(100) CHECK LENGTH(name) >=3)Эта опция работает только начиная с MySQL 8.0.16 (эта версия пока не выложена для Windows). Также, она работает в других СУБД вроде Postgres. Если ты создаешь таблицы не SQL-запросом, а через программы вроде phpmyadmin, то там может не быть такой возможности, а может, кстати и быть. Если ее нет, то ты можешь добавить ограничение после создания таблицы запросом ALTER TABLE. Оф. мануал на англ: https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.htmlЯ бы советовал писать такие ограничения, так как они защищают тебя от ошибок.
Как сделать связь таблицы с НЕСКОЛЬКИМИ другими таблицами?Ну то есть как обычно бывает. Есть id, есть какой-нибудь user_id, который указывает на таблицу юзеров.А если у меня там что-то типаid, type, table_id?И в зависимости от type table_id может указывать на значения в разных таблицах.Как это грамотнее сделать?
>>1344442Не храни пароли в открытом виде! Используй соленый хеш, как описано тут: https://github.com/codedokode/pasta/blob/master/security/password-hashing.mdТакже, в HTML значения атрибутов лучше писать в кавычках и без пробелов после знака равно.Если ты делаешь задачу про студентов, то обязательно позже прочти все комментарии к ней.>>1344413Есть и минусы. У трейтов нет конструкторов, и они не могут делать инициализацию, использовать какой-то DI (разве что через абстрактные методы). А так да, трейты могут быть полезны, если их использовать по назначению. Но, на мой взгляд, не стоит использовать трейт там, где подойдет отдельный класс-сервис.Большие базовые классы могут говорить о нарушении принципа разделения ответственности, что ты пытаешься всё в один класс запихнуть.>>1343044Так же, как раньше: конвертировать в JSON и встраивать прямо в страницу в тело скрипта.
>>1344508Лучше всего для каждой таблицы делать свое поле. Так как иначе ты не сможешь сделать внешние ключи, а без них база данных превращается в свалку.В общем случае твоя проблема напоминает проблему "наследования" таблиц, для которой есть 3 паттерна: https://www.google.com/search?q=%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD%D1%8B+%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F+%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86&gbv=1&sei=D8JeXM2EC6LmmwX63L7wBg
>>1344511Ну хуй знает, даже не думал об этом в контексте наследования.https://stackoverflow.com/questions/441001/possible-to-do-a-mysql-foreign-key-to-one-of-two-possible-tablesТут говорят, что это полиморфные ассоциации.>Лучше всего для каждой таблицы делать свое поле.Об этом тоже думал.id, facebook_id, vk_id, twitter_id.Только вот таблица должна содержать только ОДНО из этих возможных значений, или facebook_id, или vk_id, или twitter_id, но не все сразу и даже не 2, а только одно.А это нельзя гарантировать на уровне sql.
>>1344513В твоем случае проще всего сделать общую таблицу social_networks и ссылаться на нее. А не по таблице на каждую соцсеть.
>>1344516Дело в том, что у каждой соц-сети свои уникальные столбцы и вообще разное их количество, эти таблицы не одинаковы.
Короче решил остановится на единой связывающей таблице, классической many to many, но вместо обычной связи двух столбцов, будет связываться несколько.То есть, есть такие таблицы:users,vk,twitter,facebookuser_social_networksИ user_social_networks будет содержать ключи на 3 другие таблицы:id, facebook_id, vk_id, twitter_id.По логике программы юзер может иметь несколько акаунтов в любых соц-сетях.И user_social_networks должна хранить ссылки на акки юзера.Но по идее, в одной строке этой таблицы не должно быть установлено больше одного столбца из списка соц-сетей, а остальные должны быть null.То есть, 1 строка хранит ссылку только на 1 соц-сеть.Но это нельзя гарантировать с точки зрения mysql.Вроде в последних версиях можно сделать это для конкретного случая двух таблиц, но для большего количества нельзя.В качестве плюсов - простая и очевидная структура БД.Из минусов - нет идеального наложения на реляционную природу субд.В целом, даже если по какой-то причине в базе окажется строка, где одновременно будут заданы 2 соц-сети и более - ничего страшного не случится. Небольшая цена за удобство.
>>1344523А, ну еще забыл сказать, что структура вида id, facebook_id, vk_id, twitter_id все же имеет нормальные реляционные ключи на другие таблицы и к ней может применяться каскадное удаление/изменение.В отличие от id, social_network_type, social_network_id
>>1344523Начиная с версии 8.0.16 это можно гарантировать, добавив на таблицу ограничение CHECK. https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.htmlОно же есть в Postgres и других системах.
Привет, аноны!Тоже вкатываюсь в PHP. Задачки из оп-поста успешно решаю, но вот затух на установке mbstring и чет не догоняю, что делать.Пробовал ковыряться в php.ini, но результат на пике.Киньте плиз ссылку на мануал или подскажите, если все не так сложно.
>>1344509Да, я именно её и начал делать. Но уже с подключением к бд и отправкой формы потратил 4 дня, сейчас почитаю.>>1344502Ещё одна благодарность тебе.
>>1344530Вот это и имел ввиду.Но как там сделать проверку на 3+ столбца?Только на 2 можно.CHECK (col1 NOT NULL XOR col2 NOT NULL)Можно ли дописать XOR col3 XOR col4...?
Вопрос про require_once.Допустим, у нас есть два файла:data.php<?php$a = 1;?>и index.php<?phpfunction b(){require_once('data.php');echo $a;}?>При запуске index.php получим ошибку "Notice: Undefined variable: a". Мне нужно без правок в файле data.php, работать с его данными из функции b файла index.php. При этом изменять количество входных параметров функции тоже нельзя.То есть, запускаем функцию и она уже внутри должна подключить файл и считать из него переменную. Но не считывает. Как это пофиксить?
>>1344590Ну банально присвоить 1 если поле заполнено, и 0 если нет (x IS NULL), сложить и проверить что сумма равна 1.>>1344553У тебя в php.ini прописана директива для загрузки расширения mbstring, но PHP не смог найти файл (dll) с ним. Либо ты неверно указал папку, либо ты не скачал это расширение. Он тебе даже пишет, где он пытался искать файл. Мануал http://php.net/manual/ru/install.pecl.windows.phpmbstring, если не путаю, идет под Windows в комплекте с PHP, так что скорее всего ты неверно указал папку. Зайди туда и глазами найди нужный файл.Спрашивай, если непонятно.
>>1344650require_once выполняет файл только первый раз, как следует из ее названия. Тебе нужен require.
>>1344658Спасибо.Однако, мистика. Попробовал require - получилось. Попробовал снова require_once - снова получилось. никаких ошибок. А раньше были.
>>1344350>Наоборот, не понимаю, в чем удовольствие писать то, что уже кем-то написаноСобственно вот тебе ответ >>1344257В посте явно видно, что иногда лучше самому навелосипедить по-минималке, чем тащить толстые либы от неизвестного Васяна с неизвестным исходом.>ВозможноА ещё не надо фантазировать надо моими постами. Возможно ты умственны инвалид, у которого проблемы с пальцами и ты не можешь сам написать ничего.Вообще, какой смысл разбираться в технологиях, если потом только чужие либы юзать?
>>1344679Хм. После перезагрузки компа, пхпшторм подчёркивает $a и предупреждает, что она "Undefined variable", но в браузере всё отрабатывает без ошибок и нотисов. Прогуглил всё, что смог придумать для поискового запроса, нигде не пишут, что в функции require и require_once работают как-то по другому. Вот теперь думаю, можно в таком виде отправлять, или нет. то ли это просто пхпшторм не видит переменной в подключённом файле и можно забить, то ли это грубая ошибка на видимость переменных и её допускать нельзя.
Что за хуйня происходит, помогите.$_list передается в метод по значению.Вроде все идеально. value передано по ссылке.В итоге массив не изменяется блять.Как так?
>>1344881Отбой тревоги, дело оказалось в реализации ->toArray() в объектах EntityEnterface.Короче если у EntityEnterface в качестве члена другой EntityEnterface, то он не конвертился в массив, а прямо передавался.Сделал рекурсивно, теперь заебись.Рекурсия в рекурсии, кажется я познал дзен программирования.
>>1337481во втором случае у тебя бессмыслица, ты по чему сортировать собрался? сортировать по колонке можно, там байнд не нужен, когда ты байнд делаешь у тебя вместо колонки строка обычная подставляется, и это перестает быть колонкой
Аноны, подскажите кто-то, заебался уж.Есть форма авторизации, есть бд с логинами и паролями. Пароли которой хэшируются по принципу:$hash = password_hash($password, PASSWORD_DEFAULT);В бд приходят пароли в виде $2y$.....Загвостка в том, что при авторизации приходит в бд совершенно другой хеш пароля. Соответственно один и тот же парольчто вносится в базу при регистрации, и который вводится при авторизации имеют различный хэш.Как это решается?
>>1345228Для проверки надо не колхозить свою функцию, а использовать http://php.net/manual/ru/function.password-verify.phpХеш разный каждый раз, так как там перед хешированием генерируется случайная соль.
аноны экстрасенсы подскажите1)есть форма для информации и файл куда сбрасываются значения2)далее страница обновляется и отображаются значения из файла проблема в том что после обновления странички, показывается старая версия файла, т.е до ввода информации(если глянуть в файл, то в нем все корректно записалось), после повторного обновления странички показываются уже корректные данные.код не скидываю т.к он норм все отрабатывает куда копать?
>>1345773>куда копать?Как там файл открыт, с каким флагом?Читается как, до записи или после? Ну ты понел...
>>1345773>>1345794>>1345807>>1345815>>1345847>>1345883>>1345887в идеоне не запустится, т.к файл создаетсяhttps://ideone.com/PMk9XX
>>1345929как всегда нашел ошибку после того как написал в тред, не совсем понял почему так призошло, но хотелось бы услышать мнение от более опытных людей, если их это говно заинтересует
Как перестать дрочить на красоту кода? я больше времени трачу на оформление чем на разработку и тестирование.
Пишу на пхп несколько лет, считаю себя далеко не самым хуевым программистом, сегодня впервые увидел в коде ключевое слово yield.Я вообще ничего до этого время не слышал про это дерьмо и генераторы.Пиздец блять.Есть что-то еще, о чем мне стоит знать?
>>1346265и форматирование и структура и общая гармония.я когда редактор ставлю, то два часа настриваю цветовую схему и подстветку кода, чтобы приятно было смотреть на код
>>1346263>Есть что-то еще, о чем мне стоит знать?Да есть - ты хуёвый программист, раз не обращаешь внимание на развитие твоей платформы, ну и сам не развиваешься значит. Добро пожаловать в стагнацию, говнокодер.
Аноны, подскажите кто-нибудь куда смотреть хоть. Вот у меня есть сайт на котором регистрация и авторизация, после авторизации создаётся сессия и происходит переход на ссылку. Если не авторизировался, то кидает обратно на форму авторизации. Вопрос в следующем. Как мне сделать так, чтобы неавторизованные пользователи не могли пройти дальше авторизацииибо можно просто ввести в url адрес этой страницы и он открываетсяТ.е. при отсутствие кук и сессии-доступ к этому url закрыть. Как это правильно реализовать?
>>1346354ну подскажи в каких фреймворках, и с какой строчкой :)Я совсем недавно начал заниматься пхп, мало понимаю.
Аноны, подскажите, умоляю. Как управлять чужой сессией? Есть 2 стула 2 человека и некая группа, один админ, другой мембер. Мне нужно сделать возможность админу передать админку или выбросить мембера из группы, но дело в том, что для минимизации запросов в бд я положил токен доступа к группе и ее названию в сессии и в след раз когда админ выкидывает пользователя, юзер все равно продолжает как бы находиться в группе до близжайшего релога. И вот я думаю либо переделать эту механнику с сессиями, либо просто отключать пользователя, но это тоже не лучший вариант. Помогите
>>1346343создаешь файл пхп где происходит проверка сессий, если не прошло выкидывает через хедер на страничку авторизации, и подключаешь файл через реквайр куда тебе надо
>>1346343Я лично это прописал в роутере т.е. если человек, который заходит на сайт, не имеет сессии, он всегда попадает в разрешенные ему каталоги даже не получая доступ к контроллеру этого адреса. Либо можно сделать как написал этот анон >>1346416 , но его способ у меня лично вызвал небольшую жопную боль и раздувание кода (если я правильно понял о чем он)
>>1346274В нормальных IDE сложнее блокнота всегда есть автоформатирование по нажатию комбинации клавиш.1 раз настроил и далее твой код всегда идеально отформатирован.Я даже так и пишу зачастую, ибо так быстрее.Например, пишу что-нибудь в духе if (1===2){return true;}прям вот так в строку, похуй, так быстро.Затем нажимаю crtr+shift+f и все, код нормально форматируется.Сейчас еще пришел к такой хуйне, что не пишу полностью названия переменных и функций, даже знак доллара иногда не пишу, все ide подсказывает.Короче, IDE - очень важный инструмент, который предохраняет от ошибок путем статического анализа и экономит тонны твоего времени благодаря продвинутому автокомплиту и автоформатированию.
>>1346482Если ты опытный, то отвечай на мой ответ:у меня в шаблоне вывод ошибок валидации сделан через подстановку массива $errors[%fieldname%], ну тупо так, по-колхозному. И если ошибок нет, то у меня нотисы вываливаются на несуществующее смещение в массиве. Мне кажется, что городить if-else конструкции в шаблоне ниочень идея. Как вариант - заполнять пустыми строками эти ключи, но тоже несколько велосипедно сие.Что делают синьоры-помидоры в таких случаях?
>>1346493В шаблонизаторе должна быть функция показа ошибок, что-то вроде showErrors().Она должна быть реализована на верхнем уровне кода по отношению к шаблону.А уж далее в ней обходишь массив ошибок и выводишь как хочешь.Плюс если что можешь изменить формат вывода в одном месте.Если у тебя не самописный шаблонизатор, то там такое уже есть, если нет - стоит написать.
>>1346493>>1346503Ну вот, например: https://laravel.com/docs/5.7/validation#quick-displaying-the-validation-errorsКороче, не обращайся к ошибкам по строковым ключам, код показа ошибок не должен париться о том, сколько их, какие из них существуют, как называются и т.п.Этого можно достичь помещая ошибки в массив, а далее обходя его в цикле.Этот код обхода в цикле может быть как в самом шаблоне, так и в функции высшего порядка, смотря как сделаешь
>>1346503Писать шаблонизатор - не вариант. По условию ОПа надо на чистом PHP выводить, как я понял. А на чистом - там надо городить проверку на каждое поле ввода, или обязательно заполнять по ключу. Или отключать вывод ошибок и срать в логи сотнями.Можно ещё класс написать, чтобы обрабатывал эти запросы по несуществующему ключу, но я тяжелыми наркотиками не балуюсь.Не понимаю как выкрутиться.
>>1346505>Короче, не обращайся к ошибкам по строковым ключам, код показа ошибок не должен париться о том, сколько их, какие из них существуют, как называются и т.п.>Этого можно достичь помещая ошибки в массив, а далее обходя его в цикле.Но тогда у меня ошибки будут выводиться в кучу, а по проекту надо под полем ввода, где непрошла валидация.Хотя способо через цикл годный, хоть что-то. Если не придумаю лучше за вечер, то им и сделаю.
Доброго дня, макаки, и снова я со своей велосипедной cms. Дабы не ебаться с лицензиаром такой вещи, как ORM, начал писать свою собственную. Сначала навертел абстракцию над pdo, сейчас наворачиваю другую абстракцию над абстракцией, где будут человекочитаемые методы типа selectAll(), selectOne(), push() и прочее. Так как методов этих много, а о реалиции их я пока что не думал, может быть вы знаете какие-нибудь простые библиотеки с открытым кодом, откуда можно понапиздить методов, переписав под себя?Посмотрел пока исходник redbeanphp, не нашел там нужного.
>>1346523Не нужно бессмысленно городить методы. Нужно либо продумать, что именно нужно, либо посмотреть на другие библиотеки.Также, может быть тебе поможет статья про паттерны работы с БД: https://github.com/codedokode/pasta/blob/master/db/patterns-oop.md
>>1346394Можно убрать хранение лишних данных (токен доступа к группе) из сессии. >>1346493Тебе еще и экранировать данные придется при выводе. Можно либо if/else, либо заполнять все ключи. Либо сделать функцию, внутри которой будет if и которую можно вызывать. На практике обычно используют какую-то библиотеку для форм (Symfony Forms например), и она предоставляет вывод ошибки/ошибок одной строчкой вроде такой: {{ form_errors(form.email) }}Это с использованием шаблонизатора твиг. Без него можно так: <?= showErrors($errors, 'email') ?>В задаче про студентов и других задачах можно использовать шаблонизатор, если ты наизусть выучил урок про XSS и способен разобраться в шаблонизаторе.>>1346510Такого условия нет, если я не путаю. Нотисов в коде не должно быть, они считаются ошибкой разработчика.
>>1346574>Тебе еще и экранировать данные придется при выводеНадо ли? Если разработчик в строку ошибки вставляет теги, когда есть шаблон и там вывод оформлен, то земля ему пухом, братишке. Разве нет?Но с функцией тоже интересный вариант. У меня есть уже одна - для сборки УРЛа с параметрами, значит и вторая туда же пойдёт.Их значит уже 2 + метод рендера(в контроллере) + заголовков ХТМЛ можно выделить место. Значит мне писать отдельно класс Представления, как я понимаю? А то у меня простое подключение шаблонов.Вроде же простое приложение, а целый фреймворк городить надо.
>>1346524Не подозревал, что русский есть, он дописан хоть? На английском и так все понятно же и родные названия все.
>>1346515А, ну тогда через функцию вида getError ("name").Внутри проверяй, есть ли ошибка для этого поля и если есть - возвращай.Можешь сократить в шаблоне:e("name");
>>1346523Чувак, ты почти точно делаешь бесполезное говно.Если в твоей ORM не будет таких вещей, как many-to-many отношения и полиморфные отношения - она является просто обёрткой над SQL.
Оп, допустим у меня есть функция save($student) в классе StudentDataGateway. Можно ли в ней разбирать объект функцией serialize() и посылать разобранным в бд? Насколько такой подход уместен для этой задачи?
>>1346569Cпасибо за ссылочку, как раз то, что нужно.>>1346608Да, значит, я неверно выразился. Для меня ORM и есть просто обертка над SQL.
>>1346627Смысла у тебя БД тогда немного. В БД хранят данные, чтобы можно было быстро делать выборки по индексам, джойнить, анализировать и прочее. Если у тебя весь объект хранится как строка, то никаких операций кроме выгрузки-загрузки невозможно. Еще и будет медленнее все, если таких объектов через serialize много грузить.
>>1346627Вопрос снимается и тут же новый появляется.Есть ли какой-то встроенный способ для передачи объекта в таблицу бд? Ведь можно получить готовые объекты из таблицы прописав $request->fetchAll(\PDO::FETCH_CLASS, User::class);
Анончики, пишу мини-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. Вывести массивы тех же тегов, что и совпадают с текущим
>>1347165>Я путаюсь в массивах, помогите с двумя задачами:>1. Вывести массив записей той же категории, что и текучая>2. Вывести массивы тех же тегов, что и совпадают с текущимПочему ты не хочешь загружать csv в БД и уже оттуда доставать как тебе надо одной строкой? Зачем колесо изобретать?
>>1347165Ну а вообще это легко делается через foreach. Или через array_filter\walk какой-нибудь.Проходим по всему массиву и сохраняем в результирующий массив те, где совпадает что тебе там надо. Одной функцией наверное даже можно.Но лучше БД.
1. Тестовое задание для кандидата: Написать крестики-нолики на PHP для работы в консоли на поле 3х3. Состояние игры храним в файлике рядом со скриптом в json формате. Все оформить в ООП стиле. Какие должны быть команды в консоли: 1. Начать игру 2. Сделать ход (указываем номер ячейки и тип). После каждого хода отображаем результат хода: 2.1. если успех то п.4. 2.2. если ошибка, то ошибку. 3. Завершить игру 4. Отрисовать текущее состояние. 5. About - выводим информацию об авторе и пр.задание на ждуна, я даже не понял какую консоль они имеют ввиду
Аноны, что почитать? Потому как мое развитие медленно начало скатываться в стагнацию, очко горит пиздец
>>1347193Командная строка или консоль: https://github.com/codedokode/pasta/blob/master/soft/cli.mdhttps://beginpc.ru/windows/komandnaya-strokaЕсли ты не понял, то значит, надо учиться.
>>1346627serialize() имеет недостаток, что его формат не определен и не гарантируется его сохранение между версиями PHP. Также, другие программы не смогут читать эти данные. Если тебе надо что-то сериализовать в БД, лучше использовать JSON. Если вдруг ты принимаешь данные от пользователя и десериализуешь их - это уязвимость. Используй JSON в таких случаях.
>>1346593> Надо ли? Если разработчик в строку ошибки вставляет теги, когда есть шаблон и там вывод оформлен, то земля ему пухом, братишке. Разве нет?При таком подходе, чтобы проверить, что все безопасно, тебе надо для каждого шаблона разбираться, откуда пришли данные в него, что они содержат, анализировать код. Более того, возможно, что сейчас код безопасный, но завтра ты при валидации добавишь в текст ошибки значение от пользователя и возникнет уязвимость. И ты её даже не заметишь.100% безопасный вариант: все экранируется в шаблоне.Небезопасный вариант: - получаем данные из функции X, держа в голове что они должны быть безопасными- передаем в шаблон- выводим без экранированияТут, чтобы проверить, что все безопасно, надо изучить весь код. включая функцию X и откуда в нее приходят данные. Более того, другой программист может модифицировать функцию X, сделав так, что она перестанет быть безопасной. Он ведь не знает, что эти данные потом выводятся без экранирования.
>>1346593Можно сделать вспомогательный класс со статическими методами, например. Можно сделать класс для View и поместить методы туда, но при росте приложения это не очень удобно, так как все будут туда добавлять методы и он разрастется.
>>1347292Писать крестики-нолики на PHP это как клепать сайты на C. А требовать такое от джунов - это слабоумие.
Вот я хочу написать бэк своего магазина при помощи шаблона активная запись. Бэк mvc-шный. Есть базовая модель от которой наследуются модели каждого контроллера. Насколько я понял идею, мою архитектуру можно спроецировать на этот шаблон -> базовый класс активной записи это базовый класс модели, от которого наследуются конкретные классы активных записей - конкретные классы модели (типа Отзыв или Продукт). Я все правильно описал?
>>1347406Да никому в здравом в голову не придёт писать крестики-нолики на PHP, когда есть более удобные для этого ЯП.Вообще, в норме людям такие тестовые давать, которые макс приближены к тому, чем они там в конторе занимаются. По крайней мере станет видно умеет человек нормально в разработку веб или нет.А вот такое - бред сивой кобылы. Что этот тест покажет? Ни знания фреймворков, ни паттернов(разве что из геймдева лол), ну и тд. Придёт это ждун и будет им там крестики-нолики писать вместо продукта.
>>1347381Как-то тоже об этом задумывался - неявные штуки получаются.>>1347385>сделать класс для View и поместить методы туда, но при росте приложения это не очень удобно, так как все будут туда добавлять методы и он разрастетсяЯ просто хочу убрать туда методы работы с шаблоном, которые часто в нём используются. Ну, типа, базовые, вроде вывода ошибок где надо, отрисовка, сборка урл с параметрами, шаблонизатор прикрутить туда же можно, если надо. Это ведь много где используется и из можно по-умолчанию при рендере передавать, чтобы в любом шаблоне доступно было.Или как?>Можно сделать вспомогательный класс со статическими методами, напримерА этот класс не будет разрастаться, если всё подряд туда сливать? Это же получится просто свалка разнородных функций, которые делают совершенно разные вещи.
У меня есть объект Request, где чистятся вилкой на входе куки, пост и гет, и думаю, что напрямую тогда не надо обращаться к этим суперглобальным массивам. Практикуется ли обнуление $__GET, $__POST и тп?
>>1347473Близкую к реальности задачу быстро не сделать. Так как на практике там идет работа с большим приложением, с фреймворком, библиотеками, интеграциями, в котором только разбираться можно несколько дней. Потому и приходится выдумывать задачи, которые не потребуют много времени, но позволяют оценить стиль программиста и вообще способность писать код. Задача про крестики-нолики примитивная и решается быстро.Кстати, раз уж речь о задачах - кто хочет поломать голову? Задача. Напишите функцию, находящую различия между двумя массивами строк аналогично утилите diff. На вход подается 2 массива строк, left и right. Функция должна определить различия между ними и дать на выходе массив элементов, где для каждой строки указано: присутствует ли она в обоих массивах, или только в каком-то одном. При этом массив на выходе должен сохранять порядок строк и позволить восстановить оба исходных массива. Массив на выходе имеет вид [ [признак, строка], [признак, строка], ... ] где признак - это "", если строка есть в обоих входных массивах, "-", если она есть только в left или "+", если она есть только в right. Пример: left = ['abc', 'def', 'ghi']; right = ['abc', 'ghi', 'xyz']; Результат: [ ['', 'abc'], ['-', 'def'], ['', 'ghi'], ['+', 'xyz']]По возможности, если это не требует больших вычислительных затрат, стоит выбирать более короткое представление результата. Например, для left = [a, b, c, d] и right = [a, x, y, b, c, d] стоит выбрать форму:a +x+ybcdА не более длинную: a -b+x-c +y-d+b+c+dОписание утилиты diff: https://ru.wikipedia.org/wiki/DiffАлгоритм LCS: https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B0%D1%8F_%D0%BE%D0%B1%D1%89%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8CЕсли вы просматриваете результат работы программы в браузере, то стоит сделать еще визуализацию результата, например, вроде такой: https://www.tecmint.com/wp-content/uploads/2016/07/DiffMerge-Compare-Files-in-Linux.png
>>1347564>Кстати, раз уж речь о задачах - кто хочет поломать голову?У нас тут вроде прикладное программирование, а не школа информатики, где детки дрочат алгоритмы.Я лучше очередной класс напишу для своего проекта, чем на это полвечера убью безрезультатно.
Котаны, такой вопрос. Я немного знаю пхп, получше знаю JS и средне знаю sql.Мне нужен паттерн/шаблон/проект типичного сайта на пхп. Структура сайта, если угодно, скелет.Или сурс дайте.Очень нужно!
>>1347397Как по мне то норм. Хз я пилю гору консольных скриптов на пыхе, если бы мне надо былобы заниматься онли сайтошлепством - укатился бы в питон.Не пойму чем пыха не подходит
>>1347648>Не пойму чем пыха не подходитДело не в пыхе, а в таких задачках.Какой в них смысл, если это в 99% проектах не используется? Вот убьёт какой джун на твою ерунду день и что? Ему это в вебе не пригодится вообще. Лучше бы почитал чего нужного в это время.Такие задачки бессмысленны ещё потому, что ничему не обучают впринципе - суходрочка одна на алгоритмы. Без постоянного применения такие вещи из головы вылетают быстро. Писал в своё время сортировки и задачки аналогичные - сейчас я это всё фуфлом для ЧСВшных студентов считаю.
>>1347648>Хз я пилю гору консольных скриптов на пыхеИ что ты там за скрипты пишешь? Поди велосипеды изобретаешь раз за разом с таким подходом.
>>1347632Типичный сайт сделан на CMS (Drupal, Wordpress) или фреймворке, например, Laravel или Symfony. Ты можешь поискать туториалы по созданию сайта на них или поискать готовые примеры. Вот например демо-сайт на Симфони: https://github.com/symfony/demoЧтобы разобраться в них, тебе надо знать ООП, MVC, может быть, разные паттерны.>>1347764Задача на крестики-нолики - это не алгоритмы, а просто проверка знаний. Смысл - показать работодателю, что ты лучше других кандидатов.Что касается алгоритмов, я не соглашусь - это и расширяет кругозор, и полезно, и просто интересно. Знание алгоритмов и структур данных пригодится, например, чтобы понять, какие операции лучше оптимизируются индексом в БД. Ну и если ты захочешь написать какое-нибудь хранилище на Го, то тоже пригодятся.Я понял, что алгоритмы тебе не интересны и на твоей работе не требуются, прекрасно, но у других людей может быть другое мнение и другой карьерный путь.
>>1347789>расширяет кругозор,Не расширяет. Знания, которые не используются - забываются. А умение решить твою задачку даже знанием не назовёшь - с этим любой справится, немного поломав голову.Кругозор расширяет теория и изучение современных технологий.>и полезноТуда же. >и просто интересноВкусовщина. Если нравятся эти олимпиадные задачки - вперёд, только не надо рассказывать, что это нужно и полезно. Изучить новую модную либу - вот польза.И не надо смешивать теорию, типа структур данных, со своей бессмысленной задачкой. И не дай бох ты будешь так писать в рабочем проекте, как в этих задачках. Алгоритмы вообще отдельная песня и нечего пихать это везде где можно.
>>1347764>Ему это в вебе не пригодится вообщеБольшая часть моей работы заключается в написании консольных скриптов и подводных, которые необходимо знать там полно.Банальный парсер и тот таит в себе кучу всего с чем не сталкиваешь при банальном сайтоделании. Знание HTTP, когда ты пилишь сайт - практически нинужны, а когда тебе в консольном варианте необходимо соеденятся с другими ресурсами, дрочиться для обхода разных антиботных защит - это другое дело.Я уже не говорю о том при работе с сайтом - твой код живет 1 секунду, консольный же скрипт может работать неделями, что заставляет учитывать совсем другие проблемы (сохранение состояния при падении, утечки памяти и пр.)
>>1347193Я б тебе работу не дал, если ты даже сосоль не знаешь. Но вообще задание простейшее, тупо в лоб команды из консоли, по ним вывод соответствующих классов, даже никакого интерфейса не выводить.
>>1346608есть где-то описания, как это в orm реализовано? интересно внутреннюю механику таких штук узнать
Вкатываюсь в ПХП. Такие вопросы, на старте фриланс или работа в офисе? Мне кажется что то, что то сложно найти. Какие минимальные для работы знания нужны? PHP/CSS/HTML/JS? За сколько времени реально найти работу с 0 или минимума знаний? Хочу как то распланировать что учить, гайд в оп посте норм(полный), или лучше искать другие источники, книги там или видео?
>>1348014Я вот несколько лет в офисе, на фриланс так и не получилось до сих пор. Не знаю, кто там с фриланса сразу начинает, это сложнее намного, знаний много надо.
>>1348014Гайд неполный, но основы дает. Дальше придется курить уже документации и книги по отдельным технологиям, это большую часть времени на изучение и съедает. Но сначала основы из оп поста знать надо, иначе будешь плавать во всем и не понимать как и что с чем связано.
почему все так плохо относятся к битрикс? самая эффективная система в снг, больше половины вакансий на php требуют знания битрикса и только его
>>1348213Почему там все ЗАГЛАВНЫМИ БУКВАМИ?Почему там используется синтаксис доисторической пыхи?Почему он не запускается на пыхе 7.3?Почему там лезут постоянно предупреждения об ошибках из самого ядра?Заставили пилить сайт на оном. Моя жеппа в щепки порвана
Помогите, пожалуйста. Есть вордпресс говно на плагине elementor.Каким образом я могу реализовать конструкцию:1) Есть маленькое говно с неполным текстом2) Кликаешь3) Открывается полная версия на этой же страницеЯ бы написал сам, сука, но эта дрянь не дает, а сама такого функционала не предоставляет
Сап всем, анонасы молю-выручайте, я запилил форму авторизации и аутентификации. Выглядит сие вот таким образом (пик). Далее если персонаж авторизировался-его перебрасывает на страницу. Иначе-бросает на главную. Так вот, суть в том, что я не уверен, что мой код работает верно. Ибо не ебу как его проверить, вроде заходит на сайт при верном логине и пароле. А создаётся ли сессия и отправляются куки-не пойму. И второе, как сделать так, чтобы при вводе url следующей страницы обходя форму авторизации пассажира выкидывало на index например. Опыта у меня не много, но я что-то совсем запутался с этой хуетой и уже не понимаю в какую сторону мне нужно копать.
>>1348338Лопни мои ебанные глаза! Чувак, найди в инете готовое решение. Твой код даже комментировать бесполезно - это сплошной кусок говна.
>>1348463Проиграл в голос, ты прав. Но, я думаю мне стоит как-то дособирать это говно из палок и чтоб оно как-то держалось. Дабы апнуть свои знания.
>>1348338Прочитай про SQL инъекцию: https://github.com/codedokode/pasta/blob/master/security/sql-injection.mdТакже, ты неправильно делаешь, что выводишь исключение на экран. В логи оно не попадет, ты о нем не узнаешь, а пользователю оно ничего не скажет.
>>1348470Ладно, попробую тебя направить:1. try catch должен обрамлять только тот участок кода, где может вылезти исключение. В твоем случае это подключение к базе. Его и оберни, а логики вынеси из try нехуй ей там делать.2. Пришедший постом логин может содержать sql injection. Пихать его в таком виде в sql запрос даже не выстрел в ногу, а в голову.3. Нахрена ты стартуешь сессию до подключения к бд?
>>1347769>>1347789СПС. Я нашел простенький пример MVC, единственно в классах php немного невдупляю. По мне так классы в JS попроще я знаю что в JS класс - это обертка над прототипами.Еще вопрос - я так понимаю что в браузере исполняться может только JS? Тоесть если php шаблон отдан клиенту, то все изменения в DOM либо с помощью JS прямо на месте, либо отправка данных о изменении на сервер, и перерисовка php-страницы полностью?Для примера - событие допустим hover в браузере php никак не перехватит? И допустим нет JS. Кто то провел курсором над элементом, возникло событие, как тут может среагировать php?
>>1348519протестую, я тот самый анон, я просто открыл страницу в браузере!phpstorm не влез одним скрином.
>>1347883>Банальный парсер и тот таит в себе кучу всего с чем не сталкиваешь при банальном сайтоделанииДа ты что? Перечисли пожалуйста, чего у тебя там особенного такого. И почему ты решил, что бэкэнд делать просто? Студентов сделал уже? Покажи.И почему парсеры на сайтах не используются вдруг?>консольный же скрипт может работать неделямиPHP в принципе не создан для того, чтобы висеть в памяти. Тебе сперва надо это было знать, а не сортировки-сортировочки. Для резидентных программ есть более удобные языки.>сохранение состояния при паденииЕсть куча готовых либ и софта для этого, но Чингачгук у нас всё сам.
Вы че ебанутые, зачем вам ORM? Какие преимущества она даёт в сравнении с чистым майскул? И нет, код выходит не чище.
Пыхач, я чот ебанулся и записался на олимпиаду по веб-программированию. Обещают пхп, а я вообще нихуя не понимаю. Есть пара дней. Как вообще запускать пхп на локалке, из консоли там? Как читать данные из файла построчно? Или как аргументы? Я пока смотрю всякие костыли олимпиадные с графами, а с технической стороны я не шарю
Есть блог на laravel с комментариями на vue. Комментарии приходят json'ом. Лучше сделать для этого апи с авторизацией или просто роутов хватит?
ОП постоянно говорит, что без ООП сложно сделать задачу вроде вектора.Предлагаю на проверку свободный от сайд-эффектов, строго типизированный вектор, включая антикризисные меры: https://codesandbox.io/s/github/kubk/vector-fp/tree/build/?expanddevtools=1&hidenavigation=1&module=%2Findex.ts&view=editorНапример, если в тип Employee добавить новую должность, то код не скомпилируется, так как для новой должности не описаны все необходимые характеристики (ЗП, кофе и т.д). Тоже самое если добавить новый ранг. Если в демо навести курсор над любой переменной, то можно увидеть тип, который вывел тайпскрипт. Знания ФП у меня поверхностные, только то что в статьях-туториалах почерпнул. Думаю какую книгу взять, интересует возможность доказывать корректность программы на стадии компиляции.
Как скопировать структуру многомерного массива?Многомерный массив может содержать различные объекты в качестве значений.Мне надо обойти этот массив и создать массив с такой же структурой, но в качестве значений использовав свои значения.
>>1348547Никаких - свистоперделка. Используешь ОРМ - всеравно пишешь методы-обертки для своих задач, точно также как на чистом мускуле
>>1348752Почему вкладка браузера с этим говносайтом жрет у меня 30% процессора? Чтобы у тупых жс-блядей печень отсохла блядь
>>1348760А, ну самое главное - исходный массив изменять нельзя.array_walk_recurcive ($arr, function (&$value){$value = 'hui';}) не катит
>>1348546>И почему ты решил, что бэкэнд делать просто?По опыту>Студентов сделал уже?Я не делал ни одной задачи из ОП поста>PHP в принципе не создан для того, чтобы висеть в памятиТем не менее с задачей висения в памяти он справляется и причин юзать другой язык я не вижу - все задачи, которые возникают вполне себе решает пыха.>Есть куча готовых либ и софтаНету
>>1348763Там в браузере запускается полноценный редактор кода с автокомплитом/go to definition и прочим: https://medium.com/@compuives/whats-unique-about-codesandbox-f1791d867e48IDE на Java тоже много отъедают. Если тебе просто текст, то в левом верхнем углу есть ссылка на гитхаб репозиторий, из которого создан codesandbox.
Здрасте, вопрос есть.Шукал по поводу работы с тегами, набрёл на https://ru.stackoverflow.com/questions/148204/Организация-тегов-в-бд-и-запросахПодаскажите, нафига столбец `tag_count`?
>>1348817По схеме, что на stackoverflow выходит, что чтобы сохранить запись с тегами, нужно сохранить саму запись, сохранить новые теги (если такие будут), сделать n записей (где n - кол-во тегов) в таблицу связи тег-запись. Чтобы найти записи по тегу, достаточно узнать id тега и сделать выборку по нему в таблице связей. Смысла `tag_count` по-прежнему не понимаю.ЗЫ Many to many погуглил, не помогло. ЗЗЫ https://toster.ru/q/250728 - тут тоже в таблице связей нет третьего столбца...
>>1348765>Я не делал ни одной задачи из ОП постаЯ не сомневаюсь.>Тем не менее с задачей висения в памяти он справляетсяКонечно - с твоими-то костылями. Сам себе проблемы создаёшь на ровном месте и сам же их героически решаешь. >НетуКонкретно сохранение состояния можно реализовать через кэширование на Redis\Memcached, но ты же у нас настоящий индеец и всё сам делаешь.Тебя к реальным проектам на пушечный выстрел лучше не подпускать - такого наворотишь со своими алгоритмами.
>>1347193Разве пшп умеет задавать вопросы в консоли? Типа, открываешь скрипт, а он тебе предлагает соснуть хуйца или сделать бочку, и тебе нужно в консоль букву напечатать
>>1348917конечно<?php$answer = '';while ($answer != 'da' . PHP_EOL) { echo 'Sosnut\'? ( da ): '; $answer = fgets(STDIN);}echo 'Pristupaj' . PHP_EOL;
Щас был в /xo/ там все говорят шо ПХП ненужен, смысла учить его нет и "PHP нужен только для старых проектов которые его используют, чтобы запилить очередной костыль и надеяться, что этот монстр не развалиться." Это правда? Нет смысла развиваться в этом напралении?
Вопрос по задаче про будильник:Есть класс будильник и у него есть массив-объектов тревог.Как лучше сделать?1. Передавать объекты тревог в методы класса будильник2. Просто прописать методы класса Тревога и вызывать их для каждой тревогизаранее ивиняюсь если расписал все непонятно
>>1349090Чем задавать тупые вопросы в 10000 раз ,зайди на хедхантер и посмотри вакансии по разным языкам
>>1348839>можно реализовать>Есть куча готовых либ и софта для этогоПредлагает пердолить свой костыль с редиской как готовое решение. Ясно
>>1349160>пердолить свой костыльЛучше известные решения, чем костыли очередного хеллоуворлдщика.Алсо, с каких это пор кэширование является костылём?
>>1349123В конструктор будильника передать массив тревог.Создать метод у будильника который пробежит по тревогам и будетвызывать нужные тревоги
>>1349196Госпади. Какой же ты даун блядь.ЭТО НЕ ГОТОВОЕ РЕШЕНИЕ, долбоеб. Испанский стыд от таких знатоков-советчиков
Двач, какого хуя?1. При клонировании примитивные типы копируются по значению.2. При клонировании, если член является объектом, копируется ссылка на него.3. При этом массивы всегда копируются по значению в пхп.А что с массивами объектов?Я где-то читал, что для объектов в массиве вызывается метод clone, но походу нихуя не вызывается.Мне что, при клонировании вручную копировать члены, являющиеся массивами?
>>1349334При клонировании клонируются примитивы и копируются ссылки, потом вызывается __clone у клонированного объекта. В случае массива просто скопировался весь массив, а там только ссылки, так что ничего не поменялось. clone на массиве конечно не вызывается, с чего вдруг, делай сам в классе А.
>>1349334При копировании объекта в переменную помещается ссылка на него, а вот при клонировании создается новый объект. А чего именно ты хочешь добиться я так и не понял.
>>1331378 (OP)Хочу установить mySQL для apache на компьютер (32 разрядная система). И хотя во всех мануалах просят скачать zip-архив, последние версии имеют zip-архив только для 64 разрядных систем, поэтому мне пришлось скачать установщик. В установщике я выбрал установить только сервер (Server only). Нажимая далее, установщик пишет следующее: mysql installer did not find packages in the current bundle suitable for installation. Что делать?
>>1348752Разве это не ООП в функционалном стиле? Там так же есть "объекты" Департамента или СтавкиРабочего.
>>1349737Смотря что считать объектом. Если исходить из определения Гради Буча, то у объекта есть поведение и изменяемое состояние: http://www.helloworld.ru/texts/comp/other/oop/ch03.htmВ моём случае Департамент это просто неизменяемая структура данных без поведения. Возможность создавать такие структуры данных существовала задолго до появления ООП, тут есть примеры структур данных на чисто функциональных языках: https://en.wikipedia.org/wiki/Record_(computer_science)#Examples
>>1349685- проверить соответствие ОС требованиям MySQL, может эта ОС не поддерживается- попробовать взять более старую версию mysql
Сап, пыханы. Я тут накидал схему, расскажите, кто знает, как правильно?Первое это классический подход к организации модели с бд без всяких орм и шаблонов.Второе я придумал на основе статьи ОПа по шаблонам проектирования (в частности Active Record)Третье я увидел в видосе, где мужик писал свой фреймворк. ERepository это класс, где Е - название сущности типа Е1, Е2 и Е3. Зачем здесь нужен репозиторий, я не знаю.Расскажите, пожалуйста, как должна выглядеть структура модели, чтобы она соответствовала всем канонам активной записи.
>>1350566Есть, но только на английском, на русский уже год переводят и постоянно откладывают. Вроде на рутрекере было и на nnm-club.
>>1350524лучше всего смотреть как кто-то применяет технологию и пытаться подражатьтакже нужно вчитываться в документацию на английском
>>1348917Умеет, как и почти любой язык, почитай про stdin/stdout. В Windows в консоли может понадобиться использовать кодировку Windows-1251 или cp866, чтобы отображать и принимать кириллицу. >>1348579> Как вообще запускать пхп на локалке, из консоли там? Урок: - https://github.com/codedokode/pasta/blob/master/soft/cli.md- https://github.com/codedokode/pasta/blob/master/soft/php-install.md> Как читать данные из файла построчно? fopen + fgets + fclose> Или как аргументы?http://php.net/manual/ru/features.commandline.php>>1348839> Конкретно сохранение состояния можно реализовать через кэширование на Redis\Memcached, но ты же у нас настоящий индеец и всё сам делаешь.Сделать можно, но непонятно зачем, если можно просто запустить скрипт в консоли. Тем более, кеш плохо годится для сохранения состояния, он не для этого придуман (а для повышения производительности). Я бы использовал файлы или БД. Плюс файлов - простота, плюс БД - можно делать запросы.PHP вполне подходит для консольных скриптов, там даже есть возможность упаковать весь код с зависимостями в phar архив. Я много раз писал консольные скрипты на PHP. Всякие импорты данных, крон-задачи и тд. Смысл использовать другие языки не очень понятен, так как для PHP есть много готовых библиотек. Использовать низкоуровневые языки (Си++) неудобно из-за управления памятью и многословности, использовать другие динамические языки (JS, Питон) неудобно из-за более низкой производительности, отсутвия статической типизации, худшей поддержки на Windows. Ну и наконец, если ты много лет работаешь с PHP, то очевидно, что на нем ты скрипт быстрее напишешь, чем на другом языке. Также, если основной проект написан на PHP, то глупо консольные скрипты к нему писать на другом языке и терять возможность переиспользовать код.Менять язык только потому, что это не нравится какому-то анонимному эксперту с двача, довольно глупо.Ну и вы тут флуд развели на 5 постов без единого примера кода или примера задачи, с которой PHP справляется хорошо или плохо.
Есть что то что проверяет использование классов? (use) и обращение к несуществующим переменным (когда обьебался одним символом в названии существующей)?php -i, phpcs не провереряютphpmd не уверен если проверяет оцените в пример? Но на сколько я вижу - нет.
Анон с Вектором на TypeScript (@kubk), я глянул, интересно, но прокомментировать пока не успел. Типизация мне нравится. Скажу только, что там из-за иммутабельности неудобно менять свойства рабочих (т.к. по сути надо пересоздавать Департамент ради изменения свойства 1 рабочего, а самого рабочего надо клонировать, при этом, если кто-то на него ссылался, то он продолжит ссылаться на старую копию. Пример: есть объект Задача, и у него есть поле Исполнитель - оно будет ссылаться на старую версию работника), и нельзя поменять зарплату одному отдельному рабочему. Также, список Департаментов и ТаблицуЗарплат можно было объединить в тип Компания. Проблема с иммутабельностью может частично решаться изменением схемы, например, можно попробовать хранить в задаче лишь id исполнителя. Также, иммутабельность может быть и полезна для более быстрого обнаружения изменений без проверки объекта целиком, это может пригодиться на клиенте при реализации MVC. А также при необходимости "запомнить" данные в определенный момент, даже если они позже поменяются (например: условия банковского вклада или параметры товара на момент заказа). Ну вообще, ты судя по коду, умный, подумай-ка сам, как эти проблемы решать. >>1348806Спрашивать надо у автора, а не у нас. Наверно, это поле показывает, сколько раз использован тег, это денормализация (прочитай, что такое нормализация БД) с целью оптимизировать, например, выборку самых популярных тегов. Хотя автора это делать не просили, и ты можешь это поле просто не делать.>>1350524Убеждаешься, что ты знаешь базовые вещи (ООП, MVC, ActiveRecord, шаблонизация, проектирование БД). Если не знаешь - почитай статьи, например, тут: https://github.com/codedokode/pasta/ или где-то еще.Дальше ищешь туториал "создание сайта на Laravel", в идеале - официальный английский туториал или его перевод. Читаешь, выполняешь, по каждому классу и фукнции, который там использован, читаешь документацию, и разбираешься, как все работает, а не бездумно переписываешь код. Потом пройдя туториал, делаешь еще пару доработок сайта самостоятельно. Этого хватит для базового знакомства с фреймворком.Вот для начала совсем уж простой туториал: https://laravel.com/docs/5.1/quickstart
>>1350506Первый подход имхо это и есть ActiveRecord: объект, который умеет сам себя сохранять в БД. Или же TableDataGateway: класс, который собрал в себе методы работы с одной таблицей (разница: объект AR соответствует 1 строчке в таблице и их может быть много, а TDG - существует в 1 экземпляре и соответствует таблице, а не строчке в ней).> Третье я увидел в видосе, где мужик писал свой фреймворк. ERepository это класс, где Е - название сущности типа Е1, Е2 и Е3. Зачем здесь нужен репозиторий, я не знаю.Репозиторий - это объект, который представляет собой некое "хранилище" сущностей. Их туда можно класть, искать, удалять. При этом репозиторий может использовать для хранения БД, а может, например, использовать какое-то другое хранилище (например, просто хранить их в памяти в массиве - это полезно в тестах). Или вообще передавать/получать данные из REST API. Ты можешь заметить, что репозиторий похож на TDG, но TDG - явно предназначен для работы с БД, а репозиторий - это просто хранилище, не обязательно в БД. Репозиторий, как и другие паттерны, описан в книге Фаулера: https://www.martinfowler.com/eaaCatalog/repository.html Там в примере используется "двухслойная" схема, репозиторий является лишь "фронтендом", к которому может быть прикреплен "бекенд" - бекенд для сохранения в БД, или бекенд для сохранения куда-то еще.Репозитории есть в ORM Doctrine, работающем по принципу Data Mapper. Статья на хабре: https://habr.com/ru/post/248505/Вот еще картинка https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/media/image18.png из статьи майкрософта: https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-designТам используются понятия "домен", "доменная модель" - домен здесь значит "предметная область задачи", а модель - сущность из этой области: https://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82В третьем подходе, который ты описал, есть что-то похожее на Data Mapper. Я не очень понимаю, как ActiveRecord совмещается с репозиторием: суть "активной записи" в том, что объект, представляющий строку в таблице, умеет сам себя сохранять в БД. Соответственно, репозитории при таком подходе не требуются.Т.е. ключевое отличие AR от других паттернов: Active Record:$user = new User;$user->setName(...);$user->save();Репозиторий/Data Mapper: $user = new User;$user->setName(...);$userRepository->save($user);Для проверки ты можешь сам поискать у Фаулера все эти паттерны, вот например, ActiveRecord: https://www.martinfowler.com/eaaCatalog/activeRecord.htmlПри этом не имеет значения, наследуешь ли ты модель от базового класса ActiveRecord, или подключаешь его как трейт - это не меняет сути паттерна, что модель умеет сама себя сохранять.> Расскажите, пожалуйста, как должна выглядеть структура модели, чтобы она соответствовала всем канонам активной записи.Как описано у Фаулера или в других статьях.
>>1349123Действительно, непонятно описал.> 1. Передавать объекты тревог в методы класса будильникНе очень понятно, зачем их передавать, если они в нем уже хранятся. > 2. Просто прописать методы класса Тревога и вызывать их для каждой тревогиНе очень понял. Традиционно такие вещи делают так: делаем объект Тревога, и делаем Будильник, который хранит в себе список Тревог и умеет делать вещи вроде поиска ближайшей тревоги: $alarm = new Alarm(12, 00, ...);$clock->addAlarm($alarm);$clock->deleteAlarm($alarm);$nextAlarm = $clock->getNextPlannedAlarm();При желании, можно запретить создавать Тревоги в обход будильника, если в этом есть какой-то профит: $alarm = $clock->createAlarm(12, 00, ....);$clock->deleteAlarm($alarm);$nextAlarm = $clock->getNextPlannedAlarm();>>1349334При клонировании все работает так же, как при присваивании: - массивы клонируются (но не объекты внутри них) - дочерние объекты (в полях или в массивах) не клонируются, просто копируется ссылка на них:class A { public B $b; public $list; // B[]}При клонировании этого объекта $b не будет склонирован, $list будет скопирован (будет создана независимая копия массива), но ссылки в нем останутся ссылками на те же объекты.Если тебя это не устраивает, то определи метод __clone и в нем клонируй руками все вложенные объекты.
Сап,Делаю сайт на WP.Вообщем такая проблема.Нужно сделать личный кабинет с возможностью заливать pdf файлы на свой профиль.Подскажите, как вообще это можно осуществить.
>>1350654>Я бы использовал файлы или БД>использовать другие динамические языки (JS, Питон) неудобно из-за более низкой производительностиНу-ну. Файлы у нас пишутся быстро, а JS с Питоном медленно работают.Ясно всё.
>>1350654>Тем более, кеш плохо годится для сохранения состоянияАлсо, тот же редис можно подключит в php.ini и просто переназначить на него сессии. И не надо костылить бесконечные скрипты.Ну вы даётё блин.
>>1350685Спасибо тебе за такой всеобъемлющий пост.>Я не очень понимаю, как ActiveRecord совмещается с репозиторием: суть "активной записи" в том, что объект, представляющий строку в таблице, умеет сам себя сохранять в БД. Соответственно, репозитории при таком подходе не требуются.Я читал, что там вся разница в методе save.Классический AR этот метод вызывает прям в сущности, а репозиторий в связке с AR сохранение и обновление берет на себя, и логика из сущности содержится в нем. Читал, что сам по себе AR это плохо. AR с репозиторием это не дата маппер, потому что нужен еще один слой адаптера.Подожди, то есть все это выше мною прочитанное это ложь?
>>1350728А как они из AR объекта получают объект репозитория? Через какой-то глобальный реестр? Сути это не меняет, это все равно AR, если сущность умеет сама себя сохранять.>>1350726Там вроде речь шла про состояние вообще а не сессии.>>1350716Для 5.7 туториала что-то нет. Ну пусть анон тогда сам по документации узнает, что изменилось в сравнении с 5.1.>>1350725Типизации все равно нет. Хотя я Питон успешно использую в Jupyter Notebook. Ну и еще PHP вроде как проще в использовании и фреймворков под него много.
>>1350734>Типизации все равно нетВ /б это называют манёврами.По факту у нас есть один персонаж, который костылит скрипты и алгоритмы, когда есть понятные и очевидные решения, с минимумом костыльного кода.И есть второй персонаж, который любыми способами пытается убедить себя в том, что ПХП универсален во всём. Причём не понимает разницы между работой в оперативке и на винте. Но зато про другие ЯП знает точно, что они медленные.Теперь я даже начинаю понимать почему ПХПшников в массе своей макаками называют.
>>1350737Можно сделать у тревоги, если у тебя Тревогу можно создать или получить из будильника. Так скорее всего будет удобнее. Но ты можешь для эксперимента попробовать сделать их у Будильника и посмотреть, что получится.
>>1350734>А как они из AR объекта получают объект репозитория? Через какой-то глобальный реестр? Сути это не меняет, это все равно AR, если сущность умеет сама себя сохранять.Что значит из AR-объекта? Из сущности, в которой используется трейт AR? Или из самого трейта?Никак, наверное. Они подключают трейт к сущности, а в репозитории создают ее объект, где уже вызывают метод сейв и проводят с сущностью манипуляции.Там еще каким-то боком Query Builder работает, но это наверное к вышеописанному не относится.
Если на мой вопрос может ответить только ОП, это значит, что я уже достаточно далеко продвинулся в изучении технологий?
Расскажите пожалуйста с чего вы начинали и каким образом осваивали данный яп. Пиздец нахуй, не знаю с чего начинать и с какой стороны зайти.
подскажите куда копать, не представляю как сделать такое простое заданиеПредположим, у нас есть код, позволяющий вывести список групп товаров, а также товары, находящиеся в каждой группе. Задача заключается в том, что необходимо добавить к имеющемуся коду функциональность вложенных групп товаров.В приложенном файле 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 код, реализующий вложенные списки.
Сап, аноны. Как я могу добавить к моему 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Помогите, молю
>>1351147Обычное тестовое на работах. Решается элементарно, если знаешь запросы MySQL и PDO в PHP. Остается только сделать обработку GET параметров и соединить в контроллере с вызовами к PDO.
>>1351497Шли json массивы через POST или используй разные имена параметров через GET, если они у тебя друг друга перебивают - например sort_by_direction, show_direction. Как у тебя по 3 штуки одинаковых выходит, не пойму, что-то ты не так в обработке видно делаешь. Простейший путь - ставь в скрипте переменную $sortDirection один раз и потом на ссылках по условию из нее выводи.
Я уже приблизительно придумал как решить эту проблему, когда делал постраничную навигацию. Правда, теперь это будет, вероятно выглядеть как example.com/lists?&asd=123 (Именно как ?&, но оно вроде не является большой проблемой и все равно работает). Три раза я для примера написал, сортировочные фильтры идут вместе. И именно они перебивают свойства отображения. Через пост не хочу чтобы была возможность скопировать ссылку вместе со всеми фильтрами
>>1331378 (OP)Есть смысл тут искать себе разраба? Нужен толковый чувак, веб-разработчик широкого профиля (фуллстак). Мне пофиг, какой у вас стиль одежды, откуда вы, в какое время суток предпочитаете работать (если работаете в целом, а не дрочите). Удаленка, минимум контроля, можно делать быстро и ебланить большую часть дня (не перегружаю работой), можно делать дольше, учиться. Какой-никакой опыт работы над крупными проектами (крупнее лаба10.пхп и сокращателя ссылок).Языки программирования: PHP (7.2+), JS, HTML/CSS, SQL (MySQL или MariaDB).Фреймворки: Yii, jQuery.Технологии и инструменты: scss(sass), gulp, git, PHPStorm.Короче, ничего сверхъестественного.ЗП 40-45 на руки. Минусы - сам проект так себе по интересности, иногда приходится переделывать некоторые вещи по паре раз, двигать туда сюда текстики-кнопочки, нежелательно уходить в запой и проёбываться.dvachheadhunting@yandex.ru
>>1351675>>1351497Генерацию ссылок лучше всего вынести в какую-то функцию. Не надо лепить костыли и разбирать GET-запрос. Тебе надо учиться разделять код на части, а ты пока это сделать не можешь и не можешь выделить отдельно функцию генерации ссылок и объект состояния фильтра. От чего зависит ссылка? - от глобальных параметров фильтрации- от добавленных к ним локальных параметровНу так давай так и сделаем. Сделам функцию, которая принимает все эти параметры и выдает ссылку: getSomePageUrl(string $section, string $sortBy, string $sortDir, ...): stringТекущие глобальные параметры можно хранить в отдельных переменных, но гораздо удобнее сделать для них объект и использовать все преимущества ООП, включая инкапсуляцию, проверку значений и тд. Такой объект можно назвать, например, Filter или DisplayParams. Соответственно, функция примет вид: getSomePageUrl(Filter $filter, string $sortBy, string $SortDir)Кстати, сортировку можно сделать одной переменной, добавляя к имени поля минус.Для сбора query string от URL удобно использовать http_build_query - она еще и кодирует данные процентным кодированием (урок про URL: https://github.com/codedokode/pasta/blob/master/network/urls.md ).>>1351147А что именно ты не понимаешь? Я, например, делать это задание целиком за тебя не буду. Задавай конкретные вопросы, и если ты не знаешь что-то из теории, может мы подскажем, что можно почитать.Конкретно в задаче надо знать PHP и SQL.
>>1351074> Они подключают трейт к сущности, а в репозитории создают ее объект, где уже вызывают метод сейв и проводят с сущностью манипуляции.Ты что-то сложное описываешь. Я думаю, это просто неправильное понимание паттернов (или ты неточно описал). Если что, эти паттерны подробно описаны в книге Фаулера "Проектирование архитектуры корпоративных приложений" (PoEAA), и ты можешь прочитать их описания и сравнить с кодом. Репозиторий обычно создает объекты только при загрузке данных. Если надо добавить запись в БД, то сущность передается снаружи в репозиторий. "Манипуляции" с объектами AR он не производит, так как он представляет собой хранилище. > Там еще каким-то боком Query Builder работает, но это наверное к вышеописанному не относится.Не относится. Он используется когда надо построить запрос в зависимости от разных условий, например, фильтров. >>1350715Нужно: - проверить, есть ли в вордпрессе уже "личный кабинет" (и что под этим имеют ввиду? Там вроде есть какие-то страницы для редактирования профиля)- если нет, то найти плагин или сделать самому- добавить в личный кабинет страницу для загрузки PDF файлов и, возможно, просмотра списка и удаления. Либо самому, либо найти готовый плагин. Как "добавить страницу в личный кабинет" можно, наверно, нагуглить. Я сделал поиск по "wordpress member area" или "wordpress allow file upload for users" и там выдаются статьи по этой теме. Там даже кто-то гайд нарисовал: https://chrislema.com/wp-content/uploads/chrislema-guide-membership-plugins.png - но естественно, тебе надо тщательно проверить, подойдет ли плагин для твоих целей.
>>1350681В программы проверки кода можно добавлять свои правила. Но проверка переменных потребует полноценный синтаксический анализ кода. Так что, не знаю. IDE вроде PhpStorm вроде это умеют делать.
>>1351940Кто так пишет? Я видел только dirname(__DIR__) и просто __DIR__. Наверное просто кто-то не знает, что есть такая константа или дело привычки.>>1351740>Я думаю, это просто неправильное понимание паттернов (или ты неточно описал).Еще я задал этот вопрос на тостере, а мне ответили, мол, сущность не должна сама себя сохранять, ибо это противоречит принципам SOLID, то есть, нарушается принцип единственной ответственности. Поэтому создается репозиторий от каждой сущности, куда передается логика сохранения и прочего. И я вот думаю, правильно ли эти люди понимают шаблоны проектирования, или это я неправильно тебе объясняю. Книгу-то я не читал, но на сайте его смотрел описания. Эти шаблоны еще у Зандстры вроде описываются в последних главах, но я еще не дошел до них.
>>1351897Ну, зп раза в 2 выше медианной по какому-нибудь Омску, причем на руки, а не по бумажкам. А так да, по меркам ДС/Европ не густо.
>>1351739Я уже к этому решению и пришел, но все равно спасибо. Еще не начинал писать функцию, потому твоя информация мне очень поможет
>>1352018У нас на такую не проживешь, тупо денег не хватит после оплаты квартиры и коммунальных расходов. Минималка в крупном городе это тысяч 70.
>>1352137>У нас на такую не проживешь>Минималка в крупном городе это тысяч 70У вас это где? Средняя (не медианная, не модальная) по Москве около этой суммы или чуть выше (Мосгорстат как-то, в 2017 что ли, насчитал 90, а потом его поправили как раз до 70). К слову, я в ДС, в районе рядом с ТТК, трачу на >платы квартиры и коммунальных расходовзначительно меньше 45.
>>1352137>>1352144Я к тому, что, понятное дело, вакансия рассчитана на удаленщиков из провинции, где 45 это охуенная зп, а не на постоянно живущих в ДС.
>>1352145Я удаленщик из провинции, сейчас работаю за 60к и без всяких фулкаков, а на чистом пых-беке.Чет ты реально мало предлагаешь.
>>1351172>https://www.linkedin.com/in/tetiana-blindaruk-a34b79b1/https://www.linkedin.com/in/tetiana-blindaruk-a34b79b1/
>>1331378 (OP)<?php error_reporting(-1);$random=0; echo 'pull'; $random = mt_rand(1,6); echo 'PC pulled $random'; ?>WHERES THE MISTAKE ANON?
Пачаны, есть такая функция, которая выводит сообщения.Смысл в чем. Из одного файла вызывается эта функция и передает текст. А во втором файле сама эта функция.1 файлMessageSend ('Поле "Ваш Ник" пустое.');2 файлfunction MessageSend($p1){header('Location: '.$_SERVER['HTTP_REFERER']);$Massage = 'Ошибка: '.$p1.' !!!';echo $Massage;}Вот в чем проблема, после вызова "header('Location: '.$_SERVER['HTTP_REFERER']);", дальнейшие команды "echo" не срабатывают.Как принудить их сработать?
>>1352209А никак. Все, что после хедера вызывается, исполнено не будет, ты ведь очищаешь $_SERVER и передаешь новые заголовки. Хотя вроде бы переменная массаж инициализируется, но у тебя не будет к ней доступа. Тут даже трюки с ob_start и ob_get_clean не сработают, потому что заголовки превыше всего.
Всем, кому в соседних тредах нарасказывали про то, что PHP сейчас не самый модный - в Яндексе новый проект пишут на PHP (Symfony) и прямо сейчас ищут разработчика: https://moikrug.ru/vacancies/1000049016
Парни, есть один вопросПытаюсь спарсить сайт CURlом, на сайте штук 15-20 тегов <a> под одним классом, а курл видит только половину из них. Есть идеи почему так происходит?
>>1352283Лан поясняю.ПХП был немодным за бугром до ООП и вообще до 7 версии. Он объективно был непригодным. Но до местных пидорах, этот тренд начал доходить только недавно, поэтому существует парадокс - пыха - ацтой, но почему - никто не может объяснить. Пидораха кукарекает, что на швитом жападе так скозали, а то что сказали это 100500 лет назад ему неведомо.Пыха в тренде нынче везде. Как за бугром так и в рашке. Язык занял свою нишу и стабильно ее удерживает.
Посоны, PHPSTORM на рутреке без вирусов, качать можно? Если бы работал и были бы деньги, однозначно бы купил, сейчас лишний бакс на счету. Мне чисто перед поиском работы обкатать его, хотя мб и триальную качну если есть. Сейчас sublime 3 настроил с плагинами и прочим в недо IDE. Netbeans пробовал но не то, еще в IDE есть встроенный форматтер кода по PSR вот это тоже прикольно
>>1352424я с ide игрался вообще только, но заметил что при наведении мышкой на класс ide его не ищет, а в том же сублиме можно кликнуть и он сам по неймспейсу находит нужный класс, или хз, там можно как-то включить.Вообще, у Нетбинса такие же возможности, чем лучше, чем хуже, его можно так же кастомизировать? И еще нет карты документа чтобы быстро скроллить
>>1352406После JS современный PHP мне вполне нравится. В Питоне например я бугуртил от лямб в одну строку, В JS в колбэк пол-программы завернуть можно. Единственно в PHP какая то кривая система области видимости переменных. В JS как то более естественно чтоли.И пишут что с 7 версии быстрее Питона.А вообще конечно рыночек решает. Если человеку нужен магазин - то нахуя ему на Node/Jango например городить, если с той же эффективностью он реализует это на ПХП, на котором разработчиков гораздо больше.
>>1352406>пыха - ацтой, но почему - никто не может объяснитьмне на ебаное ит сказали, что у погромил есть своя иерархияпохописты - пидоры ёпта
>>1352428>PHP мне вполне нравитсяа я когда на пыхе чё-нить пишу представляю что кодю не на нём, а на жаваскрэп или на пайтхонт.е. это когда тню ебёт какой-нить карлан, а она представляет у ся в башке своей сраной, што в пизде у неё хуй альфача, а не омегивот точно так же у меня дела обстоят с пиэйчпи
>>1352502...представляю, что вместо знаков доллара я вижу варывместо точек плюсывместо стрелочек точкиа вместо фигурных скобок мне мерещиться индентация
>>1352425Пишу в нетбинс онли. Пробовал штор - не зашел.Нетбинс обвешал плагинами и вуаля. Все есть и дебагер и хуягер и карту поставил. Мне нравица
>>1352413зачем качать на рутрекере, если можно скачать с офф сайта и ввести просто сервак активации левый, который тебе на год мб и навсегда активирует его?
>>1352657Да никуда не надо. Серваки блять уже лопаются от ваших бесполезных велосипедов и учебных задач, которые не только никому, они даже вам нахуй не сдались.
аноны, поясните деревянному. Как закрыть доступ к html странице, запилил скрипт, авторизация и всё такое. Нужно сделать проверку наличия кук и если их нет, то переадресовывать на другую страницу тем самым закрывая доступ к контенту, я правильно понимаю логику? Я написал скрипт, но не знаю как его прикрутить к html документу, каким тегом и т.д. P.S. Скрипт на куки я написал.
>>1352695>Как закрыть доступ к html страницеЧерез .htaccess.>не знаю как его прикрутить к html документуЕсли js, то <script></script>Если php, то меняешь расширение с .html на .php и вставляешь скрипт в <?php ... ?>
>>1352758теперь при открытии этого html у которого поменял расширение на php просто в текстовом виде строки с разметкой html и вставленным кодом
>>1352758под закрыв доступ я имею ввиду вход только для авторизованных/зарегистрированных пользователей, правильно ли я понимаю, что это нужно делать через .htaccess?
>>1352413>>1352425В нетбинс тоже форматтер кода есть, по PSR настраивается. Карта навигации по классу там есть. Переходы по названию класса тоже. В PHPStorm есть конечно пара штук, каких в нетбинс нет вроде этих неймспейсов, но они не особо ценные и работу как-то существенно не ускоряют. В нетбинс повседневная работа с кодом вполне комфортна, у нас на фирме на нем работают с кучей проектов без проблем. Phpstorm имхо оверхайпнут, за такие бабки, какие они там за него требуют, он особых преимуществ перед бесплатным нетбинсом не дает.
>>1352806Дополню.Меня перегоняли постоянно на пхпшторм, мол там можно настроить работу с удаленным сервером. Поковыряся и оказалось в нетбинсе такая шляпа тоже есть.Я если честно хз что еще там надо. Форматирование кстати там неоче настраивается, например or и and не понимает и плохо перенос строк настраивается. Ебался с этим
>>1352695бамп вопросу, заебался голову ломать. Уже нихуя не понимаю. После верной авторизации пользователь получает куки, как написать скрипт проверки кук и если не совпадает/или их нет, то соответственно кикать посетителя со страницы
>>1352847у тебя есть страница:index.phpпоказывать ее нужно только авторизованным пользователям, поэтому, ты в начале этой страницы, делаешь проверку на куки:<?phpif huiv и т.д, и если что-то не так, делаешь переадресацию, все, дело закрыто>как написать скрипт проверкину мануалов дохуя в интернете, первое что тебе нужно научится - гуглить
>>1352813Нетбис это ведь та же идея, только кастрированная. Такое чувство, что нетбинс это такой тестировочный полигон для остальных платных продуктов джетбрейнс. Туда запиливают всякие штуки новички, только-только пришедшие в эту компанию. Как только они надрочатся с кодом, их уже берут работать с платными средами разработок.
>>1353262>>1352813>>1352806Ну нихуясе теперь. Сравнили жопу с небом.Разумеется phpstorm гораздо лучше.>есть форматтер и автопереход, хуле еще надо епта бляДа вы охуели?СТАТИЧЕСКИЙ АНАЛИЗ. Запусти 1 раз пых-шторм на своем говнокоде и ты охуеешь от количества хуйни, которую ГОЛЫЙ шторм там нашел ну просто сходу.ПРОДВИНУТЫЙ АВТОКОМПЛИТ И PHPDOC.Пых-шторм умеет то, чего не умеет нетбинс. Например, слабо переименовать несуществующий, описанный в пых-доке метод в 25 разных файлах?ПЕРЕМЕЩЕНИЕ КЛАССОВ И ИЗМЕНЕНИЕ НЕЙМСПЕЙСОВ.В нетбинсе это целая трагедия. Там тупо нет возможности одной сука кнопкой переместить корректно класс с изменением его неймспейсов (в том числе в овердохуя других файлов, что его импортируют).А тут CTRL+M и готово.ПЛАГИНЫ. Если ты думаешь "хмм, было бы круто, если бы был такой плагин для иде..." - для продуктов жид-бреинс он почти точно есть. А вот для всяких остальных помоек - не уверен.С помощью плагинов ты можешь допердолить иде так, что она даже под конкретный фрейморк будет заточена и вообще писать половину кода за тебя.ЕДИНАЯ ЭКОСИСТЕМА INTELLIJВсе иде жид-бреинсов очень похожи. 1 раз привыкнув, ты можешь вообще легко менять иде под нужный язык и все настройки будут в точно тех же местах, что и в другой иде. Интерфейс тот же. Более того, все проблемы и баги тоже там везде едины.phpstorm-сектант
>>1353600я делал на laravel по гайдамhttps://www.youtube.com/watch?v=cEYLjsEKyy8&list=PLfdtiltiRHWGGxaR6uFtwZnnbcXqyq8JD
>>1353602спасибо, посмотрю. Олсо, читал в одной статье что ларавел глючит иногда, типа может не распознать некоторые методы, хотя они есть. Такое может быть?
>>1353538А что это такое? Я читал, что это просто особенность фреймворков такая. Я вот даже сейчас пишу свой фрейм и вижу, что код из контроллеров, который я пишу, вызывается в совершенно другом месте. Код вдругих классах тоже вызывается в других классах и его результат передается в другие классы, где уже подтягивается другой мой код. Это оно?И причем тут Inversion of Control?
>>1353336Сектанство какое-то точно, все это в работе ни разу не нужно было. Классы рефакторил в нетбинсе, пока хватало. Автокомплитом не пользуюсь, напечатать быстрее бывает, чем тыкать там в нем. Для статического анализа тулзы есть специальные, у нас в интеграционных тестах подключаются. Phpdoc в нетбинсе есть с автозаполнением из типизированных параметров, пока тоже хватало.
>>1353544Переводили с тимлидом проект на Ларавел, че-то говно сложное и мутное оказалось, документация малопонятная, джунов пытались подключить - им вообще темный лес, потом пересели на Симфонию - все просто, логично и понятно, стандартам соответствует, все новые фишки там, дока понятная, джунов достаточно быстро подтянулись, еще вроде как и побыстрее, на ней и остановились. До Yii2 не дошло, симфонии на все хватило. Теперь на новых проектах ее ставим.
>>1353649Dependency injection с ней связан.Ioc-контейнер получает тип аргументов метода с помощью рефлексии.
>>1353419Нет, трюков с рефлексией в коде обычных сайтов быть не должно, так как она позволяет извлечь внутренности объекта, поменять приватные свойства/методы на публичные и не только, то есть программа может менять себя по ходу выполнения. Рефлексия может использоваться в библиотеках для генерации документации по коду, либо библиотеках для обнаружения багов в коде (PHPStan, Psalm). Нужно понимать как работает рефлексия (почитать мануал на php.net), так как будешь часто натыкаться на неё в коде библиотек, но в своих проектах стоит её избегать.>>1353538IoC это один из подходов для организации слабой связанности между частями системы: https://martinfowler.com/bliki/InversionOfControl.htmlК рефлексии это не имеет никакого отношения, ты путаешь с autowiring - там да, на рефлексии: https://symfony.com/doc/current/service_container/autowiring.html>>1353649Никак.>>1353348Поставь EAP версию (месяц бесплатно) и просто переустанавливай каждый месяц, до тех пор пока не начнёшь зарабатывать программированием деньги. Если студент - можешь отправить фото студбилета, дадут лицензию на год (я так 4 года продлевал). Ещё у них бывают скидки на день дружбы 40%. В общем, не воруй, лучше поддержи отечественного производителя.
>>1353649В обычном классе у тебя в конструкторе будет написано куча $var = new SomeClass($arg1, $arg2, ...). При инверсии контроля у тебя в phpdoc класса будет написано что-то вроде @inject SomeClass. Дальше работа контейнера зависимостей будет в том, чтобы при создании классов через него эти строки через рефлексию понаходить, подбирать нужные аргументы/объекты/классы и инжектить их в конструктор класса. При всем этом часто нужно бывает посмотреть в методы и phpdoc класса до его инстанциирования через рефлексию.
Можно переходить в новый тред >>1353705 (OP)Я сегодня-завтра постараюсь ответить на неотвеченные посты, но вы можете так же напомнить о себе в новом треде, хуже от этого не будет.
Laravel1. Не понимаю в чем профит сервис контейнера? Уже пересмотрел много видео и статей и примеры. Но я не понимаю через сервис провайдеры мы как бе можем подменять реализации интерфейсов того что будет храниться в сервис контейнере, но мы как бы можем сделать это и без него в чем профит использовать именно его? Да реализация через него синглтона довольна удобно и ясна, но она не так часто нужна, так для чего еще?. Так что вопрос зачем?2. Заодно вопрос какая структура папок должна быть для контрактов и их реализации.3. Если бороться с жирными контроллерами через сервисный слой то какую выбрать структуру папок чтоб можно было вернуться к проекту через месяц?
>>1331378 (OP)Объясните, как писать код с HTML и PHP одновременно? В одном файле хранить код или отдельно?Прочитал про шаблоны ОПа, но че то не понял.
>>1354826Сначала обрабатываешь данные которые пришли от пользователя, потом работаешь с базой данных и только потом делаешь шаблон страницы на ХТМЛ с вкраплениями ПХП кода для вывода динамического содержимого страницы.можно все писать в одном файле, но нахуя? тебе жалко места в папке для еще одного файла?
Какую книжку по основам php имеет смысл почитать, если не Котерова? Знаю, что есть куча сайтов, но в форме книги мне легче.