Здесь мы изучаем язык PHP (а также JS/CSS/HTML/SQL), решаем задачки и учимся делать сайты. Зачем? Кто-то хочет открыть стартап, кто-то заработать на лапшу быстрого приготовления, кому-то просто нечего делать.
ОП в последнее время сильно занят и не гарантирует, что прочитает и ответит на все вопросы. Но ответы и решения задач можно поискать в архиве тредов.
Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.
Предыдущий тред был тут: >>1630065 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (там есть поиск, так что можно легко найти обсуждение какой-то задачи или ответы на свой старый пост) или ищутся в гугле по словам "клуб изучающих php" и в архиваче.
Форматируй свой код, если хочешь, чтобы его читали (как, написано во втором посте).
Правила: ведем себя воспитанно, помогаем новичкам, читаем учебники, решаем задачки.
С чего начать
У нас есть свои уроки по основам 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, фреймворки, автоматизированное тестирование.
Надо переходить к более серьезным задачкам, которые научат тебя всему этому.
Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра. Также можно начинать смотреть фильмы и видео на английском.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
Оформляй код аккуратно!!! — например пропусти через 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, там тоже есть функция форматирования кода.
Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть стандарты PSR-1 и 2. Вот как надо оформлять код:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults() - Название функции начинается с глагола, в стиле «сделайЧтоТо» - не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт и найди название для переменной там - в именах классов используется CamelCase, первая буква большая, «_» может использоваться - мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек - мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
Вот ссылка на рекомендации PSR, где все это описано подробнее и даны примеры оформления:
>>1657020 Доки хороши только как справочник. Там рядом описаны и важные вещи, и то, что влеплено просто для полноты языка. Заучивать всё подряд довольно неэффективно.
>>1657017 Могу посоветовать только смотреть разные презентации на разных конференциях. Бывает лютое говно в стиле "10 СКРЫТЫХ возможностей ларавель", где чувак просто доки пересказывает и паблик апи, а бывает прям кулстори про реальной опыт и решение разных проблем, ну или просто хорошие практики опять же на основе реальных примеров. В книгах тебе может быть трудно понять тот уровень абстракции, о котором пишет автор, это если именно про дизайн и веб в целом.
>>1657118 Странный аргумент. Именно в книгах начинают с базовых понятий и постепенно проходят более сложные вещи, а спичи на конференциях как раз и бывают непонятными, автор говорит со своей колокольни.
>>1657124 Тут стоит уточнить о каких книгах и о чем вообще говорить. Я имел ввиду более "продвинутые" знания, которые, в основном, получаются с опытом. Если нет возможности его получить в боевых условиях, то можно попробовать перенять по маленьким кусочкам с тех же конференций, это будет не то, но общее представление даст в каком-то вопросе. Ну и вообще читать книги про чистый пхп тоже такое себе занятие, язык то простой(в этом тоже своя красота есть). В учебнике опа как раз все базовые вещи проходятся, только намного быстрее, чем условную книгу прочитать.
Сап аноны. У меня есть задача и я не знаю с какой стороны к ней поступится и что юзать. При нажатии кнопки нужно формировать get запрос и отправлять с ним айди, потом вытянуть данные бд пользователя с этим айди и открыть его личную страничкую.Буду очень благодарен за помощь
>>1657225 Если не хочешь ебаться с джавасриптом то делаешь форму с одним скрытым полем куда записываешь айди. И кнопкой сабмита. Сотвественно в форме метод = get, action - url запроса.
>>1657254 Мне нужно сделать личные страничке пользователей, когда в строке браузера вводишь би лайк index.php?name=Иван то тебе открывается страничка этого пользователя
>>1657267 Погугли routing, от банальных ифов до миддлваров, у ОПа кстати есть где-то статья на эту тему, поищи на гитхабе, вроде в задаче про студентов
>>1657179 Мне нужно "повторить php". Работу после карантина буду искать. И там обязательно будут спрашивать, чем абстрактный класс отличается от интерфейса и всё такое. Заучивать отдельные вопросы не хочу, лучше повторю всю тему не торопясь.
>>1657225 Ну так и пиши форму. Что-то вроде <form action="pers.php" method="get"> <input type="text" name="id" /> <input type="submit" /> </form> При нажатии будет сформирован гет-запрос к файлу pers.php с параметром id, внутри которого будет значение из поля ввода.
А дальше уже этот скрипт обращается к базе (лучше не напрямую, а через PDO, вытягивает данные, и формирует страницу, которую увидит пользователь. Грубо говоря, pers.php - это и есть та страница. Просто внутри неё есть что-то вроде echo "<h1> Добро пожаловать, $userName </h1>"; где $userName как раз и бертся из базы.
ваш пхп кусок отборнейшей параши я каждый день сру кусками пхп, они такие твёрдые и красивые пхпшеры очень любят свой язык (говно), срут им, едят его на завтрак ОДИН ПХП НА ЗАВТРАК ОТВЛЕКАЕТ ОТ ВАС ДЕВУШЕК НАВСЕГДА ваш шланг будет 1см максимум не пишите на пхп ПОЖАЛУЙСТА, АНОН, НЕ ПИШИ НА ПХП
>>1656450 (OP) Что почитать про работу с базами данных полному нулю? А то вообще ничего не понятно. Вот я делаю запрос к БД через mysqli_query, получаю что-то в ответ и как с этим дальше работать? Почему нельзя получить в ответ ассоциативный массив и дальше его вертеть как хочешь?
Вкатываюсь в ПеХеПе. 28 годиков, какие подводные? Скачал вебинар от каких-то хтмл академия и ахуел от непонятности. Решил зайти, на любимый впрошлом двачик и ахуел от удобности сайта для вкатывальшиков в шапке. Всё как я люблю, аниме девочки, шутеечки уровня б. Теперь главный вопрос, стоит ли учить? Мне не для 300к наносек, а для своего пет-проекта. Хочу замутить крутой скрипт для чтения манги в онлайне.
>>1657523 а че про них читать есть скл базы они более-менее одинаковые в скл запросах, есть носкл там уже надо доку читать по конкретной бд. настройка самой бд те в помощь
Анончики, дайте совет. Делаю задание про файлообменник. Для загрузки файлов решил использовать dropzone.js. Но проблема в том, что в него сразу нормально не встроить текстовые поля. Нашёл вот эту ссылку https://switch-case.ru/56510992. Можно ли по ней сделать норм или нет? Или подскажите, как сделать правильно, пожалуйста.
Аноны, посоветуйте, что выбрать для вкатывания - путь пхпшника или фронтэнд. Нужно как можно быстрее иметь 15-20к в месяц, желательно удаленно. Пока что уже две недели прохожу CS50
>>1659432 >две недели прохожу CS50 Это были потраченные впустую две недели. Тебе, если важна скорость, надо понимать, как функционирует твой фркймворк и как использовать инструменты одного конкретного языка для решения типовых бизнес-проблем, а не смотреть как долбоебы на сцене меняются местами под командами потного ведущего.
Аноний, я в печали. Дерусь с header'ом. Почему он не запускается?
Пробовал сделать внутри функции return $a=5;, а на странице с логином над хтмл формой условие, типа: include (file.php); if ($a = 5) {header ...}. И публичную переменную тоже пробовал. Но это ломало страницу и выдавало ошибку 500, лол.
Если при токен аутентификации мы грузим пользователя из бд на каждом запросе, это норм? Это не противоречит тому, ради чего придумана токен аутентификация? Если мы будем масштабировать наше приложение, и добавим серверов, то нужно будет продублировать таблицу с пользователями? Так вообще можно?
>>1660422 > грузят юзера из бд А как ты по другому собрался? ПеХаПе не сохраняет состояние. Токен нужен чтобы польхователь не воводил пароль при каждом запросу. Вся инфа тянется из бд(как вариант in-memory типа редукса), файлов, сесии и подобного.
>>1660439 так-то мы могли и сессию сохранить и передавать ее id, зачем тогда stateless и токен? Получается мы с каждым запросом передаем данные пользователь@пароль и сверяем их с таблицей.
Господа, прошу помощи. Есть страница, на которой по нажатию кнопки добавляется либо удаляется такой-же select <slect class="inputdata" onchange="..." onchange="..." name="..." id="..">...</select>. У него меняется name и id соответственно, увеличиваясь на 1.
В массив "elems", созданный скриптом javascript записываются name всех элементов, которые содержат класс "inputdata". Необходимо создать переменные в php-обработчике он в отдельном файле, если это на что-то влияет, которые будут называться как элементы этого самого массива. Т.е. содержание массива: name0, name1, name2.. и т.д.
>>1660686 Так себе идея - каждый запрос слать данные пользователя. Они нигде не кешируются, плюс к этому - одного пользователя мало и нужно его отношения тянуть из БД. Получается, что надо каждый запрос например передавать пользователя, его посты, лайки и тд. и не факт что они нужны в конкретном запросе.
На практике часто встречается, загрузка 1 записи по id - это быстро. Скорее всего, там для вывода страницы еще куча данных из БД берется и на этом фоне 1 маленький запрос роли не играет. В крайнем случае (настанет хайлоад) можно будет добавить кеширование в том же redis.
Пацаны, в чем дело? Почему не передает запись из сессии? Записал в отдельную переменную, все равно не передается, хотя при вызове внутри файла "db-req.php" отображается.
анчоусыы, подскажите, запускаю ларку и там идет по стандартному хосту типа http://127.0.0.1:8000/ и в связи с этим вопрос: как мне блять попасть в phpmyadmin то ? в инете хуйня какая то для nginx, а мне апач нужен + бд как то накатывать. через пхшторм не хочет. какого то хуя все в одну таблицу сует. сам дамп рабочий
Блять. Я чего-то не понимаю, нахуй, или что? Какого хуя код с добавлением поста в БД ломает наглухо, блять, авторизацию и регистрации?
Он, сука, никак не пересекается с теми функциями, ни именами переменных, ни названиями функций, ни запросами к БД. Эта функция вообще вызывается на последней странице, где уже после страницы регистрации показываются посты, это абсолютно другой файл. Это пиздец. Стоит его закоментить - все работает.
>>1661965 Выдает это на странице с логином. Хз, какая скобка ему не зашла. Не понимаю, что ему нужно. Какая неожиданная скобка, нахуй он ожидает фигурную скобку - не понимаю.
>>1661992 Надо не скрывать уведомления о проблеме, а решить проблему. Конкретно это означает, что ты пытаешься получить из массива элемент, которого там нет. Код с логином лень искать, он в том треде еще остался.
>>1662010 >Это он на пустые поля логина и пароля указывает Так вот ты проверь, пустые они или нет, и если пустые то не совершай те же действия, как-будто они заполнены. >Ну и сообщение о сессии тоже Сессия у тебя стартует где-то раньше. Тут дейсвтительно не очень критично, он скорее всего у тебя нет никакой архитектуры, которая помогла бы тебе юзать сессию централизованно. Так что тут для решения может быть вариант с проверкой каждый раз. Вот есть такой метод например: https://www.php.net/manual/ru/function.session-id.php Впринципе я тебе и так достаточно подсказал, как именно это проверить можно, дальше сам пробуй. >А если будут обсеры, то снова раскомментить и посмотреть? Можно то можно, только это снежный ком. Их просто нужно не допускать и решать сразу. К счастью это почт ивсегда (в твоем случае тоже) проще простого.
>>1661798 Смотря чем пользуешься, если линукс, то apt install phpmyadmin, он установится для apache. Можешь композером установить composer create-project phpmyadmin/phpmyadmin в другую категорию и запускать через командную строку php (локальный сервер), или если у тебя xampp например, просто переходишь на localhost/phpmyadmin
>>1662135 ну так и есть линукс. собирал все по частям. в пред разы когда работал со всякими cms то просто качал проект, настраивал все в хостах и апаче, затем просто переходил по magazgovna.my/phpmyadmin то все пахало. а щас при http://127.0.0.1:8000/phpmyadmin он меня шлет куда подальше и возвращает что вот 404 и такой страницы нет при этом все это в дизайне ларавеля, если что
>>1662510 Домашку к утру сдавать надо, поэтому срочно. Новичек, пиши пхп в оупен сервере. Есть задание, там надо вывести пару строк, а конкретно часы и минуты просклонять, в стоответсвии со временем. Однако у меня хром заменяет русские буквы на знаки вопроса, на английском все работает. Понимаю что проблема в кодировке, в начале пишу метачарсте утф 8 и тд, не работает. Открываю модули оупен сервера, меняю дефолт с офф на утф 8. Тоже не помогло. Что посоветуешь?
>>1662520 университет Хофстра на лонг айланде. Никак не могу отделаться от привычки писать сначала на русском, а потом переделывать. Это проблема для себя была чисто. Хотел разузнать что не так пока к удаленке доступ не закрыли
Подскажите - есть ли красивый способ парсить подобный HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0 Во что-то типа "Win 10, Firefox 75" ?
Боюсь что если начну сам херачить, то придется самому городить велосипед на 1000 if под каждый возможный браузер/os, да еще и через год это устареет.
То ли в глаза ебусь, то ли ещё что. Но у меня не работает вызов функции в ocStore, чтобы выводить имя пользователя в хедере, но мне выдаёт, что переменная неопределена.
Документация там странная без особых примеров. Поясните, пожалуйста, что я не так делаю? Типа, я объявляю что-то в controller/header.php и вывожу во view/header.tpl. Должно же работать, разве нет?
Как лучше со сфинксом работать через расширение PHP SphinxClient или просто обычное pdo подключение создавать и дальше уже от него запросы делать? Это я поиск делаю для тестхаба.
>>1663305 Мб через js можно напрямую делать? Мне на самом то деле не страшно если уже после логина от пользователя прилетит аякс-запрос на сервак с данными.
Аноны, как вы используете интерфейсы и абстрактные классы? Я их вообще не использую, потому что не могу понять зачем, если можно сделать обычный класс. Можно пример приближенный к реальным проектам?
>>1659432 >как можно быстрее Нужен ОПЫТ. Не в смысле коммерческий, а вообще. Набить руку, так сказать. Короче надо постоянно высирать новый код, чтобы тебе отпечатывались в макушку все знания. Только набив достаточно опыта и написав пару десятков мегабайт кода, тогда у тебя зазубрятся базовые принципы. >быстрее Для этого надо больше хуячить кода. Не читать, не учить, а писать код. Соответственно, чем больше ты времени на это тратишь, тем БЫСТРЕЕ все это будет
>>1664979 >или просто обычное pdo подключение Ну, тут ты точно соснешь. Как только ты на шаг выйдешь за пределы стандарта SQL, ты уже не сможешь юзать PDO. Да даже больше, sql в сфинксе крайне урезанный, ты даже блядский LIMIT можешь задать строго определенным образом.
В свое время я наебался и тупо стал слать запросы на json api сфинкса. (Точнее хуй знает, есть ли оно в сфинксе, я юзал форк Manticore, там есть).
>>1665030 >Я их вообще не использую, потому что не могу понять зачем В принципе правильно. Если не знаешь зачем что-то тебе нужно, значит тебе это сейчас не нужно. Но
Представь что у тебя на сайте куда-то загружается файл и сохраняется на локальном диске сервера. Всё ок, всё работает. Потом случается любая залупа, и тебе нужно этот файл заливать не на локальный диск, а на облако. У тебя до этого был класс Filesystem с каким-то методом вроде save(). Копируешь этот класс и делаешь из него LocalFilesystem, а из Filesystem делаешь интерфейс с методом save(). Теперь тебе достаточно сделать например YandexStorageFilesystem, в конфигураторе забиндить интерфейс Filesystem к YandexStorageFilesystem и не трогая вообще свой основной код у тебя программа внезапно начала работать по другому. Не всё так просто конечно, но суть понятная думаю. Важно чтобы у тебя нигде в коде не было $fs = new Filesystem(), или юзай контейнеры, или фабрики
>>1665030 Абстрактный это же типа базовый? Который не предполагает создания экземпляров? Если правильно понял, то юзаю как основной костяк. Тупа вваливаю туда основной фукнционал, а всё остальное выстраиваю вокруг него дабы не ебаться излишне с наследованиями и прочим.
Чем php не нравится регулярка? Я не понимаю. Через онлайн php чекнул, вроде норм, вот строка как пример 14.04.2020 13:14:39, в чём дело блэд, сама регулярка '/\d[\d]\.\d\d\.\d\d\d\d \d\d:\d\d:\d\d/'
хотел бы услышать выше мнение по поводу моего решения задачки 'Сумма прописью'. К критике готов, может предложите что-то получше сделать, обсудим https://ideone.com/KQZXTX . Спасибо
>>1657017 >Какой англоязычный учебник по современному php порекомендуете? Нет таких. Ни учебника, ни php. Современный PHP - это сельские интернет магазины, копроративные сайты и блоги на вордпресс. Соответственно к ним и учебников нету.
>>1657910 >Хочу замутить крутой скрипт для чтения манги в онлайне. Ну на ПХП у тебя будет сверх крутое чтение манги с полной перезагрузкой страницы после каждого перелистывания. Хуита это короче будет, а не манга. СПАшечку сразу делай на vue.js. Ну либо если тебе прям сильно хочется можешь скомбинировать, допустим какой-нибудь Yii2 + jQuery, если хочется стабильности, либо Laravel 6 + Vue.js, если ты стильный модный молодежныйпетушиный.
>>1660422 >Если при токен аутентификации мы грузим пользователя из бд на каждом запросе, это норм? Ну грузить, наверное, я бы сказал не норм, а проверять - ну да. То есть, типа а как иначе? На каждом запросе спрашиваешь у него токен и чекаешь, кто это. Ну если у тебя реляционка обычная можно и грузить, это в принципе на скорость не повлияет.
>>1667630 >там уже 7-ой вышел =) Ебаааааааааааааааать, ладно схожу посмотрю, че там высрал (нет). Причем, довольно давно похоже вышел, на ларакастс уже высер записали, what's new. Честно говоря, ПХП такая параша, что даже лень смотреть, чем там изменилось, как же я счастлив, что в жс переобулся.
Аноны, а можно ли на пхп сделать открытие из превью в полноразмерную картрнку? Не как сейчас, когда картинка открывается в отдельной рамке, тут уже пахнет JS'ом. А как раньше (к примеру, так до сих пор на Ычане, если без куклоскрипта): картинка открывается в полном размере и вместе с этим уродливо растягивает всю рамку с постом и зажимая текст к краю экрана. Или это тоже только через JS сделать можно? И на пхп остается только открывать картинки в отдельной вкладке, что и было до растягивания картинки в посте, лол.
Аноны, а где бы бесплатно без смс достать разных дизайнов интернет-магазинов? Хочу потренироваться их на фреймворки натягивать (Bitrix, WP, Shopify и т.п.).
>>1667772 >А почему неосилил? ООП не даётся? Я на типизированных джаваскриптах пишу, тамошняя система типов твоему ПХП без дженериков сосать дает. Просто заебало хуй сосать за 60к в говноконторе я решил двигаться к деньгам и нормальной разработке.
>>1667894 У них есть API для обращения к базе, для обработки событий, для написания компонентов/плагинов/тем оформления, у WP есть REST API, у битрикса - push-уведомления и т. д. и т. п. Поэтому - фреймворки.
>>1667936 >Это системы управления контентом. Так их называют только пиздюки, которые толком этих фреймворков не знают. Голые Bitrix, WP, Shopify сейчас никому не нужны. Заказчикам (у которых уже стоит что-то из этого списка) нужна кастомизация, которую невозможно обеспечить в рамках "темок с плагинами". Говорю это как проработавший 4+ года на галере, которая занимается такой кастомизацией. А теперь - марш под шконку, сосунок.
>>1667943 >Bitrix, WP, Shopify >фреймворки >называет кого-то сосунком и гонит под шконку Кекнул с этого овоща.
>проработавший 4+ года на галере Да всем насрать где ты там отработал. Я вот недавно галеру видел где работают одни верстальщики, которые себя фуллстаками называют. Прямо как ты cms - фреймворками.
>>1667943 >Говорю это как проработавший 4+ года на галере, которая занимается такой кастомизацией. А вот этот мужик https://wp-kama.ru/about занимается вордпрессом 10 лет и называет его именно CMS - почитай на странице, что умные люди говорят. А пока что: >марш под шконку, сосунок
>>1667925 >Она чем-то от ПХПшной отличается сильно, да? Бля, вот мне не лень настолько конченному хуесосу что-то объяснять. Ок, поехали, из коробки: 1. Возможность типизировать любую переменную. В пыхопараше это появилось только 7.4, а я выкатился с этой хуиты в 7.2. Там только тайп хинты типизируются и возвратные значения. 2. Типизированные массивы. let arr: string[] = ['ty', 'hyesos']; 3. Дженерик: function gen<T>(el: T): T { return el; }
4. Кортежи. 5. Энумы. 6. Never.
Лень расписывать, ты хуесос короче, там можно писать код, который ты даже представить в своей лоускилльной башке не можешь. Например, ридонли и приватные поля с хэш синтаксисом: обобщенные классы и интерфейсы. Соснул хуйца?: function getProperty<T, K extends keyof T>(obj: T, key: K) { return obj[key]; }
Гарды явления и включения, такое видел, хуесос? Пересечения типов и их объединения. Я, ктстати, уже говорил, что ты хуесос?
>А в ПХП они есть? Нету блядь, в ПХП есть только хуй заказчика очередного интернет магазина на процедурной параше в твоем рту. Все, нету там больше ничего. Ни декораторов, ни врапперов, ни нормальной АОТ или ДЖИТ, нихуя там нету. Ты есть, долбоеб.
>Что в твоём понимании является нормальной разработкой Энтерпрайз и качество, инновации, расширение границ.
>>1667969 У тебя это все есть на том же уровне, на каком был ключик у джека воробья во второй части. Пиши сразу на шарпе, зачем подделку жрешь. мимо-шарпист
>>1668097 >Таких тоже было у нас. Потому что вы петухи и не можете во фронт, я пришел вам напомнить об этом. Чем быстрее вы спрыгнете нахуй со своего ПХП, тем быстрее вы начнете учить джаваскрипт и обогащаться поняли?
На самом деле, этот боевой фронтопетух прав. Фронт важнее бека в современном мире. На бек можно, в крайнем случае, каких-нибудь обезьян нанять, или даже сами фронтендщики что-нибудь высрут, чтобы апишка жсоны выдавала.
А вот приемлимый фронт пхп-дебичи никогда не родят. Плюс есть ложное чувство простоты жс. Нет блять, он нихуя не прост. Он гибкий настолько, что способов отстрелить себе ногу и половину ебала там в 10 раз больше, чем было в пхп4. И не только лишь все понимают язык на том уровне, чтобы интуитивно избегать всех этих мест и писать нормальный код.
>>1668114 >На бек можно, в крайнем случае, каких-нибудь обезьян нанять, или даже сами фронтендщики что-нибудь высрут, чтобы апишка жсоны выдавала. А потом оно падает в самый разгар распродажи и твои обезьяны не ебут что с этим делать в течении пары-тройки дней. Ты либо совсем дегенерат, либо толстяк каких ещё поискать.
>>1668120 Железо все стерпит. Ядер дохуя, накинуть еще 24 гига памяти дешевле и проще, чем что-то исправлять.
Если смотреть глобально, то случаев, когда требуется настолько сложный бек, с которым обезьяны не справятся, меньше, чем случаев, когда они могут на коленке написать апи на VasyanJS и все будет работать.
>>1668127 >Если смотреть глобально, то случаев, когда требуется настолько сложный бек, с которым обезьяны не справятся Точно так же с фронтендом обстоят дела - куча прибыльных\топовых сервисов без всякого СПА и куч макак на поддержке живут себе и деньги делают.
Анон помоги плес, с меня сиськи мужские Делаю задание из обучалки про кубики, и меня ебет синтакисческой ошибкой уже целый час я не знаю что делать уже просто я хочу погромировать за 300к\сек а не поваром рабоать за двести бачей в месяц
>>1668251 Кстати у тебя там есть мини ошибка ^ у тебя <= и >= , Лучше просто больше или меньше типо если выпадет одинаковое число то это не победа, а выведет как ну ты понял и наверное лучше все же не дважды if писать, а elseif Ну я сам новенький и вкатываюсь, но мне кажется так лучше.
Блять, какие же php-фреймворки развитые, пиздец просто. Гуглишь любую самую дикую поебень вида "Laravel + анальный аттракцион для клоунов" и получаешь какой-нибудь специально созданный для этого пакет с парой тыщ звезд на гитхабе.
Блять, да даже для той же java меньше результатов по тем же темам бывает, я в ахуе. (про жс и говорить не чего, там вообще нихуя нет)
Дурашка снова на связи. В обучалке задачка: Некто кладет в банк 10000 р. Банк начисляет 10% годовых (то есть, каждый год на счету становится на 10% больше, чем в прошлом году). Напиши программу, считающую, через сколько лет в банке будет миллион? Сколько лет будет этому некто? Доживет ли некто до этого дня, если сегодня ему 16 лет?
Я вроде бы и домучал скрипт, чтобы он не только деньги считал, но и возраст, однако в результаты выкатывается каждое вычисление внизу скриншота. Как заставить скрипт отобразить только ответное значение?
P A M A H I T E я, видимо, совсем затупил. Решение задачки 'Я у мамы калькулятор' в какой-то момент начала лупиться. В этих сраных 30 строчках хранится дьявол, но я его так и не нашел. Вот код https://ideone.com/0UxqBC . Спасибо
>>16684>>1668497 >>1668497 Вау, у меня все получилось. Код: https://ideone.com/YCVfBf . Только у меня есть вопрос: почему до этого не работало без условия $i < strlen($example) ? я ведь принудительно завершал цикл командой break.
>>166>>1668504 Вот, запилил вроде как норм решение. По итогу проблема оказалась в приоритете условий. Исправил и теперь все идеально работает. Вот код https://ideone.com/HiWp87 .
Сап двощь, поясните ситуацию про тех. задания. Из недавних собесов всегда была какая-то залупа "Напишите прилу без фреймворков и либ но с композером и ООП". Нормально ли подключать psrовские интерфейсы если мне это нужно? Или вот хочу реализацию UriInterface газловскую подрубить, как вероятно что сразу скажут что я дебил и нужно было С НУЛЯ всё писать?
>>1668334 >Начнем с того, что с хуев у тебя есть таблицы без моделей? Пытаюсь поиск на сфинксе сделать. Через eloquent посылаю запросы к демону (не знаю насколько это хорошая идея, я нуб). Первая таблица индексы, вторая rt индексы.
>>1668596 Нужно у тех хуил спрашивать подойдет или нет. Если нет возможности - смотри насколько упрощает код. Смысл такого ограничения - посмотреть как ты пишешь (а не на вызов одной функции из либы). Если остается довольно много - то можно и использовать скорее всего. Если у тебя там под сотню строк (исключая всякий бойлерплейт) и они начнут выебываться - можно слать нахуй. Если конечно финансы не поджимают.
Дурашка-кун снова на связи. Эдвенсед-задача про кредит мучала меня всю ночь и теперь еще сегодня. Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон? http://codepad.org/nm9jPcpd
Если исправить ошибку в условии, что $creditBalance <0 на ( $creditBalance * $percent ) + $servicePayment < $montlyPayment, то скрипт останавливается, не давая балансу уйти в отрицательное значение, что есть маленькая победа. А что делать дальше, я сломал себе мозг. Я правильно понимаю, что мне нужно задать новое значение $monthlyPayment равное остатку по кредиту? Как мне это сделать?Куда бы я не вставил, например, $montlyPayment = $creditPayment скрипт сыпается.
>>1668954 Да, так тоже пробовал, но что-то не шло, сделал как у >>1668960 поменял условие в цикле и убрал break, потому что видимо он останавливал скрипт раньше времени, не давая посчитать последний платёж
Спасибо огромное как перестать чувствовать себя тупым
Вообще принято где-нибудь не пользоваться магическими методами, фасадами и другими спорными "фишками" ларавеля? Пока изучаю всякие рандомные проекты на гитхабе, и там они всегда задействованы. Как лучше учиться?
>>1669025 Эти спорные фишки нужны для более быстрой разработки. То есть за один-два месяца склепать работающую приложуху, и кое как её потом поддерживать иногда. Если проект охуеть какой крупный то там вообще стараются максимально от фреймворка абстрагироваться, ну и как бы для такого от ларки становится много меньше чем от симфони например. Тут смотри под задачи, если есть задача написать какую-то шляпу усатую по тз за 3 недели один раз, то, как бы это хуево не звучало, но можешь без проблем писать всю логику прямо в контроллерах. Так банально быстрее чем что-то пердолить и моделировать.
>>1668604 Как только доберешься до условий и лимитов, обнаружишь, что в сфинксе SQL уровня пук-кек и не поддерживает приблизительно нихуя. Я тебе уже сказал выше по треду, используй json апи
Но ни в каких .js файлах или .css файлах этого названия не найти, даже в html. Каким образом мой браузер тогда отображает текст: "Egor Smetansky" когда я мышкой навожу на иконку like?
Я сохранял эту страницу на локалку к себе, потом контенты всех файлов (.js и .css в основном), но нигде не было найдено совпадений с "Smetansky". Вот как например мне, будучи не залогиненным в facebook, найти где в коде "Smetansky" спрятно и как раздобыть id этого чувака?
>>1669181 Такое могли сделать чтобы нагрузку уменшить. Таких кнопок же много на странице может быть. Инфа подтягивается только если она действительно нужна (навели мышку). Плюс у него же SPA - акцент сдвинут на динамическое обновление содержимого страницы а не загрузку всего сразу.
>>1669216 >ajax-запрос на /api/graphql И в каком из этих файлов этот запрос и ответ находятся? >>1669218 есть ли возможность увидеть ссылку на профиль будучи не залогированным, того же Smetansky.
>>1669227 Открываешь вкладку network, потом наводишь мышку - что-то из того что появилось и нужно. Просматриваешь где какая инфа. Когда находишь нужное, смотришь вкладку headers - там инфа которую нужно передавать чтобы твой запрос обработали. Смотришь что там можно менять. Там ебля еще та может быть, особенно если защита от XSS подрублена.
>>1669227 Если руками хочется попробовать, то можно сделать из меню F12 "copy as curl" и с помощью curl воспроизвести запрос. Curl умеет через параметры и куки, и все методы, и все заголовки, конечно.
Можно попробовать какие-то запросы поменять, посмотреть, как сайт реагировать будет.
В принципе так можно сложные сессии какие-то воспроизводить.
На картинке — часть программы, создающая философское настроение. Принцип работы таков: есть 5 наборов слов, из которых случайно выбираются слова, образуя такую структуру:
Вопросы: 1) Как заставить код вместо ключей выдавать значения? В одной из предыдущих задач удавалось это сделать c помощью переменной типа $random[$word1], тут ничего не выходит
2)Почему первая и вторая строки выходят идентичными, хотя по идее должны браться рандомно из массива
>>1670336 > Как заставить код вместо ключей выдавать значения? С помощью ключа получаешь значение. У тебя не выходит потому что ты передаешь не ключ. > Почему первая и вторая строки выходят идентичными Пoтому что ты их составляешь из идентичных переменных - для второй строки их нужно заново генерировать. Попробуй перечитать все (вообще все) заново. Ты путаешся в базовом синтаксисе. Если дальше так продолжишь то запутаешся еще больше. https://ideone.com/HHW3qK
>>1670784 я так и думал, что есть решение проще. Пытался сделать так же, но кажется у меня рили проблемы с элементарным синтаксисом, потому что как только я пытаюсь юзать подобные переменные $word2[array_rand($word2)], код сыпается.
А есть еще какие-нибудь пособия для самых маленьких? видео или статьи. Часто помогает восприятию изложение одних и тех же тем разными людьми.
Есть задача , сразу же первая по ссылке https://phpbooktest2.ga/l1/mou-ikkai.html , прикрепляю скрин самой задачи Вообщем, решаю усложненный вариант( который не решается жадным алгоритмом). В процессе решения было много трудностей,с которыми ОП очень помог, остановка произошла , на том , что я для начала должен был сделать программу для генерации комбинаций , вот я сделал https://ideone.com/XhuCwE .
Следующим моим шагом уже стало решение задачи про банкомат, следуя советам, сделал так: одна функция генерирует комбинации, по примеру как с числами, тут только вопрос правильно ли я это осуществил генерацию комбинаций купюр, с числами было попроще. Другая функция проверяет комбинацию, соответствует ли комбинацию тому количеству денег , которое требуется выдать. Сделал все это пока без оптимизации, хочется для начала узнать адекватно ли я вообще написал этот код , и есть ли тут грубые ошибки. Вот сам код https://ideone.com/6tgkDv . Далее уже буду делать оптимизацию.
Есть еще вопрос , можно же было бы осуществить все без генераторов запихнув функцию проверки в функцию генерации комбинации https://ideone.com/5L3qJh , или это ужасно выглядит ?
Есть PHP скрипт, в котором парсится текстовый файл, который лежит в папке рядом со скриптом (буквально там написано $file = 'data.txt';). Находится все это в папке D:\Code\ Так вот, оно как-то странно работает, если запускать его из командной строки Windows. Если перейти в папку (в консоли ввести D: cd code) и запустить скрипт (php script.php) - все работает отлично. Если же попытаться запустить скрипт не переходя в папку, а задав абсолютный путь (php D:\code\script.php) то скрипт начинает выполняться, но выдает Warning что не может найти файл data.txt.
>>1671267 >Почему так? >'data.txt' Это относительный путь. Он считается от точки запуска скрипта, а так как ты запускаешь его из другой директории, то он не может найти файл.
>Как это исправить? __DIR__ . DIRECTORY_SEPARATOR . 'data.txt' Пропиши вместо относительного пути.
эм, анонсы, поясните мне вот такой момент. работаю с настройками магаза и его моделью. значения сюда записываются через json_encode и поэтому там залупа в виде u043fu0443u043a и соответственно чтобы все было по канону свои астройки которые я посылаю туда (для своей модели собсно) я шлю через енкод. все норм и он спокойно записывает то что мне надо. но проблема в том когда я их обратно достаю и юзаю json_decode() он мне возвращает сука то же самое. т.е. не NULL, не исключение, а просто такую же закодированную строку. в чем трабл? стоит пыха 7.2.3 если че
Что я делаю не так? https://paiza.io/projects/mNxIIUEXLbF6KWLdsx_NSQ?language=php Он выводит будто все буквы в тексте гласные, так ещё и сверху накидывает выше нормы. При этом если использовать английские буквы, то всё нормально. Дело конечно в локале, но mb_internal_encoding('utf-8') не помогает
>>1671827 Новые проекты на пыхе в 99.9% случаев представляют из себя вкидывания 300$ в индуса надеясь получить от него хоть немного юзабельный продукт На западе даже самые прозженные любители поговнокодить массово перекатываются на питухон/руби как новую тулзу для шлёпанья монолитов
>>1671838 >На западе даже самые прозженные любители поговнокодить массово перекатываются на питухон/руби как новую тулзу для шлёпанья монолитов жаль в роисии сука не так
Ебучая задача про палиндром: как блять это сделать, пользуясь только знаниями из обучалки?
https://ideone.com/NZXJOp вот я разбираю слово на символы, одним циклом с начала строки, другим циклом с конца строки. Как их сравнить и получить только итоговый результат по строке, а не по каждому символу? Можно ли не делать два цикла, а как-то уместить это в один? Если закидывать строку посимвольно в массив, как мне сравнить элементы из начала и конца массива? это вообще можно сделать?
Делаю сейчас тестхаб из ОП-поста на ларавеле. Думаю, что через неделю-другую бэк более-менее до ума доведу. Хочу фронт написать на тайпскрипте и вью. Норм связка, или лучше реакт+тайпскрипт? Если что в жс-е, очень плохо разбираюсь, но понравился синтаксис тайпскрипта. На фреймворках никогда ничего не писал, так что все равно что учить.
>>1671838 >На западе даже самые прозженные любители поговнокодить массово перекатываются на питухон/руби как новую тулзу для шлёпанья монолитов Статистику перекатывания в студию. Я уже вскукареков наслушался.
>>1672069 >Делаю сейчас тестхаб из ОП-поста на ларавеле. Нафига на эту херь время тратить? Лучше написать какой-то полезный сервис и захостить, набираясь реального опыта, а не разработки в вакууме. Эта ересь кучу времени заберёт, ничего тольком не дав взамен кроме умения писать круды и накатывать миграции изучается за неделю.
С тех пор как выучил пхп и пошёл по фрилансу и заявкам, то стало очевидно, что местное дрочево никому не нужно - синьоры сами поговнокодить мастера.
>>1672993 >>1672942 И даже если без strrev, то зачем пользоваться вырезанием подстроки, когда можно напрямую символы получать как $test[$i]? Проще ведь будет?
Извитите, не пишу на вашем ПХП, не знаю как у вас писать принято.
>>1672942 Просто есть уверенность в том, что можно сделать куда лучше и проще >>1672993 Ну автор учебника не рекомендует тк не работает с русскими буквами Я сам учусь и не знаю тонкостей
>>1672996 Да, решил проверить и понял что обделался, строка побайтово сравнивается. Не подумал, что скриптовые языки в 2020 не могут нативно с юникодом работать.
>>1672996 >Ну автор учебника не рекомендует тк не работает с русскими буквами Учи питон, пока не поздно. Не будешь такой хуйнёй страдать, там всё намного лучше.
>>1673019 Понял, спасибо.Даже если питон возможно лучше хотя мне кажется всё зависит от того на чем ты начал в начале, все дело в привычке, то все равно на пхп больше вакансий для джунов. К тому же принцип работы языков программирования очень схож и думаю в случае чего смогу перекатиться.
>>1673019 Питон однозначно хуже. И смешное "развитие" не помогает практически ничем. Вообще он выглядит как один из худших вариантов для бекенда. Даже голый жс получше. Лучше бы питонисты занимались более подходящими задачами, чем вот это вот. Алсо, нужна не лаконичность, а выразительность. Лаконичностью доведенной до уродства студентота только меряется. И они, кстати, как раз дрочат на питон. Ноудискасс, т.к. 3 года уже на питоне пишу бек и всей душой его ненавижу, с каждым днем все больше, переубедить не выйдет никак.
>>1673254 Дворники вроде мало работают в день.Или ты полный день работаешь? Если я не смогу за год-полтора научиться и найти работу джуном, то пополню твои ряды. >>1672922 https://paiza.io/projects/Src-bGvqCdab1Jqk6gfqKQ?language=php переделал, теперь всё должно нормально работать.Если не использовать спец символы...Всё как задумывал автор Наверное
>>1673254 Ну ты все же не бросай попытку, даже если систематически по часу будешь в день учить, то через пару лет сможешь вкатиться.Там ещё от удачи всё зависит - видел вакансию в своём городе где вообще не слишком много нужно знать, мол главное желание учиться развиваться Оплата от 15 до 30к, но скорее всего на деле 15к
>>1672995 В пыхе по индексу ты читаешь не символ а байт, собсна мультибайтовая кириллица идет по пизде. Исторически сложилось что создатели пыхи ложили хуй на юникод, и поэтому сейчас у каждой функции, которая работает со строками, есть клон с приставком mb_ в виде экстеншена. Такие дела :'c
>>1673380 Моложе него только всякая хипстеркая хуита. Особенно если отсчитывать от появления zend engine. Из относительно мейнстримовых только шарп помоложе будет.
>>1673377 Кто его ненавидит? Как вообще можно ненавидеть инструмент? Какие-то эмоции к нему, да и к прочим ЯП, испытывают только совсем уж ньюфаги в мире ИТ. Чем и палятся.
>>1673393 >>1673394 Откуда такая инфа? Ни того ни другого из коробки вроде не будет в 8. Там самое главное jit и синтаксис подтянут в очередной раз, как же без этого. Алсо, Стогов хипстерские запросы коробочной асинхронности уже неоднократно посылал нахуй, т.к. считает ее неважной. Похоже это в самую последнюю очередь будет сделано.
>>1673403 Асинхронность не для скорости языка в целом нужна, а для редких кейсов одновременной обработки блокирующих операций. Они реально редкие, поэтому особо не парятся с добавлением асинхронности в пых. Со скоростью тоже уже давно хорошо, хотя апать есть куда. Все равно это не узкое место. Критичное для пыхи - это повсеместная и легкая смена парадигмы исполнения на долгоживущие сервисы, т.к. узким местом теперь является повторяющаяся загрузка всякой мишуры одинаковой между запросами. Это, впрочем, уже многими реализовано. Из последнего нашумевшего - роадраннер. И того выходит асинхронность пхп нужна почти никак.
>>1673406 >ся повторяющаяся загрузка всякой мишуры одинаковой между запросами. Это, впрочем, уже многими реализовано. Из последнего нашумевшего - роадраннер. И того выходит асинхронность пхп нужна почти никак. нихера не понял
>>1673406 >Критичное для пыхи - это повсеместная и легкая смена парадигмы исполнения на долгоживущие сервисы, т.к. узким местом теперь является повторяющаяся загрузка всякой мишуры одинаковой между запросами. А как быть в ситуации, когда 10k клиентов, которые слушают вебсокет. Держать в памяти и крутить параллельно 10k машин, по одной на каждого клиента, и дальше синхронизировать обмен данных через внешние системы обмена сообщений?
Асинхронность или многопоточность нужны вот для таких вариантов. Один процесс обслуживает много клиентов, за счёт этого радикально снижаются некоторые накладные расходы. Не только память и какие-то вычисления, но и подключения к внешним сервисам и др.
>>1673377 Пых плох и ненавидим не столько сам по себе, сколько в плане того, кто и что на нем разрабатывает. На голом пыхе можно написать что угодно в интернет-мире, что приводит к тому, что есть куча "фрилансеров" 15летних с бирж и прочих начинающих, которые пишут роутинг в стиле switch($_SERVER['REQUEST_URI']) на 150 пунктов, свой класс DB, верстают шаблонами голого пыха куда прокидывают свой же класс DB, и так далее, и так далее. Все это можно делать и на джаве с питоном, но почему-то в основном такие перлы коммьюнити у пхп. Ну и процедурная лапша на глобалках в цмс или фрилансовые заказы шоб работало вчера без какого-либо ревью это тоже большая часть рынка у пхп, там могут быть матерые говнокодеры. Ну а если брать пхп мир симфони с ларой, то чего, нормальные вещи, ничего выделяющегося в плане хуевости на фоне других популярных языков, лара вообще стильная модная молодежная.
>>1674006 >15летних с бирж и прочих начинающих, которые пишут роутинг в стиле switch($_SERVER['REQUEST_URI']) на 150 пунктов
Такое кстати пишут не только 15-летние но и с 15-летним опытом без шуток. Когда за 15 лет варишься в этом чане с говном и не видишь как можно по другому написать. Знавал я одного разраба, говорил что все бугуртят от вордпресса просто потому что не знают как с ним правильно работать. Хотя он вроде понимал что в цикле делать запросы к бд это не очень правильно(скорее не очень быстро для него), но это по вордпрессовски и проще ебануть какой-то кеш программный чем пытаться по другому. Ну и конечно не признавал композер, установить сторонние либы это копипаст в локальный файл и подключение через include, в общем лучшие практики 2003 года.
Всем привет, я начал учить верстку. Глянул вакансии и там джва пути: 1. Или ты должен знать в добавок к верстке php, sql и разные cms 2. Или ты должен иметь официальный опыт работы с js-фреймворками
Второй вариант в общем-то отпадает, ибо нельзя взять официальный опыт, если чтобы взять официальный опыт, надо иметь официальный опыт. Попал во фрактал. Значит интересует первый вариант. Это получается надо знать linux-администрирование что ли? Чтобы php на сервере настроить? А как считаете на stepic.org хорошие курсы по linux?
>>1674076 Видел, в одном месте работодатель любил ванилла жс без зависимостей, поэтому все писалось кошмарными велосипедами на кучах ифов и конечно же без какого-либо ES6+
>>1674300 Такое в любом языке встречается. Я хз как сильно надо быть ёбнутым мешком чтобы увидев одного говнокодера составлять мнение вообще о всех пишущих на этом же языке.
Почему надо возвращать текущий объект при обращении к нему, как показано на рисунке? Это небольшая часть symfony forms, да и вообще там (в симфони) всегда так, при присваивании данных в объекте
>>1674553 А при создании объекта можно вызвать функцию в одну строку? по типу new CallClass()->create(); или мне все равно придется закинуть new CallClass() в переменную, и обратиться к методу через переменную?
Накатил psalm, получился какой-то тайпскрипт на минималках, но всё равно какая-то даже иллюзия появилась что мой код будет меньше ошибок срать. На пике например массив классовых констант с определенным интерфейсом. Радует то что сразу подсвечиваются не обработанные null, которые с функций возвращаются, там главное не ставить самую анальную строгость, а то весь код красный будет.
>>1676302 Смотря как. Если ты хочешь сам принимать и хранить карточки (платежную информацию) то сложно. Нужно разные сертификации проходить и подобную ебанину. Если просто подключить сторонний сервис (яндекс-деньги, paypal или подобную парашу) то ничего особо сложного.
«Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок: нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия «жи» или «ши» написано с буквой ы в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан» в тексте есть слова «а» или «но» без запятой перед ними. (можешь добавить еще несколько правил, если хорошо знаешь русский язык) В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).
Делаю тестахаб. Такой вопрос. Вот тут ОП предлагает по очереди выводит юзеру каждый вопрос >/test/NNN/question - страница вопроса теста. Показывается сколько осталось времени, текущий вопрос и дается возможность ответить на него. Можно возвращаться к предыдущим вопросам. Можно не отвечать на вопрос. Контроль времени должен вестись на сервере, чтобы его нельзя было обойти. Я хочу сделать так: когда юзер начинает тест, то ему приходят сразу все вопросы, а дальше на клиенте джаваскрипт их пагинирует. Так ведь проще, чем каждый раз к серверу через аякс обращаться, чтобы получить следующий вопрос. Или есть какие-то подводные камни?
>>1676926 >Я хочу сделать так: когда юзер начинает тест, то ему приходят сразу все вопросы, а дальше на клиенте джаваскрипт их пагинирует. Так ведь проще, чем каждый раз к серверу через аякс обращаться, чтобы получить следующий вопрос. Или есть какие-то подводные камни?
Подводные камни зависят только от задач, которые ты пытаешься решить, но выбранным методом внезапно не можешь. Например, ты хочешь трекать время ответа на каждый вопрос, можно это доверить клиенту и получать массив ответов с затраченным рядом временем на каждый вопрос. С одной стороны кулхацкер может туда что угодно написать, с другой стороны если это не сильно важная инфа в контексте то и хуй с ней.
ОП так предлагает, потому что так наверное проще с точки зрения вкатывальщика, ну и в целом интереснее даже. На жсе по-человечески для этого лучше сразу какой-то вью подрубать, а то охуеешь на жиквери это писать.
>>1676973 >Например, ты хочешь трекать время ответа на каждый вопрос, можно это доверить клиенту и получать массив ответов с затраченным рядом временем на каждый вопрос. С одной стороны кулхацкер может туда что угодно написать, с другой стороны если это не сильно важная инфа в контексте то и хуй с ней. Да,про это думал. Но мне кажется, что бесполезно трекать время ответа на конкретный вопрос. Важен же общий результат и время выполнения целого теста. > для этого лучше сразу какой-то вью подрубать Я так и хотел. Добра за ответ! Пойду пилить.
>>1677141 Потому что у тебя возвращается 0, что неявно кастится в false. Хуярь явную проверку, и желательно строгую. В твоем случае !== false. Проблема дизайна в старых функциях стандартной либы есть такая.
>>1677177 >если искобый обьект не находится между другими обьектами, отчего ставлю пробел trim, чтобы от ненужных пробелов и прочего по краям избавляться.
>>1677184 Можно разбить на слова еще до проверки. Или использовать регулярки, с их помощью легко проверить начальные фрагменты слов. Даже если ты этого не сделаешь, все равно правильно херачить через !== false. Вторым пробелом ты избегаешь возврата функции 0, и получаешь 1. 0 неявно кастится в false. 1 и выше неявно кастится в true, и только из-за этого неявного кастинга ты вставляешь два пробела в начало, вместо одного. Но это как был костыль, так и есть. >== От нестрогих сравнений нужно дисциплинированно отказаться навсегда кстати. Одна из причин, почему такие ситуации возникают. Сравнивается жопа с пальцем, кое как кастинги происходят, а тут вдруг вместо пальца хуй, и вроде ведь похож, да что-то кастинг срет под себя. Ты понял.
Какая CMS самая крутая по вашим ощущениям? Я знаю, вы скажете, У-У-У! все CMS - говно, фреймворки рулят! Но тем не менее, какая CMS самая приемлемая? inb4: KeystoneJS
Это неправильный код. Согласно мануалу, strrpos возвращает либо число, либо FALSE. TRUE она не возвращает не при каких условиях, и сравнение некорректное.
>>1678301 >Это какая-то защита Защита от случайного написания = вместо сравнения. В других языках тоже так пишут. Если в левой части что-то типа true, то попытка присвоения сразу же приведет к ошибке. Обратная ситуация могла бы стать трудноуловимым багом.
>>1678515 Тут такое спрашивать зашкваром считается и теперь тебя негласно в петушиный угол определили. Ну может ОП тебе чего ответит. Он любит петухов всяких няньчить.
>>1678574 >Тут такое спрашивать зашкваром считается и теперь тебя негласно в петушиный угол определили. Я интересуюсь, а не спрашиваю. Выбирай выражения. И вообще ты кто такой чтобы запрещать мне интересоваться? Базаришь мне тут. Ты не авторитет для меня, ты меня понял? Все, базар окончен.
>>1678585 >Я интересуюсь Зашкварные интересы - иди парашу чистить. Пацанам западло с тобой за дело тереть. Будешь базарить много за CMS - в обиженку переведём.
>>1678657 >пользуется спросом за счет интеграции с 1С Не, у них просто бизнес-модель на маркетинг завязана. Они бабло вливают не в разработку, а в продвижение. В результате внутри она - параша, но про неё каждому кабанчику расскажут в презентации - какая она распиздатая. Кодер на битрксопарашу стоит довольно дорого потому, что она полна страданий и мало кто любит с ней работать.
>>1678663 >она полна страданий Ужас какой, это же пизнес, а зачем вы говорите, что это самая лучшая CMS? Вы что тролли что ли? Вы злодеи? Занимаетесь обманом? Занимаетесь ложью?
>>1678693 Не понял твоего поста. Что тебе не нравится? Программисты не любят Битрикс и есть за что. Да - поддержка 1С у тебя будет отличная, но всё остальное будет парашей. А так как Битрикс это для веб, то работа с 1С это только 10% от задач, и остальные 90% - боль и говнокод.
>>1678746 Русский православный гречневый программист должен уметь три вещи: разобраться с Битриксом, разобраться с 1С-кой и кодить на русских православных микроконтроллерах.
Когда изучал пхп, то пошёл сразу на фреймворки, PSR, ООП, и прочее. Потом пришлось заниматься Вордпрессом. Уже вначале оказалось, что с ним не всё просто и там, где фреймворк предлагает простое и очевидное решение, на CMS это сделано наиболее ебанутым и неудобным способом. Достаточно попробовать написать на фреймворке тот же блог, как всё станет очевидно.
Единственное, почему CMS ещё живы - они позволяют навасянить себе сайтик мышкой или нанять школьника для этого за копейки. Такое с фреймворком не прокатит - ему подай отдельный фронтенд где свои фреймворки есть, отдельный бекенд. Т.е. разработка несколько дороже выходит и професиональней.
>>1656450 (OP) Аноны, нужна ваша помощь. Пишу магистерскую диссертацию на тему разработки сайта для турагенства да-да, такое тоже бывает. Могли бы ответить на вопросы: 1) Можете подсказать CMS, который легок в обучении и есть адекватные уроки по нему? И чтобы уроки были не по готовому шаблону или конструктору, а чтобы объясняли как использовать CMS со своей версткой? 2)По идее можно или нужно реализовать возможность покупки специальных туров, которые предоставляет фирма онлайн. Как это реализовать максимально легко и безопасно, если это возможно? Получается нужна база данных, если да, то что она должна хранить? 3) Допустим все же воспользоваться готовым шаблоном. Можно ли его натянуть на CMS и сделать для него оплату онлайн? 4) Можете дать советы по разработке сайта для турагенства? Как что реализовать, может быть кто-то сталкивался с подобным.
Верстальщик ужасно лажает, проеб на проебе и затягивание сроков в 10 раз. Какую программу ему можно поставить, чтобы она делала скриншоты раз в минуту и отсылала мне?
>>1679159 >1) Можете подсказать CMS, кот Очевидный вордпресс >2)По идее можно или нужно реализовать возможность покупки специальных туров, которые предоставляет фирма онлайн. Как это реализовать максимально легко и безопасно, если это возможно? Получается нужна база данных, если да, то что она должна хранить? Очевидный вукомерс >3) Допустим все же воспользоваться готовым шаблоном. Можно ли его натянуть на CMS и сделать для него оплату онлайн? Можно конечно и без особого труда >4) Можете дать советы по разработке сайта для турагенства? Как что реализовать, может быть кто-то сталкивался с подобным. Могу дать жизненный совет. Скорее всего ты на магистре по погромированию, судя по всему тебе это нахуй не надо, не еби себе мозг, купи готовый диплом, потрать лучше время с пользой. Если тебе это реально интересно стало, то попробуй для опыта на фреймворке такое сделать, хотя бы будет о чем в записке написать. Если твой максимум это laba2.java, то понадобится время, которого может не хватить, в общем тут уж думай сам.
Ну и совет по теме, на бумаге нарисуй сущности своей предметной области, туры, агенты мб какие-то, я сам хз что там в этих турагенствах происходит. Набросай потом какие у них есть свойства, у тура например есть как минимум цена и перечень стран, входящих в этот тур, даты какие-то туда сюда. Нарисуй потом бизнес процессы. Если не можешь понять что тебе нужно, то позаходи на разные сайты турагенств и сразу увидишь какие у них есть фичи и вот это всё, хз надо или это для работы, сам решишь.
>>1679185 >проеб на проебе и затягивание сроков в 10 раз Изначальные сроки какие были? В норме на 1 страницу требуется 1-2 дня, от сложности. Может он тебе целый магаз за полдня сверстать взялся? Разумеется, что сильно затянет. Частая нубская тема.
Ананасы, будьте так любезны, перезалейте с рыги офлайн-зеркало обучалки, а то "файл был удалён", а мне на работе аутировать хочется, интернет только на телефоне
>>1679250 >Если твой максимум это laba2.java, то понадобится время, которого может не хватить, в общем тут уж думай сам. У него в запасе меньше месяца, не думаю, что он вообще может в программирование как таковое. Поэтому да, поддержу только ВП.
Помогите разобраться. Пытаюсь вкатиться в ООП и столкнулся с таким вопросом. Например, хочу создать класс в котором будут базовые элементы - подключение к бд, лог запросов, времени выполнения, другие переменные, доступ к которым хотелось бы иметь из других классов. Как это правильно реализовать (и вообще правильно ли так делать в принципе)?
>>1679468 Каждый класс создаётся под одну задачу, а ты целый слой задумал в один положить. Вангую, что у тебя так получится портянка на 100500 строк, с методами по 100500 строк, что является говной во всех смыслах. Один класс - работа с БД, один - логирование сюда вобщем-то можно и время выполнения положить, один - всё это объединяетвроде как фасад который инициализирует загрузку и передаёт конфигурацию классам. Глобальные переменный - удоляй. С данным подходом они не нужны никогда не нужны - класс БД получает от фасада данные, логгер тоже из фасада, ну и тд. И работают с ними на своём уровне.
>>1679484 Да я образно все это в один класс объединил. Понятно, что под каждую задачу нужен свой отдельный класс. Вопрос в том, как создать единый экземпляр класса, чтобы он был доступен другим. И как правильно все это связывать
>>1679502 >как создать единый экземпляр класса, чтобы он был доступен другим Положи классы в контейнер при загрузке. Можно тот же php pimple использовать, с гитхаба, для хранения. Это такой класс для хранения других классов зависимостей, с дополнительными плюшками. Ну и почитай по инъекциям зависимостей, хотя бы доку с примерами по этому Пимплу - там не сложно.
Можно попробовать скачать отсюда: https://github.com/codedokode/phpbook - выбрать Clone or Download, и нажать Download as ZIP. ZIP распаковать в любую папку и дважды щелкнуть на html-файл для открытия.
Каждый класс делается для своей задачи. Это типичная ошибка - пытаться все засунуть в один класс (и наследоваться от него). Например, у тебя может быть класс, отвечающий за работу с таблицей пользователей, с методами вроде добавить пользователя, удалить пользователя. И другой класс, который использует этот класс для регистрации нового пользователя.
>>1679185 >Верстальщик ужасно лажает, проеб на проебе и затягивание сроков в 10 раз. Какую программу ему можно поставить, чтобы она делала скриншоты раз в минуту и отсылала мне? Зачем какая-то программа? Гит юзайте и все, потом смотришь, если каждые 3 часа нет коммита, значит какие-то проблемы.
>>1679185 >чтобы она делала скриншоты раз в минуту и отсылала мне? Я б не стал работать в таких условиях - нездоровая вахтёрская хрень у тебя в голове. Не нравится как он работает - решай вопрос с ним напрямую, а не подглядывай, ебло.
>>1679185 >>1679723 >нездоровая вахтёрская хрень у тебя в голове this. Алсо, я не юрист, но мне что-то подсказывает, что поставить такое на личную машину сотрудника - риск быть набутыленным этим же сотрудником в любой момент, когда это вредоносное по заскринит или спиздит любые персональные данные. А машина скорее всего личная сейчас на удаленке. На рабочую машину разве что можно, твое право, но от такого шизоидного вахтерства уйдет любой адекватный человек сразу же.
>>1679732 >На рабочую машину разве что можно, твое право, но от такого шизоидного вахтерства уйдет любой адекватный человек сразу же. Что шизоидное вахтерство поддержу, но такая ебала есть очень много где, и много людей вынуждены так работать, особенно те, кто изначально до ковида сидели на удаленке. Реальное есть много компаний, которыми рулят люди из 80-х.
>>1679738 И люди не уходят, ибо смена рабочего места всегда стресс, это потеря заработка на месяц минимум, плюс многие люди понимают, что по скиллам не потянут, а еще на самом деле есть примерно процентов 50 омежных куколдов, которым это норм. Как и постоянные переработки и т.д., они даже не считают это чем-то таким.
>>1679738 Всё это подглядывание по факту - бесполезная хрень. Нужно нанимать человека, чтобы он смотрел. Да не простого вахтёра, а который бы понимал, что там происходит - лишние траты, лишний геморрой. Или самому время тратить, что для двигающегося кабанчика - бред и ненужное занятие. Блэт, это только извращенец и мог придумать - чтобы людей в напряжении держать и то первое время, а потом привыкают.
А ещё если учесть, что тут не машинистки работают и порой надо почилить-позалипать в думах, то чё как вообще? Та же помидорка-стайл требует регулярного отдыха. И что? Потом это сотруднику предъявлять - типа он в ютуб смотрел на работе? Ну охуеть теперь.
>>1679754 >Всё это подглядывание по факту - бесполезная хрень. Согласен полностью, но я охуел, когда узнал, сколько фирм пользуются такой хуйней. Как мне объяснил кабанчик, это нужно не для того, чтобы смотреть, чем там реально гребцы занимаются, а чтобы когда нужно будет человека выкинуть на мороз без выходного пособия, был аргумент. Который легко создать имея вот эти самые записи.
>а потом привыкают. Чисто создание атмосферы страха. Бывает, правда, что и за гит предъявляют. Как вон на хабре чел писал, что его привели к боссу и сказали от руки (!) на бумажке номера коммитов записать (sic!).
>>1679763 >чтобы когда нужно будет человека выкинуть на мороз без выходного пособия, был аргумент Как-то не уверен, что суд этот аргумент примет в случае чего. В ТК вроде нет таких требований, чтобы разработчки без остановки код писал.
>>1679787 >В ТК вроде нет таких требований, чтобы разработчки без остановки код писал. Нету, верно. А вот если ты на полчаса допустим, вк или ютуб открыл - это вроде как вполне основания для выговора. А там как, выговор, строгий выговор, увольнение. Типа спалил пацана пару раз по скриншотам - он у тебя на удочке, уже бунтовать не станет, когда ты ему скажешь в пятницу перед релизом до 12 ночи сидеть.
Знаю парней, гребут на околомусарской конторе, занимаются дактилоскопией. Склад характера собственника и руководителя конторы соответствующий сфере деятельности. Там не то, что скриншоты, там над каждым рабочим местом установлены камеры, фиксирующие сотрудников. На фирме установлены штрафы. Например, один пацан уснул рабочим месте, хуяк - штраф 5,000 рублей, ну а че ФОТ оптимизировать как-то надо? Новая яхта сама себе не купит.
Пацаны вынуждены из толчка капчевать, это единственное место, где камер нет. Так вот и живут.
>>1679818 А если они попробуют уволиться - их в лесу закопают? Или у них такая ничтожная квалификация, что после этой работы разве что в дворники идти?
>>1679826 >А если они попробуют уволиться - их в лесу закопают? Почему, з/п рассчитают и до свидания. Там очередь новых стоит.
>Или у них такая ничтожная квалификация, что после этой работы разве что в дворники идти? Высокой квалификации там не требуется, плюс есть технические вузы да и специалистов полно еще со времен союза.
>>1679832 >Почему, з/п рассчитают и до свидания. И нахуя в такой помойке сидеть? Все что угодно будет лучше этого. >Там очередь новых стоит. Эта очередь из продавцов пылесосов, которые получили справку о прохождении курса за 100500 шекелей и теперь всем рассказывают, что уж они то программисты? Из тобою описанного никакой человек туда не пойдет при наличии выбора, а выбор в этой сфере пока еще есть и очень большой. Не верю я, что такие существуют, тем более целыми очередями.
>>1679847 >И нахуя в такой помойке сидеть? Все что угодно будет лучше этого. Потому что там платят немного больше, чем в соседних конторах и намного больше, чем на заводе. А работа там - это электроника + лоу левел стафф на с/с++ и асме. Если не там, то на завод за 40к станки настраивать. А тут все-таки в теплом офисе с кофе-машиной и за компом, а не в цеху с выбитыми окнами в грязной робе поверх рубахи. Согласись, есть разница.
>Эта очередь из продавцов пылесосов, которые получили справку о прохождении из студентов, только что окончивших технический вузик регионального миллионника, которые ниче кроме сишки и паскаля не знаю, а мамка с папкой оплачивать съемную квартиру и еду как-то не горят желанием. Понимаешь? Дети богатых родителей в ИТ не идут. А если родыки не богатые, то долго держать тебя на шее они не будут.
>Не верю я, что такие существуют, тем более целыми очередями. Существуют. А еще существуют люди, которые живут в кризисе с 14 года и просто-напросто панически боятся потерять работу: у них очень узкая специальность, понимаешь? Таких контор всего-то несколько штук на всю Россию, это не ПХП, где потеряв работу, ты за неделю найдешь новую, похуй корона, не корона, ты завтра будешь снова гребсти, даже в условиях анальной оккупации, пока есть интернет, ты свои $5/h заработаешь. Тут немного по-другому.
Прошло 5 лет, как я прогаю на php и сегодня я впервые установил и настроил XDebug. В докере. На удивление, вроде без пердолинга встал и даже работает, я в шоке
>>1681416 А что в нём такого? Как-то ставил, но ничего кроме красивого вардампа не использовал. Есть у него какие-то наиболее полезные фичи, а то ради вардампа влом конфиги пхп ковырять.
>>1656450 (OP) Хех, помню я еще где-то в 7-8 классе сюда пробрался, наполненный уверенностью что скоро стану погромистом и буду загребать бабло лопатой. Прошел двачерский учебник похоже что он совсем не изменился с того времени, после чего меня угораздило посмотреть на настоящий php код какого-то сайта, я охуел, обосрался и больше в программирование не возвращался, при всем при этом поступил в айти шарагу и думал что когда-то начну изучать прогерство, лол. 6 лет выходит прошло, а ощущение что даже шапка почти не изменилась. Шарагу уже заканчиваю, через неделю сдача диплома, одногруппники уже миддлы, а я 4 года занимался хуй пойми чем и так и не начал ничего изучать. Подумал я на днях что не очень то хорошо будет всю жизнь мешки грузить, а с моим дипломом особо других вариантов нету, буду начинать заново походу, пожелайте удачи долбоебу, земля пухом.
>>1681736 Ну в редких случаях пользуюсь - когда странное поведение присутствует. Когда сам чёто пишу - вообще не приходится пользоваться. Оно либо ошибку синтаксиса выдаст, либо работает сразу.
Сейчас на каждый пук бросается исключение и стектрейс выводится. Толку от вардампа?
>>1681732 Если до сих пор не вкатился, скорей всего тебе это и не надо, что за двухбитное мышление - или программист сверхразум 300к\наносек попивающий смузи в офисе или говночист и обслуживатель, видимо поэтому толпы зумеров и идут в ит - методички не поменялись, в свое время бумерам вдалбивали мысль стать офисными работниками всех мастей.
>>1682046 Смотря на каком уровне работать собираешься. Если писать под неё и поддерживать, то надо учить и пхп, и жс, и саму архитектуру жумлы. Если просто сайтики делать из того, что есть, не не надо - это ж CMS, тут мышкой можно. Правда таких мышевозов - по 30 школьников на копеечный заказ.
>>1682080 мне нужна регистрация,личный кабинет для каждого юзера в котором нужно совершить действие(думаю придеться допилить).из коробки там есть простой конструктор,я смотрел темы-все они перегруженное говно мож друпал?
>>1682105 мне импонирует,что в ЦМС не так много дрочева с фронтом,а я полный ноль в этом,пхп я хоть имею представление о языке. мне всего то надо пару блоков для описания и картинки,вверху пару менюшек и кнопка авторизации и регистрации. все шаблоны в магазине для меня избыточны,но мож я хреново искал
>>1682116 От сложности зависит же - чего закажешь.
Пчел, если тебе надо для дела и побыстрее, то учить всякую срань - не вариант вообще. Либо сразу садишься и васянишь - лишь бы работало, либо нанимаешь человека. Третьего не дано.
>>1681458 Дебаггер позволяет гораздо быстрее отлаживать. Тебе не надо писать все эти вардампы, логи на каждый пук. Ты просто ставишь точку останова, запускаешь код и тут же видишь все состояние программы реалтайм. Особенно полезно, когда тебе надо посмотреть потроха какого-то объекта, куда без смазки так просто не залезть.
>>1681736 > level 1: неделю разбираешься, почему программа не работает. Понимаешь: syntax error. > level 2: отличаешь ошибку синтаксиса от других типов ошибок. > level 3: видишь ошибки синтаксиса ДО запуска программы. > level 4: освоил var_dump(). > level 5: впервые написал программу длиннее 1 килобайта так, чтобы там не было ошибок. > level 6: обнаружил, что ошибки выводятся не только на экран, но и в логи и даже хранятся там. > level 7: впервые нашел сложную ошибку путем последовательных var_dump'ов через каждую строку. > level 80: прогал 2 часа, написал 50 классов, впервые запустил проект, охуел от того, что все идеально работает без каких-либо ошибок. > level 90: исправляешь ошибки в фреймворках и либах. > level 100: коммитишь в ядро php.
>>1682205 > прогал 2 часа, написал 50 классов, впервые запустил проект, охуел от того, что все идеально работает без каких-либо ошибок. Жиза. Постоянно себе пеняю за то, что сперва много пишу и только потом проверяю. При каждом запуске очко сжимается в ожидании часов отладки, но как-то жидко проносит.
>исправляешь ошибки в фреймворках и либах Придирчивый стал до внутренностей всяких либ, что пиздос. Если код не по мне - не ставлю звезду.
>>1682205 >> level 80: прогал 2 часа, написал 50 классов, впервые запустил проект, охуел от того, что все идеально работает без каких-либо ошибок.
Это так и должно работать когда ты максимально описываешь всё типами, структуры у тебя это не неймлес массивы а классы, остаются только логические ошибки, для них тесты пишешь. И внезапно пропадает тот страх, когда боишься поменять одну строчку в коде потому что думаешь что всё сломается.
>>1681968 >Если до сих пор не вкатился, скорей всего тебе это и не надо, что за двухбитное мышление - или программист сверхразум 300к\наносек попивающий смузи в офисе или говночист и обслуживатель Это не двухбитное мышление, для меня это суровая реальность. Образование уже не поменяю, даже каким-то продажником стать не смогу из-за дефектов речи и охуенных коммуникативных навыков, тут либо IT либо говночист. За деньгами не гоняюсь, это вообще последнее дело для меня
>>1682238 Не слушай его, мне вообще было похуй на погромирование, после универа начал вкатываться только ради денег, а потом со временем всё больше и больше начало нравится, я настолько аутистом стал что вместо анимы смотрю разные доклады и презентации
>>1681732 Дисциплина бро, нужны конкретные сроки и конкрентые цели, сделай пару проектов для портфолио и ищи работку джуном, висеть в вакууме дома и что-то учить очень сложно дольше 3-5 месяцев, ну примерно.
Выводить кусок текста рядом с ошибкой можно несколькими способами:
- можно при поиске получать позицию найденного фрагмента текста, для этого надо смотреть мануал по preg_match_all. Имея позицию символа с ошибкой, мы можем вывести часть строки вокруг этого места - можно делать замену так, чтобы ошибочное место было окружено скобками или какими-то символами. Например, "жы" заменяем на "[жы]" и выводим текст - можно доработать регулярку, чтобы она искала не только место с ошибкой ("жы") но и несколько любых символов до и после. Тогда при нахождении будет выводиться как раз кусок строки вокруг ошибки.
Можно сделать регулярку, которая ищет ровно 1 цифру, и любое число минусов, скобок, пробелов после нее. А затем взять эту регулярку в скобки и указать повторение 10 раз: (одна цифра и символы){10}
>>1682276 >Для работы с вебсокетом можно либо использовать сторонний готовый демон, либо делать свое решение с использованием библиотек вроде ReactPHP. лучше не надо
Аноны, я тут залетный. Срочно нужна хелпа. Суть вопроса: мне нужно скомпилировать файс с кодом программы в исполняемый файл на винде. Использую MinGW x64, компилятор gcc. Сделать это нужно из php скрипта. Вызываю shell_exec() и передаю туда строку с путем компилятора, именем файла с кодом и выходным имеенм файла. Если эту же строку скопировать и вставить в cmd, то все работает так как нужно. Но если я делаю это из shell_exec(), то вылетает пикрил1. При чем, если я в shell_exec() передам "gcc --version", то он так же работает норм и выдает пикрил2. Уже не знаю что делать. Хоть винду переустанавливай.
Если тебе нравится Яваскрипт, то что ты забыл в этом треде? Переубеждать тебя никто не будет. PHP вполне решает задачу разработки бекенда веб-приложений. Также, есть статья и про твой яваскрипт с питоном: https://habr.com/ru/post/315152/
Тестирования на JS вопрос! В Jest'е пытаюсь затестить свою обертку над axios. Ничего не получается. В тестировании новичок, как и что мокать непонятно, особенно axios.create() и axios.interceptors.
>>1684001 Конвеншион овер конфигурэйшион - это ларавель, но ты должен придерживаться правил, что в какой папочке должно находиться. Симфони - все настраевается, но настроек охулиард и легко поломать: у тебя может падать сервис потому что зависимость через зависимость через зависимость через зависимость отсутствует или не настроена и хер поймешь.
Господа, подскажите как правильно реализовывать проверку прав доступа RBAC? Есть у меня объект user, у него есть роли и разрешения. И допустим я хочу что бы кнопка "загрузить" была доступна только пользователю с ролью "admin". Дайте инфы или код - как принято делать такие вещи правильно и опрятно. А то у меня естественно мозгов на большее чем допустим такое в контроллере - if(! isset( user->permission->download)){ //доступ к кнопочке запрещен return/редирект / и т.п. }
Хм, есть тут такие ебланы как я? "Вкатываюсь" уже 3 года. 1 год "вкатывался" во фронт JS пинал хуи на остоебеневшей говноработе. Уволился слава Будде, жаль не лет на пять раньше, походил по мухосрани и понял что со своим JS/react уровня около ноль я могу идти на хуй,и вкатился в другую ламповую работку гос-шарага где ультра-лайтовые условия. Там уже освоил пистон кое как, sql, пхп и ноду. На пхп запилил приложуху для шараги и несколько скриптов которые регулярно исполняются в базе. На ноде пишу всякие невнятные парсеры авито с сохранением данных в базу,в штаны, к Аллаху за пазуху. Но все это у меня уровня хобби. Фактически я не вкотился. Код - говнокод. Коммерческой разработки нет. Ответственности тоже нет особой. И блядь никакой предпринимательской жилки, уже года полтора как, имея такую хорошую работку, я должен был копротивляться на дно-фрилансе, набивая опыт - шишки. Но сейчас уходить с нынешней работы - вообще не хочу. Если бы не оклад в 40 косарей - прям идеальная работа.да и эту зп могли бы поднять, если бы я активнее писал на пхп - задачи есть.
Короче годы прошли в битвах с прокрастинацией, инертностью и зоной комфорта. И не смотря на то что я таки что то научился пилить, считаю что я пример как раз тех вечно-вкатывающихся. Аноны , все таки сосредоточьте ваши усилия на дисциплине и целеустремленности. И дайте совет как мне поступить, что делать? Это с учетом того что увольняться сейчас точно не хочу, а времени свободного на работе много. Фрилансить? Удаленку для джуна типа меня искать? Или вкатываться в какое то сообщество где что то пилят, и где код-ревью сделают, чем то помогут? Такие вообще существуют?
Можно как в Симфони: сделать сервис для провекрки наличия прав, в который ты передаешь юзера и константу действия. А в базовом контроллере или трейте сделать метод isGranted(действие), которое берет текущего юзера и через сервис проверяет права. Еще можно сделать метод denyAccessUnlessGranted(действие).
Справедливости ради, можно сделать cache:warmup, если я не путаю, это заставит Симфони попытаться скомпилировать контейнер и как минимум проверить, что конфигурация правильная. Это конечно не исключает ошибки уже в самом сервисе, но сообщения об ошибках обычно понятные и сразу ясно, в чем проблема.
Не знаю. Можешь попробовать фреймворк еще освоить какой-нибудь. Если ты будешь разбирать код компонентов Симфони, то может быть, чему-то научишься. Если не знаешь ООП, то в учебнике из шапки есть глава по ООП, а тут https://github.com/codedokode/pasta/ есть всякие статьи про паттерны и архитектуру.
>>1684167 Тут ты прав. Нужно выползать из зоны комфорта. А то сейчас у меня прогинг - хобби просто, ответственности никакой.
>>1684270 >>Можешь попробовать фреймворк еще освоить какой-нибудь Я плотно использую slim, eloquent, sentinel и всякую бороду из либ. Буду в ларочку въезжать. ООП знаю, "знаю" громко конечно звучит. Пишу на классах.
Вопрос по уроку ОП о шаблонах. Там на стадии "Умник" есть шаблон, в котором какая-то псевдо-управляющая констукция внутри тегов <if></if>. Я не могу понять принцип ее взаимодействия с функцией super_mega_template_engine(). Кому не лень посмотреть и вкратце растолковать, как все работает? Или может работать в принципе - сама функция ведь не показана, потому можно только догадки строить. Ссылка: https://github.com/codedokode/pasta/blob/master/php/templates.md#%D1%83%D0%BC%D0%BD%D0%B8%D0%BA
Кто-нибудь проектирует тут в yii2. Тут недавно интервью было с SamDark-ом, где он говорил что нельзя писать бизнес логику в моделях наследующихся от ActiveRecord и контроллерах. Где их размещать тогда?
>>1684699 >Тут недавно интервью было с SamDark-ом С пробуждением. Именно из-за того, что приходится явно говорить такие очевидные вещи AR считается антипаттерном уже многие годы. Ну а толстые контроллеры это даже не антипаттерн, а роспись в профнепригодности. >Где их размещать тогда? В сервисном слое.
>>1684699 Такие вопросы у тебя из-за того, что ты получил следствие без причины. "Модель" в юии это не "модель" из MVC, это просто неудачное название, по факту это интерфейс для работы с записью в базе данных. И для этого юии, собственно, и нужен - для максимально быстрого и удобного протаскивания этого интерфейса работы с записью в базе данных до конечного пользователя. Если это именно то, чем должно заниматься твое приложение, то бинго, юии идеально выполнит твои задачи.
Но бывают ситуации, когда получение и сохранение данных это лишь начало сложного и запутанного процесса вычислений. И тут юии, который все это время вел маленького программиста за ручку, бросает его. С одной стороны все логично, в документации описано как работают фичи фреймворка, и нахуя описывать то, что он не делает, это ведь не курс по программированию. С другой стороны дока юии это именно способ написания приложений, и наш маленький программист именно по ней научился их писать. Соответственно он использует то, что видит. А видит он контроллеры, формы и "модели". Туда и попадает весь код, который покаким-то причинам не вписывается в концепцию юии. Надо ли понимать, что через некоторое время этот проект ждет смэрть, а разработчиков юии гневные посты на форуме.
Вот вкратце причина. Собственно это все обсосано по сто раз на форумах юии. Хороший пример Елисеев, который постепенно эволюционировал от курсов "как генерить формы на юии" к курсам по созданию самописного фреймворка, использованию DDD и PSR. Рекомендую именно его почитать, чтобы немного проветрить мозги.
>>1684780 Охиутельный совет про "сервисный слой" конечно поможет больше. С тем же успехом посоветовал бы писать "не в модели и не в контроллере".
Как разбить юии приложение на слои? Сколько должно быть слоев? Как слои между собой взаимодействуют? Что к какому слою относится? Что называть сервисом? Чем сервис отличается от модели? И, самое главное, нахуя вообще слои и сервисы нужны? Это тема блядь на несколько хороших книг.
Я не просто посоветовал кого читать. Я объяснил почему нужно читать, показал первопричину. Объяснил что необходима эволюция взгляда на код и фреймворк, которым пользуешься. И рассказал, что автор, которого цитировал анон, SamDark, через это тоже прошел. Рассказал что есть куча обсуждений подобных проблем с разработчиками фреймворка на офф форумах. И только в самом конце рассказал что есть блог, в котором расписано это все от и до.
По моему это гораздо лучший совет, чем "ну в классе код пиши, хуе мое".
Аноны, подскажите вот что, не могу понять. Допустим я записываю в бд пароль пользователя в виде хэша с солью. Соль - рандомная строка. Как потом проверяется при аутентификации пароль пользователя, если соль с которой он регестрировался - рандомно-уникальная?
"Сервисом" часто называют класс, объект которого существует в одном экземпляре и не представляет какую-то сущность, а предоставляет методы для решения каких-то задач.
Например, User - это сущность (со свойствами email, pass_hash, blocked итд), а RegistrationService - это сервис, решающий задачу регистрации пользователей. У него могут быть такие методы:
Заметь, что сервис не имеет дела с Request/Response/куками/сессией/HTTP-заголовками - это задача контроллера. Благодаря этому сервис можно вызывать даже из CLI скриптов, где нет никаких реквестов.
Также, я не советую называть сервисы по имени модели. Лучше по задаче, которую они решают. Иначе у тебя будет гигантский UserService, который один решает кучу задач.
Аноны, как подходить к разработке на Ларавель? Пишу себе пет: сделал минимальную маршуртизацию на админку, на главное приложение, определил моделей штук 5 реально доделана только 1, под них миграции, начал работать с шаблонами и вконец запутался. Т.е. у меня почти никакого функционала не готово, кроме вывода категорий, куча наработок на и я в них уже тону. Всё сделано на 20-50% и приходится прыгать по файлам всего проекта, дописывая то тут, то там понемногу. Есть подозрение, что дальше я так совсем зароюсь.
Что в первую очередь надо писать админку или публичную, какие этапы? У гугла чёто ничего толком не нашёл.
>>1685489 Тупо ебашь дальше. Тебе просто опыта не хватает. Через полгода будешь смеятся как ты в 5 моделях запутался. Как добъешь проект может быть смысл просмотреть какую-то книгу по ларавелю - тут идея в том чтобы столкнуть твое сложившееся представление о фрейморке с каким-то другим и на конфликтах можно неплохо прокачаться.
>>1685827 Щитаю, что такая характеристика неприменима к сайту. Такое максимум лендосу пойдёт, но не функциональному сайту. Лучший дизай - тот, который не видно. (с)
>>1685880 Дизайн не должен отвлекать от функционала. Сам посмотри на наиболее посещаемые ресурсы 2ch - минимализм везде. Разве только с цветами играются. А вот где наворотов фронтендовских куча, так это посадочные всякие, авторские блогите же лендинги по сути, какие-то тематические сайты. А вот форумы, социалки, админки, прочие сервисы - с минимальным оформлением.
>>1685316 Бля, ну это тот случай когда простота хуже воровства. Ты насоветовал полной хуйни, еще и Фаулера вырвал из контекста.
>"Сервисом" часто называют класс, объект которого существует в одном экземпляре Это определение хорошее, но из него не следует почему должен существовать сервисный слой. Сервисы, подходящие под это определение, могут быть и в доменной модели, и в обработке http запроса.
>Например, User - это сущность (со свойствами email, pass_hash, blocked итд), а RegistrationService - это сервис, решающий задачу регистрации А вот это опреление хуевое. Наличие свойств никак не говорит, что объект стал сущностью. У сервиса точно так же могут быть свойства, определяющие как он будет работать.
>У него могут быть такие методы: Тут полный треш. С какого-то хуя сервис регистрации не регистрирует пользователя, а создает и удаляет. До кучи еще и блокирует, и его можно использовать для валидации логина. А хуй подрочить и кофе заварить сервис регистрации может?
>Заметь, что сервис не имеет дела с Request/Response/куками/сессией/HTTP-заголовками Это утверждение никак не следует из предыдущих. Схуяли он не имеет с ними дела? Для логина пользователя, например, нужно создать и прочитать куку. Кароч надуманная хуйня.
>Также, я не советую называть сервисы по имени модели. А я не советую писать ебанутую приписку Service везде. А то ты ведь забудешь что это сервис не дай бог. UserRegistration или RegisterUser гораздо лучше выглядит.
>Также, "сервисный слой" описан в книге Фаулера про паттерны: И вот тут самый жесткий обсер. Ты и сам обосрался и человеку жизнь основательно подпортил. Всю дорогу твой тейк в том, что бизнес логику нужно хранить в сервисном слое, и вот ты показал откуда этот бред вычитал. Фаулер конечно человек авторитетный и хуйни не напишет. А дело все в том что по ссылке только начало главы про сервисный слой. Там не написано что же блядь делает доменная модель если вся бизнес логика в сервисах. Просвещайся, вот тебе полная глава из книги https://www.informit.com/articles/article.aspx?p=1398617&seqNum=4
Если вкратце, то сервисный слой это всего лишь обертка над бизнес логикой доменной модели. Транзакции, уведомления, workflow - вот что находится в сервисном слое. Если взять твой пример с регистрацией пользователя, то в сервисном слое будет открытие и закрытие транзакции в бд, логи для графаны и отправка сообщения в рэббит. А в доменной модели будет собственно процесс регистрации. Все по Фаулеру.
Аноны, может кто поможет. У меня трабла с нодой, но в сущности и с пхп получается. Суть такова:
Короче разобрался. Все упирается в ошибку 'Error: Too many connections' - слишком много соединений с базой. Использую mysql2, с пулом коннектов равным 10.
И теперь объясните пожалуйсто мне дауну как правильно работать с базой данных?
Очевидно что нормальные приложения не зависают к хуям после 10 запросов к базе данных. Приложения поддерживают тысячи пользователей одномоментно, и от этих пользователей идет множество запросов к базе данных. И все это работает.
Означает ли пул в 10 коннектов то что в не более 10 запросов одномоментно в sql базе может исполняться? И что остальные запросы ждут пока эти 10 исполнятся где ждут? самому очередь формировать?? У меня ошибку 'Error: Too many connections' выдает даже если я просто рефрешу страницу - там простой код который несколько статей из базы достает. Неужели я где то так обосрался что эти мои простенькие sql запросы где то в базе залипают? Я вроде соединение освободжаю в коде.
Очевидно я дебил , но объясните как это должно нормально работать? Ощущение у меня что я люто обосрался по фундаментальному пониманию. На пхп тоже есть пет проект. В нем я с данной ошибкой не сталкивался. Но возможно просто потому что и не нагрузил его нормально. PDO само освобождает соединение по выполнению скрипта. Но логика таже? Не более, допустим 10 коннектов к базе?
Где почитать как пхп взаимодействует с базой под нагрузкой, и как база под нагрузкой работает?
В СУБД есть ограничение на число одновременно сделанных соединений. Либо у тебя этот лимит очень маленький (меньше, чем размер пула), либо ты неправильно реализовал пул, он создает постоянно новые соединения, не закрывая, и упирается в лимит.
Пул (правильно реализованный) нужен для 2 целей:
- не тратить время на установку соединения, а взять готовое из пула - защитить БД от перегрузки, притормозив бекенд, если все соединения в пуле заняты
Есть у пула и недостатки. Если кто-то вернет в пул соединение в неправильном состоянии (например, с открытой транзакцией), то будут баги.
В PHP пул обычно не исопльзуют и создают новое соединение при старте скрипта и закрывают по завершении.
>>1686679 Тут дело не столько в самом пуле, сколько именно в работе ноды. Пхп однопоточный, и когда ты делаешь запросы через PDO ты всегда будешь использовать одно соединение, даже если есть пул. А вот нода асинхронная и многопоточная, так что когда ты вызываешь запросы в цикле они выполняются параллельно, используя все доступные соединения из пула. Например пул на десять соединений, ты делаешь двадцать запросов в пхп. Берется одно соединение и запросы выстраиваются в очередь на использование этого соединения. Ты делаешь двадцать запросов в ноде. На каждый запрос берется соединение, а кому не досталось становятся в очередь и ждут, когда соединение освободится. Но это не объясняет откуда у тебя ошибка 'Error: Too many connections'. Возникнуть она может если твой пул больше доступного в MySQL количества соединений. Выполни запрос SHOW VARIABLES LIKE 'max_connections'; и посмотри че там по количеству. Дальше сам решай уменьшить пул или увеличить значение в MySQL. И еще. Выполнение запросов в цикле это хуевая тема, хоть нода и делает их параллельно. Если тебе нужен список, то получай его одним запросом, а не по одной записи.
Спасибо большое за ответы. Я по итогу разобрался. Я накосячил с реализацией пула в ноде- на каждый обработчик роута я создавал по пулу в десять коннектов, естественно спамя страничку через f5 я все лимиты превышал.
>>SHOW VARIABLES LIKE 'max_connections' Это проверял. >>Выполнение запросов в цикле это хуевая тема Нет, sql запросы конечно не в цикле.
> Например пул на десять соединений, ты делаешь двадцать запросов в пхп. Берется одно соединение и запросы выстраиваются в очередь на использование этого соединения.
В PHP (без пулов), если сделать 20 запросов к серверу, запустится параллельно 20 копий скрипта, они откроют 20 соединений и будут выполнять SQL запросы по очереди каждый в своем соединении. Защитить БД можно ограничением числа воркеров PHP (либо ограничить число передаваемых запросов на nginx), тогда лишние HTTP-запросы будут вставить в очередь.
> Ты делаешь двадцать запросов в ноде. На каждый запрос берется соединение, а кому не досталось становятся в очередь и ждут, когда соединение освободится.
Это очень странный паттерн, я думаю, лучше выполнять запросы по очереди в одном соединении.
>>1686990 я вообще другой анон,просто увидел тему про клонирования,вообще не в курсе такой фичи. я что то подобное давно слышал в ньюфаге,но там сказали что для этого есть Эрланг
>>1686977 >>Это очень странный паттерн В ноде судя по всему обычное дело. Что бы экономить время на открытие/закрытие коннекта к базе, и что бы не создавать очередей. В сбалансированном состоянии в соответствии нагрузка/открытые коннекты видимо выигрыш имеет место быть. Нода нужна в сущности для в некоторой степени специфических задач.
>>1686977 >В PHP (без пулов), если сделать 20 запросов к серверу Я имел ввиду работу именно одного скрипта.
>Это очень странный паттерн, я думаю, лучше выполнять запросы по очереди в одном соединении. Смотря для чего. Представь, что тебе нужно перебрать таблицу на десять миллионов записей. В десять потоков это все выполнится гораздо быстрее.
Чет я затупил с установкой хомстеад для ларавел на win7. Скачал виртуал-бокс, вагрант - поставил.
ДАлее выполнил команду - vagrant box add laravel/homestead
Полтора часа что то качалось, и наконец залилось. Но где мне найти то что залилось?
Далее по иструкции идет следующее:
Installing Homestead You may install Homestead by cloning the repository onto your host machine....... Нужно скоприровать с гита пакет git clone https://github.com/laravel/homestead.git ~/Homestead
Это все это альтернативный вариант установки? Типа могу командой vagrant box add laravel/homestead, а могу сам качть с гитхаба?
> Представь, что тебе нужно перебрать таблицу на десять миллионов записей. В десять потоков это все выполнится гораздо быстрее.
В общем случае это плохая идея. Как правило, полный обход таблицы СУБД делает так: читает файл с данными таблицы с диска последовательно и отбирает нужные строки. То есть она упирается в скорость чтения с жесткого диска. Распараллеливание тут никак не поможет: несколько параллельных процессов СУБД будут конкурировать за доступ к диску, больше ждать и в итоге все станет медленннее.
Распараллеливание запросов может иметь смысл, если мы упираемся в CPU (чтобы нагрузить не одно ядро, а несколько), либо если мы шлем запросы параллельно на разные сервера.
Плюс, делать в вебе запросы, требующие обхода миллионов записей, плохая идея сама по себе.
Да, в PHP SQL запросы выполняются последовательно, но это вполне работающий подход, так как эти запросы обычно простые и выполняются быстро, и сам PHP скрипт работает короткое время.
По идее, ты должен изучить хотя бы в общих чертах, что такое Homestead, а также освоить основы командной строки в Линуксе.
> Это все это альтернативный вариант установки?
Похоже, что так.
> Но где мне найти то что залилось?
Можно попробовать открыть настройки Виртуалбокса, и посмотреть, добавилась ли там виртуальная машина. В ее настройках посмотреть, где хранится образ жесткого диска. Чтобы увидеть его содержимое, надо зайти по ssh в виртуальную машину (либо залогиниться через окно машины в виртуалбоксе).
В крайнем случае, найти файл Homestead можно командой линукса find / -name 'Homestead.yaml'
>>1687750 это к слову. Вообще я о ларавел и о хомстед. До этого просто пробовал развернуть ларавел, как допустим приложуху на слим. Но чет не разернулось нихуя нормально или развернулось но что то постоянно глючило, я забыл уже. Тут хоть работает.
>Мы должны сконцентрироваться на улучшении поддержки долгоживущей (long-running), асинхронной модели исполнения, ориентированной на микросервисы. Вероятно, не секрет, что одной из главных причин популярности Node.js является его умение очень эффективно обрабатывать огромное количество одновременных подключений, генерирующих относительно лёгкие запросы. Это хорошо соответствует особенностям современных микросервисных архитектур. Есть уже несколько проектов, которые реализуют в PHP аналогичную функциональность, например, ReactPHP и более свежий Swoole.
Но главная проблема в том, что большинство операций ввода-вывода в PHP не поддерживают асинхронное исполнение. Я считаю, нам нужно добавить как можно больше поддержки асинхронного ввода-вывода в различных расширениях и потоках, чтобы расширить круг задач, где имеет смысл применять инструменты типа Swoole. Точнее, нужно предложить авторам расширений механизмы, которые те могли бы использовать для реализации опциональной асинхронности своих расширений/функций, не делая всю работу самостоятельно. Мы уже провели некоторые исследования в этом направлении, и нужно сделать гораздо больше, но я оптимистично настроен. Возможно, для решения этой задачи мы возьмем libuv, и, возможно, перепишем или отрефакторим некоторые части системы PHP-потоков.
Нормально ли отдавать редирект в контроллерах? Например по ид поста - отдавать редирект в тред, в соответствующем контроллере. Вообще есть ли с ним подводные камни которые стоит знать?
Анон, нужна помощь. Есть скрипт, который срабатывает каждые 5 сек, он добавляет в txt файл, с ограничением в 10 строк, определенный текст из постоянно обновляющегося $item. Но сейчас, он просто дублирует его на все 10 строк. Как сделать условие, чтобы одинаковый текст из $item не дублировался, а добавлялся лишь 1 раз? Код на пикрил
Как тестировать консольную команду Laravel, если я ее разрабатываю как пакет, то есть, фреймворк у меня не установлен и есть только в зависимости composer?
Да и вообще, вопрос не только про консольную команду. Как тестировать любую хуйню в ларавеле без инициализации самого ларавеля?
>>1688805 Покажи как у тебя происходит запись в $item. Судя по тому что в скрине, ты пытаешься вложить массив под определённым ключём, и если у тебя массив $item добавляет что то новое в конец массива, а не в начало, то будет как у тебя. Варианта решения два: Первый, в массив $item записывать данные в начало массива, что бы при этом в нём же изменялась нумерация. Второй с помощью for постоянно перебирать массив $item.
Наверное немного не по теме вопрос, но все же. А как ютуб отдает видео на клиент? Посмотрел хтмл, и там для видео такой урл "blob:https://рандомный урл". Погуглил, что такое blob, но ясно так и не стало. В чем преимущество такого подхода, а не, например, просто с сервера mp4 отдавать?
Извиняюсь за то что в пхп тред пишу. Но тут есть аноны которые в ноде разбираются. Столкнулся с такой странной штукой, которую я не понимаю. Вот при таком конфиге:
const express = require('express'); const passport = require('passport'); //если закомментить - будет ошибка req.logout is not a function, а console.log(req.logout); вернет undefined
const app = express(); app.get('/', (req,res)=>{ _console.log(req.logout); //возвращает [Function] _req.logout(); //откуда это блядство? Откуда этот метод. И как он тянется из passport _res.end('end'); });
app.listen(3000, function () { console.log('Example app listening on port 3000!'); });
Аноны, разверните у себя такой конфиг, проверьте пожалуйста, кому не лень. req.logout - метод не стандартный, его нет в дефолтном объекте req. Как он тянется?
>>1689540 >Через прототип, не? Ну технически то его можно подтянуть. Но как то странно что фремворк express захардкоден получается на либу passport. И по идее все что меняет объект запроса req должно подключаться в мидлвэйрах. Может я ошибаюсь конечно. Но мне эта тема мозг вынесла.
>>1689568 >фремворк express захардкоден получается на либу passport Так-то наоборот, это passport зависит от express. Он отдельно никому не сдался без экспресса.
>все что меняет объект запроса req должно подключаться в мидлвэйрах Не должно - у мидлвари другая задача.
>>1689576 >>Так-то наоборот, это passport зависит от express. Тут ты прав конечно, но я не о том.
>>Не должно - у мидлвари другая задача. Дока; Функции промежуточной обработки (middleware) - это функции, имеющие доступ к объекту запроса (req), объекту ответа (res) и к следующей функции промежуточной обработки в цикле “запрос-ответ” приложения. Следующая функция промежуточной обработки, как правило, обозначается переменной next.
Ну в контекте экспресс работа с req, res - одна из основных задач. Впрочем это не суть. Видимо это не я пизданулся, что у меня объекты методами просто так обрастают. Это express зачем то слегка отступил от своей парадигмы. Пасспорт меняет объект запроса без мидлвэйра, а сами фактом своего подключения к странице.
Эта сомнительная "техника" называется Monkey-patching. В Руби он рейлс, по моему, тоже такое применялось, когда ты подключаешь одну библиотеку, то она меняет или добавляет что-то в другую. Это плохой подход, так как сильно запутывает восприятие кода и добавляет побочные эффекты.
>>1657272 Не слушай этого >>1667623 Современный PHP - это Laravel и Symfony - в них собраны лучшие практики программирования на этом языке. Laravel по подходам ближе к Ruby on Rails, Symfony к Spring из Java. Берешь почти любой учебник по этим фреймворкам за последние 2-3 года и пролистываешь. Насчет собесов. Сам искал работу миддлом в апреле в разгар коронавирусной истерии - не было ни одного вопроса по тонкостям ПХП, зато, например, почти везде и много спрашивали по СУБД (оптимизация запросов, индексы, объектно-реляционные СУБД, шардирование таблиц и т.д.). Так что налегать надо на фундаментальные знания в первую очередь, а не на ПХП как таковой.
В php есть аналог функции ucfirst для кириллицы?Или только примерно таким образом : mb_internal_encoding("UTF-8"); function mb_ucfirst($text) { return mb_strtoupper(mb_substr($text, 0, 1)) . mb_substr($text, 1); } echo mb_ucfirst("тест\n");?
Как должно выглядеть по канону форматирование кода? Все эти скобочки, условия и т.д. А то меня всю жизнь преподы за странный формат доёбывали. Мне нравится как Visual Studio скобочки расставляет сам по себе, а если на лампочку нажать то вообще красоту делает. Оказалось что PHPStorm так не умеет. Да и вообще во всем проигрывает этому поделию от мегакорпорации Microsoft по понятным причинам, но мог хотя бы сразу подсказывать что делает функция, а то приходится сначала выбрать в сплывающем окне непонятную функцию, потом нажимать ctrl+shift+i и выискивать её назначение в комментариях. Охеренная фича была для ньюфага, больше всего спасала с посторонними библиотеками.
>>1693217 Окей, сорри за тупой вопрос, не отвечайте, в глаза ебусь. Посмотрел на первый пост, всё нормально у меня с форматом пока что. И приношу свои извинения PHPStorm, автоформат у него оказывается есть. И что бы я без двачей делал?
Появился вопрос, гугл бессилен. Скачал я с сервера папку с одним шаблоном сайта и это пиздец, но сейчас не об этом внезапно понял, что могу просто поисковиком винды находить код в файлах, а не просто файлы и папки, как обычно. Не так то проста эта функция, как кажется. Искал я определённый кусок кода и не нашёл, хотя как выяснилось, код этот был. Был он в папке с пхп файлами, тип которых - исходный пхп файл. А вне этой папки были пхп файлы с типом пхп файл и в них можно было найти нужный код. Что это за исходный пхп файл и что за нюансы с поиском его внутренностей? Это что-то с доступом связанное? Я Целый рабочий день проебал в том числе из-за этого.
>>1693910 Что за шизофазия, блядь? Поставь себе норм ide, git и не еби мозгу с файлами и их содержимым. Поисковик винды для поиска кода, охуеть вообще.
Сап. Такая проблема. Сделал панель, что при нажатии на кнопку выезжает слева на сайте. Хотел сделать как панель профиля пользователя. Но когда вставляю любой код на php (в данном случае на вывод из бд), у меня ломается код панели и кнопки не отображаются. Кнопки просто пропадают. В чем проблема?
Сап двоч. Можете посоветовать какую-то статью или объяснить как адекватно и бест практис работать с часовыми поясами в вебе? Например у нас типичный бложик, все даты создания постов я так понял лучше в UTC конвертить перед сохранением? И вопрос как их потом адекватно показывать клиенту. В жсе вроде есть toLocaleTimeString или что-то подобное, то есть браузер дает инфу о текущем часовом поясе клиента. На уровне пхп я так понимаю это сделать невозможно без каких-то хаков вроде проверки локации айпи или кук установленых жсом? И как тогда лучше всё это по дефолту показывать? Или предполагается что если у нас бложек "принадлежит" Москве (так решил клиент или разраб) то по дефолту мы время показываем тоже московское там?
Мне нужно сделать подачу заявления на сайте. Заявление сложное (заполняется на двух листах А4 мелким почерком)
Окно для заполнения я сделал. Все работает.
Но теперь возникла проблема - мне нужно чтобы оно распечатывалось в таком же виде как будто человек заполнял бумажную копию - то есть все форматирование должно быть идентично бумажному носителю (чтобы можно было электронную заявку распечатать и приколоть к делу)
Я конечно решил делать эту задачу через генерацию pdf (потому что pdf тоже нужен чтобы его в архиве хранить). юзаю fpsf
Но проблема с форматированием: 1) в итоге код - полное говно 2) приходится чуть ли не пипеткой отмерять координаты 3) все расползается по форме если вводится более длинные или наоборот более короткие данные
Есть какое-то решение? Блин просто это какой-то зашквар во времена адаптивных версток сидеть и руками набивать координаты для pdfки
(сразу, работаю в мухосрани за жалкие копейки, поэтому не придерайтесь к тому что не умею, вы за такую зп даже работать не будете)
>>1695024 В интернетах читал, что они кладут хуй на баг репорты, но мой баг имеет некое отношение к приватности/безопасности. Наверное поэтому так срегагировали
Есть простой вариант - использовать Knp snappy https://github.com/KnpLabs/snappy. Это библиотека, использующая утилиту wkhtmltopdf, которая (как очевидно из названия) конвертирует HTML в PDF.
Если бы этой библиотеки не было, то я бы посоветовал не копипастить одинаковый код, а сделать шаблон, например, в XML, в котором указываются размеры блоков, и свою систему расстановки этих блоков на странице. Но тут проще использовать wkhtmltopdf.
Что скажете за перспективы пыхи? В любом другом треде мне бы 9 из 10 человек сказали что перспективы отсутствуют, поэтому спрашиваю здесь. Сейчас по пыхе в два раза больше рабочих мест чем по любому другому ЯП, при этом если новичок спросит куда ему вкатываться - пхп не посоветует никто. По вашему мнению, будет ли дальше падать популярность этого языка? Не по экспертному мнению программистов, а вообще. Я ньюфаг, но такое ощущение что все другие программисты просто не любят пхп из-за сравнительной лёгкости вката и ограниченности его применения, из-за этого и не считают кодеров на пхп программистами и именуют их макаками. Поясните если понял что-то не так.
>>1696994 Смотря что понимать под перспективами. Есть перспектива клепать онлайн магазины всю жизнь. Пхп это дорога в один конец. Да на хлеб с маслом и даже икрой хватит, но чем дальше, тем меньше шанс перепрыгнуть на другой язык. Че думаешь все пхп макаки вдруг резко подорвались на го? В го треде спросишь, так вакансий с гулькин хуй, а когда я ходил по пхп собесам, на каждом сука заходила речь про го. Это как последняя соломинка, если тебе тридцать, начать писать реальный софт, а не формы верстать. Тут даже похуй на развитие языка какое-то. Асинхронность, многопоточность, дженерики, ридонли поля, функциональщина, пока это все введут пройдет еще пять лет. А в это время можно хуярить на ссаной джаве, делая плюс минус то же что и на пхп, но с комфортом и реальными перспективами.
>>1697789 >есть Костыльная хуйня, пока восьмая версия не выйдет ничего серьезного без анальной боли не сделать.
>не нужна, когда есть php-fpm Для вывода HTML конечно не нужна, мистер формошлеп
>дженерики почти не нужны >ридонли поля по большей части не нужны Ну тут все ясно. Нахуй я распинаюсь перед долбаебом. >>1696994 вот твоя перспектива если выберешь пыху
>>1697849 А я например вообще питонист. И все эти тухлые претензии к пыхе не то что плесенью поросли, а уже просто говном. Годы идут, а банальные вбросы не мегяются. У того же питона при этом насущных проблем, а особенно в вебе, куда больше. Ебанутые совершенно стандарты и пережиток прошлого - раз пыха значит плохо, а не пыха - хорошо.
>>1697870 Так пиши на пыхе, хули ты за питон свой схватился. Щас за недельку синтаксис подучишь и будешь сайты делать. Увлекательнейшее занятие, скажу вам, хуярить сайты на пхп. Бросай свой тухлый питон и давай к нам, как раз нужно капчу в поле регистрации добавить.
На Го писать сомнительное удовольствие. Симфони нет, Доктрины нет, не знаю, есть ли IDE с автодополнением и визуальный отладчик. Нет сотен библиотек на все случаи жизни.
>>1697881 Я и не говорил, что писать на нем заебись, го кал тот еще. Просто рассказал про тренд. В ВСЕХ конторах, в которых я был пытаются уйти от пыхи на го.
>>1697875 Ну ок, отвечу. До питона я 4 года работал на пхп. На питоне 2 года пока что. Чем дальше, тем больше разочаровываюсь. По этой же причине кажется развитие пхп более правильным. Притом я не говорю, что питон сам по себе говно, только что он хуже для бека по сравнению с пхп. Но, справдлевости ради, хуже пыхи по беку вообще многие. Все таки пых именно по беку развивается без отвлечения на что-либо еще пока что. Хотя кто я такой, чтобы с маэстро на дваче спорить. >>1697887 Го пиздато закрывает узкие места, чувствительные к производительности. Сама же бизнес-логика на го будет куда сложнее писаться, чем на пхп. Кроме того логика не сильно чувствительна к производительности, а значит часто пыху оставляют в роли монолита с бизнес логикой.
>>1697875 >Увлекательнейшее занятие, скажу вам, хуярить сайты на пхп Тебе не за развлечение платят, а за то, что ты кабанчиковы хотелки исполняешь. Если бы ты хоть раз в жизни работал, то знал бы это, борщехлёб. Вас по этим постам на раз выкупают, дебилов необучаемых.
>>1697891 >Го пиздато закрывает узкие места, чувствительные к производительности. Сама же бизнес-логика на го будет куда сложнее писаться, чем на пхп. Кроме того логика не сильно чувствительна к производительности, а значит часто пыху оставляют в роли монолита с бизнес логикой.
>>1697887 Никто не уходит с пыхи на го, как сказал анон выше - на го переписывают логику, к которой есть высокие требования по производительности. Писать онли на го бизнес-логику - это много гемора, там ведь даже нормальной ОРМ нет.
>>1697906 С пыхи уходят программисты, а не компании. Легаси говно на пыхе остается конечно, и остается пара додиков на поддержке. Те кто тему с го в компании продавал быстренько перескакивают на него полностью и на пхп болше не пишут ни строчки.
Анон который спрашивал за перспективы здесь. Забавная у вас тут атмосфера, ничего не скажешь. Насчет того, почему я сейчас пытаюсь что-то делать на пыхе и задаюсь такими вопросами: к удивлению я последние несколько лет кручусь возле всего этого дерьма, но все еще совсем ничего не понимаю в современном рынке айти. Не понимаю какие существуют стеки и кто чем занимается. Ориентируюсь на существующие вакансии и их описание: выглядит на то, что питон это в основном датасаенс, машинное обучение, нейросети, ИИ и т.д. Я не такой амбициозный и не настолько в себя верю чтобы в это вкатываться, хотя это однозначно самая перспективная на многие года отрасль. Немного знаю Java мне кажется она устарела, хотя могу ошибаться конечно и сишарп, не представляю что на этих языках делают в реальной жизни, вроде бы как годами поддерживают и допиливают всякие мифические проекты. Но самая большая загадка для меня - это яваскрипт. Когда вижу код на яваскрипте мне хочется плакать, самый ебанутый дизайн и синтаксис который только можно представить. Почему-то на яваскрипте делают все что только можно: Front-End, Back-end, десктопные приложения, даже целые операционные системы и многое другое, вроде даже микроконтроллеры на нем программируют. Сайты верстать я в гробу видал, как то пробовал себя в этом, понял что это пиздец какое нудное дело, мешки таскать и то интереснее, ну а всё остальное на яваскрипте писать мне кажется извращением, буду рад если объясните почему это не так. Так вот, потому решил учить пыху. Так я хотя бы на 100% знаю на что подписываюсь - писать до конца жизни бык-енд онлайн-магазинам. Надеюсь что это окажется менее нудным занятием, чем верстка, в противном случае вернусь к сишарпу наверное.
>>1697980 >пик Не забывай что пыхорынок это чаще всего два стула, сидеть в студии 10 человек и на цмсоговне собирать сайты за неделю(зп 500-700 баксов), или в средней-большой компании делать то, что обычно делают на жаве, но походу в своё время только пыхомакакены были. Есть еще прослойка между этими двумя стульями, это сидеть в студии 10 человек, только у вас клиенты не гали с улицы а джоны из Австралии, которым ты пилишь говно на ларавеле уже не за неделю, а хотя бы пару месяцев а то и год, по мне это самый удачный стул. Люблю просто говно на ларке писать, приятное с полезным так сказать
>>1698000 Современные проекты на пыхе да при знающих тему руках получаются хорошими прям. Ну а легаси оно и в африке легаси, на то время все это было нормой, а расплачиваться иногда приходится сейчас.
>>1697934 Опять теплое с мягким путаешь. Я дома пишу вообще на эликсире, но работу с ним не найду, да и не хочу, меня и на пыхе неплохо кормят. Потому что проганье для себя и проганье для компании за деньги - это как бы блять совсем разные вещи. Пыха отлично подходит там, где джава оверхед, и никто с нее не уйдет, язык активно развивается, Ларка - лучший веб-фреймвок на данный момент, придется просто это принять.
>>1698000 Был на всех трех видах работ, самый спокойный имхо второй, т.е. продуктовая компания с отлаженных рабочим процессом, скрамами, митингам и всем этим говном. Хоть я щас и зарабатываю немного меньше, чем на аутсорсе, зато больше нет задач, которые надо было сделать вчера, жестких дедлайнов, текучки в команде и просто сильно долбоебистых коллег-говнокодеров, которых никто палкой не гонит, потому что они таски быстрее всех закрывают. Ищите продакт-компани короч.
>>1698000 >или в средней-большой компании делать то, что обычно делают на жаве, но походу в своё время только пыхомакакены были Это как? Типо поддерживать и допиливать фичами существующие сайты? >Есть еще прослойка между этими двумя стульями, это сидеть в студии 10 человек, только у вас клиенты не гали с улицы а джоны из Австралии, которым ты пилишь говно на ларавеле Возможно большинство просмотренных мною вакансий - именно такие. Ну или второго типа. Практически везде аутсорс, просят инглиш на высоком уровне, СУБД и ларавел. Symphony только разок видел в требованиях, про html-css-javascript для джуна всегда пишут только что will be a plus. Ну а если на цмсговне собирать то вакансия чаще всего так и зовется - менеджер по работе с wordpress вордпресс-разработчик, я их и не просматривал. Кстати можешь за этот ларавель рассказать? А то похоже в шапке о нем ни слова, а я еще особо не интересовался. Конечно могу нагуглить информацию что это охуенный фреймворк с пиздатыми функциями, но мне кажется что ты можешь рассказать что-то более интересное, даже в одном предложении.
>>1697900 Нихуя ты подорвался. Ебать ты меня выкупил, никогда я не работал. Хотя подожди, это ведь ты конч прикован к уебищной работе и кабанчикам с их хотелками. Где родился там и пригодился, да?
>>1698446 >прикован к уебищной работе А, ты ты идейный РНН-бич. Так-то я мог бы и догадаться по твоим высерам-постам. Такую хрень только такие бичи и пишут: про сайтики, про вкат за 3 месяца на одном синтаксисе. Вангую, что ты даже не программист, а залётное быдло из /б.
>>1698526 В гугл каждый бич нынче умеет, а у пхп довольно активное коммьюнити и загуглить проще простого.
Ты себя выдал вскукареками про вкат за 3 месяца. Пиздеть - не мешки ворочать и от знания синтаксиса до сносно работающего приложения ещё минимум полгода. Хотя тебе и все 2 года будет мало.
>>1698548 Бля, ну не сливайся ток. Можешь на гитхабе че-нить написать, а я ревью сделаю или пул реквест. Хуй знает где ты прочитал про три месяца, я советовал питухонисту недельку синтаксис подучить и хуярить сайты.
Надо сделать так, чтобы выводилось случайное слово из каждого массива. В конечном итоге должен выйти стишок. Я пытался, но выводит у меня просто (array).
>>1656450 (OP) Ты работаешь? Как начать фрилансить на PHP? На биржах или CMSки пилить предлагают или овердохуя разных фреймворков. Как лучше поступить, изучить 1 популярную цмску и 1 фрейморк, и где брать заказы?
Вообще, фриланс не всем подходит. Ты много времени будешь тратить на поиск заказов, общение с клиентами. Это время не оплачивается. Есть риск нарваться на неадеквата или не желающего платить.
Многим проще искать удаленную работу, или долговременные проекты, а не разовые заказы.
Если у тебя ноль опыта, тебе надо быть менее придирчивым и изучать не "одну CMS-ку", а посмотреть, что востребовано и изучать все это. CMS, как правило, проще фреймворков.
"array" пишется, если ты пытаешься вывести массив с помощью echo. Она выводит только строки и числа. но ты можешь вывести массив с помощью var_dump() или print_r().
Если ты используешь array_rand, то она возвращает ключ случайного элемента. Получить значение по ключу можно с помощью квадратных скобок:
$value = $array[$key];
Если ты не понимаешь, что такое ключ и значение, перечитай начало урока, где это поясняется.
>>1699957 >Если у тебя ноль опыта, тебе надо быть менее придирчивым и изучать не "одну CMS-ку", а посмотреть, что востребовано и изучать все это. CMS, как правило, проще фреймворков. Ты толком не ответил. За двумя зайцами погонишься... Это я про CMS. Их же много популярных. В каждую сильно не углубишься. Думаю лучше одну популярную хорошо знать, чем все, но поверхностно. Я понимаю все минусы и риски фриланса. Но мне нужно начать зарабатывать еще вчера. Работа в офисе мне не подходит. На удаленку без опыта не очень берут. Поэтому остается фриланс.
У тебя есть опыт фриланса? Меня интересует какой стек для фриланса прокачивать. Фреймворки, если да то какие. Или CMS. Мне не важно что изучать, главное чтобы был наименьший порог входа. Чтобы начать что-то зарабатывать, и попутно стремиться уже к работе в компании. Жрать извини хочется каждый день.
У меня нет времени искать постоянную работу. Это нужно хорошее резюме, нормальные проекты чтобы не стыдно показать было, проходить овердохуя собеседований. Боюсь что моей мотивации на это не хватит. Если бы я хоть что-то уже зарабатывал, это бы мотивировало. А так руки опускаются. Хер знает когда я смогу в компанию устроится. Как то так в общем.
>>1699975 >главное чтобы был наименьший порог входа Даже не так. Что не порог входа был низкий, а чтобы можно было без проблем заработать копейку не выходя из дома в любой момент. Будут деньги тогда я смогу нанять профи ментора для прокачки.
>>1699978 Лучше синица в руках чем журавль в небе. Лучше начать зарабатывать прямо сейчас и попутно прокачиваться до следующего левела, чем сидеть нищуком в надежде на светлое будущее. Я знаю что CMS это путь бесперспективный, но мне нужны деньги прямо сейчас. Чтобы прокачаться нужны деньги, нужно же кушать хотя бы пару раз в день, покупать что нужно, например новый комп по мощнее, чтобы нанять ментора тоже нужны деньги, понаехать в ДС в конце концов, для это нужно дохера денег.
Код ломается скорее всего оттого, что в нем происходит ошибка. Посмотри логи ошибок или включи отображение ошибок, поставив display_errors=on в php.ini.
NULL обозначает "неизвестно". Потому эти сравнения возвращают тоже NULL, а не TRUE:
0 = NULL - мы сравниваем 0 с неизвестным числом и не знаем, что в итоге получим, потому получается NULL '' = NULL - тоже самое NULL = NULL - мы сравниваем 2 неизвестных значения и не знаем, равны они или нет, потому сравнение вернет NULL
Ты можешь увидеть, что вернет сравнение, выполнив запрос SELECT без FROM, например:
Здесь есть недостаток, что ты ищешь только латинские буквы в русских словах, а хорошо бы еще искать английские слова с русскими буквами. Для этого можно либо написать более хитрую регулярку (которая ищет и русские, и английские слова), либо разбить текст на слова и проверять каждое слово отдельно.
Ютуб скачивает видео кусочками определенной длины и их воспроизводит. Это дает ему такие плюсы:
- возможность вставлять рекламу в видеопоток - возможность явно управлять скачиванием кусочков, в случае с одним большим видеофайлом его скачивает браузер и нельзя никак этим процессом управлять - возможность менять качество видео в зависимости от скорости соединения. Если соединение ухудшается ,можно следующий кусочек качать в пониженном качестве - возможность делать живые трансляции, когда целого видеофайла еще нету
Я не знаю про Ларавель, но команды там напоминают Симфониевские команды. Ты не можешь в тесте просто создать объект команды, создать объекты Input и Output, вызвать run или execute, и проверить что то, что ты хотел сделать, сделано?
Редирект обычно делают, когда какой-то раздел переехал на новый адрес. Или для реализации коротких ссылок. В случае с тредами и постами - не логичнее ли сразу формировать правильную ссылку на нужный тред, а не заставлять клиента делать лишние запросы?
>>1700152 Ты обосрался когда намешал все в кучу. Во первых сначала подготовь запросы, убедись что все в них работает. https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=556ec70420cf4a7b466236ffe6aa0dbf Во вторых чекай актуальность своих инструментов. Какой-то блядь mysql_result замшелый, пиздец вобщем. Используй либо напрямую PDO, либо какую нибудь ORM, желательно доктрину, но можно и попроще. Версию пхп минимум 7.1, а лучше 7.4 В третьих не экономь на переменных и функциях и давай человекочитаемые названия. Хуй проссышь где у тебя какой запрос и результат. Помести результат запроса в переменную, а вывод делай отдельной функцией. Примерно так должен выглядеть твой код https://3v4l.org/EFcTC, в идеале это должно быть ООП. В четвертых спизди уже себе пхпшторм, он сильно облегчит работу и многие ошибки сразу подсветит. Ну и проделав все это станет понятно, что ты блядь сначала делаешь запрос на получение данных $result = mysql_query("SELECT 'Id_client', а потом на вставку if (mysqli_query($conn, $sql)) {.
>>1700419 спасибо, братик. я скрафтил какую-то залупу, она вроде пока работает. если все сломается опять, то воспользуюсь твоим кодом я слишком тупой, а он кажется сложным на первый взгляд дай бог здоровья тебе
https://informatics.mccme.ru/mod/book/view.php?id=815 Как это развидеть? До этого все задачи решал в хард моде достаточно быстро и без заглядываний под спойлера, но сейчас уже полчаса втыкаю по сути в готовое решение и понимаю что ничего не понимаю.
PHP на десктопе Вышло ли что-то годное, чтобы пилить гуишные проги на пхп. Либо в крайнем случае - "консольные".
Помню в 2013 можно было через .bat запускать *.php файлы без сервера. Было удобно, что не нужно изучать новый язык программирования, когда тебе просто нужно порезать текстовый файл на куски, или сделать перестановку строк.
Это не так сложно. Динамическое программирование - это подход, когда мы сложную задачу раскладываем на набор простых. То есть, чтобы определить, как выдать сумму в N рублей, мы определяем, как выдать сумму в N-k рублей, и добавляем банкноту номиналом k, чтобы получилось ровно N рублей. Чтобы найти, как выдать сумму в N-k рублей, мы добавляем банкноту номиналом l к сумме в N - k - l рублей. И так, пока не дойдем до нуля, когда мы получим результат.
Если посмотреть внимательно, то нам придется сделать не более N * M действий, где N - требуемая сумма, M - число номиналов банкнот.
Ну например, у нас есть банкноты номиналом 10 р, 6 р (много) и 1 р (только 1 штука). Нам надо выдать 12 р. Жадный алгоритм тут не сработает - он возьмет 10 р и запнется, так как не хватает однорублевых купюр. Используя динамический алгоритм, мы можем сделать это 3 способами:
- добавить 1 р к комбинации на 11 р - добавить 6 р к комбинации на 6 р - добавить 10 р к комбинации в 2 р
В свою очередь, получить 11 р тоже можно тремя способами:
- добавить 1 р к 10 р - добавить 6 р к 5 р - добавить 10 р к 1 р
И так далее, пока мы не дойдем до нуля. Так мы получим комбинации вида 10 + 1 + 1 (невозможна, так как не хватает однорублевых купюр), 6 + 6 (возможна), 6 + 1 + 1 + 1 + 1 + 1 + 1 (невозможна) и так далее.
Если рисовать на бумаге возможные варианты решения, то мы получим "дерево": от суммы в 12 р отходят 3 ветки (к суммам в 11, 6 и 2 р), от каждой из них тоже отходит по несколько веток. Попробуй это нарисовать, так, чтобы между вершинами дерева суммы менялись на одну купюру.
Если идти от 12 к 0, против стрелок, рано или поздно мы дойдем до нуля, и получим ответ. Либо поймем, что ответа нету. Вершин не более N, в каждую вершину ведет не более M стрелок, значит нам надо сделать максимум N * M шагов.
Чтобы реализовать это в программе, мы можем использовать рекурсию.
Рекуррентная последовательность - это последовательность, где следующий член вычисляется из предыдущего, вроде x(n) = x(n-1) + 1, x(0) = 0.
Попробуй перечитать решение внимательно. Там, кстати, не выдается итоговая комбинация, а лишь считается количество купюр. И там нет ограничения на количество купюр каждого номинала.
Вообще, динамическое программирование - не единственный способ. Еще можно решать задачу "в лоб" - перебором всех возможных комбинаций банкнот, пока не получим нужную сумму. Тут, правда, количество действий может оказаться большим: a * b * c * d ... , где a, b, c, d, ... - количества банкнот каждого номинала.
Если что-то непонятно в решении, задавай уточняющие вопросы.
Ты пишешь код контроллера и в коллбеках в index.php, и в отдельных классах. На мой взгляд, это не имеет смысла и надо сразу ставить твои контроллеры как обработчики. У контроллеров есть зависимости (которые ты передаешь в конструктор), потому логичнее всего сделать так:
Также, перечитай урок по Dependency Injection, если забыл, что это такое.
> $app->get('/{nameId}' Это не очень удачный URL, так как он конфликтует с другими URL.
dbConnect.php можно ликвидировать и перенести его в коллбек контейнера.
Конвертировать видео лучше бы в фоне, так как это может занять время. Для того, чтобы это сделать, нужна очередь задач. Ты лишь постишь задачу в очередь, а фоновый процесс подхватывает ее и обрабатывает видео. Попробуй с этим разобраться. Для начала можно взять библиотеку вроде https://github.com/anorgan/QuTee с бекендом на MySQL, а для высоконагруженных систем используют очереди в Redis или RabbitMQ.
В README надо написать про ffmpeg.
Ошибку конвертации можно записывать в информацию о файле, и просто не показывать видеоплеер в случае ошибки.
> preg_replace('/.*[.]/', '', $uploadedFile->getClientFilename( Это лучше вынести в функцию с понятным названием.
> if (preg_match('/[.]php$/', $link)) {
Еще могут подсунуть какой-нибудь phtml, он в некоторых конфигурациях исполняется тоже. Безопаснее давать какое-то свое расширение.
> (trim($_POST['name'])) Надо использовать объект request.
Здесь вместо массивов можно было бы попробовать сделать классы, для разных видов файлов, вроде VideoParams, AudioParams итд.
Размер файла можно определить встроенной функцией PHP, не прибегая к id3.
Сохранение файла с переименованиями стоило бы вынести в сервис. Сейчас у тебя нельзя программно из скрипта, вызовом функции, сохранить файл. Это помешает тебе, например, добавить консольную команду для загрузки файла или метод API.
> $statement = $this->pdo->prepare("SELECT id FROM files WHERE nameId = :nameId");
Используй lastInsertId().
> foreach ($filesId as $id) { > $filesArray[] = $this->filesTable->getFileThroughId(intval($id));
Запросы в цикле - неэффективно, лучше использовать 1 запрос с WHERE id IN (...).
> private function convertCommentsObjectToArray Вообще, для преобразования объекта в массив (и обратно) есть библиотеки вроде JSMSerializer. Может, она тебе тут пригодилась бы?
Сохранение ошибок конвертации в лог можно сделать функцией error_log().
Неужели новичок, дочитав http://codedokode.github.io/phpbook до конца, должен быть в состоянии сделать задачу на список студентов? Выглядит слишком уж сложно.
>>1701952 ОПчик ты же опчик?, ты охуенен даже если не опчик, то ты охуенен, на таких людях мир держится. Большое спасибо за развернутый ответ, прочитал я часа 4 назад и с того времени пытаюсь осознать этот алгоритм. Еще вчера с момента когда я задал вопрос я часа три читал за динамическое программирование, рекуррентные функции, множество страниц перерыл насчет конкретно этой задачи и других похожих. Ничего сложнее чем Фибоначчи я тогда так и не понял. Нагуглил в архиве решение, пытался в нем разобраться, не получилось. Заметил что в архиве на любой вопрос об этой задаче нету ответов ни от кого кроме ОПа, понял что 98% треда пропустили её усложненный вариант, сделал так же и перешел к Лиличке, сделал её минут за 10 и пошел спать. После того как увидел твой пост понял, что он окажется зря написанным если забью на эту задачку, начал дальше углубляться во всё это. Поигрался с этим твоим digraph, потом наконец-то перевел код решения из си на пыху, после чего оказалось что если придать переменным осмысленные названия а не $a $b $c $k $m то код легко читается. Забавно, я нашел первый плюс того, что перед переменными в пыхе пишется знак $. Без него нельзя было бы менять названия переменных через автозамену одним кликом. Написал для каждой строчки комментарии, по комментариям заново воссоздал код. Теперь хочу еще раз заново воссоздать код без комментариев с нуля из головы, после чего попробую ввести туда ограниченное количество купюр. Теперь вопрос: конечно код решения методом динамического программирования намного меньше, чем если бы я решал "в лоб - перебором всех возможных комбинаций банкнот". Но неужели это нормально, что например при необходимой для выдачи сумме 350000 рублей, в массив F будет записано 350000 элементов? Еще и не пустых, так как в итоге каждое значение (value) будет отвечать минимальному количеству купюр для ключа, см. пикрил
Хех, еще и для 99.9% элементов этого массива из 350001 элементов значение равно самому большому возможному числу для INT. Вот на что идут государственные деньги!
>>1702470 Анончик, расскажи пожалуйста, что это у тебя за сайт с задачками. Ты выполняешь их все на php, таким образом изучая его? Или именно прокачиваешь знание алгоритмов?
Кстати, нужно бы для потомков оставить пример этого алгоритма на пыхе, с комментариями и нормальными названиями переменных, не все си знают. Если бы я на такое наткнулся в архиве, то сэкономил бы несколько часов жизни. Код переведен на пыху не мной, а комментарии я писал для себя и вполне вероятно что они неверны так как я сам в этом коде пока мало понимаю, но это лучше чем ничего. Кстати комментарии немного странные, не обращайте внимания, они близки к псевдокоду и сделаны были для того, чтобы по ним написать нормальный код самому. Ключевые слова: банкомат сдача рюкзак Полезное сообщение от ОПа: >>1701952 Сам код: https://ideone.com/FBhunR
Да, на первый взгляд задача сложная, но если разбираться постепенно, то мне кажется, можно понять код.
> Заметил что в архиве на любой вопрос об этой задаче нету ответов ни от кого кроме ОПа,
По моему, кто-то все же решил ее методом перебора всех возможных комбинаций купюр.
Мне кажется, тут стоит порисовать графы. Ведь если мы нарисуем граф, где вершины (кружочки) обозначают сумму, а ребра (стрелочки) - добавление купюр, то задача сводится к поиску пути на графе из 0 в N или наоборот, из N в 0. С учетом запаса имеющихся купюр.
Программа, которая дана там, по сути обходит граф, в каждый узел записывая мин.число купюр, которыми можно собрать сумму.
> Но неужели это нормально, что например при необходимой для выдачи сумме 350000 рублей, в массив F будет записано 350000 элементов?
Это зависит от ситуации. Здесь расход памяти - это плата за скорость алгоритма. Ты можешь использовать метод перебора, который потребует в разы меньше памяти, но в разы больше времени в неудачном случае (а в удачном сведется к быстрому жадному алгоритму). Выбирай ~~стул~~ вариант по вкусу. Хороший инженер должен уметь сравнивать варианты решения и понимать их плюсы и минусы.
Если ты будешь искать путь на графе рекурсивной функцией (функцией, которая вызывает сама себя), то ты можешь такое же количество памяти выделить на стеке (стек - это место, где хранится информация о вызовах функций, внутри которых ты находишься).
Ты только слово "флаг" неправильно использовал. Обычно флагом называют переменнную, которая принимает значения true/false (да/нет).
Также, в коде повторяется $bills[$j] много раз, от копипасты лучше избавиться, например написав $bill = $bills[$j]. А еще лучше, вместо for применить foreach:
>>1702645 >По моему, кто-то все же решил ее методом перебора всех возможных комбинаций купюр. Вот дерьмо, это же тот самый код, в который я долго втыкал, пытался разобраться, дебажил и не мог понять как он связан с этим реккурентным алгоритмом. Только сейчас понял что никак он и не связан. Вот это я тупой конечно, никак не мог понять зачем там нужен генератор и прочие вещи, почему-то я даже не допустил возможности что этот анон решал совсем другим методом. >Мне кажется, тут стоит порисовать графы. >Программа, которая дана там, по сути обходит граф, в каждый узел записывая мин.число купюр, которыми можно собрать сумму. Да, я с ними поигрался. По этим графам работает метод перебора комбинаций, насколько я понял Если это не так, то выходит ты мне предлагаешь третий вариант решения этой задачи? >Это зависит от ситуации. Здесь расход памяти - это плата за скорость алгоритма. Ты можешь использовать метод перебора, который потребует в разы меньше памяти, но в разы больше времени в неудачном случае (а в удачном сведется к быстрому жадному алгоритму). Выбирай ~~стул~~ вариант по вкусу. Хороший инженер должен уметь сравнивать варианты решения и понимать их плюсы и минусы.
Давно думаю что надо бы подтянуть свое понимание в этих вещах, так как никогда бы не подумал что сначала задать значение для 350001 клеток памяти, после чего проверить для каждой из них по 7 условий окажется менее тяжело ( времязатратность это ведь следствие большой нагрузки? ), чем обычный перебор. Хотя возможно я просто не совсем понимаю что такое этот обычный перебор, но всё равно надо бы в этом подтянуться. Однажды написал калькулятор на мк с памятью 14 кБ, на другом мк с меньшей памятью он уже не работал. Так и не понял что нужно было оптимизировать чтобы уменьшить объем занимаемой памяти. А вообще нужно ли с этими вещами заморачиваться на пхп? Я почему то очень дорожу памятью, лишний раз новую переменную не ввожу. Есть ли в этом вообще смысл?. У банкомата понятное дело что памяти не терабайт, но ведь в случае с пыхой все эти дела будут храниться на сервере. >>1702649 >Ты только слово "флаг" неправильно использовал. Обычно флагом называют переменнную, которая принимает значения true/false (да/нет). Да, я знаю, просто ведь писал для себя, не думал что выкладывать буду, так исторически сложилось что мне удобно такое название. На счёт остального, это просто транслитерированный на пхп код с сайта, оптимизировать буду потом.
Ох, все таки еще раз заглянул на этот код что я сюда >>1702516 выложил, аж кринжово немножко стало. Надо было бы таки отредактировать комментарии перед тем как на люди выкладывать, так как местами действительно наркомания написана. То что я счетчик флажком назвал это еще херня по сравнению с тем, что я цикл назвал массивом, хех. Да и вообще эти комментарии лепту для понимания алгоритма не привносят, надо было без них кидать.
Разобрался таки в алгоритме банкоматовском еще вчера ночью, стоило представить на месте его элементов настоящие числа не без помощи дебагера и я понял как и главное почему он работает. Кстати, ты не что-то подобное на пикрил мне советовал порисовать? Рисовал для себя ночью чтобы понять алгоритм, сейчас обнаружил что оно сходит на твое описание: >граф, где вершины (кружочки) обозначают сумму, а ребра (стрелочки) - добавление купюр
Так вот, после осознания алгоритма переписал код быстренько с нуля чтобы закрепить знания, вот код кстати: https://ideone.com/nOtKLT, уже пол дня пытаюсь прикрутить туда ограниченность количества банкнот, почти безрезультатно. Похоже что это не так и легко. Есть догадка что для этого необходимо ввести еще один массив массивов, подобный массиву $F, где каждый элемент будет включать еще один массив, в котором хранятся комбинации купюр. Это конечно можно хоть сейчас сделать правда расход памяти увеличится в семь раз, но что тогда делать дальше я даже представлять не хочу, мозги закипают. Всё таки мне кажется что не может здесь решение быть таким сложным, я себе хрень какую-то мудрую, наверняка есть более простой способ. Если это так, то посоветуй как это дело реализовать.
>>1702646 Джуны уже пять лет на хуй никому не нужны, если только дико повезет за бесплатно пол года поработаешь на испыталке, и не факт что возьмут за еду даже
А зачем на всяких вк и фейсбуках такая фича: если есть ссылка на другой сайт, то сначала редирект на страницу "вы покидаете фейсбук", а потом уже на саму ссылку? Типа защита от фишинга?
>>1704644 1. Появляется новый конструктор сайтов, все начинают кукарекать что программисты больше не нужны. 2. Программистов убирают, приходят бабы Сраки накидывающие блоки. 3. Для того, что бы удовлетворить потребностям клиентов, конструктор начинает обрастать настройками, параметрами, исполняемыми высокоуровневыми скриптами, хуками и тд. 4. Бабы Сраки перестают с ним справляться, их убирают и берут программистов умеющих работать с этим конструктором.
>>1704755 Наверное чтобы скинуть с себя какую-то ответственность, оповестить неуверенного пользователя ПК что дальше они за его безопасность не отвечают и по ссылке может быть фишинг, гуро с детьми или даже, не дай Б-г, критика действий власти.
>>1704677 >>1704756 Я как раз с нашей точки зрения и спрашиваю: будет толк пилить там лендосы по-быстренькому (кушать совсем нечего), попутно изучая php? И может ли так получиться что мне, с зачатком мозга, станет там слишком уютно и весь php пойдет на хуй?
>>1705124 Там может быть уютно, если найдешь лохов, которые будут кучу денег тебе платить за якобы "поддержку" этих поделий. Есть такие люди, хитрожопые и неприятные. Ну и да, кодить для этого практически не надо уметь. Но само по себе это не тема этой доски и треда.
Чет я тупой, нихуя не пойму как работает сервис контейнер в ларавел. концепцию то я понимаю, но как это в ларе реализованой - нихуя не ясно. В ларакасте как то хуево для меня объясняется. класс:
class Bar{}
типа свзяываем в контейнер класс: App::bind('tormoz', function(){ return new Bar(); });
в маршруте роутера: //через ревлексию достанет мне Bar Route::get('/', function(Bar $bar){
dd($bar);
});
//но если так- мой контейнер называется tormoz: Route::get('/', function(tormoz $bar){
dd($bar);
}); то хуита
Я не пойму когда ларавел через ревлексию дергает класс, а когда дергает контейнер. Контейнер называется tormoz, но как тайпхинт это не проходит.
И еще вопрос по контейнеру зависимости, что бы не заграмождать тред - код и вопрос по ссылке. Странно как то, вроде все норм, а в деталях у меня с контейнером этим какой то треш. В данном случае - если не орпределена в конструкторе инъекция с классом - то у меня фасад App::make() возвращает ошибку. Я такой боли вообще еще не испытывал, как от ларавел.
Cап аноны, я хочу с помощью чекбоксов удалить данные из базы данных, но у меня проблема в том, что значение удаляемого поля не заходит в value, а как это поправить я все никак не пойму, по идее все id которые у меня отмечены с помощью чекбокса должны помещаться в массив box но значения не переходят <?php $connect = mysqli_connect("localhost","root","", "sad"); mysqli_set_charset($connect, "utf8"); $query = "SELECT * FROM `квитанция `"; $result = mysqli_query($connect, $query); if($result){ $rows = mysqli_num_rows($result); echo "<form method=\"post\" action=\"\">"; echo "<table>";
>>1705200 Ты просто какую-то хуйню делаешь. Перечитай еще раз доки. Если тебе нужен сервис Bar, и все его зависимости с тайпхинтом то тебе вообще ничего не нужно делать. Если сервис Bar принимает какой-то конфиг или скалярные значения, то юзай bind и кложу фабрику, которая возвращает объект. Если тебе нужна более тонкая настройка то там вообще есть when(Classname::class)->needs(ServiceInterface::class)->give(Concrete::class) или не ебись и уровнем выше бинди реализацию объекта. Еще ты биндишь не к имени класса, а к какой-то рандомной строке. В контейнере есть алиасы, но это другая вещь. Например, $app->alias(Bar::class, 'tormoz'); $app->make('tormoz'); отработает как нужно.
Браузер не понимает PHP код. Когда ты открываешь страницу в браузере, браузер шлет запрос к веб-серверу, где работает PHP. PHP выполняет PHP скрипт, и то, что скрипт выводит (HTML-код), отправляется браузеру в ответ на запрос. Браузер отображает полученный HTML.
Это называется "протокол HTTP". Браузеру не важно, какой язык используется на сервере, он шлет запрос, как описано в протоколе, и получает в ответ HTML.
Я не точно выразился. То, что выведет скрипт, браузер будет воспринимать как текст с разметкой HTML. Если просто написать echo "hello", то браузер все равно будет воспринимать это как текст с разметкой HTML, и выведет слово hello.
Тип содержимого можно задать явно, отдав браузеру заголовок Content-Type. Например, Content-Type: text/plain; charset=utf-8 говорит, что у тебя просто обычный текст без разметки HTML.
Хочу запилить агрегатор каналов в телеге. В качестве клиента MadelineProto, написанный на пхп. Как вам такой алгоритм: гружу новые посты с каналов смотрю сколько просмотров, самый топовый по просмотрам постит агрегатор. Дальше через 15-20 минут чекаю опять последние посты каналов и прирост просмотров, самый топовый пост по приросту просмотров постит агрегатор и так далее. Норм?
анчоусы, подскажите как работодателю намекнуть на то чтобы он начал ставить меня на норм проекты на нормальном стеке я знаю что они у них есть а не на всякое говно типо битриксов/вордпрессов. имеется в виду фреймворки типо той же ларки или симфони.заебало в говне ковыряться свалить на другую галеру я не могу, щас в своем зажопье из за вируса с работой пиздец. но не со всеми конечно, знаю например что довольно таки успешная контора к се берет людей всех мастей, на там стек это полностью битрикс
>>1706874 >свалить на другую галеру я не могу, щас в своем зажопье из за вируса с работой пиздец Сам же ответил на свой вопрос Ищи удаленку на ларе или yii2 если не брезгуешь мертвечиной. Как найдешь - вали
>>1707021 Зависит от приложения также, от архитектуры и режима работы PHP. В режиме умирающего приложения 2 скорее всего будут быстрее. Это все чепуха, не об этом надо думать. Вот сделаешь 10 высоконагруженных проектов, тогда и будешь про оптимизации думать.
На 8 ядрах может параллельно обрабатываться 8 запросов, не мешая друг другу. Но если посещаемость низкая, или вообще на сайт заходишь ты один, то разницы не будет.
>>1707165 >На 8 ядрах может параллельно обрабатываться 8 запросов Не совсем верно, это вообще тема очень заковыристая. Вот если бы это был Эрланг, можно было бы с уверенностью сказать, что все будет скейлиться на все имеющиеся ядра. С PHP такого сказать нельзя. Он работает в разных режимах. И вообще хер знает как он скейлится. Возможно при большой нагрузке много ядер будут мешать, если код не оптимизован для них, ОС будет постоянно переключаться с ядра на ядро, а это затратно по времени.
>>1707245 PHP не скейлится. Вообще. Один процесс на ядро, точка. Ни PHP-FPM, никакие режимы этого не меняют. Хочешь обслуживать восемь клиентов одновременно - покупай восемь ядер. Хочешь обслуживать клиентов быстрее - покупай большую герцовку.
Как авторизоваться ВК через похапэ и сервер? Именно в самом ВК через логин-пароль, чтобы потом можно было парсить авторизованную страницу через файл гет контентс или типа того (нужно добраться до сведений, которые без логина ВК тупо не отображаются)
> Он работает в разных режимах. И вообще хер знает как он скейлится.
В каких еще режимах?
> Вот если бы это был Эрланг, можно было бы с уверенностью сказать, что все будет скейлиться на все имеющиеся ядра
Чем для ОС отличаются процессы или треды Эрланга от процессов PHP? Планировщик ОС в обоих случаях один и тот же.
> Возможно при большой нагрузке много ядер будут мешать, если код не оптимизован для них, ОС будет постоянно переключаться с ядра на ядро, а это затратно по времени.
Чем больше ядер, тем больше процессов будет работать параллельно. Даже с учетом затрат на переключение.
PHP благодаря stateless модели как раз прекрасно масштабируется - можно добавлять ядра, можно добавлять сервера. На практике все это прекрасно работает. Такое ощущение, что тебе просто чем-то не нравится PHP и ты судорожны пытаешься найти недостатки. Давай я тебе помогу, есть целая статья про недостатки языков: https://habr.com/ru/post/315152/
>Чем для ОС отличаются процессы или треды Эрланга от процессов PHP? Всем. В Эрланге потоки существуют внутри виртуальной машины.
>Планировщик ОС в обоих случаях один и тот же. В Эрланге потоки реализованы внутри виртуальной машины, как все это ложится на ядра не знаю.
>Чем больше ядер, тем больше процессов будет работать параллельно. Даже с учетом затрат на переключение. Только небольшое количество процессов будет нормально существовать. Потому что когда их станет существенно больше чем ядер, переключение начнет отнимать больше времени чем вычисление. В Эрланге можно держать миллионы процессов/потоков (не помню там процессы или потоки, в общем не так важно) на одной машине.
CGI никто не использует уже давно. PHP-FPM использует FastCGI. Ты толком ничего про PHP не знаешь, но пришел сюда зачем-то рекламировать Эрланг. Хотя я не слышал, чтобы кто-то писал сайты на Эрланге. Все-таки PHP больше для этого подходит, как не крути.
> В Эрланге можно держать миллионы процессов/потоков (не помню там процессы или потоки, в общем не так важно) на одной машине.
Только при условии, что эти потоки ничего не делают и не тратят процессорное время. Что на практике не бывает.
Если я не могу решить задачу на сумму прописью.Кстати, а смысл её решать, если есть готовые функции в гугле.То не смогу стать пхп макакой 15-20к в месяц?
>>1656450 (OP) Аноны, есть у кого-нибудь решение задачки из шапки с таблицей работников ООО Вектор? Чет я нихуя не понимаю, как там правильно все сделать. Типа, нужен новый класс, который будет выводить таблицу?
>>1708168 >CGI никто не использует уже давно. Первый признак дауна, говорит за всех. Откуда тебе знать кто что использует, дебил. Большая часть сайтов это легаси.
>PHP-FPM использует FastCGI. Да, но это не одно и то же.
>Хотя я не слышал, чтобы кто-то писал сайты на Эрланге. Снова даун проецирует свое скудное мышление на других. На Эрланге пишут, и даже в СНГ.
>Только при условии, что эти потоки ничего не делают и не тратят процессорное время. Что на практике не бывает. Не умничай, ты нихуя не знаешь, а пиздишь. Держит миллион вебсокет соединений спокойно, каждое соединение обрабатывает отдельный поток. И это не предел.
>>1708027 >PHP благодаря stateless модели Ты бы хоть почитал, что такое приложение без состояния. Это блядь вообще не характеристика языка. Твой код может вполне быть statefull, просто php будет твое состояние каждый раз заново собирать и каждый раз выкидывать. Пиздец, так этот недостаток пхп еще никто на моей памяти с ног на голову не переворачивал.
>как раз прекрасно масштабируется Еще раз. Ты написал консольное приложение на симфони, запустил его. И в процессе выполнения оно не масштабируется. Никак. Если тебе нужно быстрее, то придется запустить симфони N раз, а еще придумать как распределить нагрузку и как согласовать результаты выполнения вне кода. Понимаешь? ВНЕ твоего кода блядь, потому что в пхп таких инструментов нет. В эрланге есть, в ноде есть, в джаве есть, в го есть, в си шарпе есть, а в пхп нет. И начинаются танцы с базой, блокировки, очереди, процедуры. И на всех собесах по пхп на сеньора только вопросики: А вы CTE используете? А процедуры писали? А мап редьюс на SQL сбацаете? А с го знакомы? Спросишь их: а пхп? А что пхп? Пхп рожден чтобы html отдавать и умирать, а настоящую работу нужно же где-то делать.
Копипастну под спойлером все же... Задание из главы про ООП. Хотелось бы сразу понять, что я делаю не так, дабы в будущем не делать хуйни. Погромирование начал изучать сегодня.
<?php
abstract class AbstractQuestion {
public $text; public $answerUser; abstract function CheckAnswer($answer);
}
class ChoiceQuestion extends AbstractQuestion {
public $options; public $checkOptions;
public function CheckAnswer($answer) { // TODO: Implement CheckAnswer() method. if ($answer == $this->checkOptions) { echo "Right!\n"; } else { echo "Miss\n"; } }
>>1708566 Чую ты пиздишь, невозможно за день без опыта в программировании до ООП в ОП-гайде дойти. Или ты все задачки что тебе не нравятся пропускал? Давай свой банкомат в хардмоде или хотя бы навигатор продемонстрируй.
Насчёт Вектора: >Потребление кофе или зарплата не являются свойствами так как они вычисляются из других свойств и хранить их не надо. Это как? Ну ладно, зарплата понимаю что вычисляется из ставки и множителя. Но ведь потребление кофе никак не вычисляется особо, зависит лишь от профессии ( а значит и класса ) сотрудника. Ну ладно, еще зарплата и потребление кофе зависит от того, является ли сотрудник боссом. Но количество отчетов в месяц тоже от этого зависит, так почему бы и их не записать в этот список? Хотя я все еще не понимаю почему бы все это не записать в свойства, после чего множить по всяким факторам.
Идея в том, чтобы хранить в свойствах минимальный набор данных, а то, что можно вычислить - не хранить, а вычислять в методе при необходимости.
Если ты будешь сохранять результаты вычислений, то тебе надо будет обновлять их, когда исходные данные меняются, а это усложняет код.
Соответственно, можно хранить базовые вещи, вроде базовой ставки или базового потребления кофе, а итоговые числа (зависящие от зарплаты, статуса босса итд) вычислять.
Так как они зависят от профессии, то теоретически можно и их не хранить, можешь попробовать это реализовать.
Тут ошибка. Тут нужно проверять не строгое равенство, а что абсолютная разница между ответом и правильным ответом меньше или равна отклонению.
Функция checkAnswer спроектирована неудачно. Она выводит результат, а не возвращает через return. Из-за этого мы не можем в программе никак использовать этот результат, например, для подсчета баллов. Будет лучше, если функция будет возвращать результат, а не выводить на экран. Ведь ее задача - только проверить ответ, а вывод - это уже задача другого кода.
Варианты ответа лучше хранить не большим куском текста, а массивом.
Не очень логично, что у тебя в классе "вопрос" есть свойство "ответ пользователя". Ведь ответ и вопрос - это разные сущности. Например, если 2 пользователя проходят тест, то они могут дать 2 разных ответа на один вопрос, и твой код это не поддерживает. Лучше не хранить ответ внутри объекта-вопроса, а хранить отдельно.
Код лучше не копипастить, а запостить на сайт вроде ideone, а сюда скинуть ссылку.
Ты пишешь полную ерунду. Модель PHP как раз очень удачная, так как позволяет избежать проблем вроде утечек памяти, которые часто бывают на той же ноде. Очищать состояние интерпретатора после обработки запроса довольно удачная идея. И веб-скрипты прекрасно масштабируются, чему доказательство сайты вроде Вконтакте или Баду.
И вообще, ты какой-то недадекватный, если тебе не нравится PHP, просто не используй его, решай свои задачи на эрланге с мап-редьюсом, если конечно, они у тебя есть.
Вывод таблицы можно сделать и без классов, на функциях. А можно и классом, конечно. Также, нужны классы для представления работников, департаментов, компании.
Реальный код будет куда сложнее этой задачи. Лучше остановиться и не спеша разобраться, разложить задачу на более простые части или попросить подсказки.
Например, попробуй сделать функцию, которая умеет склонять суммы от 0 до 9 рублей, а потом расширь ее до 99 и 999 рублей.
Боюсь, что использовать тот алгоритм не получится при ограничениях. Там создается массив F[n], где n - сумма, а F[n] - количество купюр.
У нас же возможность выдачи зависит от суммы n и остатка купюр amount: y = F(n, amount). Построить простой массив, перебирая n тут не выйдет.
У нас есть 2 подхода:
1) полный перебор комбинаций всех купюр 2) обход графа из 0 к N или из N к 0 с помощью рекурсивной функции
Второй вариант может выглядеть так. Пишем функцию
$y = canPay($sum, $amount)
Где $sum = сколько надо выдать, $amount - количество оставшихся купюр, $y = можно ли выдать сумму или нет.
Функция может работать так. Если сумма строго равна номиналу купюры, и такая купюра есть в наличии, то ответ - да. В противном случае мы берем каждую купюру по очереди, уменьшаем сумму и остаток купюр и вызываем себя рекурсивно, чтобы узнать, можно ли выдать меньшую сумму.
То есть, если у нас есть купюры 1x100, 3x60 и сумма = 60, то функция сразу вернет "да". Если же сумма = 160, то функция должна проверить 2 варианта:
- используем банкноту на 100, и вызываем себя с параметрами 60, (3x60) - используем банкноту на 60, и вызываем себя с параметрами 100, (1x100, 2x60)
То есть мы обходим граф, пробуя все возможные варианты выдачи.
>>1709261 >так как позволяет избежать проблем вроде утечек памяти Толсто. Пхп это синоним утечки памяти. До седьмой версии демоны вообще не было смысла писать, а после седьмой писать можно, но утечки все равно периодически ебут.
>Очищать состояние интерпретатора после обработки запроса довольно удачная идея Нихуя себе! Очень полезная фишка, расскажешь чем? А то мы с пацанами хуй поймем зачем все данные на каждый запрос из базы грузить.
>И веб-скрипты прекрасно масштабируются, чему доказательство сайты вроде Вконтакте или Баду Facebook забыл. Помимо этого есть много крупных компаний, в которых используют пхп, я сам работал в нескольких компаниях с миллиардными оборотами и тысячами сотрудников. Все они использовали пхп потому что очень легко начать. Дешево и быстро, программистов опять же много очень. И заканчивали все одинаково - пхп слишком медленный, устаревший, а программисты на нем 90% долбоебы, которые код писать учились на двачах. Badoo прямо показательный пример. У людей 300 серверов, которые работают на пределе, и как они только не извращаются и fpm сделали, и фреймворк прелоадят, и го пытаются юзать. HHVM, KPHP, FPM все, чтобы хоть как-то ускорить это говно. Только вот огромная кодовая база на пхп уже живет своей жизнью, и плодит новые вакансии.
>И вообще, ты какой-то недадекватный, если тебе не нравится PHP, просто не используй его Так это не для тебя написано. Ты то совсем конченый, со stateless php и без утечек памяти. Это написано для тех кто пытается вкатиться в эту помойку. Не лезь блядь, она тебя сожрет.
Ты мыслишь очень ограниченно. Чтобы не "грузить данные из БД", есть множество кешей от APC до redis, но это создает проблему устаревания данных, (о которой ты кстати не упомянул). То есть PHP позволяет держать данные в памяти, при этом избегая проблем вроде утечек памяти, свойственных для кода на Node.JS, Ruby, Python. Модель работы PHP очень хорошо подходит для веба.
И, как мы видим по Баду, прекрасно масштабируется. С их числом пользователей 300 серверов это не много. И я уверен, что радикально ты число серверов сменой языка бы не сократил. И не забывай про скорость разработки, новые фичи надо добавлять быстро, а не по полгода пилить.
Также, важна скорость разработки, для PHP есть фреймворки, инструменты (IDE с автодополнением и рефакторингом, визуальной отладкой), куча библиотек. И действительно, много разработчиков, что облегчает выбор. Разработчики, кстати, разного уровня.
В Эрланге я не разбираюсь, но отмечу недостатки Node.JS, Python и Руби в сравнении с PHP:
- нет тайп-хинтов, труднее анализировать код статически, труднее автодополнять код в IDE - трудно обнаружимые утечки памяти. Есть ли визуальный профайлер памяти для твоего языка? - у Python и Ruby ниже производительность
А твои миллион коннектов не очень-то и нужны. Когда производительности PHP не хватает, просто пишут микросервис на Го или Си++, в который ходят скрипты из PHP.
>>1709496 >но это создает проблему устаревания данных А как кстати разбивать кеш когда очень много серверов с пхп? Понимаю что может быть много разных способов и всё зависит от архитектуры но если можно так сказать некое дефолтное решение c:
>>1709244 Большое спасибо за ответ. Сначала не понял, потом поразмыслил над ним, всё осознал. Посмотрел на следующую задачу и понял что если бы я все поля вычислял в методе-конструкторе и классах профессий, то функции для изменения значений были бы намного длиннее и сложнее, а в предложенном тобой варианте необходимо будет просто сделать альтернативные функции вывода.
>>1709283 Спасибо что расписал, ОПчик, отличный вариант, очень похоже на алгоритм поиска пути это он и есть. Я даже задумывался об этом когда делал навигатор, но что-то не зацепился за эту идею, т.к. ты написал в гайде что есть лишь два варианта решения.
>>1709496 >Чтобы не "грузить данные из БД", есть множество кешей от APC Пиздец. Нахуя ты приплел APC, когда opcache уже сто лет как включен в пхп и работает по умолчанию? Но самое главное это кеш кода блядь, не данных, а кода, и нужен он чтобы не парсить исходники по сто раз.
>до redis А редис это что по твоему блядь, не база?
>То есть PHP позволяет держать данные в памяти, при этом избегая проблем вроде утечек памяти Ты бредишь? Ты в предыдущей строчке написал про редис и кеш, каким хуем пхп стал данные в памяти держать? И как из этого следует отсутствие утечек памяти?
>И, как мы видим по Баду, прекрасно масштабируется Любой код на любом языке можно бесконечное количество раз запускать на бесконечном количестве серверов. Каким хуем это стало преимуществом пхп? И откуда ты взял что в badoo все прекрасно? Я вижу судорожные попытки хоть как-то соптимизировать этого монстра, fpm, RoadRunner, Preload из 7.4 все это прямо противоречит твоей охуенной модели.
>И я уверен, что радикально ты число серверов сменой языка бы не сократил Возможно дело в том что ты просто некомпетентный еблан. Вот тебе видео про badoo "Как 200 строк на Go помогли нам освободить 15 серверов" https://www.youtube.com/watch?v=uO268voCGwA
>В Эрланге я не разбираюсь, но отмечу недостатки Node.JS, Python и Руби в сравнении с PHP: >нет тайп-хинтов, труднее анализировать код статически Просто не позорься. Зайди в руби тред, там тебе мигом хуев в глотку наебенят за "отсуствие аннотаций".
>трудно обнаружимые утечки памяти И тут я проиграл. Ты понимаешь, что когда речь идет об "утечках памяти" имеется ввиду не твой код? Утечки в твоем коде это проблема долбеба в кресле программиста. Когда я говорил об утечках я имел ввиду сам язык. Когда сама виртуальная машина пхп течет, даже если ты нихуя и не делал. Да хули говорить, одной из задач PHP-FPM является отслеживание утечек памяти.
>А твои миллион коннектов не очень-то и нужны Ты совсем ебанулся, таблетки прими. Я вообще ничего не писал про миллион коннектов.
>>1709720 Пиши на чем умеешь, пхп тоже сойдет. Если не взлетит, то все равно похуй, а если взлетит наймешь макак задешево. Но если собрался зарабатывать на жизнь программированием держись от пхп подальше.
>>1709751 Бля, ну как тут ответить. Нужно и велосипеды городить и с устройством фреймворков ознакомиться. Я бы выделил три этапа становления пхп программиста: 1) Пишешь как пишется, велосипедишь, набиваешь шишки. Такой код обычно выкидывается, за него потом стыдно. 2) Программируешь на фреймворке. Фреймворк может быть любой, ты просто пишешь код по его доке. В треде мог заметить фразы типа "пишу на ларавель", "симфони для энтерпрайза" вот это оно. Такой код обычно устаревает вместе с фреймворком, как говорится легаси по прибытии. 3) Понимаешь что ты используешь не фремворк, а инструменты, которые он предоставляет. И начинаешь выбирать себе инструменты сам. Не нравится роутинг в симфони? Пожалуйста, используешь более быструю библиотеку. Не нравится актив рекорд? Не вопрос, ставишь доктрину или автомаппер. Звучит легко, но третий этап самый сложный. Для того чтобы делать осознанный выбор инструментов нужно знать как они работают. А для того чтобы понять что фреймворк это обуза нужно похоронить пару проектов. Ну и всегда есть вариант оказаться в первом пункте. Так что с первого и рекомендую начать.
>>1709765 >Такой код обычно устаревает вместе с фреймворком Если прямо по доке херачить без задней мысли, то устаревает в момент написания. Почти все фреймы задрочены под здесь и сейчас, а завтра пусть потоп нахуй. Так и делают в 9 из 10 случаев, за возможность так сделать фреймы и берут. >фреймворк это обуза Это правда. Хотя большинство на подобное у виска покрутит. Разработчик на фреймворке - рак современно пхп (и не только). И это притом, что еще от старого рака в виде вебмастеров не избавились. В конфе каждого фрейма и дня не проходит, чтобы очередной сениор-фреймворк-девелопер 300к не бзднул незнанием даже банальных вещей в синтаксисе/окружении/вебе/базе, слезно прося ему помочь и прикладывая скрины где все красным по белому, а сверхразуму все равно нихуя не понятно. Потому что пропускают все этапы и сразу к методичке "высрать блог за два копипаста" обращаются. Дешево, сердито, скорбно за профессию. Иногда даже скромные потуги местных в решение оповских задачек кажутся более интеллектуальными, чем эта идиократия на фреймах.
Так что по виду чаще этапы следуют как 2, 3, 1 (по желанию).
>>1709751 Попробуй нагородить небольшой, но качественный(самое важное, если будет не качественно - зря время потратил, вероятно даже с вредом для себя) велик похожий на ларавел и работающий на демке как ларавел (или другой фрейм, похуй). Для меня загадка почему эту простую задачу ныне даже мидлы часто не могут осилить, которые не мало знаний имеют. А можно сделать с виду даже приятнее ларки. Если сможешь, то вопрос завязки на фрейм для тебя отпадет навсегда. Не выйдет - фрейм в процессе тоже поковырял получается, профит.
>>1709782 > качественный откуда я узнаю,если в процессе изучения с большой вероятностью я буду смотреть и копипастить чужой код и часто с разным подходом?
>>1709785 Ну конечно никак. Более того статьи и книги, которые ты будешь читать уже устарели. А еще хуже что сам язык отстает на десять лет от мейнстрима. И сообщество соответственно тоже.
>>1709792 Ну во первых код действительно будет отличаться, держать в голове кучу вариантов написания это полная хуйня. А во вторых разница с кодом времен пятой версии будет в самом подходе к написанию. Я даже в 2014 году слышал: да кто ето такой ваш солид? Про него ниче в доке не написано.
Вообще, редис очень быстрый и одного сервера с редисом вполне может хватить для нескольких PHP-серверов. Если этого мало, то придется делать шардинг (partitioning) - разделение данных в кеше на несколько серверов. Самый простой способ это сделать - на клиенте брать хеш от ключа, затем делить хеш на число серверов и по остатку от деления понять, куда нам коннектиться:
server_number= hash(key) % server_count
Но этот способ обладает недостатком. Если мы убавим или добавим один сервер, то большая часть ключей "переедет" на другой сервер, так как цифра server_count изменится. Чтобы этого избежать, используют:
либо а) консистентное хеширование, которое меньше этому подвержено либо б) делают большое число шардов (намного больше, чем серверов) и хранят на каждом сервере, допустим, 100 шардов. Соответствие шардов серверам хранят в конфиге. При изменении числа серверов часть шардов "переезжает" на новый за счет изменения конфига.
Еще есть такая штука, как мастер-слейв репликация. Мы пишем в мастер, а читаем со слейвов. Слейвы подхватывают изменения с мастера. Это еще используют для отказоуcтойчивости как hot backup.
Если бы ты поменьше ругался и побольше читал документацию, ты бы таких ошибок не делал. Redis - это in-memory key-value хранилище, он держит данные в RAM, хотя у него есть возможность сохранять их на диск через снапшоты и WAL. Он хорошо работает как кеш для снятия нагрузки с реляционной БД.
Заметь, что у редиса есть плюс в сравнении с твоей идеей держать данные в RAM процесса на Эрланге или ноде:
- он позволяет иметь один общий кеш, в отличие от in-process кеша, одновременно его перестраивать или очищать. А как ты будешь очищать in-process кеш кучи процессов на ноде, это отдельный вопрос - он не замедляет сборщик мусора (скорость которого зависит от размера RAM), в отличие от in-process кеша
А вот APC позволяет кешировать не только код, но и данные в shared memory.
> И откуда ты взял что в badoo все прекрасно?
Оттуда, что они не терпят убытки и не закрываются, что вполне было бы возможно при использовании менее быстрых и удобных для разработки языков.
> Зайди в руби тред,
Зачем мне идти в какой-то там тред, я же не как ты, который пришел в PHP тред, где люди учатся, просто пофлудить. У меня нет такой потребности. И если понадобится, я могу прочесть документацию, хотя сейчас мне это не нужно.
>>1701682 Ох, бля ну и пиздец твой код. Режешь предложение по пробелам и кладешь в массив. Удаляешь точку, затем array_rand, ну капс там заменить и точку доставить. Всё, анончик.
Сделал парсер картинок из тредов, работает. Но на 18+ досках где надо подтвердить переход закономерно получаю ничего. Можно ли как-то обойти это говно?
Ты просто при помощи этой функции вначале передаешь скрипту куки (копируй их из отладчика браузера), а затем выполняешь скрипт.
setcookie() задает cookie, которое будет передано клиенту вместе с другими HTTP-заголовками. Как и любой другой заголовок, cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться до остального вывода, включая вывод тегов <html> и <head>, а также пустые строки и пробельные символы.
>>1709785 >копипастить чужой код Ну как бы на этом уже и фейл, толку будет 0, копипастер ты наш. >откуда я узнаю Для начала можешь начать с правила - все по псрам. В процессе читаешь/смотришь всякую хероту по ооп и архитектуре. Ее очень много, то, что тут у опа даже не верхушка айзберга. И стараешься применить. Результат закидываешь сюда (или в пыхоконфу для джунов в телеге) и узнаешь, вышло у тебя или нет. По желанию правишь, пока пиздато не выйдет.
>>1710496 Я про эту, а не местную. Слышал она именно для таких вещей существует, из остальных каналов с глупыми джуновскими вопросами по пхп гонят. @phpGeeksJunior - новичкам
>>1710022 >Если бы ты поменьше ругался и побольше читал документацию Если бы ты читал что я пишу, то понимал бы что у меня хватает компетенций отличиить redis от mysql. Расположение данных и способ их хранения не отменяет того факта что это все еще внешнее по отношению к пхп хранилище. И время на получение из него данных на каждый запрос все еще тратится. Ну и чтобы закрыть тему с определениями вот тебе цитата с офф сайта редиса Redis is an open source (BSD licensed), in-memory data structure store, used as a database
>в сравнении с твоей идеей держать данные в RAM процесса на Эрланге или ноде: Во первых это не моя идея. Все нормальные языки работают в режиме серверного приложения. Во вторых прими таблетки, это не я сравнивал пхп с эрлангом.
>А вот APC позволяет кешировать не только код, но и данные в shared memory. А пхп позволяет использовать goto, но это не значит что так нужно делать. APC это устаревшая забагованая параша https://bugs.php.net/bug.php?id=57825 нахуй ты вообще её приплел.
>Ссылки на issue? Две секунды в гугле https://bugs.php.net/bug.php?id=76982 критический баг с утечкой памяти внутри самого пхп. Подтвержден и висит джва года.
Рубрика "ньюфажные вопросы". Решил в кои то веки разбить свой код на несколько файлов, чтобы было легче ориентироваться. Моим удивлением стало что пыхошторм не может его скомпилировать, просит какой-то PhpUnit. Загуглил, таких же ньюфажных вопросов как мой не нашел, а значит я что-то делаю не так. Я эти файлы создавал как New - Php File, надо было по-другому как-то? Мб как классы?
>>1710483 Ну вот например, куда тут вставлять эти куки? Я так понимаю вот эта ответственна за 18+? И хватит ли только key - value или всю инфу запихивать?
Ты заходишь не с того края. Учиться надо не как делать "регистрацию", а базовым вещам. Как работать с формами, с базой данных, с куками. Сначала можно без фреймворка, а потом узнать, как то же самое делается на фреймворке (чтобы ускорить разработку).
Твоя "регистрация" - это всего лишь форма с проверкой данных и сохранением в БД. Логин - это проверка логина-пароля и выдача авторизационной куки.
>>1710586 Там комментарии есть. А вообще, что-то почитал в интернетах на эту тему, похоже мне еще рано делить код для обосраной задачки по основам основ ООП. Но с другой стороны интересно, почему это у анона вышло, а у меня нет.
Ты придираешься к мелочам, называть редис БД или нет. Главное то, что и Redis и APC решают проблему "как хранить данные в памяти при умирающем PHP". Производительность у редиса огромная, несмотря на его однопоточность. А также важен момент, что во многих случаях хранить данные в разделяемом редисе удобнее, чем в памяти одного Node.JS воркера.
Ты пытался выдать это (хранение данных в памяти воркера) как преимущество других языков, но оно преимуществом не является. Хотя у этих языков и есть другие плюсы, но ты их назвать не можешь, потому что ты просто обычный флудер.
Ну и наконец один из самых нагруженных российских сайтов - VK - использует PHP на фронтенде и не пытается что-то поменять. Так что PHP вполне пригоден для разработки веб-приложений.
>>1710551 Гугли php autoload, psr-4, composer (в последнем смотришь автолоадер по psr-4, если хочешь). В один файл тоже может сработать при, но я что-то не вижу, что бы ты код показал, а мы тут не телепаты.
- класть каждый класс в отдельный файл, названный как этот класс - сделать файл-загрузчик index.php, который будет подключать эти файлы через require, создавать нужные объекты и вызывать функции вывода на экран - запускать index.php
>>1710596 >Ты придираешься к мелочам, называть редис БД или нет. Но это я назвал редис бд, а ты доебался, еще и с какого-то хуя решил что я им не пользовался и не знаю доку. А когда я тебе тыкнул в нос цитатой с офф сайта ты пернул жидким и обмяк.
>Главное то, что и Redis и APC решают проблему "как хранить данные в памяти при умирающем PHP" Об этом я и говорю уже третий раз подряд. Умирающий пхп это проблема. А ты начал высирать про то какая это охуенная фича.
>Производительность у редиса огромная, несмотря на его однопоточность И что это поменяло? А memcached быстрее редиса и хули? А знаешь что быстрее memcached? Прямой доступ к памяти.
>Насколько я знаю, приложения на Руби, Питоне или JS точно так же используют редис Да ну нахуй! Так они и реляционные базы еще наверное используют?
>Ты пытался выдать это (хранение данных в памяти воркера) как преимущество других языков, но оно преимуществом не является. Ваше преимущество не преимущество, пруфов не будет. А грузить на каждый запрос данные это быстрее чем грузить их один раз. Ясно понятно.
>Хотя у этих языков и есть другие плюсы, но ты их назвать не можешь, потому что ты просто обычный флудер. Я дал тебе ссылку на видео от самих badoo как пара функций на го сэкономила пятнадцать серверов, ты его конечно не смотрел. Каждый свой довод я подтверждаю пруфами. Ты просил пруфы утечек - ты их получил, но ловко проигнорил и назвал меня флудером. Я сказал что APC параша, я дал ссылку на багтрекер, где написано почему.
>Ну и наконец один из самых нагруженных российских сайтов - VK - использует PHP Ну это вообще пушка. Во первых они используют KPHP, он компилируемый и СТРОГО ТИПИЗИРОВАННЫЙ блядь. Там от оригинального пхп только синтаксис. Пиздец, ты этим примером сам себе в штаны серешь.
короче, подскажите как по уму развернуть себе рабочую среду. а лучше какой-то видеогайд.
Есть windows (извините, линуксы не умею). как поставить WAMP знаю, не проблема. А как все остальное настроить?
Например чтобы нормально работал Composer? чтобы VSCode сразу находил php а не через говнокостыли путем указания пути к вампу (обновив который я ломаю этот vscode)
>>1710692 В идеале используй сразу докер. Гайдов как настроить дохуя, за ручку проведут и объяснят. На втором месте просто линух. Не умеешь, так учись, все равно код на линухе будет работать. Нужно уметь поднять всю эту хуйню там. На третьем месте шиндовс, но ставить все самому. Нихуя сложного там нет, а разобраться что нужно для запуска кода стоит. На четвертом месте опен сервер. На пятом вамп. Я хуй знаю какие там у тебя проблемы с VSCode, но в пхпшторме ты просто явно указываешь исполняемый файл пхп, и похуй в вампе он или в китайской стене.
>>1710697 Ну через браузер тебе все равно придется обращаться к реальной ссылке. Как бы ты не прятал ссылку в своем JS коде браузер показывает список запросов. Грамотный человек увидит всю хуйню на раз два.
>>1710704 Братан, ты в своем коде со ссылкой можешь делать что угодно. Но скачивать по ней видос будет браузер. А браузер не скрывает откуда он качает видос.
>>1710600 >>1710599 Попробовал провернуть это дело тремя способами. Через require_once и spl_autoload_register получилось, а через композер, хоть и дрочился с ним полтора часа, ничего не вышло. Я вот думаю, не в слешах ли кроется проблема. Просто у меня винда, а во всех autoload файлах, созданных композером, пути идут через прямые слеши, а из __DIR__ слеши обратные ведь получаются. Или я дурачек и нету разницы?
Прямые слеши работают везде. Не забыл ли ты сделать composer dum-autoload после того, как правил composer.json? Не сделал ли ты ошибок в самом composer.json?
Двощ, насколько я проебываю полимеры? Работаю пару месяцев из обязанностей доработка срм под нужды клиентов. Она странная, нихуя не задокументированная, официальная буржуйская недодока датируется годом 13-15 пару мажорных версий назад, с тех пор поменяли прилично Допиливаю там, реализовываю здесь, и в общем то всё. Так и выглядят будни погромиста? Или надо будет после пандемии съябывать оттуда? Работа муторная (в основном из-за попыток понять, хуле тут не так), но нихуя не сложная, у меня лабы были заковыристее. Из плюсов только навык чтения кода бустнул, раньше вообще со страхом на чужой код смотрел
>>1710698 В общем по-всякому пытался. И setcookie() и CURLOPT_COOKIE, и полную инфу и неполную, все куки какие есть, даже от яндекса и гугла. Не работает, я огорчен, братик.
Вряд ли кто-то ответит, но все же. Вопрос по Laravel и в целом правильной архитектуре приложения.
В ларавеле есть модели Eloquent. Наследники класса Model - это сложные хуйни с множеством всяких потрохов и прочей залупы. Они могут и рыбку съесть, и нахуй сесть, и в json обратиться. С одной стороны хорошо, а с другой - как-то не очень, особенно когда у моделей есть связи друг с другом.
Так вот, в моем приложении требуется постоянно гонять объекты из БД в json и обратно, с полной конвертацией. То есть, мне нужно точно знать, что в методе репозитария создается в точности то, что будет выдано контроллером в json'е. Например, при конвертации в жсон модель может скрыть некоторые свои поля или наоборот высрать слишком много лишней информации о связях с другими моделями.
Так вот, нужно ли мне делать промежуточный слой сущностей данных? То есть, сущности - это ПРОСТЫЕ data-value объекты, которые делают только то, что содержат некую инфу и, что важно, способны полностью без потерь конвертится в json и обратно хоть по 100 раз.
Короче говоря, нужна полная сериализация объектов моделей, чего не могут дать стандартные модели Laravel.
Еще, в ларавеле завезли resource providers, по сути тот самый слой между моделью и жсон, но только вот беда блять: опять вышло какое-то монстроузное говно, которое не обладает полной сериализацией.
>>1711001 На удивление на десятый раз заработало. Я просто не зная зачем точь в точь повторил то же, что делал до этого 10 раз. Dump autoload всегда делал 100%, composer.json такой же, как и все предыдущие разы. Чертовщина какая-то, хотя возможно что-то с инициализацией, т.к. первые разы просто начинал с создания composer.json, после чего IDE все остальное подхватывал, потом узнал что для этого есть специальный пункт меню. Хотя предыдущие несколько раз у меня и через этот пункт не выходило.
>>1711315 Тебе не приходило в голову получать из базы сразу JSON. Модели нужны для хранения логики приложения, active record нужен для crud операций. Получение json'а это отдельная песня.
>>1711551 Госпаде, с кем приходится сидеть в одном треде. >получать из базы сразу JSON Существует миллион причин, почему это полная хуйня. Навскидку: ты лишаешься всех возможностей сортировки, джоинов, индексов, реляционных отношений, короче всего, ради чего используют СУБД. >active record В ларавеле нет active record.
>>1711651 >Существует миллион причин, почему это полная хуйня. Навскидку: ты лишаешься всех возможностей сортировки, джоинов, индексов, реляционных отношений, короче всего, ради чего используют СУБД.
Не думал что у него там метаинформация может храниться без определенной схемы, по которой он никогда не будет сортировать и запросы строить?
>>1711696 Ты вообще жопой читал? Основное, что мне нужно — чтобы сущности данных могли полностью сериализоваться и десериализоваться в жсон/массив и обратно без потери данных.
Нет, смысл не в том, чтобы конвертнуть выпук из базы в нужный формат.
Нужен отдельный промежуточный слой сущностей данных, которые могут полностью сериализоваться и десериализоваться и чтобы им было вообще похуй, оттуда их создали — из базы, из жсона или из аллаха.
Стандартные модели ларавел, похоже, не могут дать этих возможностей, потому что не обладают полной се/десериализацией и объект модели, созданной из бд и объект модели, созданный из массива — это не идентичные объекты.
>>1711736 Чтобы было лучше понятно, нахуя оно мне надо: Разрабатывается сложное приложение с разделением на сильно независимые сервисы. Общее у них — только данные.
И надо, чтобы можно было в одном месте сделать >return (new User (name, email, password))->toJson(); А в другом >$user = User::fromJson ($json); И ты точно знал, какие поля есть в объекте юзер, при их изменении и добавлении новых об этом автоматически знал весь код.
Обычные модели ларавел, во-первых, вообще не обладают способностью к полной конвертации туда-сюда, во-вторых, содержат много лишней хуйни, а в третьих, мне кажется вообще хуевой идеей строить приложение вокруг объектов active record, когда добрым 80% кода вообще похуй оттуда объект высрали и какая СУБД на проекте, им нужны только данные в удобном надёжном ооп-виде.
>>1711736 Я тебе попытался объяснить что то, что ты делаешь не имеет никакого отношения к сущностям. Это чистые данные. Сущности и AR не предназначены для этого. Если тебе нужно просто отдать данные в форме JSON'а, то самый быстрый и эффективный способ избежать конвертации вообще, именно его я тебе и показал. Если тебе нужно пока какой-то причине сериализовать данные туда сюда, то для этого придумали хуеву гору сериалайзеров https://github.com/symfony/serializer https://github.com/nilportugues/php-serializer https://github.com/liip/serializer
>>1711745 Похоже на два магических метода, которые реализуются как два пальца при желание. Ну ок, не твой вариант.
>независимые сервисы Схема является внешней зависимостью к сервису значит? Посмотри протобаф, мб это как раз то, что ты хочешь.
>вообще не обладают способностью к полной конвертации туда-сюда Чуть дописать то реально. >содержат много лишней хуйни Ты ее не сериализуй. >хуевой идеей строить приложение вокруг объектов active record Это тебе правильно кажется, и дело даже не в ар. >нужны только данные в удобном надёжном ооп-виде Гугли домены. мимо
>>1711754 Все равно у меня ощущение что ты занимаешься хуйней. Если ты между червисами данные передаешь через апи, то все эти танцы нахуй не нужны. А если это происходит внутри одного приложения, то совсем пиздец.
В lumen можно добавить префикс к именам путей? Тут 'prefix' - для uri, а мне надо для генерации uri по именам, как в symfony (аннотация Route с параметром 'name' над классом-контроллером).
>>1711621 Я не ОП а дерьмо, но насчет банкомата ищи в этом треде по ctrl+f, ОП отлично расписал, это если ты уже изи мод сделал по жадному алгоритму. На счет лилички там же все в подсказке написано. Разбиваем на строки регуляркой по \n помню что у меня сразу воспринимать перенос энтером как \n не хотело, не помню что с этим сделал, но нашел ответ за 30 секунд на стакероверфлове. Впрочем можно и просто подобавлять до концов строки \n, это вроде не чит., и разбиваем эти строки на символы по "". Теперь циклом выводим в первой строке через | все первые символы, во второй все вторые и т.д. Сразу оно красиво выглядеть не будет, думаю догадаешься что с этим делать. А на будущее, всё это уже сотню раз обсосано в архиве с шапки, там есть поиск по всем тредам.
>>1656450 (OP) Сап. Помогите с Wordpress(ом). Есть форма. Клиент должен иметь возможность запросить информацию о том, какие есть магазины, рестораны, отели в определенном городе. Получается нужна база данных? Как это реализовать? В Wordpress есть специальные плагины или как это делается? Или нужно это реализовать самостоятельно при помощи mysql? Но нужно обязательно дать возможность владельцу сайта добавлять новые данные в магазин. Хелп
>>1712063 >>1712424 >Клиент должен иметь возможность запросить информацию о том, какие есть магазины, рестораны, отели в определенном городе. Получается нужна база данных? Нужна, там эта вся инфа будет храниться. Магазы, рестораны и отели это одна сущность,они относятся к какому-то городу, город тоже сущность.
>В Wordpress есть специальные плагины или как это делается? Или нужно это реализовать самостоятельно при помощи mysql? Почитай как через вордпресс добавлять новые сущности и задавать им какие-то аттрибуты, раз на вордпрессе магазы делают то думаю и такое можно без проблем.
Тут другой вопрос, такое ощущение что тебе поручили это сделать но ты сам не знаешь, вот и спрашивается нахуя. Если ты никогда ничего не делал подобного то у тебя вряд ли получится. Не думаю что тебе тут подскажут именно решение уровня копипаст, тут уж сам должен.
>>1712719 > брать платные курсы? а лучше с гарантированным трудоустройством, но такие курсы стоят бешенны бабок, не меньше 100 тыс в месяц. в моем случае - 120 мимо
По какому приницпу работают flash messages в yoba-фреймворках типа symfony? Это "одноразовые" куки или какой-то внеземной дженерик-код, который, допустим обволкавает ответ контроллера по типу middleware?
>>1713178 Если бы я делал флеш месседжы то я бы делал так: При инициализации проверял есть ли в $_SESSION по какому-то своему ключу флеш сообщения. Если есть то я бы их копировал в глобальный объект флеш сообщений на уровне пхп, который очистится после завершения запроса, и сразу после копирования удалял бы их из сессии.
Оператор clone применим только к объектам. У тебя же "скалярные" значения - строки, числа. Их копируют просто путем присваивания:
$x->isBoss = $y->isBoss;
В твоем случае это делать вообще нет смысла, так как при клонировании объекта его поля копируются (не клонируются) автоматически.
Волшебный метод __clone нужно писать только если у тебя в полях объекта хранятся ссылки на другие объекты. clone не создаст копии для этих внутренних объектов (а просто скопирует в клон ссылку на тот же обьъект), и это надо делать вручную.
Почти верно, но в условиях лучше было не писать сумму, а писать что-то вроде $anonSum > $compSum. Также, exit тут не требуется. Также, не предусмотрено, что выводить при ничьей.
сап всем сеньорам помидорам. нужна ваша помощь, аноны. выкачал себе локально проект с прода, подключил бд и пытаюсь локально его себе развернуть на апаче через http. но тут возникла проблема, в htacess предположительно висит залупа которая рерайтит мне с http на https. поэтому все пути и ссылки соответственно слетают т.к. он обращается по https а не http как мне надо. вот сам код https://ideone.com/oO8C1a если че как и че мне тут править чтобы запахало? уже по разному тыкался - но толку нихуя движок опенкарта если че
Психологические особенности или комплексы, попытка повысить свою самооценку за счет принижения других. Вот статья, которая содержит аналогичные претензии к другим языкам программирования: https://habr.com/post/315152/
Ну и вообще, как-то глупо задавать такой вопрос в PHP-треде. Если тебе интересно, почему кому-то кто-то не нравится, то наверно у него и надо спрашивать, почему, а не у того, кто не нравится.
>>1713293 Ты ввод ошибок то php-то сделай. На open server под видной по умолчанию есть. На opencart достаточно сменить данные домена и БД в конфиге и все должно работать. так было
Я вот чета не увидел у тебя рерайтов на https, может в глаза ебуся.
>>1713201 Да я сверху написал что понял уже, прошу прощения за дэбильный вопрос. Запутался в официальной документации, думал что даже на обычные поля идет ссылка, а не копия.
>>1713306 > На opencart достаточно сменить данные домена и БД в конфиге и все должно работать и щас так есть. но проблема в том что я как раз до того как на сайт то зайти их настроил, и доступ к базе предоставил, через пма там накатил дамп бд и все ок встало. пма норм пашет, админка тоже, а вот основной сайт почему то мозги ебет. в логах апача ниче нет естессно.
На чем пишете в 2020-м? Symfony, Laravel или может ждете Yii3? Как с доходом вообще? Сам выкатился год назад с пхп, вот интересно. Вакансии есть вкусные?
>>1713704 >Наверное потому что избыточно и не нужно. Если проекты небольшие уровня лендинга, то мб. Но есть же всякие вукомерсы, где ооп всяко лучше, чем горы функций
>>1713896 >На чем пишете в 2020-м? Symfony, Laravel или может ждете Yii3? Laravel в основном, хочу на Symfony прод пописать, но без опыта этого самого симфони не берут пидарасы. В прошлом писал на Yii2. Могу сказать, что Yii3 ждать не стоит, это мертвый фреймворк.
>Как с доходом вообще? Очень грустно, если не в дс живешь. Второй месяц ищу удаленку на 100к+. До этого чуть меньше на удаленке получал (лара).
>>1714108 После ухода китайского мейнтейнера на голенг разработка yii2 буквально встала. Макаров едва с поддержкой справляется. И сейчас он соло уже лет 5 пилит yii3. Надо ли говорить, каким устаревшим говно yii3 будет на релизе?
Пока белые люди выкатывают апдейты новейших версий Симфони и Лары чуть ли не каждую неделю.
Есть один самопальный блог чисто на ПХП, нужно сделать к постам комментарии. Но у меня затуп: Как сделать, чтоб комментарий привязывался именно к тому посту, к которому он будет написан?
Как бы, получится, посты лежат в одной таблице, комментарии - в другой. А как их свести вместе?
>>1714180 Мой вопрос не о том, как таблицы объединять, а в том, как привязать новое сообщение к уже опубликованному посту, который на странице в виде чистого текста. При чем тут SQL вообще?
>>1673254 Видимо, ты - это я через год, только я инженегр. Почему вкатиться не можешь? Не зовут на собесы? Или скилы надрочить не можешь? Получается планка входа в пхп не такая уж и низкая как все говорят. И кстати почему не пробуешь вкат на CMS?
Есть парсер. Открываем страницу парсера, парсер отрабатывает 20 секунд, затем выдает рефреш и заново отрабатывает 20 секунд, и так до бесконечности, тоесть автоперезагрузка страница после завершения.
Необходимо это реализовать без участия браузера. И желательно без расширений для линукса (хотя если есть хорошие, я бы посмотрел). Парсер нельзя запускать одновременно в более чем 1 копии, и парсер должен заново запуститься, как только он завершит свою работу. Спасибо
Ты плохо сформулировал задачу. Тебе надо с нуля написать это систему, сделать отправку в уже готовой системе или что-то еще? Если тебе надо создать систему обмена сообщениями с нуля на MySQL, то можно сделать ее на основе таблицы пользователей и таблицы сообщений в MySQL.
Ты можешь закомментировать RewritwRule, который отвечает за редирект. Если не знаком с реврайтами, можешь почитать статьи вроде этой, хотя документацию от Апача они не заменят: https://habr.com/ru/company/sprinthost/blog/129560/
Опчик, взглянешь на вектор? https://github.com/kydva/vector Из недостатков самому сразу приходит в голову то, что при изменении базовых свойств профессии я по сути просто меняю свойства уже существующих работников, а при создании нового работника этой профессии свойства будут предыдущими. Не придумал как это нормально сделать. Еще очень не нравятся функции padLeft и padRight. По всей логике для каждого столбца нужно задавать одинаковое значение отступа, но на практике выходит херня, и пришлось для каждой строчки отступы подбирать. Также интересно выяснить несколько моментов с константами класса. Не придумал куда их поместить, поместил в Employee, но это плохо, родитель знает о ребенке, нельзя будет полноценно создать новую профессию без добавления новой константы в родителя. Было бы идеально помещать эти константы в сами классы профессий, типо Engineer::ENGINEER, Manager::MANAGER и т.д., я сначала хотел так и сделать, но меня со всех сторон закидало ошибками, уже забыл почему. И можно ли в тайпхинте для функции указать, что её аргументом должна быть константа класса? Я уверен что ты несомненно найдешь намного больше дерьма и подводных камней в этом коде, и буду очень этому рад. Раньше ничего на проверку не кидал, но думаю что в этом случае важно сразу отучить меня от каких-то вредных привычек и приучить к хорошим в этой парадигме ООП. Алсо, приступать к кошкам-мышкам или к будильнику и гостиннице?
Аноны, объясните с какой точки для апача/нгникса начинается корень сайта? Суть вот в чем: Я на работе пердолюсь с ларавел, там поставил homstead на виртуалке, все работает. Дома почему то виртуалка не встала, и я развернул на опенсервер. Опен сервер требует как папку домена - каталог myproject/public; Я всегда думал что папка домена - это корень сайта, и апач/нгикс не имеет возможности идти ниже. А ту фактически vendor и все барахло мое находится ниже паблик.
Опять же автозагрузка классов должна понимать от какого корня считать нэймспэйсы (только вот задумался) Подскажите, или дайте ссыль что почитать
Веб-сервер не должен вылезать за корневую папку, это верно. А вот PHP скрипты могут лезть куда угодно. Потому мы кладем index.php в папку веб-сервера, а он дальше уже лезет куда хочет (куда мы пропишем).
Корневая папка веб-сервера специально выделяется отдельно, чтобы нельзя было снаруже скачивать или запускать произвольные файлы.
Композер (и его автозагрузчик) считает корневой ту папку, где расположен composer.json.
>>1715322 Бля, долбоебы, котрые пишут про эту залупу, вы хоть один проект на этой хуйне видели вообще? Вы блядь еще про корутины в пхп вспомните. Вся асинхронная залупа на пхп до выхода восьмой версии это просто мысленный эксперимент, подрочить судьбу, посмареть как оно вообще может работать. Это нихуя не продакшен реди блядь.
>>1715403 Сразу открываешь issues, а там пацаны внезапно выясняют что Guzzle не асинхронный. И такой хуйни ты глотнешь ведро, причем дырявой ложкой. В гугле можно что угодно найти. Хоть дрочащих карликов, хоть фото пизды чьей-то мамаши. То что ты у себя дома пишешь для души тоже мало кого ебет. Ты проект на этой залупе в продакшене видел? Реальный фидбек у тебя есть?
>>1715535 Что на 2? На энжинксе? Да, он шустрее, гораздо. Потому в него так и вцепились сейчас компании. Но у апача тоже 1.5 плюса есть. Тебе эти знания никак не мешают юзать то или иное сейчас.
Что ты так нервничаешь? Есть куча задач, которые спокойно решаются без асинхронности. И, кстати, я когда-то давно для себя еще на curl писал парсер, качающий во много потоков, когда про ReactPHP никто и не слышал.
Парни, нужна ваша помощь. Если есть спецы – подскажите проверенное решение по интеграционному тестированию внешних апи на symfony, guzzle, phpunit. Пробовал php-vcr, для записи реквестов пойдёт, но в самих тестах глючит. Может кто сталкивался? На гитхабе полно всяких guzzle middleware, но они последний раз обновлялись 3-5 лет назад. Что нужно: в тестах брать реквесты из файла.
>>1715896 Пиздец, поставь open server, там включи xdebug и накати плагин на свой блокнот. Как ты будешь переменные смотреть с массивами и точки остановки? echo и var_dump каждый раз?
>>1716708 >добавлять echo "\n"; - это сделает перевод строки. я сделал PHP_EOL >>1716708 я это читал.их доки местами слишком сухие,приходиться гуглить >$$name - это обращение к переменной, имя это мне еще вчера дошло
> $isBoss = isset($worker[3]) ? true : false; isset() уже возвращает true/false, потому тернарный оператор не нужен.
> $newDepartment->setEmployee($employee); Лучше назвать метод addEmployee().
> strlen($string) Надо использовать mb_strlen, чтобы корректно работало с кирилицей.
При создании профессии ты переопределяешь свойства вроде salary. Но во-первых, это никак не документировано, во-вторых, никак не проверяется. Если бы ты вместо этого сделал в Employee абстрактные методы вроде getBaseSalary(), то эти 2 проблемы были бы решены.
> const ANALYST = Analyst::class; Можно было не определять эти константы, а сразу использовать в коде Analyst::class.
То, что относится к антикризисным мерам, у тебя размазано по нескольким классам (департамент, работник), а лучше было сделать это в виде класса или нескольких классов (по классу на меру), метод в которых принимает компанию и применяет к ней меры. Тогда у каждого класса будет своя четко очерченная зона ответственности. При твоем же подходе, нет класса, отвечающего за антикризисные меры, и наоборот, в классах вроде компании или департамента засунуты методы для решения отдельной задачи, а не универсальные методы, которые можно использовать и для других задач.
Методы вроде добавить/уволить/найти работника, назначить босса - универсальные, а вот методы вроде cmpForRemoving() относятся к задаче антикризисных мер и делать им в классе Employee нечего.
Тут можно было просто сделать 3 отдельных метода, и название вроде changeSalary() читалось бы лучше.
> private array $employeesOfDepartment; Лучше просто $employees.
Конструктор обычно пишут в начале класса, а не в середине.
> getCountOfEmployees Лучше countEmployees().
Вывод таблицы тоже лучше делать отдельными функциями/классами и не помещать в Company.
> Алсо, приступать к кошкам-мышкам или к будильнику и гостиннице? Наверно, лучше делать гостиницу и двигаться к задаче про список студентов.
> Из недостатков самому сразу приходит в голову то, что при изменении базовых свойств профессии я по сути просто меняю свойства уже существующих работников, а при создании нового работника этой профессии свойства будут предыдущими. Не придумал как это нормально сделать.
Если такая потребность есть, можно сделать объект Профессия и в нем хранить и менять числа. В работников передавать один и тот же экземпляр объекта и тогда можно будет разом для всех что-то поменять.
> но на практике выходит херня, и пришлось для каждой строчки отступы подбирать.
Надо использовать mb-функции.
> Не придумал куда их поместить, поместил в Employee, но это плохо, родитель знает о ребенке, нельзя будет полноценно создать новую профессию без добавления новой константы в родителя.
Лучше использовать названия классов как константы. А так, вариант с Engineer::PROFESSION тоже рабочий.
> И можно ли в тайпхинте для функции указать, что её аргументом должна быть константа класса?
Увы, нет. В других языках для этого есть enum (перечисления, выбор из нескольких опций), а в PHP они пока только есть решения вроде такого: https://stitcher.io/blog/php-enums
<script src="otherdomain.ru/s/script.php?y=2020" ></script> Скажем, я владелец домена otherdomain.ru. Мне необходимо отловить значение параметра "y" и не его основе выдать соответствующую модификацию скрипта.
У меня пока примерно так (я юзаю yii2) actionScript($y) { header('Content-Type: application/javascript'); return "alert($y)"; }
Но тут скрипт маленький, а если мне надо выдать js код длинной в 200 строк? Я же задолбаюсь его писать как строку.
>>1717822 ps более того, в выдданом скрипте должны быть использованы некоторые констаны из моего сервера, то есть actionScript($y) { header('Content-Type: application/javascript'); return "alert($y)".SomeModel::TYPE; }
>>1717754 Поясни, что неудобного для новичка? Вот прям по пунктам. Он же основы учит, ему как раз автокомплит на данном этапе не нужен. А так он функцию написал, если ошибку допустил, то увидит сообщение. Будет наука писать код думая, а не просто на клавиши давить.
>>1717769 Ты учишь основы — это не про скрипты. Тем более у тебя интерактивные сейчас сурипты, за каким ты их хуем в вскоде пишешь? Стильно, модно, молодёжно? Тебе сейчас понять синтаксис надо, набить руку набирая некий код. IDE/редактор с подсветкой, когда ты знаешь, что ты пишешь. Ты же сейчас выдумываешь сфер чесуого коня в вакууме.
>>1717869 Интерактивный режим удобен, если нужно попробовать буквально пару строк. Иначе начинаются траблы в работе с блоками кода. Нет банальной копипасты, не вынесешь блок кода в функцию + иде подсветит тебе синтаксические ошибки
Подскажите в чем ошибка <?php $regexp= "/^(\+7\8)\d{10}$/ui"; $subject = '8-911-404-44-11'; preg_replace('/[^+\d]/','',$subject); if (preg_match ($regexp, $subject)) { echo 'ваш номер: {$subject}'; } else { echo "Введите номер ввиде: в начале 8 или +7, потом идут 10 цифр"; }
>>1719734 >Нормально ли когда модель User напрямую работает с ордерами? Не нормально. У тебя один класс зачем-то лезет в кишки другого. Ну и елоквент модель != модель М из MVC
Двачую, ссд нужен, у меня комп мощный но на старом харде безбожно лагало, попробовал через китайский ссд с алика - летает, ну плюс ещё лишние плагины можно отключить
>>1717552 Спасибо большое что посмотрел. Понял-принял. Сейчас наконец-то появилось немного свободного времени, сделал гостиницу, пол дня пытаюсь запилить нормальный алгоритм для вот этой функции: >то же самое, но при отсутствии одного подходящего номера для Гостей разрешается заселить их в несколько номеров, опять же, начиная с самых дешевых. Например, приехало 3 Гостя, но все 3-местные номера заняты и мы выделяем 2 2-местных, или 3 1-местных или 1-местный + 2-местный. Пока что сделал по-жадному, к примеру: группа из 6 гостей, есть номер на четырех и два номера на трех человек, она сначала всегда выберет номер на четырех, не смотря на стоимость, после чего для двух оставшихся гостей уже выберет номер на трех. Что-то уже исчерпал мысли как это нормально реализировать, по идее это поиск пути на графе? Если так, то просто все варианты перебирать нельзя, так как там огромнейшие факториалы будут выходить при большом количестве комнат. А на счет других функций, вроде бы все хорошо, буду рад если глянешь https://github.com/kydva/HotelOOP Все функции я протестировал в самых разных ситуациях дебаггером, но к сожалению почти ничего вывести вардампами чтобы показать нельзя, так как Комнаты в истории имеют ссылки на Гостей, которые в них побывали, а Гости в истории имеют ссылки на Комнаты, в которых они были. Выходит бесконечная рекурсия. Насколько я понимаю, программу это грузить не должно, так как это обычные ссылки, но вардампы и прочее пытаются максимально вывести все ветки. Алсо, начитался про хлеб, решил классы особо не плодить.
Анчоусы, запрашиваю помощи. Не срабатывает часть условия.
Не вижу очевидных ошибок, мне возвращается вардамп переменных и тишина. Тот же самый запрос в sql работает корректно, но при попытке внести данные через ПДО чот не выходит. На синтаксис не ругается, данные в переменных корректные.
Элементы в масссиве содержат ключ и значение и упорядочены, то есть массив "помнит", в каком порядке в него вставлялись значения. Элементы в массиве хранятся в порядке вставки, и например, можно сделать массив, где ключи идут не подряд: $x = [1 => 100, 0 => 200];
start это номер элемента, начиная с 0. То есть если start = 0, то берутся элементы, начиная с самого первого.
1. Dependency Injection - это все лишь о том, что в функцию-конструктор передается объект сервиса? 2. Dependency Injection Container - это просто класс, который в себе имеет массив, в который через сетеры/гетеры можно записывать сервисы? 3. Контейнер нужен для того, чтобы в провайдеры просто передавать несколько зависимостей, так?
Может есть какой нибудь хороший ресурс, или книга, в которой это хорошо разжевано. Потому что я сколько читаю про эти DI, но в итоге только путаюсь.
Анонычи, поясните за почту, а точнее за всю цепочку необходимых инструментов. В пхп есть функция mail, на сколько знаю она дергает линуксовую "mail" функцию которая отправляет почту. В винде такой нет. Значит я должен поставить что то Типа phpMailer. Но что в винде по итогу отправляет почту? Должен быть какой то почтовый клиент же. Я отправлял почту через smtp гугла на свой ящик, но немного плыву в цепочке необходимых этапов.
Использую IDE phpstorm. Запускаю свои скрипты в самом же IDE таким образом, кликаю на свободном поле редактора, далее появляется меню (картинка 1). Я нажимаю на Run -> .php(PHP script), но бывает я промахиваюсь и выбираю Run -> .php(JavaScript), я получаю результат, но уже в браузере. И потом уже производя те же действия я не могу запустить код в самом IDE, так как мне уже по умолчанию предлагается вариант Run -> .php(JavaScript) вместо нужного мне Run -> .php(PHP script) ( картинка 2) . Вопрос как мне запустить мой код в самом IDE в этой ситуации, когда мне предлагается запустить код в браузере с помощью JS
>>1724415 Ну как что не так? Гавнокод лютейший, я пару минут честно пытался вчитаться. что ты хотел написать в конце 15й и 16й строки? Точно оператор верный?
>>1724675 Там примеры на 5ой пыхе вроде, да и в целом подход устарел. Сейчас же всё на фреймворках, вся эта низкоуровневая ебля зарыта под капотом. Ну и голый жс на фронте - сейчас везде реакты
> The Windows implementation of mail() differs in many ways from the Unix implementation. First, it doesn't use a local binary for composing messages but only operates on direct sockets which means a MTA is needed listening on a network socket (which can either on the localhost or a remote machine).
На Линуксе, да, команда mail() просто запускает программу sendmail и передает ей письмо. На Windows она соединяется с почтовым сервером по протоколу SMTP с параметрами из php.ini. Почтовый сервер (наверно) может быть установлен и локально.
На практике, эту функцию обычно не используют напрямую, а используют библиотеки вроде Swiftmailer, у котррых есть поддержка разных протоколов, вложений, HTML писем итд.
Возвращает значение из функции и завершает ее выполнение. Если ты напишешь вызов функции так:
$x = some_func(); ...
То будет вызвана функция some_func(), и когда в ней встретится оператор return, например return 5; то функция "вернет" значение 5 (то есть, оно попадет в $x) и далее будет выполняться код, который идет после $x = ....
DI - это идея, что "зависимости" (объекты и параметры, которые нужны данному объекту для работы) должны передаваться в объект снаружи, а не объект сам должен их как-то создавать или получать. Если что, у меня есть урок по теме https://github.com/codedokode/pasta/blob/master/arch/di.md
Передавать зависимости можно в конструктор (обязательные зависимости) или в метод (используется для необязательных зависимостей, без которых объект может работать, например, логгер).
Dependency Injection Container - это штука, которая знает, кто от кого зависит и умеет создавать объекты и их зависимости, избавляя от создания всех объектов-зависимостей вручную. То есть ты просто просишь "дай мне сервис X" и не думаешь о том, что ему надо передать - контейнер сделает это сам. Есть контейнеры, где зависимости описываются вручную в конфиге, есть контейнеры с autowiring, когда контейнер по тайп-хинтам в конструкторе сам "догадывается", что надо передать.
Контейнер нужен, чтобы не запоминать, кто от кого зависит и вручную не создавать десятки объектов. Чтобы можно было просто написать:
>>1724956 >Знание фреймворка или реакта не отменяет необходимости знать основы (работа с БД, формами, шаблоны). Я это не отрицал. Но тот подход, что в книге, где мы пилим приложуху из говна и палок, остался только в дремучем легаси. Так что приучаем себя сразу писать на современном стеке
>>1725079 >а что,на чистом пхп это будет выглядеть иначе или уже зашквар? Это будет 1 из 2: 1. Пишем одноразовый говнокод, потом выкидываем 2. Пишем свой фреймворк, потом пишем само приложение
>>1725111 >В моей мухосрани вроде без фрейморков пишут удачи распутывать древнюю легаси лапшу, вручную обновлять зависимости и заливать по фтп >и какой-то цмс еще применяют тут без комментариев
То $a и $b указывают на одну и ту же область памяти. Это значит, что если мы в любую из этих переменных запишем число, то оно попадет в эту общую область памяти и команды
echo $a; echo $b;
Выведут одно и то же. Так как они выводят содержимое этой области памяти.
Для сравнения, при копировании (без &) значения:
$a = $b;
$a и $b указывают на две разные области памяти и значение копируется из одной в другую.
Ты путаешь обучение и работу. На работе, конечно, пишут на фреймворке, своем или готовом. А в процессе обучения лучше идти постепенно. Сначала освоить, как вообще обслуживать запросы, а только потом делаеть это с помощью абстракций фреймворка.
А то люди берутся сразу за сложное, а потом жалуются, что ничего не понять или бросают вообще обучение. Какой смысл копировать из туториала код, не понимая, что он делает?
Получается, ты предлагаешь, не изучив сложение и умножение, браться сразу за решение уравнений. Так же и фреймворк, вроде Симфони, его будет очень тяжело осваивать без базовых знаний.
>>1725137 В той книге реально устаревший подход. Часть кода оттуда просто не запуститься, либо будет ругаться депрекейтедами. В добавок после этой книги придется почти с нуля переучиваться на современный инструментарий разработки.
Хотите основ - возьмите свежую php 7.4, туториал по ней и играйтесь на здоровье. Зачем сразу в легаси лезть?
$a = 3; - записывает 3 в область памяти, выделенную под $a $b = &a; - $b теперь указывает на ту же область памяти, что и $a, где хранится 3 $a = 4; - в эту область памяти записывается 4 print $b; - выводит содержимое этой области памяти на экран
>>1724975 Ну давай разберем по частям тобой написанное. >Вот пример передачи зависимостей классу-валидатору public function __construct(UserTableGateway $userTableGateway) { ... } public function setLogger(Logger $logger) { ... } setLogger() это пиздец отвратительная практика. Это по сути и есть использование объекта как глобальной переменной. Я на такую хуйню насмотрелся. Где-то в коде используется логгер, а как он попал в объект и когда загадка. Через гидратор или через конфиг наебенили. Так потом еще и меняют этот логгер ебаный во время выполнения. Был такой, а стал сякой иди ищи где и нахуя, и не накроется ли все пиздой когда ты туда засунешь новый логгер.
>Registry и чем он плох >Чем плох ServiceLocator >Чем хорош DI container А вот тут пиздежь чистой воды. Твой DI контейнер и есть и регистр, и сервис локатор. Твой пример с Pimple полностью повторяет предыдущие два. И тут все правильно, потому что DI контенер - это объект, способный находить или создавать другие объекты, который хранит в себе другие объекты.
Мы просто решаем, что на определенном уровне мы к нему не обращаемся. Обычно это где-то около контроллеров. Например контроллер мы получаем из DI контейнера, используя DI контейнер как сервис локатор, а все объекты, которые используются дальше должны быть заинжекчены в контроллер. Возвращаясь к примеру выше. При использовании DI подхода логгер в принципе может попасть в наш контроллер только через конструктор, потому что для использования сеттера нужно сначала объект логгера где-то взять, а это либо DI контейнер и тогда мы превращаем его в сервис локатор, либо создать его на месте и тогда мы нарушаем принцип инверсии зависимостей.
Насчет инжекта декораторов очень мутная тема. В симфони это есть, но хоть немного сложный конфиг разбирать это пизда, получается код в коде, максимально уебанское использование метапрограммирования. Лучше фабрики использовать.
По поводу написания своего контейнера. Есть PSR-11, который описывает интерфейс. Ну а в целом это самый последний велосипед для джуна, что угодно будет проще накостылить чем вменяемый контейнер. Лучше взять готовое, как написано, симфони или пимпл и мозгу не ебать.
Я не совсем понимаю в отладке , если я хочу зайти внутрь функции, а не просто перейти на следующую строчку, надо нажимать F7 ( step into ) Но , где-то у меня получается , а где-то нет , вот где не получилось внутрь зайти с помощью step into , там получилось с помощью force step into В чем разница между ними ?
Не знаю, где спросить. Есть сайт на Опенкарте. Нужно переделать его под Вордпресс с Вукоммерсом. Сохранив полностью дизайн. Сколько это может стоить и сколько по времени займёт? Хотя бы примерно.
> Где-то в коде используется логгер, а как он попал в объект и когда загадка.
Обычно использование инъекции через метод используется для необязательных зависимостей, которые могут отсутствовать. Поэтому тебе не важно, как он туда попал, главное, что он может быть, а может не быть. Но если хочется понять, как он туда попал, то можно воспользоваться функцией вроде "Find Usages" в IDE. Или поставить брейкпойнт и посмотреть стектрейс.
Соглашусь, впрочем, что работать с зависимостями, которые могут быть, а могут не быть, не очень-то удобно.
> Твой DI контейнер и есть и регистр, и сервис локатор.
Принципиальное отличие DI в том, что класс ничего не знает про контейнер, в то время как при использовании ServiceLocator класс знает о нем.
> При использовании DI подхода логгер в принципе может попасть в наш контроллер только через конструктор,
Нет, инъекция возможна не только через конструктор, но и через методы.
Если ты используешь встроенный в PHP сервер, то просто указывается имя файла-роутера в командной строке. Если Апач, то через mod_rewrite запросы направляются на единственный скрипт, в php-fpm + nginx имя скрипта прописывается в конфиге Nginx.
В качестве абстрактных методов, возможно, лучше было сделать методы вроде getBaseRate(). Так как твой код обязывает реализовать метод setDefaults(), но не обязывает задавать в нем значения базовых величин.
Кстати, в 7.4 разрешили ставить типы у свойств классов, стоит это использовать.
> public function addEmployees(string $className, int $rank, bool $isBoss, int $count): void
Это не очень удачная конструкция, так как она не позволяет добавить произвольного работника. Представим, что мы завтра создали новый класс профессии, с конструктором с 4 аргументами. Твоя функция не умеет передавать в конструктор 4 аргумента, и не позволит создать такого работника. Логичнее делать метод вида addEmployee(AbstractEmployee $e), которая позволяет добавить любого работника, если он унаследован от базового класса.
Да и не задача Департамента создавать работников, он может нанимать уже созданных.
> //Возвращает сотрудников c переданным рангом из переданного массива > public function getEmployeesByRank(int $rank, array $employees): array
Эта функция странная. Если она получает список работников снаружи и не использует свойства департамента, то что она в нем делает? Она же не относится к нему никак. Надо поместить ее куда-нибудь в другое место, например, класс EmployeeUtil или CompanyUtil (вспомогательные методы для работы с сотрудниками). Создавать работников или департаменты лучше отдельно.
> //Повышает ранг сотрудников из переданного массива на единицу > public function increaseEmployeesByRank(array $employees, float $percent): void
Эта функция очень специфичная и заточенная под антикризисные меры. Все, что к ним относится, логичнее поместить в отдельный класс АнтикризисныйКомитет. У каждого класса должна быть своя зона ответсвенности, а у тебя код для антикризисных мер размазан по разным классам. Плюс, если ты для каждой новой задачи будешь добавлять методы в Департамент, он превратится в монстра - God Object, а это плохо.
Лушче сделать зоной ответственности Департамента управление списком сотрудников, без антикризисных мер или создания сотрудников.
В Департамент можно добавлять методы, но они должны быть в его зоне ответственности. Например, метод "отобрать Работников по фильтру" или "назначить босса" или "уволить сотрудника" - это подходит. Это универсальные методы. А "уволить часть инженеров из-за кризиса" - явно нет.
> public function applyMeasure1(Company $company): Company
Тут слишком большая глубина отступов. Тяжело такое читать. Также, тут проще исключить босса из кандидатов на увольнение с помощью array_filter + анонимная функция, и отобрать 40% с помощью array_slice.
Вообще, можно было сделать примерно так:
- отбираем кандидатов на увольнение по условию вроде fn($e) => $e instanceof Engineer && !$e->isBoss(). Удобно использовать анонимные стрелочные функции как критерий отбора. - сортируем по рангам - берем 40% с помощью array_slice - увольняем
Код будет более линейный и простой.
Для замены босса логично было бы добавить метод в Департамент (setBoss()), а не менять статусы вручную.
Так, для начала неплохо, но надо бы разобраться с зонами ответственности классов и четко понимать, какой метод куда надо добавить. На этой задаче как раз можно этому учиться.
>>1726650 >Если ты используешь встроенный в PHP сервер, то просто указывается имя файла-роутера в командной строке. Если Апач, то через mod_rewrite запросы направляются на единственный скрипт, в php-fpm + nginx имя скрипта прописывается в конфиге Nginx. Спасибо. Я вообще в правильно направлении иду? Во фреймворках также все сделано?
>>1726650 >Но если хочется понять, как он туда попал, то можно воспользоваться функцией вроде "Find Usages" в IDE. Или поставить брейкпойнт и посмотреть стектрейс. Нихуя ты простой. Нашел ты использования. В трех местах в коде через setLogger() устанавливается логгер ЯВНО. А есть такая тема как гидрация. Когда специальный сервис дергает сеттеры и передает туда что нужно НЕ ЯВНО, например из конфига. Я говорю о ситуации когда тебе нужно передать в метод setLogger() свой логгер. Ты не знаешь есть ли там уже логгер и не знаешь что будет если ты его заменишь. Не бывает "не обязательных зависимостей" зависимость либо есть, либо её нет. Еще пиздецовее все становится, когда есть еще и геттер. Тут уж вообще хуй поймешь куда этот логгер попадет в итоге. А решается это именно инекцией через конструктор. Если ты так пишешь, то земля те пухом, но не надо рассказывать что это нормально. Это прямой антипример использования DI контейнера.
>Принципиальное отличие DI в том, что класс ничего не знает про контейнер Это не отличие самого DI контейнера. Для того чтобы заинжектить зависимости тебе нужно получить исходный объект из контейнера. Используя его как сервис локатор. Ты тут вообще противоречий не видишь?
>Нет, инъекция возможна не только через конструктор, но и через методы. Кек. А где ты возьмешь объект логгера чтобы передать его в метод контроллера? Ведь "класс ничего не знает про контейнер".
Аноны, никак не могу сообразить. Как засунуть кнопку внутри пыха? Есть такой код <script src="https://ideone.com/e.js/LmgZhF" type="text/javascript" ></script> Он выводит список всех таблиц sql и пытаюсь сделать, чтобы рядом с каждым результатом была кнопка,которая будет выполнять открывать необходимую таблицу подробно. Соответственно кнопка должна быть внутри цикла, но конструкция выше разумеется работать не будет. Оно понятно почему, я для наглядности. А вот как сделать правильно?
>>1727050 Когда научусь обходиться без)) Я в php нубяра (как в прочем и везде) и поэтому возникает много вопросов) А код ужасен до безобразия))) Как будто кто то просто охапку дров кинул и крикнул "Работай!"
>>1727230 Поверь, тебе не зря советуют не мешать пхп и хтмл, гугли MVC. А вообще троллей полон тред, это наверное змееебы, пэха их выдавливает из вэба.
>>1727241 >пэха их выдавливает из вэба Он в целом пыхе в вебе не угрожал никогда и не угрожает пока что. Кое что делается, но слишком мало, чтобы о какой-то конкуренции вообще говорить. Ах да, я змееб.
>>1727259 Этот самый огород в виде разделения слоев приложения сократит число проблем при разработке и отладке. Даже в рамках одного файла можно это сделать, выделить часть под работу с бд, часть под шаблон, часть под логику
>>1726753 >нужно передать в метод setLogger() свой логгер. Ты не знаешь есть ли там уже логгер и не знаешь что будет если ты его заменишь. А что даже в теории может быть? Логгер логгирует, ну перестанет в одно место логгировать, начнет в другое.
>Не бывает "не обязательных зависимостей" зависимость либо есть, либо её нет. Хуя, ты скозал? Логгер как раз один из немногих примеров не обязательных зависимостей, если он никак не влияет на работу класса, то он может быть, а может и не быть, похуй вообще. То что в самом классе может не быть проверок на null, это уже не ко мне вопросы
> тебе нужно получить исходный объект из контейнера. Используя его как сервис локатор. Скажи мне что плохого в том чтобы дергать из контейнера объекты прямо в контроллере?
>>1727559 >А что даже в теории может быть? Логгер логгирует, ну перестанет в одно место логгировать, начнет в другое. Речь о подходе. Когда у тебя весь код так написан пиздец полный. А я такое видел не раз. Ирония в том, что инъекция зависимостей для того и нужна что бы с этими проблемами бороться. А чел начал статью про DI, и тут же наебенил говна.
>Хуя, ты скозал? Логгер как раз один из немногих примеров не обязательных зависимостей Кароч открываешь свой класс, там в самом начале блок namespace и use. Так вот все что в блоке use это зависимости. Если любого из классов прописанных в use не будет, то твой код просто не будет работать.
>Скажи мне что плохого в том чтобы дергать из контейнера объекты прямо в контроллере? Нахуй ты меня спрашиваешь? Ты спроси типа, который написал что "класс ничего не знает про контейнер, в отличие от сервис локатора". Я то как раз пишу что это отличие именно в том где мы перестаем дергать контейнер. Договорились в контроллере, значит ок, только в контроллере. Договорились на унылый секс в два ночи, значит дергаем в домене.
И опять я здесь со своими нубо-проблемами. Такая задачка. Есть таблица sql "table1" В ней есть поля id, name, code, normal. Как оформить поисковой запрос sql, чтобы он дал мне значение из поля 'name' соответствующее известному значению и записаному в переменную $det из поля 'code'. Полученное значение я должен так же записать в переменную, чтобы использовать в следующем sql запросе. Сейчас запросы выглядят так и дают фатал, mysqli_result не может конвертировать запрос тот, что с переменной $add. $link и $link2 соответствуют подключением к разным базам. Да, эти таблицы в разных бд. Переменные $det и $score абсолютно рабочие и проверены, sql запрос к table2 с ними нормально работает. https://pastebin.com/HpHPDMm9
двач, не обоссывай а лучше подскажи. как реализовать на сайте мультирегиональность? типо чтобы когда я захожу на abu.mysite/ меня рероутило например на abu.mysite/moscow и где будет соответственно шаблон с шапкой " Привет, анон из Москвы " и соответственно метатегами. ну и дальше чтобы вложенность была в стиле abu.mysite/moscow/catalog/dragon_dildo сразу скажу что движок - битрикс
>>1726763 Продолжение вот этого. Все здорово, скрипт аккуратно в табличку выводит список таблиц, рядом с каждым есть кнопочки важные. А теперь я пытаюсь записать что то в эти таблицы, но как мне идентифицировать нужную таблицу при вызове INSERT INTO? Взяв {$row[0]}\n из этого скрипта https://ideone.com/e.js/LmgZhF я получил INSERT INTO {$row[0]}\n SET... и так далее. Такая конструкция работает только для первой таблицы. В какую сторону копать? Как сделать имя таблицы из переменной имея только вывод всех таблиц через цикл while?
>>1726651 Спасибо большое что проверил, у меня еще есть несколько вопросов:
> В качестве абстрактных методов, возможно, лучше было сделать методы вроде getBaseRate(). Так как твой код обязывает реализовать метод setDefaults(), но не обязывает задавать в нем значения базовых величин.
Как понимаю он должен так выглядеть: public function getBaseRate(): float{ return 800; } Меня смущает то, как потом менять значение ставки. Просто изменять этот метод?
> Да и не задача Департамента создавать работников, он может нанимать уже созданных.
А разве там не требуется применять принцип композиции, у нас же работники не могут существовать отдельно от Департамента?
> Также, тут проще исключить босса из кандидатов на увольнение с помощью array_filter + анонимная функция, и отобрать 40% с помощью array_slice.
>Сократить в каждом департаменте 40% (округляя в большую сторону) инженеров, преимущественно самого низкого ранга. Если инженер является боссом, вместо него надо уволить другого инженера, не босса.
Как я понял из условия 40% мы берем от всех инженеров в не зависимости от того является он боссом или нет. Например, у нас 11 инженеров в департаменте и 1 из них босс, тогда ceil(11 0.4) = 5 инженеров на увольнение, а если перед этим убираем босса, тогда ceil(10 0.4) = 4 инженера на увольнение. Или я не правильно понял условие?
>>1725048 Хуйню пишешь. Без своих велосипедов - ты даже не "оператор" фреймворка, ты дно. Вот тебе и лицо современного вкатывания в ойти. Можно разве что порадоваться тому что если большая часть вкатывальщиков так мыслят как ты излагаешь - то все у людей которые стараются глубже понимать то на чем работают - все будет хорошо.
>>1728181 Я хуею с таких программистов. А учиться программировать ты как будешь? Конкретно код писать, думать, искать решение? Если ты думаешь что до маня-сеньора ты вырастешь когда прочтешь все исходники Симфони? Программист растет только когда код пишет. Он думать учиться в нужном русле.
>>1728268 В каждой фирме на работе свой фреймворк пишут? Или другой опенсорс? Бизнес задачи и так дают подумать, если это что-то сложнее круда, нужен какой-то фоновый процессинг, свои модули писать, микросервисы. По структуре задачи схожи с написанием фреймворка, по сути - другая предметная область. Так мб стоит учиться более релевантному программированию, а не изобретать очередной велосипед?
>>1728379 >>В каждой фирме на работе свой фреймворк пишут? Или другой опенсорс? В некоторых пишут. Твое "релевантное программирование" это какой то маня мирок. Ты и на фреймворке нихуя толкового не сможешь написать с таким подходом. Твое дела конечно, но ты меня успокаиваешь - конкуренции от таких как ты не будет явно.
>>1728448 п.с. в одной конторе было тестовое задание - простой блог, MVC, классы, роутер, контейнер, пагинация и валидация - все самостоятельно необходимо было написать на чистом пхп.
>>1728379 Никак вы блядь не научитесь. Фреймворк это просто набор сервисов. Конфигурация, роутинг, DI контейнер, event loop, HTTP, ORM, кэш итд. Пиздец у тебя понимание работы приложения. Берешь symfony/config , eloquent, pimple, guzzle, FastRouter и вот у тебя уже получился твой собственный фреймворк.
>>1728510 Ебать ты тупой конечно. Вместо очередного роутера, ди контейнера или ивентлупа, можно написать какой-нибудь полезный сервис к своему пету, на работе пригодится. Зачем велосипедить компоненты фреймворка, если это максимум полезно для понимания его кишков? Ну серьезно, это очень узкая ниша и идут туда явно не те, кто начинал своё знакомство с разработкой с php.
>>1728516 Ты в моем посте где вычитал слово "велосипед", еблан? Это блядь что-то из разряда где родился, там и пригодился. Есть во фрейме ОРМ, значит её и используем. Потом одни ебланы ищут программистов на ларавель, а другие руками разводят если в доке их фреймворка не написано как что делать.
>>1728528 Так ты успокойся, прими свои таблетки, дыши ровно. Да, берем ОРМ, которая во фрейме, потому что нужно ВЧЕРА таску закрыть, и с ней проще макакам в цикле запросы делать. Ебланы ищут программистов на ларавел, чтобы других ебланов не учить им пользоваться месяцами, а дать таску и ждать результата. Ты какого-то странного мнения о php сообществе. Туда идут потому что легко войти и даже в 30+ можно заработать миску риса. Тот ли ты стек выбрал?
>>1728534 >Да, берем ОРМ, которая во фрейме, потому что нужно ВЧЕРА таску закрыть Ну так сиди на рисе и воде, формошлепь и не отсвечивай, пока умные дяди за тебя решают что и как в проекте использовать.
Что-то не нравится мне этот ваш апач. После окончания всех настроек сначала час разбирался почему мне все еще вместо результата выдает код программы, шаманил с конфигами и рестартил апач 500 раз за это время. Потом удивительным образом оказалось, что на самом деле все работает, если в конец пути в браузере добавить знак вопроса ( localhost/example.php? ), хрен знает чем это обосновано, случайно вышло. При этом без знака вопроса все еще показывался сам код. Потом изменил код, рестартнул апач. Со знаком вопроса в конце пути все работало, а без знака вопроса каким-то хуем показывался старый код программы. Но самое забавное то, что через полторы минуты скрипт начал запускаться и без знака вопроса. Хрен знает как с этим цирком серьезно работать.
>>1728632 У тебя ярлыки по признаку инструмента. Есть такое, большинство пхпшников дегенераты, спасибо куче инструментов, позволяющих писать рабочий код пуская слюни. Этот тред и выходцы с него подтверждают этот тезис в 9 из 10 случаев, хотя казалось бы тут обучиться довольно просто. Но немало встречается и умных опытных разрабов. Собственно почти все опытные, кто активно на пхп сидит, берут его осознанно ради буста к скорости разработки и поддержки. Привычка и контроль, на чем больше всего писал - на том чуть лучше и выходит. Мелочь, а приятно. При этом у всех когда-то были или есть проекты и на других стеках, с которыми они свободно работают (самому на питоне, жсе, руби, шарпе, джаве, го и эликсире довелось поработать, а ведь я всего 8 лет в теме). Пришлось написать несколько мелких фреймов, один из которых на питоне. Вынужденно, такой пиздец на проектах попадался, что туда готовое не взять без полной переписки, а только аккуратными мелкими фичами апать код. Помогает во вполне обычных рабочих задачах, как видишь. Тоже попадалось тестовое с написанием своего фрейма на пхп без зависимостей. Да, делается за вечер. Можно по гайду накопипастить, можно не по гайду, скорее всего на плагиат чекать не будут. Я делал сам в тот раз, так всегда пользы больше. После всего этого любой вебфрейм для меня открытая книга. Очень помогает, со стыдом вспоминаю те времена, когда воевал с фреймворками из-за собственного невежества (и как водится был дохуища выебистым первые годы). Код фреймов читал офк, как и всю доку, но без собственных велосипедов это давало только ложное ощущение понимания. Считаю, что по хорошему надо брать слим, а не эти ваши ларки, особенно новичку, и подтягивать что сам хочешь к нему, выстраивая по быстрому именно то, что нужно и не больше. Контроль - это хорошо. Когда позволительно - лучше так делать. Так я вот к чему - если ты не хочешь выполнять учебную задачу, то зачем других то отговаривать? Для обучения это прекрасный опыт (в современных реалиях вообще возвышающий тебя над толпой фреймворкнейм-кнопокдавов), даже если выкинешь все на помойку. Можно работать и без этого, да, как многие и делают, особенно в первый раз. Ничем велосипедирование своего учебного фрейма не отличается в худшую сторону от прочих учебных задач, так что с этим так же как и с остальным - пропускать можно ценой пробела в знаниях. Ну и напоследок - из всех самых прошаренных знакомых разрабов нет ни одного, кто бы не мог набросать неплохой микрофрейм из головы за вечер-два. Да впринципе многие из них и небольшой язык/бд/подобие ос могут набросать. Развитие не заканчивается с получением работы, а чтобы получить понимание темы, которое уже никогда не выветрится, надо тему повелосипедить самому, никак иначе.
>>1728680 >У тебя ярлыки по признаку инструмента Из всех знакомых, кто пишет на пхп, большая часть макаки крудоклепатели, боятся лишнюю папку или файл создать без указки тимлида, пихают код в контроллеры и т.д. и т.п. Даже не представляю, где сидят те умные дяди, которые осознанно выбрали пхп среди альтернатив и пишут на нем хорошие поддерживаемые вещи. Наверное таких 1 на 10000 макак.
>берут его осознанно ради буста к скорости разработки и поддержки >по хорошему надо брать слим, а не эти ваши ларки Сначала ты говоришь про буст скорости разработки на пхп. Потом предлагаешь брать слим... Ты уж определись.
>Так я вот к чему - если ты не хочешь выполнять учебную задачу, то зачем других то отговаривать? Пусть пишут свой фреймворк, мб додумаются стек сменить, пока не поздно.
>Для обучения это прекрасный опыт (в современных реалиях вообще возвышающий тебя над толпой фреймворкнейм-кнопокдавов Херочке будет очень интересно послушать, какой ты фреймворк написал на коленке за вечер. А на вопросе про коммерческий опыт с фреймворк-нейм пук-перезвоним.
>>1729121 Ты в прошлом посте спрашивал уже, а я тебе уже ответил. Ты давай обтекай, да смари мозги не перетруди. Тебе в понедельник шаблон на вордпресс натягивать.
>>1729135 не понимаю иронии? В больших компаниях, к примеру, с микросервисной инфраструктурой, даже проще и лучше, компетентно написать ядро фреймворка, но на это надо чуть больше времени и денег. За то в результате будет работать все очевидно и понятно, а не так как ваш всратый рад ларавел, у которого везде магия и в случае пиздеца, только в трейсе дебага можно что-то понять.
Так, скоро надо будет создать новый тред, а пока хотел показать прототип thread-unroll для двачика, что думаете? не знаю, правда, где найти время, чтобы перепробовать все идеи, которые в голову пришли.
>>1729254 >с микросервисной инфраструктурой Лол, ну ты точно из 2017. Именно тогда все писали свои микросервисные фреймворки и обещли 9000% прироста всего подряд, как только раздолбают проклятый монолит.
>>1729831 Кароч я поржал и понял что был груб. Сорян если обидел, но бля чтец ты пиздец конечно. В качестве извинений могу рассказать тебе про ооп в приватной обстановке. Если конечно осилишь попасть в канал https://дискорд.gg/3aVySY6
еще вопрос,я заметил,что передача параметров в метод снаружи сущ способа? 1 это когда параметр в скобочках(но там внутри класса дохера писать функций на каждую переменную) 2 который я в основном видел через знак присвоения и какой из них популярный?
Любой может ошибиться и не так написать название функции. Это не повод самоутверждаться в треде для начинающих, и это лишь показывает твою токсичность.
сап. как в стандартной форме регистрации/авторизации laravel, при включенной верификации изменить email получателя? чтобы не пользователь получал, а кто-то 1 всегда
Народ, ну подскажите. Я уже весь обгуглился. https://pastebin.com/w2bt1X2d Вот скрипт выдал мне все нужные значения из таблицы. А как теперь эти значения запихивать в переменную? Если я беру просто $row, то в переменной лежит только первое значение, а как мне перезаписать переменную, чтобы там оказалось второе значение? А четвертое значение?
Аноны, как прочитать таблицу excel через php и загрузить определенные столбцы в sql, но так чтобы определенные столбцы excel соответствовали полям таблицы sql. Существует такая библиотека на просторах PHPExcel.php, но она может загрузить excel только в пустую таблицу, а надо в готовую. Это вообще возможно?
Аннотации как часть кода используются давно (Доктрина, Symfony Validator, Serializer), но сейчас их пишут в комментариях (в стиле @ORM\Table). То есть для интерпретатора это просто строка, которую он игнорирует, и код использует специальные парсеры для их извлечения из исходного текста.
Логично сделать их частью языка, чтобы PHP их читал и проверял, а также IDE и статические анализаторам было проще с ними работать.
>>1730927 Ну это прогиб под них какой то, тот же eloquent не пользует их и живёт спокойно. Ну лучше ли оставить доктирну самой разбираться с этими атрибутами.
Есть какое то применение не связанное с этими библиотеками?
>>1729782 так а нахуй ты переменные public делаешь и затем их через констракт меняешь? делай их private/protected и пиши констракт. это называется инкапсуляция вроде
Приношу свои извинения апачу за то что заговнил его выше втреде. Сейчас допер что у меня просто в кеш браузера файлы записывались и не обновлялись, теперь запрещаю кеширование метатегом.
Сложный вопрос. Обычно их применяют, чтобы контролировать доступ к свойству в одном месте. Например, при наличии сеттера мы можем делать проверку и запрещать присваивать свойству некорректные значения. Но, возможно, где-то можно обойтись и без этого.
Не очень хорошо, что у тебя указывается в 2 местах запас банкнот - неудобно будет его менять.
$arrayValues - неудачное название, лучше $combination.
В общем, решено верно. Можно, конечно, было бы еще пооптимизировать код - например, не выдавать такие комбинации купюр, которые заведомо больше суммы. То есть при сумме 1000 не выдавать комбинации, где есть 2000-е купюры и не выдавать более 4 500-х купюр. Дальше можно еще больше оптимизировать код и выдавать сначала наиболее вероятные комбинации. Например, для суммы 6600 и 2000-х купюр сначала выдавать 3x2000, потом 2x2000 ... 0x2000
В общем, ты движешься в правильном направлении, но многое надо улучшить.
Ты зря прямо в функцию вписал варианты слова - рубль/рублей. Лучше их передавать снаружи, чтобы функция могла работать с любыми словами. Также, условие выбора слова переусложнено, там не нужен цикл. Числа делятся всего на несколько групп: заканчивающиеся на 11-19, на 1, на 2-3 или на 5-0.
Также, текст надо нормально выровнять, тяжело читать.
> Меня смущает то, как потом менять значение ставки. Просто изменять этот метод? Можно в конструкторе Employee вызвать функцию getBasePay() и записать значение в свойство $basePay, например. И его менять.
Вообще, делать сотрудников разных классов не самая лучшая идея. Ведь они не могут тогда менять должность. Логичнее было бы сделать один класс для сотрудника, и несколько разных классов-должностей.
> А разве там не требуется применять принцип композиции, у нас же работники не могут существовать отдельно от Департамента?
Можно бы и так, но неудобно будет добавлять новые классы работников, у которых, например, конструктор принимает другие аргументы.
> Как я понял из условия 40% мы берем от всех инженеров в не зависимости от того является он боссом или нет. Можно вычислить число увольняемых, исключить из массива босса, и после этого делать array_slice(). Но можно конечно и обычным циклом идти, пока не наберется нужное количество.
Хочу установить Laravel на Manjaro. Проблема в том, что у меня не все необходимые модули установлены, например нет bcmath и некоторых других. Я хз где их брать и как устанавливать, с экосистемой php почти незнаком. Вообще, в описании пакета php для manjaro написано, что модуль bcmath и другие включены, но в выводе php -m его нет. Как быть?
>>1656450 (OP) >>1671057 Аноны, написал тут функцию для подсчета количества купюр, из предлагаемой суммы. Оцените, насколько сильно это говнокод.. Можно добавлять новые купюры, очко не ломается.