Это копия, сохраненная 9 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
ОП довольно занят, но постарается ответить на все вопросы. Также, ответы и решения задач можно поискать в архиве тредов phpclub.
Это тред и для начинающих. Слово "классы" у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.
Предыдущий тред был тут: >>1849078 (OP) . Все старые треды есть в архиве: https://phpclub.tech/ (там есть поиск, можно искать решения и обсуждения задач).
С чего начать
Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook (вас отредиректит на другой домен, не запоминайте его, он временный). Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный мануал. Или все сразу.
Если не знаешь как решать, запости код и попроси подсказку или поищи задачу в архиве тредов.
Ты прошел весь учебник? Молодец, но это были лишь основы языка PHP. Вот что в идеале надо изучить еще: ООП, как работает веб-сервер, HTML/CSS, SQL, PDO, работа с таблицами в БД, работа с формами, MVC, git, composer, JS, фреймворки, автоматизированное тестирование. У нас есть задачи для изучения этого:
- для начала прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- установи Апач + PHP (советы выше и ниже) и читай туториал http://php.net/manual/ru/tutorial.php
- Учи HTML/CSS и SQL, PDO, хотя бы основы
- Далее простая, но полезная задача сделать список студентов, в ней много полезных советов: https://github.com/codedokode/pasta/blob/master/student-list.md
- Более сложная задача сделать файлообменник на микрофреймворке Slim: https://gist.github.com/codedokode/9424217
- Еще более сложная и долгая задача на Laravel/Symfony: https://gist.github.com/codedokode/8733007
- После нее можно изучать автоматизированное тестирование https://gist.github.com/codedokode/a455bde7d0748c0a351a
- Если ты все решил, переходи к Symfony или Laravel
- Почитать про паттерны http://designpatternsphp.readthedocs.org/ru/latest/README.html (если ты не изучил ни одного фреймворка, то это будет рановато), тут с примерами кода http://designpatternsphp.readthedocs.org/ru/latest/README.html . Имей в виду что без примеров использования их учить бесполезно - не поймешь, хочешь увидеть примеры использования паттернов - ковыряй исходники Симфони, например Symfony Forms. Не заучивай паттерны - смотри код и думай, зачем тут они использованы.
Чтобы делать эти задания, тебе надо установить Апач + PHP (можно заодно сразу и MySQL) на компьютер. Вот полезные инструкции:
https://github.com/codedokode/pasta/blob/master/soft/php-install.md
https://github.com/codedokode/pasta/blob/master/soft/apache-install.md
Может тебе понадобится пользоваться командной строкой, вот гайд https://github.com/codedokode/pasta/blob/master/soft/cli.md
Параллельно стоит подучивать английский, на первых порах можно без него, но по мере развития придется все чаще сталкиваться с англоязычными статьями, так что лучше не откладывать. Читать можно news.ycombinator.com - это что-то вроде их хабра.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
- HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- JS: https://gist.github.com/codedokode/ce30e7a036f18f416ae0
- SPA (сложно): https://github.com/codedokode/pasta/blob/master/js/spa.md
- Проверялка решений на JS: http://dkab.github.io/jasmine-tests/
- MySQL: https://github.com/codedokode/pasta/blob/master/db/databases.md
Что почитать
- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- Сайт phptherightway (перевод на русский: http://getjump.me/ru-php-the-right-way/ )
- По PHP: Профессиональное программирование на PHP Джордж Шлосснейгл
- По PHP: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- JS: learn.javascript.ru
- Про Git: https://git-scm.com/book/ru/v1
- Новости IT на англ. https://news.ycombinator.com/
- какой-то древний, устаревший, но большой и на русском справочник по веб-разработке, посоветованный аноном: https://starcat.dp.ua/doc/wdh/
Оформляй код аккуратно!!! — например пропусти через phpformatter.com . Также, если ты пользуешься IDE вроде PhpStorm, Netbeans, Eclipse, то в них эта опция встроена, подробнее: https://gist.github.com/codedokode/8759492
У ОПа нет аккаунтов и групп вконтакте, в фейсбуке, в твиттере, все "пхп-треды" там поддельные.
Платиновые вопросы
- Почему PHP? Потому что вакансий море, и учить легко.
- Сайт опять упал!!!!! — Не паникуй, а зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Clone or Download -> Download ZIP, распакуй на рабочий стол и получи личную копию сайта, не требующую интернетов.
- Что надо знать чтобы найти работу - разработчику: 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, то там есть горячая клавиша для этого. Список клавиш для IDE: https://gist.github.com/codedokode/8759492
Вообще, в PHP долгое время не было единого стандарта оформления кода, все писали как попало и было много бардака, но сейчас дело лучше — есть рекомендации PSR-1 и PSR-12. Вот как надо оформлять код:
- переменные и функции пишутся с маленькой буквы, подчеркивание не используется, используется camelCase, пример: $x, $numberOfPeople, printResults()
- Название функции начинается с глагола, в стиле «сделайЧтоТо»
- не знаешь английский? Не беда, в 21 веке есть решение этой проблемы. Не пиши транслитом, открой лучше Гугл Транслейт и найди название для переменной там
- в именах классов используется CamelCase, первая буква большая, «_» может использоваться
- мы предпочитаем подстановку переменных вместо конкатенации строк: "I am $age years old" — хорошо, 'I am ' . $age . ' years old' — плохо из-за обилия точек и кавычек
- мы используем для отступов 4 пробела (можно настроить редактор, чтобы при нажатии Tab он вставлял 4 пробела)
- ставим тайп-хинты на аргументы функций, результат функций и поля классов
Вот ссылка на рекомендации PSR, где все это описано подробнее и даны примеры оформления:
PSR-1 (рус.): https://svyatoslav.biz/misc/psr_translation/#_PSR-1
PSR-12 (англ.): https://www.php-fig.org/psr/psr-12/
>echo "Добро пожаловать товарищь ($_SESSION['name']) из города ($_SESSION['city']) !";
где тут ошибка?
${_SESSION['name']}
Ты какую-то хуйню написал, end вообще не о том.
То что оно работает лишь результат пехоповости пехопе.
устарела
анонсы. поясните по хардкору как билдить morphMany связи в ларавской eloquent orm. вот допустим есть две сущности: режиссер и фильмы которые он снял. и у каждой из них есть оценки например от 1 до 10. как мне блять сделать orderby по средней оценке каждого режиссера допустим? пробовал через простой whereHas и нихуя. в доке тоже нет ниче особого. копать их ларавель апи юзаю версию 8.2 если что ?
>а там оформлено красиво учетка,где можно загрузить фоточку или заебенить пост
Сделай у пользователяодна таблица отношение один-к-одному на его профильвторая таблица, где ты будешь хранить его фоточку и прочие данные.
По маршруту получаешь айдишник юзеря, у него берёшь профиль и выводишь на страницу что надо.
Я б так зделол.
Мужик, ты б уроки в шапке прошёл сперва - там много полезных советов по работе с шаблонами. Хуйню же пишешь.
>конкретней
Конкретей есть в уроках. Сейчас бы каждому залетевшему нубу, который RTFM не хочет делать из-за лени разжёвывать всё.
>download master
блять в голос. ты раньше в питонячих тредах срал, а теперь тут. шо, не получилось войти в айти через джангу?
Вообще не понимаю этого дрочева с голой пыха.
Сам голой пыхой не занимался, сразу полез в Laravel, а там и работу нашел.
а что плохого в том,что я пишу простой сайт на чистом,попутно изучая его базовые возможности?
Это плохо в плане работы, т.к. стоит далеко от того, где находится коммерческая разработка.
Задам вопрос прямо, ответь на него честно, отталкиваясь от своего опыта: возможен ли фриланс для джуниора?
Можно ли зарабатывать хоть какую-то копейку удалённо, имея знания новоиспечённого джуна? Не на забугорном фрилансе, это важно. Хотя я и так понимаю, что там платят больше.
Другой вопрос(если вопрос выше имеет положительный ответ): сколько можно зарабатывать в месяц на фрилансе? 20к выйдет хотя бы? Или доход будет колебаться от существующих подходящих заказов и моего старания?
Официально трудоустроиться в компанию я не могу по личным причинам. Железные сто процентов, это даже обсуждать не надо.
Нужна или удалёнка(а джуниоры на удалёнке не нужны(!)), или фриланс(что тоже вызывает кучу вопросов: возможно ли, какая плата месячная и т. д.)
Ответь как есть, анон. Хочу услышать правду, даже если она хуёвая.
Далее будет простыня о конкретно возникшей ситуации, если кто-то тут проявит дальнейший интерес.
Многие из вас наверняка работают, и понимают сложности трудоустройства на том этапе, когда ты ещё джуниор, к тому же новоиспечённый. С этим такие люди все сталкивались.
У меня ситуация ещё хуже: официально я не могу пойти работать в компанию. Официально я не могу трудоустроиться даже на удалёнку.
Есть несколько путей для заработка средств себе на хлеб:
Фриланс/Удалённая работа, при условии что джуниор им будет нужен, и меня трудоустроят неофициально.
Второй пункт оставим, речь идёт о первом.
Есть два вопроса(помимо тех, что выше спойлера): какой фреймворк выбрать в процессе изучения навыка для работы: laravel, или symfony?
С одной стороны я понимаю, что работы на ларавеле больше, проектов больше, следовательно и на фрилансе нужен будет ларавел. Но выучить хочу конкретно симфони, или лучше оставить это желание в моём положении?
-----------------
Второй вопрос: если же фриланс мне как-то и доступен будет, то какие биржи(наши) сможете посоветовать? Где проще найти заказ и заработать себе на кусок хлеба?
Задам вопрос прямо, ответь на него честно, отталкиваясь от своего опыта: возможен ли фриланс для джуниора?
Можно ли зарабатывать хоть какую-то копейку удалённо, имея знания новоиспечённого джуна? Не на забугорном фрилансе, это важно. Хотя я и так понимаю, что там платят больше.
Другой вопрос(если вопрос выше имеет положительный ответ): сколько можно зарабатывать в месяц на фрилансе? 20к выйдет хотя бы? Или доход будет колебаться от существующих подходящих заказов и моего старания?
Официально трудоустроиться в компанию я не могу по личным причинам. Железные сто процентов, это даже обсуждать не надо.
Нужна или удалёнка(а джуниоры на удалёнке не нужны(!)), или фриланс(что тоже вызывает кучу вопросов: возможно ли, какая плата месячная и т. д.)
Ответь как есть, анон. Хочу услышать правду, даже если она хуёвая.
Далее будет простыня о конкретно возникшей ситуации, если кто-то тут проявит дальнейший интерес.
Многие из вас наверняка работают, и понимают сложности трудоустройства на том этапе, когда ты ещё джуниор, к тому же новоиспечённый. С этим такие люди все сталкивались.
У меня ситуация ещё хуже: официально я не могу пойти работать в компанию. Официально я не могу трудоустроиться даже на удалёнку.
Есть несколько путей для заработка средств себе на хлеб:
Фриланс/Удалённая работа, при условии что джуниор им будет нужен, и меня трудоустроят неофициально.
Второй пункт оставим, речь идёт о первом.
Есть два вопроса(помимо тех, что выше спойлера): какой фреймворк выбрать в процессе изучения навыка для работы: laravel, или symfony?
С одной стороны я понимаю, что работы на ларавеле больше, проектов больше, следовательно и на фрилансе нужен будет ларавел. Но выучить хочу конкретно симфони, или лучше оставить это желание в моём положении?
-----------------
Второй вопрос: если же фриланс мне как-то и доступен будет, то какие биржи(наши) сможете посоветовать? Где проще найти заказ и заработать себе на кусок хлеба?
Дрочево с голой пыхой в первую очередь это азы программирования и полезно, как миниму для общей эрудиции в ИТ. Если у тебя уже есть опыт разработки, то ок - можно и на Лару сразу залезать, а если ты с нуля полез - соболезную мартыхану.
>фриланс(что тоже вызывает кучу вопросов: возможно ли, какая плата месячная и т. д.)
>какая плата месячная
Шта? Какая тебе плата? Сколько заработал - столько получил. К этому прибавь время поиска заказчиков, обсуждение работы и проч.
Постоянно надо быть на стрёме чтоб не кинул. Нервная работа в общем, и особенно поначалу. Ещё хрен заказ вырубишь на первых порах и приходится работать со всяким говном, которое двух слов связать не может, но гораздо в отзывы насрать.
Где искать работу не скажу - сам ищи. Где найдёшь - там и работай.
>хх.ру
>7 вакансий пхп джуна удаленно
Лол.
Многие вакансии там годами висят по причинам:
1. хрюшки зарплату отрабатывают и рынок мониторят
2. кидалы с тестовыми - будешь бесплатно на кого-то работать под видом тестового
3. там ждут человека на позицию джуниора с навыками мидла
> Где искать работу не скажу - сам ищи. Где найдёшь - там и работай.
Но ведь даже так - ты признаёшь, что джуну что-то, да может перепасть на фрилансе, кроме пиздюлей:D
Хорошо сэр, вас понял, сэр. Именно этот ответ мне и нужен был превыше всего. А нервной работы не боюсь, всякой хуйни уже в жизни насмотрелся. Добра тебе, анон.
Предлагаю не отвечать этому персонажу пока он не начнёт по теме уроков спрашивать, а то заебёт тупыми вопросами по каждому пуку.
Пусть сам гуглит.
Братик, мой тебе дружеский совет: найди в интернете методичку от Дмитрия Трепачёва и учись по ней. У него есть всё что требуется, вся необходимая база, а чего нет в методичке - есть на его ютуб-канале.
Вопрос, который ты задал - лёгок и глуп. Будь молодцом, иди учись.
Товарищ
Есть у меня в ларке в контроллере
$request->validate([
]);
А если я хочу добавить какое-то лютое правило? О том что Одно поле плюс другое умнжить на третье должно быть меньше 42, как это сделать?
Пиздец ты умеешь формулировать.
autocomplete="off" может помочь. Или не может. ХУЙ ЗНАЕТ ЧЁ ТЕБЕ НАДО
Скорее всего, это твой браузер для твоего же удобства сохраняет данные. Попробуй нажать на ключик или похожий символ в адресной строке, также можешь поискать "автозаполнение форм" в настройках браузера и отключить его для своего сайта.
>>1917494
Тебе хорошо бы учиться не писать код одной портянкой, а разбивать его на функции. Тут можно сделать функции вроде "проверить, авторизован ли пользователь" и "разлогинить пользователя". Ну естественно, и функцию "залогинить пользователя" тоже стоит сделать.
>Если ты не хочешь пояснять, что не так, может быть и пост писать не стоило?
Я смотрю ты сам дохуя ему пояснил.
Всё таки он не только для нубов, но и для всех остальных.
"Итак, сделав последнюю выплату по кредиту, наш школьник собрался было идти домой и направился к ст.м. Площадь Восстания, как вдруг его взгляд привекла реклама нового планшета Apple New Ipad 32Gb (всего за 39999 р). Понятно, что вскоре наш незадачливый любитель яблок уже держал в руках и поглаживал новый девайс аки кота-манула и чуть слышно шептал «моя прелесть». Поскольку денег у нашего героя уже не было, он решил воспользоваться услугой «покупка в кредит без первого вноса». Кредит предлагают 3 банка, и все на разных условиях:
кредит за 4% и (мелким шрифтом) 500 р комиссии в месяц от HomoCredit
кредит за 3% и 1000 р комиссии в месяц от того же банка (Softbank), что и в первой задаче
нереально вкусное предложение от StrawberryBank за 2% в месяц, без комиссии, но с платой в размере 7777 р за открытие счета (эту сумма прибавляется к сумме долга)
Задание: воспользовавшись ранее купленным айфоном (и полученными на сами знаете каком сайте знаниями), определи наиболее выгодный кредит. Платить школьник, как и прежде, может не более 5000 р. в месяц. Сначала начисляются проценты и комиссия, а только потом происходит выплата."
ИТОГИ МОЕГО РЕШЕНИЯ:
Итоговая сумма кредита SoftBank: 46198.97
Итоговая сумма кредита HomoCredit: 46598.96
Итоговая сумма кредита StrawBerry: 53575.98
Я гений кодинга?...
Чот сложно. Вот я накидал быстро https://ideone.com/QN1ix0
Как минимум ты проебался с оплатой до начисления процентов и с добавлением 7777 в конце, а не в начале.
>и с добавлением 7777 в конце
Так 7777 не добавляется к подверженной процентным изменениям и комиссии сумме кредита, это единичный платёж за открытие счёта.
> но с платой в размере 7777 р за открытие счета (эту сумма прибавляется к сумме долга)
> прибавляется к сумме долга
Зачем ты так мощно меня приложил?...
Решений может быть больше одного. Зачастую нужно выбирать наиболее удачное под конкретную ситуацию.
Ебать ты квантовый компуктер.
Пипец. Сорри, но ларавельщик - не программист. следующий шаг - писать сайты на winx или tilda. Хотя. Подход мне нравится. Нам надо больше сироток (с).
Пусть будет побольше ларавельщиков и прочих имитаторов. Толпы джуниоров с высшим образованием, которые пятистрочный обработчик формы обратной связи даже без композера и ларавела не могут поставить. И при любом намеке на написание какого либо элементарного класса начинают пространно рассуждать про масштабируемость, совместимость и пугают всех плохими велосипедами да неизбежными костылями.
Тогда у меня постоянно будет работа - переделывать их перегруженных и кособоких кадавров в более менее юзабельные веб приложения в четверо урезанные сроки и с десятикратным ценником, так как за дурость следует платить, а не нравится - пусть походят по рынку поищут спецов.
ЭТо почти как с мобильными приложениями последнее время - где верх мастерства - это засунуть в шаблон вебвьюхи сайт, без малейшего понимания сишарпа или свифта, но с выученным наизусть расположением кнопок интерфейса конструктора.
Код новичка как код. Работает и работает. Оценивать нечего. Нет структуры приложения как такового - непонятно, чего хочешь достичь. Оценивать можно, когда что-то сделаешь путное. То есть представишь задачу, продумаешь и создашь ее решение. Вот исходя из того, как ты сделаешь и можно будет что-то оценивать.
А то как ты строки оформляешь, как записи типа "==false" да в хтмл пхп запихиваешь для меня просто показатель того, что ты новичок.
У прожженых пхпшных тварей таких конструкций не увидишь
Будет вроде $_SESSION['name']&&$_SESSION['city']?$this->hello:$this->nafig; как минимум, и соотв. строки будут
как 'бла-бла ' . $name . 'бла - бла'; без извратов с переменными внутри двойных и фигурными скобками, так как чревато.
Правильно у 1917746 так как там более-менее грамотно сделана
структура кода - функция с входящими как универсальный метод.
Код 1917737 явно новичок, создает кучу ненужных переменных.
В пыхе чем меньше переменных, тем лучше. Логически - есть переменная - процент. У банков она разная, и всего то.
Чел же создал три по сути переменные, которые вообще-то как бы константы. и соотв черти что а не код. А если банков не три, а семьсот к примеру - семьсот переменных будешь создавать? Я своих "коллег" за такое морально унижаю даже если в первый раз. При рецидивах - и физически.
То есть косяк на уровне понимания алгоритма.
Переменные - процент, комиссия, взнос. = больше нет и быть не может. И на основании их строится функция метод.
Как то так.
Тоже так считаю. Пока есть такие "програмиисты" у меня будет большая зарплата. Они для себя новый мир открывают, когда говоришь им, что в ларе можно свои классы писать и в папочку апп складывать. Видел километровые контроллеры в которых написан код всего приложения.
https://ideone.com/LBdizC
Почему?
ну же, анон, помоги. куда двигаться то?
Тебе еще в том треде расписали всё.
Нулевым идти на фриланс - не вывезешь.
Устраивайся в офис/на удаленку, наврав про опыт в рогах-копытах.
Ты хоть представляешь, какой там конкурс?
Около года.
Сначала были питон/джанга. Едва осилив основы питона, полез в джангу писать тудулист. Пробовал удаленку на джанге - не зашло.
Потом полез в пхп/ларавел, тоже сразу полез писать пет на фреймворке
>Видел километровые контроллеры в которых написан код всего приложения
Видел такое на проде... Просто пиздец
К слову я уже давно вышел за рамки и фреймворка и языка. Умею создавать папочки.
Я форшу фреймворки, потому что это скорейший путь выхода на работу. А там уже встанут реальные задачи и будет понятно, в каком направлении расти.
Всяко лучше, чем сидеть что-то невнятное лепить на голой пыхе. Такое мб лет 20 назад актуально было. Но не сейчас, когда всё делается херак-херак, слепил из готовых компонентов и в прод.
А те, кто хотят что-то своё с нуля писать, вряд ли выберут пыху.
>Я своих "коллег" за такое морально унижаю даже если в первый раз. При рецидивах - и физически.
А я напомню вайтишникам, что вкатываясь в IT через пхп вы навсегда станете низкоквалифицированным таджиком от мира современной разработки и никогда не увидите ни 300к/наносек, ни ламповой удаленки за доллары, ни релокации в Европу.
Представил как свеженький пыха даун джун приезжает домой после восьми часов мозгоебли и пытается читать условный Core Java, и люто проиграл.
> вы навсегда станете низкоквалифицированным таджиком
А можно устроиться в фейсбук или в наш вк, им норм на php.
> никогда не увидите ни 300к/наносек
Наоборот, на php проще стартап сделать. И монетизировать веб приложуху проще чем что-либо ещё.
> ни ламповой удаленки за доллары
Удалёнки на похапе сколько хочешь.
> ни релокации в Европу.
В Европе пишут на php
https://www.tutorialspoint.com/php/index.htm
https://www.tutorialspoint.com/php7/index.htm
https://www.tutorialspoint.com/laravel/index.htm
В этом порядке почитай.
И вопросы отпадут.
Если не можешь в англ, то https://poliglot16.ru/en/
Ну веб приложение проще всего монетизировать. На него рекламку повесил и пошло дело. Не надо с гуглплеем ебаться, не надо в steam игрушку пытаться захуячить, не надо с яблочным говном ебошиться.
Просто добавил и индексируештся.
Второй по простоте стартап это мобильная приложуха, наверно.
А наклепать проще всего на Rails или Laravel. Но рельсы мертвы и руби сложнее пыхи
> В чём?
В руби своя атмосфера. Надо уметь ебаться с магией и с DSL'ями, там ООП по заветам ИльичаКэя. А php это почти тот же си. Иногда такой же дырявый. Ну проще он бля ну хуй знает. И непривычный пиздец. В этом плане пхп проще.
Хотя я люблю руби, вопросов нет.
>>1918063
Производительность занесите плез
>>1918069
Можно. Но зависит от города. В Москве получают.
>Производительность занесите плез
Ты новый твиттер собрался пилить
для малого и среднего он крут
Ларавел тоже для сильных нагрузок тоже не айс
Сегодня получил офер на 120к.
Еще смотрел ваки удаленки. На сеньерских позициях вполне себе можно до 200к поднимать.
Но насчет реакта ты прав, сейчас там платят больше и вкат проще.
На чистом пхп никто не работает как правило, всегда требуется знание баз данных и фронта, затем подтягивается по любому js node react и так далее. Все зависит от конкретного случая. Но вкатиться на минималках на вебе через понимание апач+пыхи+js однозначно проще, чем искать вакансии джуниора на java или си, т.к спрос на порядок выше и реально больше прикладных задач можно сделать. Потом по любому подключаются всякого рода редиски, Всегда есть куда расти, подключать массу сервисов - амазон, азюре, всевозможные дап, и т.п. Рано или поздно вывозит на необходимость освоения java и cи при необходимости серверных решений для медиа - данных и тп. То есть прямиком в фулл-стек. Другой вопрос - это застрять на пхп. Тогда да, таджик. Но тут не в пыхе уже дело, а в отстутствии сферы применения навыков и знаний или тупо в лени.
Но так же можно застрять где угодно. И из моего опыта фул-стекеров, которые начинали с пыхи даже больше, чем оверпродвинутых фанатов си++ и java, и особенно питонщиков,застрявших в поисках максимально теплого места и перебивающихся фрилансом, которых пруд пруди, и которым планку сбили - работы нормальной по их запросам у них постоянно нет, поскольку их навыки слишком узкие для решения востребованных задач.
На собесе сильно дрочат? Есть вопросы, которые нужно звучить?
мимо собираюсь менять работу, до этого два раза устраивался по знакомству
блять опять этот даун уже третий тред подряд засирает
Джаваскрипт, css+html, webpack/gulp/ещё какую-то поеботу.
Ещё нужно немного понимать как бэк работает.
Как раз таки нода не нужна
Галп устарел.
Вебпак редко когда используют.
Для реакта есть cra, который в большинстве случаев справляется
>На сеньерских позициях вполне себе можно до 200к поднимать.
Я недавно смотрел сеньерские вакансии по пыху в своей мухосрани, отфильтровал чтобы показывало только с указанием зп. Малость охуел, самая нижняя граница которую я увидел - 4k$. Вроде бы пиздеть не должны, до этого был уверен что для пыхера 3к$ не достижимы.
В этот раз несильно дрочили.
Спросили пару фич пхп, за ООП и СОЛИД.
Дали написать сортировку - написал пузерык и назвал алго сложность 1 вариант улучшения.
Самое ценное, что хотят услышать - то, что делал на прошлых местах работы. Рассказик минут на 10 о том, как ты помог проекту, какие фичи привнес гораздо ценнее 30 минутного дрочева теорией.
Еще стоит проявлять интерес к будущему месту работы, проекту и команде.
Мне например было интересно услышать, как они справляются с легаси, поэтому задал на эту тему несколько вопросов.
Я через слэш написал потому что не в теме чё там у этой фронтент петушни в тренде. У нас webpack везде.
У фронтенд петушни каждый год что-то устаревает, ещё следить за их трендами
Интегратор казино/рулеток/ставок на спорт. Чешская контора.
Та дело в том что в принципе в теории зарплаты сеньоров не ограничены. Когда речь идёт о сеньорах, тут очень сложно говорить о сравнении одного с другим. От Синьора вообще зависит будут ли джуны писать говнокод или нет. Хороший сеньор просто не допустит говнокода и даст жунам конкретные задачи, укажет best practices и тд.
Там вообще доходы очень разные. И в hh не так легко их найти, так как чаще всего на эти доходы не берут людей с улицы а повышают. Всё таки синьор из другой фирмы это не то. Ему нужно время вникнуть в проектоту.
Чем отличается джун от мидла и мидл от сеньора? Где проходят грани?
Джун - говно без задач, ему можно давать только самые простые таски и пристально следить, чтобы в код не насрал.
Мидл - рабочая лошадка. Берет задачи из беклога и делает, все подробности выясняет сам.
Синьор - следит за качеством проекта (раздает пиздюлей джунам и мидлам), работает с бизнесом (выясняет требования, оформляет в таски), изредка что-то сам пишет
>Чем отличается джун от мидла и мидл от сеньора? Где проходят грани?
Сеньор просто может написать убер с нуля сам, так как уже набил руку в различном проектировании, просто в разработке, в девопс хуйне. Миддл обычно тупо гребет таски и пока не писал убер с нуля сам, поэтому напишет его через жопу или примитивно не в плане кода, а в плане архитектуры и юзания инфраструктуры, джун это такой миддл только который еще мало получает и может не знать о существовании каких-то подходов и практик, не знает каких-то вещей о языке или инфраструктуре, то есть типа он не в курсе что типа что-то надо делать через очереди или ивенты или многопоточно, кругозора нет
Проще всего - уровнем вовлеченности и менеджментом.
То есть если тебе скидывают задачи в жЫре или ещё где вы там сидите, спрашивают сроки - ты жун.
Если тебе дают мета-задачи которые прям от клиента и тебе надо уже решать как разбить на подзадачи и у тебя может стоять выбор в технологиях, ты можешь принимать решение на чём кодить что-то и тд. Тебе приходится кодревьювить и иногда собеседовать - ты мидло.
Если тебе дают самые критические задачи, ты принимаешь все архитектурные решения, ты вовлечён в проекты на высшем уровне - ты синьор.
Ну ты понел. А зарплата Синьора может зависить напрямую от успеха проекта. Премии и тд не редки.
>Синьор - следит за качеством проекта (раздает пиздюлей джунам и мидлам), работает с бизнесом (выясняет требования, оформляет в таски),
Этим разве не отдельный человек должен заниматься? Продакт менеджер или как его там
Бывает такой косяк, когда "отдельный человек" пытается справиться, нихера не разбираясь в программировании. Как правило такие проекты заканчиваются тем, что проект намертво встает колом или ползет медленнее улитки, так как хитрожопые яйцеголовые прогеры всегда убедят его, что "так невозможно сделать, а для этого надо еще дофига и больше времени и не факт что получится" и т.п., злоупотребляя доверием тупого магла и разводя его и начальство как школьников ради веселого оплачиваемого шлангования и активного ибд со скоростью три строчки кода на четверых в неделю. Как правило, от жадности глупого начальства такое делается. Иногда существует неограниченный период времени. Сам знаю фирмы и компании со штатом из 50+ прогеров, верстальщиков и дизайнеров, которые дружно "поддерживают" пятистраничный корпоративный сайт на вордпрессе, и смена адреса электронной почты на странице контактов занимает полторы недели совещаний и планерок, а затем еще неделю выяснения, кто будет исполнителем и собственно само исполнение. Мне лично очень нравятся такие коллективы.
Опытные же люди давно в курсе, и ставят на эту роль сеньора-помидора, который бы и сам тупо мог собрать бы весь проект, если бы фактор времени был бы не важен. Тогда все более менее рационально получается. Но это как правило только тогда, когда контора действительно делает серьезный проект. А для обычных кобанчиков даже опытные сеньоры быстро смекают, что в глобальных масштабах вариант 1 более правилен. Потому что маглы это маглы, им не дано понять, как и почему правильно делать их проекты, поэтому их дело - платить и повиноваться прогеру, и за каждый косяк на корачках ползать, чтобы починили. Так всегда было и будет. :)
Ты меня с кем-то спутал, анон, я тут впервые пишу. Сомневаюсь, что у кого-то аналогичная мне проблема. Слишком маловероятно. Хотя шансы есть всегда и везде.
> ООО "Рога и Копыта"
— "Анон Битардов, а доказать это сможете?"
— "Анон Битардов, это означает, что вы можете заниматься полноценными проектами сразу же?"
А у Анона Битардова клок в горле и жопе застрял.
React, Redux, Router, Saga.
Какой-нибудь ui-kit типа react-bootstrap, ant, и другие
Опционально сервер-сайд рендеринг.
Ну и офк адаптивная верстка.
— "Анон Битардов, а доказать это сможете?"
— "Анон Битардов, это означает, что вы можете заниматься полноценными проектами сразу же?"
— "Буду краток. Вы знаете, буквально на днях я был на /pr/, провёл беседу со многими программистами, в том числе молодыми, кстати,
очень грамотные ребята. Так вот мы обсудили, в частности и данную
проблему, поговорили о текущей экономической обстановке в стране; они
так же рассказали о своих планах на будущее. Конечно, в первую очередь
их волновала проблема востребованности; не менее остро встал и вопрос по
ипотечным кредитам, но могу заверить, все эти проблемы решаемы и мы
направим все усилия, чтобы решены они были в самом ближайшем будущем. В
том числе это касается и темы, затронутой в вашем вопросе."
От размера конторы зависит.
В моей первой конторе синьором был дирек, соответственно, он базарил с клиентами, выяснял требования и нарезал таски для меня и других разрабов.
В крупных фирмах уже появляются всякие пмы, продакты, аналитики
А это чей пост?
>не могу работать официально
от армейки плохо гаситься, айайай
по поводу твоего вопроса: ищи или удаленку в любых городах естественно, благо во время пандемии это ок либо офис, фриланс для джуна гиблое дело.
поверь дохуя контор кто в черную работает. накрайняк можешь договориться чтобы ты ип оформил или же работать по договору гпх как наемный рабочий.
и если все таки собираешься на фриланс то со знаниями ларки или симфонии ты там нахуй никому не вопрешься, тем более будучи ждуном. зачастую такие проекты на фриланс абы кому не отдают. так что учи всякие битриксы, вордпрессы, джумлы, опенкарты и вот эти всякие сорта говна если действительно такой путь себе выберешь
обычно люди мужского пола ищут целенаправленно неофициальную работу только в таком случае. ну или ты от алиментов гасишься, кто знает тебя
У меня на скрине с гугла решение твоей проблемы.
В php функции preg_replace не нужно указывать модификатор g, т.к. он задается через параметр $limit. По умолчанию g "включён".
У тебя написано, что нет конкретно g.
Потому что его нет, ибо наколхозили отдельную функцию preg_match_all вместо него.
Когда научишься гуглить и доку читать?
Что ты гуглил?
Заходишь на пхп.нет и вбиваешь свой метод, чтобы понять как он работает.
В пыхе, к сожалению, многие методы работают неочевидно
>Что ты гуглил?
Не помню... Щас посмотрим!
>php Как добавить в массив все соответствия шаблону
Вот.
Не обязательно одностраничники. Компонентики можно по разному использовать. Например, кнопка лайка на посте
В принципе сойдет, т.к. ты не по группам ищешь.
Тогда можно убрать круглые скобки из регулярки, т.к. ты её не используешь
Опенсервер на крайний случай. Я думал уже давно все докером научились пользоваться, а тут бля денвер, ололо
Какой-то зверьсд для макак.
Почему на второй картинке так много котиков?
>давно все докером
Нахуй нужен - не хватало ещё контейнер для сайтиков тащить, который ещё и далеко не везде работает - ему только 10винду подай.
Жирно будет с виндой целый день трахаться ради этого.
Как раз сейчас докер отлично работает на 10 винде.
Если ты сидишь на некроговне - твои проблемы
- Конечные шаблоны, которые будут генерироваться для пользователя, в корне папки
- Папка layouts для базовых шаблонов, которые будут наследоваться
- Папка partitions для шаблонов, которые будут включаться через @include
Правильно мыслю?
Международный достаточно крупный финтех. До этого околобанковские, тоже связанные с финансами, проекты. Платёжные шлюзы.
Нашёл.
Ебать, и как тогда это решать?
"Дан неграмотно написанный текст, состоящий из нескольких предложений на русском языке. Ошибки заключаются в неправильной расстановке пробелов и отсутствии заглавных букв. Исправь текст так, чтобы все предложения в нем начинались с большой буквы, а после знаков запятая, точка, точка с запятой, двоеточие, восклицательный и вопросительный знак стоял ровно один пробел (а перед ними — ни одного). Составные знаки вроде многоточия или 2 вопросительных знаков подряд должны сохраняться."
Ленивый, либо глупый, либо все вместе
Какая твоя цель? Если научиться кодить - учи лучше ооп и прочие вещи.
Хочешь таки регулярки освоить - начни с малого и сам, без чужого кода.
Ему еще не помешает учиться гуглить, читать доку, дебажить и прочий программистский проблем-рисерч
Только интересные крупные проекты конечно же.
Мне кажется везде так, если ты нормальный бэкендер, а не клепальщик говна на вордпрессе.
Нормальный бэкендер пишет интересные крупные проекты на go/python/net, а не на пхп.
В прошлом году была платформа для нескольких интернет магазинов на моднявом стеке.
Но я свалил уволили, т.к. был не согласен с направлением развития этого говна и принятыми архитектурными решениями.
До этого был сервис постинга автообъявлений на всякие площадки типа авито.
На собесах тоже интересные проекты показывали но офер не давали вроде сервиса для рекламщиком (там всякая рекламная аналитика, смм, сео хуйня).
Так-то любая бизнес идея может выстрелить и понадобится что-то умнее лэндинга или странички в соц сетях.
Сейчас модно пилить говно на го.
И хорошо, если это говно пилят в виде микросервисов. А то ведь попадаются макаки, которые пытаются на го писать как на пхп в монолитном стиле
О, кстати, поясните пожалуйста вкатуну за совмещение php и go. Когда такое может пригодиться, и как это вообще реализовывается?
Когда у фирмы есть старый монолитный продукт на пхп, он приносит прилично денег, а на поддержку это говна уже никаких нервов не хватает.
Тогда берут это монолитное говно и потихоньку распиливают на микросервисы, которые поддерживать на порядки проще.
Тебе как вкатуну это всё нахрен не надо. Бери один язык и катись. Оставь распил легаси говна тем, кому это интересно.
Еще один не умеющий в гуглинг...
https://stackoverflow.com/questions/559844/which-is-faster-in-php-array-value-or-array-pusharray-value
VK - гребаный монстр. Он не поместится в один spa.
На мобилке уже начали фронт вк распиливать на отдельные сервисы
> postgress
> крупный проект
Засмеялся-проиграл тред? В больших проектах на таких СУБД только хранят всякую мелочь.
Ну-ка покажи количество строк в этой базе данных.
Вот для чего нужен GO - это тупо дома для себя что-то там поделать на выходных и забыть, ну ещё впарить на говнокурсах. Так нахуй никому не нужен, говорю)
У меня в базах в одной таблице по 300 миллионов данных, со связями с другими таблицами - у меня за одну-две секунды это всё переваривается на PHP. Я хуй знает для чего GO)
Надо было в папочку work закинуть - солидно бы смотрелось, да?
Загуглил метод php mb_ucfirst
И не обнаружил его в офф доке. Там был другой метод для преобразования регистра
php.net
У тебя ошибка в условии цикла. Там пишут не условие завершения, а условие продолжения. У тебя это $creditSum <= 0, то есть выполнять цикл пока $creditSum <= 0. Цикл в итоге не выполняется ни разу.
Ты можешь в этом убедиться, поставив echo "Loop"; внутри цикла.
Далее, $commission не надо вычислять из процента. Его надо явно передавать в функцию. Тогда функция станет универсальнее и сможет рассчитывать кредиты с любыит параметрами, а не только те, что ты в нее заложил.
Еще ошибка тут: $creditSum = $creditSum -= $payout. Надо либо -= заменить на -, либо убрать $creditSum = ... слева.
Еще ошибка тут: if ($creditPay = 1.03) - ты использовал присваивание значения переменной (=) вместо сравнения (==).
По одному из кредитов общая сумма выплаты равна 61270.
В общем, переделывать надо весь код.
> if ($creditSum < $payout) {
Этот if можно убрать, используя функцию min/max для вычисления размера оплаты:
оплата = меньшее из (стандартной оплаты, остатка по кредиту).
А так, верно.
>>1917979
Вообще, такая ситуация, когда есть однотипные, но разные сущности, называется наследование таблиц. Есть три стандартных паттерна: Class Table Inheritance, Single TI, Concrete TI.
Single TI, например, это и есть складывание всего в одну таблицу.
Наверно, вместо отдельных сущностей лучше использовать один из трех паттернов.
И что она должна делать здесь например?
$arr = ['sfg','werwer','ww'];
$foo[] = $boo;
foreach ($arr as $val) {
echo "$val";
}
У этой модельки довольно сложная логика проверки валидности.
Это требует запросов в базу и тд. Следующий вопрос:
Куда это запихнуть?
Я это пока для тестов запихнул в request в валидацию, но оно там явно не пренадлежит. Это бизнес логика.
Такое чувство, что мне надо оверрайдить create в модели.
Вся же бизнес логика должна быть в модели, верно?
Или это надо в сервис захуярить?
Тебе уже расписали твои ошибки, и даже показали правильное решение: >>1917746
Но на момент прохождения урока "Функции и новый айпад" мы еще не знали о возможности создания циклов через while. Так что у меня получилось так: https://ideone.com/i6Vwdb
Ответы сверил с >>1917746 , однако не понял, где в коде >>1917746 проверяется, не превышает ли константа меньшего платежа остаток по кредиту. Может быть, неведомое мне колдунство скрыто в строке return $paid + $sum; ?
Что это обозначает, поясните, пожалуйста.
>>1917984
То-то у тебя жизнь сладкая, насыщенная и не лишенная смысла: катаешься по пхп-треду и изливаешь говно. Ради такого стоит постичь С++, да.
>>1918115
А я вот не понял. Вернее понял, где ты ошибся, но не понял, нахуя ты в регулярке пишешь [а-яёА-ЯЁ], если у тебя после нее стоит ключ i?
>Может быть, неведомое мне колдунство скрыто в строке return $paid + $sum; ?
Цикл останавливается с суммой в нуль или переплатой-минусом, вот он и добавляется к выплатам для правильного счета.
Теперь понял. Просто забыл, что итогом функции является именно то, что return.
Мудрый Анон, взгляни, пожалуйста, на мое решение первой бонусной задачи про клавишу Shift: https://ideone.com/4JJzk6
Не перемудрил ли я чего? Что в коде режет глаз? Что посоветуешь?
Специально писал с подробными комментариями. Правильно ли я понимаю действия, выполняемые строками кода? Спасибо.
>панель управления сайтом
Кстати, а зачем веб админка нужна, по крайней мере в мелких бложеках или интернет магазинах? Не безопаснее ли прямо в базу грузить данные или для десктопа приложение написать, если гуи так нужно. Если что, сорри за нубский вопрос.
Чтобы девачьки могли хуярить, а не кампунктерщики.
Ну и зачастую просто берут готовый движок, более продвинутый чем требуется, в котором это уже есть, так хули не пользоваться.
Чтобы разные криворукие овнеры могли добавлять на сайт всяку разную херню и ничего при этом не поломали.
>Эти дегенераты до сих пор решают задачки для имбецилов вместо того, чтобы верстать сам сайт, как нормальный белый человек
но там получается должен быть отдельный кусок кода именно для админа,что бы вместо обычного акка юзера загрузилась панель админа?
В типах разбираешься? Сразу используй строгую типизацию, привыкай.
после <?php
declare(strict_types=1)
function(string $str, array $arr) например
нормально называй функции и на английском. Визуально разбивай код на блоки - хотя бы отступом отделяй.
Ну да. Отдельная страница логина в админку. Отдельные страницы (контроллеры) самой админки. Технически это может быть вообще другой сайт (веб-приложение), просто с доступом к базе собственно сайта который админят. Если хочется совсем необычного, скажем если у тебя десятки лендингов в них можно придумать какое-то простенькое api и админить все эти лендинги с одной универсальной админки (для лендингом много функционала не нужно, максимум там какие-то счетчики метрик рекламы обновлять).
В базе должна быть роль у юзера, админ или юзер.
Ты можешь выбрать кто может в админку вообще заходить.
Если есть разные админки для юзера и админа, то либо можно их вынести в разные роуты, либо разделить куски,
дальше в шаблоне или контроллере if($user->getRole() === 'admin') { то вывести панель админа} else {вывести панель юзера}
но тогда в коде уже должен заранее быть логин и пароль админа?
там где проверяют логины и пароли юзеров должен быть отдельный if($user==$admin)?
ну это если на чистом
А не, заметил что неправильно сделал вторую часть, позже скину.
>>1919053
Перепись маняхипстеров от пхп ИТТ.
Вы там по 20 проектов каждый ведёте на разных платформах, макаки? А ничего, что он далеко не везде и не для всех задач нужен вообще?
Даже удивлён, что всего 2 дебила нашлось на весь тред.
>>1918963
Если не нужен в твоей работе - не юзай. Это не такая необходимая вещь, как тот же гит.
Откуда этот миф про микросервисы, которые якобы проще поддерживать? Микросервисы - это зло, к которому приходится прибегать, когда очень большой объем кода и много людей в команде, чтобы каждый пилил свою часть.
Это дрянь, от которой лучше держаться подальше.
Суммарный объем кода в микросервисах не меньше, а больше, чем в исходном монолите. Разобраться в них сложнее и дольше, чем в монолите. Да даже запустить локально их сложнее: нужно запускать поганые докеры, которые едят место на диске огромными образами, едят память и процессор, тормозят.
Монолит использует один язык, одну архитектуру и один фреймворк. Микросервисы могут каждый использовать свой язык, свой фреймворк и свою архитектуру. Разобраться в них гораздо сложнее.
В монолите ты кликаешь на вызов функции и переходишь к определению. В микросервисе ты наталкиваешься на HTTP-запрос и идешь долго выяснять, кем и как он обрабатывается, потом находишь нужный микросервис, долго изучаешь как он устроен, ищешь что там происходит и где обработчик нужного тебе запроса, изучаешь его код. Одни мучения и затраты времени.
Другой пример. Микросервисам A, B и C надо работать с одной и той же сущностью (например: Пользователь). Что делать? Копипастить код и поддерживать 3 варианта одного и того же кода? Когда у юзера появятся новые поля, добавлять их в три микросервиса? Выносить в библиотеку и мучаться с тем, что одному сервису нужна одна версия библиотеки, а другому - другая? Сплошная боль и мучение. А в монолите такой проблемы просто нет.
Дальше, у каждого сервиса своя база данных. А что, если нескольким сервисам нужна одна и та же таблица? Опять боль, пишем синхронизацию этой таблицы между сервисами. В то время как в монолите такой проблемы просто нету.
По моему, это миф, что микросервисы чем-то лучше. Они хуже. Просто когда людей в компании очень много, им удобнее работать над своей частью кода, зачастую по своим правилам на своем фреймворке и своем языке вместо того, чтобы договориться и сообща развивать единый проект в едином репозитории.
Микросервисы требуют большего расхода рабочего времени на разработку и поддержку. Потому они и подходят большим компаниям, где много рабочей силы.
Откуда этот миф про микросервисы, которые якобы проще поддерживать? Микросервисы - это зло, к которому приходится прибегать, когда очень большой объем кода и много людей в команде, чтобы каждый пилил свою часть.
Это дрянь, от которой лучше держаться подальше.
Суммарный объем кода в микросервисах не меньше, а больше, чем в исходном монолите. Разобраться в них сложнее и дольше, чем в монолите. Да даже запустить локально их сложнее: нужно запускать поганые докеры, которые едят место на диске огромными образами, едят память и процессор, тормозят.
Монолит использует один язык, одну архитектуру и один фреймворк. Микросервисы могут каждый использовать свой язык, свой фреймворк и свою архитектуру. Разобраться в них гораздо сложнее.
В монолите ты кликаешь на вызов функции и переходишь к определению. В микросервисе ты наталкиваешься на HTTP-запрос и идешь долго выяснять, кем и как он обрабатывается, потом находишь нужный микросервис, долго изучаешь как он устроен, ищешь что там происходит и где обработчик нужного тебе запроса, изучаешь его код. Одни мучения и затраты времени.
Другой пример. Микросервисам A, B и C надо работать с одной и той же сущностью (например: Пользователь). Что делать? Копипастить код и поддерживать 3 варианта одного и того же кода? Когда у юзера появятся новые поля, добавлять их в три микросервиса? Выносить в библиотеку и мучаться с тем, что одному сервису нужна одна версия библиотеки, а другому - другая? Сплошная боль и мучение. А в монолите такой проблемы просто нет.
Дальше, у каждого сервиса своя база данных. А что, если нескольким сервисам нужна одна и та же таблица? Опять боль, пишем синхронизацию этой таблицы между сервисами. В то время как в монолите такой проблемы просто нету.
По моему, это миф, что микросервисы чем-то лучше. Они хуже. Просто когда людей в компании очень много, им удобнее работать над своей частью кода, зачастую по своим правилам на своем фреймворке и своем языке вместо того, чтобы договориться и сообща развивать единый проект в едином репозитории.
Микросервисы требуют большего расхода рабочего времени на разработку и поддержку. Потому они и подходят большим компаниям, где много рабочей силы.
Тут описано: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
ucfirst не поможет, придется отрезать от строки первую букву, переводить ее в верхний регистр и приклеивать остаток строки.
Чтоб считалочка была.
>В типах разбираешься? Сразу используй строгую типизацию, привыкай.
Нет, меня не учили в курсе с ОП-поста.
Сделал как ты сказал, не помогло. ЧЯДНТ ЧЯДНТ ЧЯДНТ???
Битриксоид, плес
>отрезать от строки первую букву, переводить ее в верхний регистр и приклеивать остаток
нахрена? там кирилица utf - mb_ucfirst юзай и все
ОБЪЯСНИ ЧТО НЕ ТАК
Думай не о призраках дурного тона, а о том чтобы не наступить себе на яица
Копипастишь одни и теже проверки в разные места - однажды наступишь
Зависимости между сущностями делаешь не через интерфейсы - однажды наступишь.
Делаешь слишком умные объекты знающие все обо всем - однажды наступишь.
Делаешь слишком открытые объекты позволяющие ебать себя во все щели - однажды наступишь.
И так далее...
Помогите пожалуйста мне...
И не всегда нужно писать хороший код. Иногда нужно говнокодить. Особенно когда ты не в состоянии убедить начальство выделить тебе время на нормальный код. Тебе и так выдели много времени, почему ты хочешь целую неделю? Вот Петя не жалуется постоянно на нехватку времени, всегда все успевает.
Тут код не поможет. Тут надо с начальством вопрос решать. Если начальство выделывается - увольняй его нафиг. Время определяешь только ты. Не устраивает их - пусть другие им говнокодят. Пока расклад такой - пользуйтесь. Начальство баловать нельзя категорически.
>считается признаком дурного тона?
Нет никаких признаков дурного тона. Мы ж не на балу во дворце, а приложухи пилим каждый во что горазд.
Рекомендую делать через сервисы\менеджеры - так банально удобнее. На самом деле контроллер не имеет ничего общего с логикой приложения, а является точкой входа из веб, и не более.
В контроллерах вызываются сервисы, которые и содежат логику приложения - пользователя там можно, например, зарегистровать или забанить. При работе через сервисы ты можешь забанить этого пользователя и через консольку - только напиши обработчик команды, где вызови этот сервис с нужными параметрами, полученными из командной строки. А как ты контроллер вызовешь из консольки?
Хотя тот же Опенкарт использует грязные контроллеры и вездесущий копипаст и всем норм. Но это плохой пример.
>Начальство баловать нельзя категорически.
Двачую. Хотят говна - делай говно. Чтоб падало периодически, глючило и не работало как надо. Ну а что? Хотели быстро - НАТЕ быстро.
Если делать быстро и хорошо - будешь в мыле весь. Через год выгоришь к хуям.
А вообще мне как-то повстречалось выражение что-то вроде "Любишь быстро-быстро всё делать? Это мама из тебя шныря такого воспитала?". Может немного по-АУЕшному, но суть отражает - быть шнырём это унизительно и неправильно. Работать надо плавно с расстановкой.
unset($place) удаляет не элемент массива, а переменную $place. Чтобы удалить элемент массива, надо писать unset($array[$key]).
Обрати внимание, что при удалении элемента ключи и значения других элементов не пересчитываются. То есть если ключи шли как 0, 1, 2, 3 и ты удалил номер 2, то останется массив с ключами 0, 1, 3.
Спасибо добрый сэр!!!
Спасибо, анончик.
Гуро ПХП-кода, оцените мастерство исполнения.
ПОЧТИ САМИ
Я так и не понял, что это за хуйня и что она должна делать.
Это для какого-то конкурса непонятной хуйни?
Кстати прикольная тема, я думаю неплохо покидать сюда пхпшных всяких задач, максимально шизанутых, чисто для развлекухи, и предложить желающим выкладывать свои варианты решений, а потом можно будет устраивать развеселые срачи с метанием кала друг в друга, на тему у кого решение толще и длиннее!
Подозреваю, что всё ломается, когда ты на ходу изменяешь итерируемый массив.
>>1921879
Два варианта https://ideone.com/Bb1n1E
Подозреваю, что можно как-то пижже провернуть.
Что определяет "пехапешность" задачи?
Хоть бы на гитхаб страничку пакета зашел и прочел предупреждение...
Почему в пхп треде люди настолько нелюбознательные?
Как пхп себя чувствует в мире победивших SPA?)0)
Ну как, апишки на нем клепают, а что? В чем разница с другими бэкенд языками в этом отношении?
И какие ты можешь навскидку назвать популярные большие сайты
в виде SPA?
Мне приходит в голову только какая-то инфографика и такие идиотские сайтики с скроллингом вниз, по уёбищности примерно как почивший флэш.
Сейчас он тебе за ноду расскажет. На деле же, писать бэк на ноде - ярчайший признак профнепригодности к бекенду. Одно дело когда пхпшник на ноде пишет и совсем другое когда жс-вронтенд-макака.
нахуя вы кормите этого долбоеба? регулярно из треда в тред срет про свою ноду и js с частотой раз в неделю
Так в том-то и дело, что я не понимаю, что вообще тут происходит. Требуется пакет ххх, он найден, но конфликтует с другим пакетом. И что вообще в таких ситуациях делать? Я не сеньёр-помидор и не мидл, я просто хочу пересесть с вордпресса и голого пхп на ларавел. Смотрю уроки, выполняю то, что в них описано.
То есть, мне нужно было зайти на https://github.com/illuminate/console, увидеть, что там пусто, зайти на https://github.com/laravel/ui, увидеть табличку "Supported Versions", сообразить, у меня ставится 3.2, а с Ларавелом 6 совместима только 1.х, понять, как указывать композеру номер версии и написать composer require laravel/ui "1.*" и после этого получить установленный с пакет? Шаманство какое-то. Везде кричат, что композер это круто и рулез форева. А на деле даже не может выбрать совместимые пакеты. Как так-то?
Чтобы это было красиво и в одну линию,я поставил display: inline-block и все вроде встало(все с отступами)
но если уменьшить окно браузера,все блоуи справа начинаю съезжать вниз в левую сторону.
Как исправить на сжимание в одной строке до талого?
да соль то в том что как раз и пытаюсь свалить с этого говна. полтора года отгреб на всяких cms парашах, хотя в конторе были норм проекты на адекватном стеке. сказал в том месяце что не хочу работь на этом кале а хочу норм проекты на норм стеке. в итоге подкинули эту хуйню как новый сирьезный проект благо не легали хуета. вот пытаюсь в ней как то освоиться и изучить ))) параллельно конечно же ищу нормальную галеру с адекватным стэком чтобы съебаться в закат
разобрался,надо было без отступов и задать ширину
>отгреб на всяких cms парашах
Говновебстудия на фриланс-заказах что ли?
>ищу нормальную галеру
Так может и нахуй эти шаражки - в говне-то и самому копаться можно. И не кормить хозяина конторы. Опыт ковыряния в помоях у тебя уже есть вроде.
>Говновебстудия на фриланс-заказах что ли?
да тут двоякая ситуация. с одной стороны да, а с другой есть большие сложные системы даже из других стран есть заказчики лол а с другой вот такое вот дерьмо .
>в говне-то и самому копаться можно.
да впизду этот фриланс. не хочу копаться в этом говне + фрилансить и ебаться с заказчиками. хочу на норм галеру или контору со своим продуктом где будет фреймворк. а на фрилансе заказов на фреймворке с гулькин хуй. так что не выход. ну а чтобы пилить свой стартап на ларе пока средств нет чтобы тууда вкладываться и развивать хотя проектик то есть, что то же я показываю хрюшам чтобы без мыла пролезть на фреймворк по факту не имея на нем коммерческого опыта
Так может стоит приврать насчет коммерческого опыта на фреймворке?
Хрюши то не проверяют, правда ли работал на нем. Им лишь бы услышать нужную цифру N+ лет на фреймворке-нейм.
А что толку? Ну пойдёт он этап с хрюшей, потом на техническом собесе его приложат.
Раз он говорит, что писал на ларе, то не факт что приложат.
А даже если на паре вопросов приложат - запишет вопросы, подучит и на следующем собесе не приложат.
А ну, если так, то да. В принципе немного приврать про опыт, когда это необходимо, не страшно, главное чтобы был готов к тех собесу нормально, чтобы дизмораль не словить.
>В принципе немного приврать про опыт, когда это необходимо, не страшно
Сейчас это маст хэв, чтобы перепрыгнуть толпу вкатунов
>приврать про опыт
Только если петы делал. Туториалы с хелловорлдом не в счёт.
Т.е. если можешь взять рандомное тестовое на этой платформе и сделать его в приемлимые сроки - тогда есть смысол приврать про опыт.
Иначе обосрёшься обидно.
Ну вот, допустим, что приврал ты про опыт, а как же опыт работы в команде? Жиру на пет прджектах не потрогаешь, умение оценивать таски тоже.
Джиру во-первых все по разному готовят. Во-вторых осваивается за 1 день, т.к. тебе всё пояснят при онбоардинге.
А умение оценивать таски из разряда фантастики
<a href="index.php">
<img srs="/imgages/logo.PNG" alt="logo"></a>
</div>
почему картинка не отображается?
в папке htdocs есть папка app. а в ней images
srs
а что не так,вроде верно?
>>1922567
Вот поэтому и говорят умные дядьки - учите нативный пхп сначала, без всякого дерьма типа фреймворков-ларавелов и кмс-ов. Потому что все это дерьмо - и фреймворки типа магнет, джулм вордпрессов и всяко-разных движков на нативном пхп-js-sql и построено.
Дохуя развелось "ларавелщиков" которые на деле не в сасывают, как все работает, а тупо зубрят шаблоны. Потому что "нахуя нативный пхп нужен то?". Потому и нужен, что если нативный знаешь, то тебе похеру потом, какой движок, фреймворк или кмс. Ты изнутри их видишь, и понимаешь, как и что делать в любом случае. И в теории сам можешь собрать под себя и свой собственный ларавел, и свои кмс, и свои любые движки.
И не будет херни типа "а, это магента 2 - я не работал никогда вообще с таким, хз, не потяну, я только по битриксу и вордпрессу, и немного джулму" - когда вопрос тупо добавить кнопку или таблицу данных в базу.
Как то так. Я как раз работаю (точнее подрабатываю как хобби) в конторе где половина ларавельщиков, и половина реактеров. И я отдельно, потому что я пхп-шник, node-js ник. Вне системы типа, потому что постоянно приходится корректировать их "работу", когда у них "глаза не видят, руки делают" - то есть шаблоны не работают так, как хочет заказчик, а понимания внутренней структуры - нет и в помине. Так как "некогда объяснять - хуячь шаблоны"... а все что за рамками - типа никак.
fffff
Просто бывает такая штука, что делаешь себе шаблончики на пыхе ридонли и горя не знаешь, потом появляется какая-то йоба форма динамическая, думаешь ну тут нужен жаваскрипт, подрубаешь вью/реакт потому что так банально продуктивнее, потом с ростом таких динамических страниц замечаешь что дублируешь верстку у компонентов, задумываешься над тем чтобы перенести общие компоненты на вью, или оставить как есть. В итоге получается что у тебя 70% фронта всё равно работает на жсе, 30% на пхп, при этом собирается всё непонятно как, хотя можно было взять какой-то nuxtjs и горя не знать, хотя усложняется деплой, это да.
Сразу адептам жиквери или чистого жса, которые считают что для простых задач вью/реакт не нужен, во первых он весит даже больше чем вью, это если мы говорим о размере ассетов, пхпшниками жиквери код пишется обычно на один раз, потом чтобы что-то добавить, нужно сидеть и 15 минут просто вникать в этот императивный поток сознания какие классы у кого включаются/выключаются, при этом непонятно на чем мы сэкономили (наверное что не нужно вебпак запускать, ну это сильно)
адекват в треде. если в течении месяца не найду работу то планирую так и поступать. но на самом деле как показывает практика то тут про фреймворк редко что то спрашивают. в основном по теории, паттернам, языку, бд. вот на этом легко сфелится на самом деле. да и то иногда и этого бывает мало. на той неделе был собес где вместо тестового вот решал задачки + вопросы по теории. в итоге правильно ответил на всю хуйню что спрашивали, и как итог на след день сказали сори вы нам не подходите))) хуй знает че им надо лол. тут все мега относительно
>>1923468
так соль то в том что с нативного и голого пхп я как раз и начинал. не будь этих знаний - не смог бы тут все это дерьмо в короткие сроки осваивать и выполнять. даже сейчас кстати по работе встречаются задачи когда надо юзать голый пхп тк средств цмски той же не хватает. а по поводу магенты2 - потому что тупо нихуя не понятно. это пиздец какой-то. я в первые структуру увидел и выпал. уровень битрикса блять. дока какая то хуевая. какие то phtml расширения которые как я понял как раз отвечают за вьюху ? везде эти ебучие xml'ки. пиздец кароче
магенто2-кун
да, магента мрачный жесткач, очень дохрена всего наворотили, чтобы "максимально мощный функционал был". Получился блять реально трактор, собранный из велосипедов. Там за один день хрен разберешься реально. И да, xml бесит реально, так как то, что по идее должно быть в базе, вынесли в файлы типа для "облегчения работы" юзерам и админам. Причем, даже не json, потому что извращенцы блин. Я когда разобрался, посносил их нахрен и заменил таблцами постгресса, урезав часть ненужного функционала. Но нервов и времени убил массу. В процессе я потом все таки собрал заказчику свой движок, и импортировал базу в него. Слишком уж дохера там всего ненужного и лишнего всобачено, и интерфейс пизданутый на выходе по своей тяжести.
да я уже исправил
во во. сейчас пытаюсь только завести его. окружение настроить надо + поебстись с бд. я в ахуе просто целый день на это убил. и то только для того чтобы внятно сюда эластик поставить. скучаю по докеру.
Долгое время писал проекты на ларавел. Думаю, имеет ли смысл перекатываться на симфони.
Хотел поинтересоваться как обстоят дела с работой на симфе (удаленка) и зарплатами?
Судя по хх примерно 1к1 в сравнении с ларой
Судя по хабразарплатам на симфе денег больше, правда хз из-за чего
Есть ли фриланс на симфони или это скорее исключение?
И что обычно спрашивают на собесах и ждут от условного мидла симфониста?
Из задачек на собесах были всякие физ-базы и простенькие алгоритмы (сортировка, списки, матрицы).
По теории часто спрашивают ООП и СОЛИД. Это надо прям чтоб от зубов. К ним еще пол десятка паттернов проектирования назвать и пару примеров привести.
Больше всего не люблю, когда дрючат кишками бд, когда я с ними только на уровне орм в основном общаюсь.
>солид на зубок
это нахуя? вообще никогда не понимал
>К ним еще пол десятка паттернов проектирования
и это тоже надо если хочешь получать 50к ? )))
>солид на зубок
>это нахуя? вообще никогда не понимал
Ходят легенды, что где-то пишут код по солиду.
>К ним еще пол десятка паттернов проектирования
>и это тоже надо если хочешь получать 50к ? )))
Это было на собесе на 120к
Это для мидлов и джуниоров легенды. А для сеньоров здравый смысл и банальная повседневность. Тоже жестко топлю за солид-стандарты всегда, ибо без них жопа потом полная наступает.
хотя, это важно если вы сами проект от а до я делаете. С собственными фреймворками, в нативе.
А для ларавельщиков и принеси-подайщиков это нафиг не надо, т.к. у них и так коридор возможностей еще уже, чем солид-стандарты.
>Судя по хабразарплатам на симфе денег больше, правда хз из-за чего
Так симфони это почти что джава, а ларка почти что вордпресс. Разве нет?
Нет. Просто ларка продвинутее и новее симфы, и когда новички все тотально юзают ларку, потому что она новее и перспективнее, то на старых проектах симфы с кадрами напряг, и все.
"Кривонаписанность" и глючность не делает из фреймворка резко джаву, а более менее понятный интерфейс не делает из него же примитивщину. То есть - один хер и то и другое. Но на симфе меньше народа пишет, потому что он - говно если честно, и сосет у ларавела. А проектов на симфе осталась гора - поэтому асинезаторы, вынужденные в этом говне ковыряться, зарабатывают больше, чем те кто в ларке хуи пинает без особого напряга.
Норм, но сейчас учатся не так. Пролистай общие принципы, самые общие, посылай нахер все непонятности и забивай, заверши ознакомление как можно скорей. Затем возьми минимальный хорошо структурированный рабочий проект любой, изучи его, поставь на хостинг как демо-полигон, умеющий блять все, и принимайся за заказы. Если возникнут вопросы по ходу - тебе полюбому примеры и задачки из учебника не помогут. Ток гугл и стаковерфлоу. применяешь на своем шаблоне и реализуешь. Сразу как сеньор, посылая всех нахер, поскольку у тебя есть готовый собственный сложный проект-модель, типа того. А лучше штук пять таких, да штук десять лотов на кодекайон поставить в продажу. Только так. Это лучше, чем тратить вагоны времени на бесполезное штудирование учебников, чтобы потом заниматься вообще хер знает чем как сраный мидл или джуниор. Чтобы общаться напрямую с кабанчиками и по своему бюджету работать, а не через три пизды и третьего-пятого менеджера айти по разработке шестого отдела логов и кеширования хз пойми чего с доступом только по хп и зряплатой долбоеба. Ну это так, мое мнение, сорри если кого задел.
Почему тогда недавно здеся местный анон назвал Ларавел колхозом и призывал учить Симфони? Честно говоря, он звучал убедительно. Не помню, какие он аргументы приводил в пользу Симфони.
Меня на собесе шпилили во все дыры вопросами по базам данных, солидам и внутреннему устройству доктрины. И про пару компонентов симфы спросили.
Перекатываться смысл есть, изучение симфы прокачает тебя как разраба, есть шанс научиться писать более лучший код.
Удалёнка есть, сам сижу на такой щас. 240k, миддл.
Зачем вообще нужен фриланс?
>Затем возьми минимальный хорошо структурированный рабочий проект любой
Скажи, пожалуйста, где его достать.
>>1923845
Потому что симфони сложнее и требует так или иначе знать натив, без которого тупо не вкатишься. А ларавел тупо конструктор, даже дурак справится, ну и никто особо не растет на нем, поскольку как оно работает и что там внутри нихера не нужно знать - работает и хер с ним. Хотя по сути, лара даже продвинутее симфы, именно простота ее освоения и позволяет макакам считать себя прогерами.
Таким образом да, симфони прокачает, так как чтобы ее освоить надо посообразительнее макаки быть, а зенд тогда еще круче
прокачает.
Но опять таки, если по чесноку, для того кто шарит в нативном пхп это две абсолютно однохуйственные по сути вещи.
Я тупо покупал на том же кодекайоне скрипты движков приложений, или скачивал с торентов, если был варез.
Чел, я хз что тебе больше нравится.
Ну как пример попроще https://codecanyon.net/item/premium-media-script/9324018 - если найдешь варез то поставь, а нет, так и купи для интереса - я купил, не нищий, хуле - посмотри что и как работает, поковыряй, добавь свои свистелки и перделки, попробуй поподключать другие бд, поставить доп плюшки на сервер, и т.д. и т.п. Таких штук пять скриптов, написанных на хорошем пхп с соблюдением solid-стандарта расковыряешь - научишься в миллион раз большему, чем по всяким книжкам и т.п.
>>1923920
И да, продукты от KBRmedia как правило написаны на хорошем пхп, но не без глюков и всегда есть что улучшать внутри. По мне, так самое то учиться нативному пхп именно на таких скриптах.
И только когда разберешься и сам сможешь на коленке воспроизвести тот же уровень или лучше, имхо, следует лезть в освление фреймворков типа зенда, симфы, лары.
И кстати, в качестве вспоможения неплохо найти попутно кабанчика, который хочет типа "собственный типа ютуб, или в этом духе что нибудь" и готов за это забашлять. Когда все оплачено наперед, учиться оно приятнее и веселее. :)
Сорри, поищите плиз, если кто спер этот скрипт до меня. На варезах должен быть. Мне как бы никомильфо красть у благодетелей, прошу меня понять. Тем более я уверен, что до меня уже украли.
Ладно хорошо не будем обижаться что ты не поделился...
Хотя - вот, кто то уже спер, гад. https://www.nulled-scripts.info/premium-media-script-v1-5-1-1/
>>1923944
Лол, помню, попалась на фрилансе задачка поскрапить какой-то список хуиток с привзякой к карте.
Ну а там лимит на количество результатов и максимальный радиус в пару километров, короче, надо ебаться с брутфорсом параметров для поиска.
Ну я погуглил этот скрипт, а он там продается и гуляет уже спижженый. Внутри совершенно через жопу всё, на вид середина нулевых, а всё торгуют и причем покупают.
Ну я за пару минут нашел инъекцию и получил всё сразу, лол.
>>Когда все оплачено наперед, учиться оно приятнее и веселее. :)
Это немного не так. Когджа заплачено - пиздато делать быстро и правильно.
А учиться, особенно когда заказчик который уже "оплачено" постоянно докидывает "а давайте сюда чет добавим" - так себе. Помимо изучения прогинга сразу приходится решать и кучу других вопросов. Прокачиваешься как сам себе кабанчик.
Но это тяжело, рили тяжело. Я сейчас в подобной ситуаци.
Кстати вопрос - мне нужно в елоквенте составить запрос такого плана:
у модели есть свойство "платно" и свойство "бесплатно".
Модель должна доставаться из БД когда: "платно" или "бесплатно" больше 0, но если и "платно" и "бесплатно" равны нолю - то доставаться данные не должны
Ну и да, процентов 80% доступного времени за эти год я пинал хуй. Из чего следует что важна личность человека. Что бы вкотиться я думаю есть два варианта. Первый - программить лет с 15, и быть психологически и поведенчески кривым и косым, но опыт задротства решает. Второй - полностью нахуй переработать свои привычки и поведение, развить волю, дисциплину, решительность. Я за 4 года нихуя не смог, все делаю долго и на отъебись. Кривое поделие на слим с кривой архитектурой и ORM елоквент в качестве БД слоя, и кривые самопальные классы JS и компонетны реакт собранные вэбпаком на фронте - мой потолок, все кривое косое и работает через пизду. Весь явнарь хуй пинал, при этом имею заказ который имеет не закрытые таски.
Вот такой вот средний вкатывальщик за 30. Не будте такими как я.
Думаю что большинство вкатывальщикв такие же далбоебы как я.
замечу что и в жизни у меня все так же на отъебись
п.с.
добавлю что орд вкатывальщиков старше лет 27 врядли стоит ждать, психика и привычки формируются плотно, и их изменить пиздец как сложно. Если чел -неорганизованный еблан - то с 90% вероятностью таким и будет до конца жизни. Я врал себе что я типа на дисциплине, иногда так и было. Но пропинав хуй весь январь я понял что хуй, я все тот же деградирующий сисадмин. Печаль ебаная.
>Кривое поделие на слим с кривой архитектурой и ORM елоквент в качестве БД слоя, и кривые самопальные классы JS и компонетны реакт собранные вэбпаком на фронте - мой потолок, все кривое косое и работает через пизду
Описал средний говнопроект на галере.
>постоянно докидывает "а давайте сюда чет добавим"
В таких случаях принято оставлять эти добавки после основных работ. Т.е. есть обговорённый и оцененный функционал - он и делается в текущий момент, а всё, что сверху - уже потом. Иначе рили тяжело будет всё сразу делать и оценивать.
Кабанчику-то похуй - у него фантазия пошла фантанировать, а ты закапываешься.
На фрилансах так же делают обычно - лишь бы сдать, а там пусть сами ебутся.
Это тонкий намек на то что мне пора пиздовать в "коммерческую разработку"?
Ты собесы хоть проходил? Или так и сидишь учишь?
Это тонкий намек на то, что ты как-то слишком идеализируешь код работающих разрабов. Редко где можно встретить качественный код.
В основном такие же васяны пишут подобный говнопроект с нуля. Потом нанимают еще пачку васянов допиливать этот проект. Исключительной удачей будет, если среди нанятых васянов окажется прошаренный чел, который построит остальных васянов, не даст им больше срать в код и потихоньку вытащит проект из говен.
Думаю, ты вполне можешь на удаленке получать соточку
Иди проходи собесы, устраивайся и получай уже норм зп.
>слишком идеализируешь код работающих разрабов
Себя вспомнил - как тоже всё хотел чтобы было чистенько и красиво, как по нотам, короче. Потом пришлось поработать на реальных работающих проектах и у меня эту детскую дурь из головы быстро вынесло.
Если писать красиво и идеально - результатов внуки только дождутся.
А я знал, что нечто такое обязательно всплывет :) Обязательно какой нибудь особо современный начнет интересоваться.
Есть такие, которые считают что ларавел это правильный пхп,
Ну а конструкт2 это js. А Unity это C++. Потому что "есть современные стандарты и библиотеки, и не нужны велосипеды, ибо будет несовместимость, немасштабируемость, уязвимости, а главное скорость разработки современного продукта" и т.п.
Как китайцы, которые собирают авто на конвеере из присланных им деталей, которые спроектированы немцами. Собрать, а не создать. По инструкции, а не с пониманием.
Могу только пожелать вам успехов, коллеги. С китайцами так и надо. Пока делаете пустую демку типа "хелло ворд" в самой современном фреймворке и продвинутой идешке с весом в пол гига подключенных через композер кодов, папок и библиотек,не понимая для чего они нужны (не нужны) и получаете по итогам вылетевшую кодировку, у меня всегда будет работа.
А если серьезно, то я просто указал, на каких примерах вкатываться в пхп, чтобы знать минимальные основы построения приложений, необходимое как раз для того, чтобы вам было плевать, какие фреймворки или кмс использовать, так как сами они построены на тех же принципах.
>Кстати вопрос - мне...
Вот почему я и говорил, что лара зло.
По существу, логика условия должна быть вне oem, просто
в методе класса. Если условие 1 оем выполняется или не выполняется если условие 2. Внутри самой оем никаких иных логик, кроме реализации запросов бд быть в принципе не должно. Поэтому сам вопрос как минимум непонятен, но увы, типичен. Если бы у вас была практика создания кастомных бд классов на нативном пхп прошлого века, то таких вопросов не возникало бы в принципе, поскольку логика в елоквенте нарушает принципы единой ответственности. Ну это так, к слову.
>у модели есть свойство "платно" и свойство "бесплатно"
>должна доставаться из БД когда: "платно" или "бесплатно" больше 0
А если "бесплатно" больше 0, то продавец ещё и доплачивает что-ли за покупку дайте мне этого продавца сюда - я миллионером стану? У тебя тут с логикой какие-то траблы кажется.
Бесплатно это когда "price" == 0. Тогда и достаётся из БД элементарно всё.
>фреймворки или кмс использовать, так как сами они построены на тех же принципах
Фреймворк и cms это несколько разные уровни. Х.з. как ты всё в одну кучу валишь. Сдаётся мне, что на фреймах ты не работал ни разу и не догоняешь, что они для разных типов разработки используются.
>>1924290
>практика создания кастомных бд классов на нативном пхп прошлого века
У Лары очень даже годная библиотека для работы с БД, как и подходы.
>логика в елоквенте нарушает принципы единой ответственности
В твоих CMSках это всё ещё хуже реализовано чаще всего. Гораздо, гораздо хуже.
Несколько лет назад начинал с основ пхп (пхп, пхп 7, ооп), потом серию Laravel from scratch для самой последней версии лары.
>тно" больше 0, то продавец ещё и доплачивает что-ли за покупку дайте мне этого продавца сюда - я миллионером стану? У тебя тут с логикой какие-то траблы кажется.
Кстати, хоть и хохма это, но такие продавцы есть :)))
Так что имхо не важно тут - может это булевый нуль, я хз как там все в ларавеле, но именно в том и засада двойственности - с одной стороны готовые фреймворки как бы содержат в себе надежные и проверенные решения высокого уровня, так что даже макака, почитав мануал может более менее легко разобраться что и как делать. даже без особого знания корневого нативного языка и соображалки по части алгоритмов. По итогам получается как будто бы быстро и добротно сделанный проект, и юное хвостатое дарование сияет от собственной невьебенности. Дескать, во какой проект слепило. Но на деле - это чужой проект, и слепили его те же, кто слепил ларавел, а ты только сделал тюнинг по инструкции из запчастей, не особо разбираясь в сути.
Но это как правило только начало. Макак много, они все разные, и все хотят как можно больше всяких функционалов, свистелок и перделок, подключений к херовой туче саасок и т.п.. По итогам система развивается, и народ ее активно хвалит, но мануалы становятся все сложнее и сложнее, подключаемых висюлек и пиздюлек типа плагинов становится настолько много, что хер разберешь, плюс к каждому из них свой мануал, который пока изучишь, фреймворк снова устареет. А потом выдут новые релизы постгресса или, пхп, всплывет куча деприкатов, и - правильно, опять курить раздутые мануалы, юзать сырые бета-версии обновлений, все работает по итогу черти как и хер знает как, и умельцы дабы исправить положение втыкают костыли и патчи, написанные на скорую руку и через жопу, и так далее. По итогам пятистраничный сайт администрирует сорок прогеров, которые 90 процентов времени читают мануалы к аддонам к патчам, которые к плагинам, которые для такой-то версии, которая скоро депрекатед потому что выйдет следующая более современная.
О каком нативном пхп может идти тут речь, если по мануалу можно собрать сразу мегапортал с блекджеком и шлюхами, тупо нажав с десяток кнопок типа "сделать песдато" и "подключить звезду смерти с музыкой и сканером сетчатки к иконке sucks".
Как итог, господа рубисты, пхпшники, сишники и джавошники с печалью, но не без злорадства наблюдают, в какой пиздец превращается индустрия, потирая ручки в предвкушении удовольствия от военно спортивных разьебов всей этой хуйни, так как прекрасно видят аналогию с инженерной революцией прошлого века.
Когда начав с азов и основ, инженеры от проектирования паровозов смогли дойти до создания космических кораблей, но зумеры тех лет решили, что это не эффективно, и гораздо быстрее использовать "наработки из коробки" - по итогам, когда то США построило во время войны за два года боле 5000 военных кораблей самого современного на тот момент уровня, а теперь они тратят миллиарды, но уже больше четырех лет не могут тупо даже починить два корабля, которые были построены еще в 70х, просто потому что "умники" рвали жопу на продвинутых технологиях конструирования из коробки.
Которые как бы быстрее, мощнее и проще, и которые даже макаки освоят. Вот и дорвались - просрали фундаментальные знания основ, потеряли специалистов, которые специально были заточены на то, чтобы из говна и песка делать инженерные шедевры, которые просто перестали воспроизводиться, а теперь сидят и тыкву чешут, типа - какого хера все падает и не работает?
В мануалах же написано все верно должно быть, ан нет - не работает нихера. Потому что понимания того, как и почему работает - не было и нет. Есть тупо заученные мануалы.
И что самое интересное - эти мануалы в миллион раз уже сложнее и запутаннее, чем основные принципы, лежащие в их основе, которые просто следовало бы освоить. Но - нет. Это медленно, неэффективно, там нет кнопки "сделать песдато", там из коробки нихрена нет, и за это скорее всего платить не будут.
Шикарно в общем.
Поэтому и делают сегодня программисты в десять раз больше работы, скачивая патчи и обновления, юзая косячные оемки типа елоквента и куря мануалы, как тут >>1924273, вместо того, чтобы один раз почитать мануал по бд и создать метод в три строки, который просто выполнит произвольный query через PDO. Но - для этого надо знать как работают бд! А в елоквенте пофигу, поэтому все быстрее и проще - возразят мне. И хуй что возразишь.
Но по итогам - "ускорение" программирование получается "в отрицательную сторону", так как необходимость курить все новые и новые мануалы и делать новые и новые патчи, да потом еще совещаться на консилиумах несколько дней на тему "допустимо ли использовать обработку массивов средствами пхп, или необходимо преобразовать все обработчики в методы, а массивы в объекты?". Как итог, народ вешает потом эластик на постгресс, причем блять через плагин вордпресса, и когда мы начинаем истерично ржать, с удивлением спрашивает "не, ну а чо такого?"..
>тно" больше 0, то продавец ещё и доплачивает что-ли за покупку дайте мне этого продавца сюда - я миллионером стану? У тебя тут с логикой какие-то траблы кажется.
Кстати, хоть и хохма это, но такие продавцы есть :)))
Так что имхо не важно тут - может это булевый нуль, я хз как там все в ларавеле, но именно в том и засада двойственности - с одной стороны готовые фреймворки как бы содержат в себе надежные и проверенные решения высокого уровня, так что даже макака, почитав мануал может более менее легко разобраться что и как делать. даже без особого знания корневого нативного языка и соображалки по части алгоритмов. По итогам получается как будто бы быстро и добротно сделанный проект, и юное хвостатое дарование сияет от собственной невьебенности. Дескать, во какой проект слепило. Но на деле - это чужой проект, и слепили его те же, кто слепил ларавел, а ты только сделал тюнинг по инструкции из запчастей, не особо разбираясь в сути.
Но это как правило только начало. Макак много, они все разные, и все хотят как можно больше всяких функционалов, свистелок и перделок, подключений к херовой туче саасок и т.п.. По итогам система развивается, и народ ее активно хвалит, но мануалы становятся все сложнее и сложнее, подключаемых висюлек и пиздюлек типа плагинов становится настолько много, что хер разберешь, плюс к каждому из них свой мануал, который пока изучишь, фреймворк снова устареет. А потом выдут новые релизы постгресса или, пхп, всплывет куча деприкатов, и - правильно, опять курить раздутые мануалы, юзать сырые бета-версии обновлений, все работает по итогу черти как и хер знает как, и умельцы дабы исправить положение втыкают костыли и патчи, написанные на скорую руку и через жопу, и так далее. По итогам пятистраничный сайт администрирует сорок прогеров, которые 90 процентов времени читают мануалы к аддонам к патчам, которые к плагинам, которые для такой-то версии, которая скоро депрекатед потому что выйдет следующая более современная.
О каком нативном пхп может идти тут речь, если по мануалу можно собрать сразу мегапортал с блекджеком и шлюхами, тупо нажав с десяток кнопок типа "сделать песдато" и "подключить звезду смерти с музыкой и сканером сетчатки к иконке sucks".
Как итог, господа рубисты, пхпшники, сишники и джавошники с печалью, но не без злорадства наблюдают, в какой пиздец превращается индустрия, потирая ручки в предвкушении удовольствия от военно спортивных разьебов всей этой хуйни, так как прекрасно видят аналогию с инженерной революцией прошлого века.
Когда начав с азов и основ, инженеры от проектирования паровозов смогли дойти до создания космических кораблей, но зумеры тех лет решили, что это не эффективно, и гораздо быстрее использовать "наработки из коробки" - по итогам, когда то США построило во время войны за два года боле 5000 военных кораблей самого современного на тот момент уровня, а теперь они тратят миллиарды, но уже больше четырех лет не могут тупо даже починить два корабля, которые были построены еще в 70х, просто потому что "умники" рвали жопу на продвинутых технологиях конструирования из коробки.
Которые как бы быстрее, мощнее и проще, и которые даже макаки освоят. Вот и дорвались - просрали фундаментальные знания основ, потеряли специалистов, которые специально были заточены на то, чтобы из говна и песка делать инженерные шедевры, которые просто перестали воспроизводиться, а теперь сидят и тыкву чешут, типа - какого хера все падает и не работает?
В мануалах же написано все верно должно быть, ан нет - не работает нихера. Потому что понимания того, как и почему работает - не было и нет. Есть тупо заученные мануалы.
И что самое интересное - эти мануалы в миллион раз уже сложнее и запутаннее, чем основные принципы, лежащие в их основе, которые просто следовало бы освоить. Но - нет. Это медленно, неэффективно, там нет кнопки "сделать песдато", там из коробки нихрена нет, и за это скорее всего платить не будут.
Шикарно в общем.
Поэтому и делают сегодня программисты в десять раз больше работы, скачивая патчи и обновления, юзая косячные оемки типа елоквента и куря мануалы, как тут >>1924273, вместо того, чтобы один раз почитать мануал по бд и создать метод в три строки, который просто выполнит произвольный query через PDO. Но - для этого надо знать как работают бд! А в елоквенте пофигу, поэтому все быстрее и проще - возразят мне. И хуй что возразишь.
Но по итогам - "ускорение" программирование получается "в отрицательную сторону", так как необходимость курить все новые и новые мануалы и делать новые и новые патчи, да потом еще совещаться на консилиумах несколько дней на тему "допустимо ли использовать обработку массивов средствами пхп, или необходимо преобразовать все обработчики в методы, а массивы в объекты?". Как итог, народ вешает потом эластик на постгресс, причем блять через плагин вордпресса, и когда мы начинаем истерично ржать, с удивлением спрашивает "не, ну а чо такого?"..
Дело не в том, как там что реализовано, а в том, способен ли ты сам реализовать что нибудь хотя бы на этом уровне, или без фреймворка даже формы обратной связи собрать не в состоянии.
Потому что миллион таких уже случаев, когда чел типа собирает мега-проект, но вот суко передвинуть кнопку в футере на два пиксела вправо - не в состоянии от слова совсем. Не говоря уже о каких либо нестандартных задачах. По мануалам - не учатся, старик.
могу реализовать некоторые вещи только на пыхе, без фрейма. но есть вещи которые могу реализовать и там и там. это ок?
>но вот суко передвинуть кнопку в футере на два пиксела вправо
а знаешь почему так ? потому что там блять в проекте насрато так что как не срали даже в индийские помойки да-да, именно сральники, а не проекты как ты мог подумать. и вот ты блять иди ищи по эти шаблонам и лазь по 30 папкам чтобы найти тот css файл который у тя подключается. помню в декабре была ситуация где нахуй были следующие файлы в папке моей темы которые подключает битрикс: style.css, styles.css, _style.css, _styles.css. и угадай где из них была разметка для навбара? ВООБЩЕ НАХУЙ В ДРУГОМ СОВЕРШЕННО ШАБЛОНЕ ОТ ДРУГОГО БЛЯТЬ САЙТА. вроде бы таска плевая, на хуй там, из за такого говна встречаешь на два часа для того чтобы просто найти
Порвало нафиг. Своего рода жизненный путь какого нибудь миддла, который постоянно был вынужден менять работу и так толком и не понял, чем же ему заняться, запомнил только заголовки. Печальный и трудный путь. Судя по всему написано по примеру мануалов - бестолково, непонятно, неюзабельно, но внушает ужас и уважение окружающим. Такие слова умные прям пипец. Вордпресс, хететепе-хедер. Расшифрую, примерно, чтобы поняли глубину маразма.
Пишем - хирург - роудмап.
Потом рисуем квадратики и от балды пишем внутри них термины.
Типа - регистратура - карточка - бахилы - санитария - мыло
перевязочные материалы - клизма - кровотечение - термометр - аутоимунное - наркоз - солутан - примочка - пинцет - тахикардия - ухо-горло-нос - нога-жопа-кариес - анамнез - зеленка - пальпация вульвы - гидроцефал - мошонка - минздрав - анальгин - сыпь - опорожнение судна - десна - кварцевание - залысины - эпикантус копенгагенская декларация - воспаление блуждающего нерва - пигментация ногтей - лазерная терапия - профилактика копрофагии методом черветерапии - монокль.
Ну, примерно так это бы выглядело. Наглость и бесстыдство прогеров, особенно тех, которые в двадцать втором веке душой и телом, не имеет никаких пределов. А хуле делать. Такова селяви.
Именно. Вот поэтому и есть стандарты - где стили должны лежать, где скрипты, как должны быть написаны и оформлены. За это собственно и ебут миддлов, особенно симпатичных. Поэтому я как правило просто смотрю на такой проект, и если там насрано - сношу к ебанной матери и делаю с нуля ракетой. Иначе потом не разгребешься.
Чем чтение мануалов для фреймворка отличается от чтения оного для CMS? Актуальных фреймворков на тот же ПХП в разы меньше чем велосипедных CMS и реализованы они плюс-минус одинаково. К тому же не бонусом идёт понимание правильной архитектуры приложения, что в ЦМС зачастую вообще не так.
Да и код на фреймах хорошо документирован через php-doc и комментарии. Не вижу проблемы.
Имел дело и с теми и с другими и моё мнение таково, что фреймворками пользуются именно программисты, а ЦМСками чаще всего вебмастеры\верстальщики.
На чистом ПХП сегодня писать можно, но лучше не стоит - более-менее большой проект ты будешь на нём делать до седых мудей. А потом править свои баги столько же. А если ещё и без знания архитектуры, то вообще пиздос зароешься с копытами.
Но начинать и правда обязательно с чистого ПХП, иначе макака и дурачок с гранатой.
>могу реализовать некоторые вещи только на пыхе, без фрейма. но есть вещи которые могу реализовать и там и там. это ок?
Естественно. Я о тех, которым "пыха не нужна вааще", так как "в ларавеле все есть". Типа игроделов, которые работают в Юнити без малейшей попытки вката в си++ - то есть обреченные на убой.
>Но начинать и правда обязательно с чистого ПХП, иначе макака и дурачок с гранатой.
Вот, именно об этом и речь. :)
>Естественно. Я о тех, которым "пыха не нужна вааще", так как "в ларавеле все есть".
курсодебилы, хуле с них взять. нассали в уши что вот выучите все побыстренькому за 3 месяца и будете крутыми спецами с зп в 100к
>Типа игроделов, которые работают в Юнити без малейшей попытки вката в си++
так там же с# нужен. чому кресты то ?
>там же с# нужен. чому кресты то ?
угу. скрипты там на c#, а сам юнити на крестах, прикинь :)
но да, тут я признаю что перетолстил сильно, т.к.
такой уровень закапывания уже для ярых олдов.
И кстати да - тоже по той же схеме роудмапа пхп -
не понял сперва, что каждый их квадратик это типа
отдельный обучающий курс или его компоненты.
Походу да, комерсы инфоцыгане портят все.
Начинался он на yii1, частично подключен ларавель.
Хз как к нему подступиться.
120
Что такого спрашивают на собесах за 50к? Там же главное, чтобы собеседуемый в штаны не насрал и как зовут не забыл. Не понимаю, напиши плиз, что спрашивают. Мне аж иетересно стало.
мимо стронг джун зп 120к
Тебе сразу сложные таски кидать начнут? Первое время приглядывать же должны, чтобы не обосрался.
ну вот я ищу галеру на ларке/симфонии которые работают. про фреймворки вообще ниче не спрашивают. в основном по теории, ооп, про язык, про бд иногда. все. в принципе ниче сложного и все посильно. адекватно и правильно отвечаешь и в итоге мы вам перезвоним. хуй знает че им не нравится лол. бывают оч редко специфичные вопросы чтобы загасить это вот прямо сразу видно т.к. никто никогда такое не спрашивает а тут решили спросить но это скорее исключение чем правило. если только из за этого. одни напрямую сказали что вот у вас с теорией и практикой все ок, но мы вам откажем потому что у вас опыт широкий, а не глубокий. как то так. другие просто молча слились. вот ждем сегодня завтра ответа от еще одних
>у вас опыт широкий, а не глубокий
Если ответили таким образом - значит считают, что знаешь только по верхам. У тебя есть проекты на фремворках с композером? Не хелловорлды с туториалов, а свои какие? Юнит-тесты умеешь, гит как? Они твой код смотрели?
А вообще сливаться после удачного собеса - обычное дело у херочек, привыкай. Хоть сайт пиши с отзывами по таким конторам - чтоб люди время не теряли.
Может стоит попробовать на удаленку? Возьми и пройди хотя бы один собес на 100к, не обязательно дс.
так я и ищу удаленку. в нашем задрищенске 700к 2 конторы работают с таким стеком. все остальные на всяких битриксах, вп, и тп скаме
>У тебя есть проекты на фремворках с композером?
конечно есть. один просто бложик по классике который открытый и я показать могу. но там прямо вообще самая база. и есть другой проект, там уже полноценный проект, но он закрытый, показать не могу. вот там то уже все по взрослому
а что в гите именно знать то надо? а то везде пишут знания гита. и что это имеется в виду? простые пуш/пул команды? или знания правил ведения разработки при работе с гитом? я лично считаю что последнее.
>А вообще сливаться после удачного собеса - обычное дело у херочек, привыкай
а нахуя так собсно делать? че за бред? при том вот меня послали полгода назад они же хотя все было ок, и сейчас допустим заново работу ищу. и они меня не зовут хотя косяк то с их стороны
>Хоть сайт пиши с отзывами по таким конторам - чтоб люди время не теряли.
Годная идея. мб намучу такое когда буду Vue изучать
>а нахуя так собсно делать? че за бред?
Мониторят рыночек - если много прокачанных джунов, то можно зряплаты понизить например. А если хороший мидл-дурак пойдёт на зарплату джуна, то его даже можно взять. Им, один хуй, делать нечего больше - так хоть какая-то деятельность. Да и начальники работу требуют, а не сидения вконтактике весь день.
Такая вот симуляция деятельности за чужой счёт. На наше с тобой время им глубоко насрать.
как бы их всех назвали?
Карасик.
Со смазкой и лаской, аккуратно сзади) Я бы начал потихоньку в сторону Лары переписывать, чтобы в один прекрасный день от Легаси ничего не осталось, этакая каша из топора
>Скажут оценить - я же обосрусь
>500к строк
Я б с полгода времени попросил - я ж не волшебник.
Если у тебя на работе это единственный ответ в таком случае, то и правда - нечего там делать. Ну или оценивай перенос многолетних проектов за неделю, а потом в мыле весь обсирайся со сроками и нагрузкой, и точно так же вылетай с работы.
Мы вам за что 120 тысяч платим? А если серьёзно, то про перенос там ни единого слова не было. Анон так и будет ковырять легаси код. Не думаю, что его взяли на работу, чтобы с yii на лару переносить.
- Пользователи создают рецепты.
- Пользователи могут добавлять рецепты в избранное
- Пользователи могут присваивать чужим рецептам оценку от 1 до 5. Средняя оценка будет выводиться на странице рецепта
- У рецептов, помимо указанных колонок, есть шаги приготовления ( таблица steps ). Их количество неограниченно.
Бля, забыл в рецепт добавить category_id. Пора спать идти.
хотя по любому, таблицы категории и рейтинг лишние, так как это свойства рецептов. они только мешать будут, разве что только в качестве справочников, если постгрес
>На наше с тобой время им глубоко насрать.
Это точно. Были люди которые 4 раза собес блять переносили. После этого нахуй их послал. Хотя околотоп контора нашего задрищенска была.
На галеру надо идти, где будет собеседовать главный разраб, а не с хрюшами в офисах болтать.
У хрюш работа состоит:
- База программистов, чем больше, тем лучше. Потому они её собирают.
- Палочная система. Чем больше позовут на собесы - тем больше зп.
- Спам. Рассылают всем приглашения на собес, чем больше спама, тем выше зп.
95% офисных вакансий в айти - липовые. А на галере если срочно нужен разраб - сегодня же уже ищут и берут первого адекватного.
>95% офисных вакансий в айти - липовые. А на галере если срочно нужен разраб - сегодня же уже ищут и берут первого адекватного.
это откуда такая инфа? справедливости ради среди них есть и адекваты. помню летом звали на сеньора в какую то литовскую или латвийскую компанию за 3к евро. я честно сказал что не подойду туда в виду своего низкого опыта и знаний но если ей надо набить базу и количество то могу уделить время и прийти. она в итоге извинилась, сказала что все ок и не надо и слилась.
Это единичный случай.
Мне постоянно пишут с предложением пройти собес на симфони, хотя в резюме указана лара. Когда говорю им об этом, то начинают уговаривать. Некоторых даже в чс кидал, особо не пробиваемых.
Как чуть позднее выяснил. Часть функционала они перенесли в отдельные вендорные модули примерно 200к строк.
Видимо хотят до конца легаси распилить. На всякий случай и лида спросил что они хотят с этим проектом сделать в конце концов.
>взяли на работу, чтобы с yii на лару переносить
На собесе речь была про это.
А как оно обернется хз. В целом конечно интересно с такой легаси ебой поработать. Если освоюсь - другие легаси проекты покажутся изичными.
Что характерно потом эти же херки спрашивают по анкете, узнают, что у тебя на симфони всего 0.5 года опыта и обещают перезвонить.
да какой с нуля? год греб на всяких говноцмс это магенто2 кун если что со всякого разного рода говнотасками. летом заебало и понял что надо качать фреймворк. начал ларку освоивать. вот делал свои проектики, + тестовые. пытался срулить в сентябре - не вышло, зато набрался опыта. осенью еще теории поднатаскал, к дкабрю свои проекты закончил и отшлифовал. в середине ноября начал искать работу. как то так
Грац
Постгрес. А какая разница принципиальная? Раньше его не юзал.
>>1924875
Почему категории лишние? Как мне иначе дерево из них составить?
Насчет рейтинга, сначала я думал хранить в рецепте средний рейтинг и количество проголосовавших. Но ведь тогда один пользователь сможет хоть сотню раз проголосовать за тот же рецепт, да и оценки своей увидеть не сможет.
И еще. Даже если бы категории были бы не древовидными, они ведь повторяются. Предлагаешь енамы юзать или вообще варчары для обозначения категорий? Это же всрато, разве нет?
Все равно неплохо, через пол годика можешь следующую работку искать, если зп не апнут. Эх была бы конфочка с двачерами пхпшниками, в которой бы обсуждали зпшки, собесы и галлеры, то было бы проще. Знаю одну конфу с жсниками, где помогают и не токсят,но на жс переписываться желания пока нету.
я тоже про это думал. мне вот интересно как там в этих ваших дсах? там же в каждой конторе наверное как минимум по одному двачеру сидит. и многие из них вышли из этого треда
на жс перекатываться желания пока нету
>Эх была бы конфочка с двачерами пхпшниками
Тоже хочется.
Когда-то давно создавал такую для вкатунов. По началу было поровну на фронт и бек. Сейчас там доминирует фронт реакт. Ливнул оттуда в итоге.
Почему бы не попробовать сделать, если есть уже опыт?
>доминирует фронт реакт
Ну, тут понятно. В реакт проще вкатиться и все скатывается в таких чатиках к хейту пыхи.
Тут в основном вкатуны сидят. Что вы собрались с ними обсуждать? Так же как итт будут срать тупыми вопросами, вместо того, чтобы загуглить.
>Почему бы не попробовать сделать, если есть уже опыт?
Морально устал конфы держать. Сейчас еще с работой траблы.
Да и не знаю каналов для привлечения людей. Из треда придет максимум 1.5 тела и всё на этом.
Предыдущая конфа так же начиналась как сборище вкатунов. Теперь там считай мидлы сидят
а ты кого собрался туда звать?) пост на пикабу делать или под постами абу в твиттере срать? кор аудитория отсюда должна быть же как никак
>Эх была бы конфочка с двачерами пхпшниками
Бля, вы за 121 тред не смогли запилить конфу в телеге? Как вы тут вкатываетесь вообще? Пиздос, я думал уже давно есть.
Есть даже в дискорде конфа, просто всем по хуй
Потому что это не ОП-конфа
Тут шапку миллион лет не обновляли.
Таджичу за 100к на удаленочке на пхп, мне норм, учитывая, что работы на пару часов в день и такого соотношения работы к оплате ты хуй найдешь в моей днищесранске. Плюс если припичет, как выше писали, вполне можно расширить своей стек (до размеров ануса твоей мамки) и перекатиться на еще более сладкие условия.
зашел туда и глянул участников - хрюкнул от того, что увидел там человекас которым в реале коммуницировал лол
Соу-соу, на пальцах объясниться смогу и словарный запас широкий, но грамматика хромает.
Охуенно день проходит.
Зачем хрюкаешь?
Коммерческого - 7 лет, а так сайтики на хтмл первые простейшие в 12 лет делал, а после стал с кодингом разбраться, так это получается уже 17 лет прошло.
Вот именно, что пашут. Если тебе с твоими 100к комфортно, то зачем напрягаться?
Допустим в таблице учеток у тебя два поля: логин и имейл.
Сначала ищешь по логину, потом по имейлу. Если ни то, ни другое не нашел - посылаешь юзера.
Самый простой вариант
user
потом проверяешь select from users where name=user or email=user and pass=pass limit 1;
>что работы на пару часов в день
Это как? На проде вечно ломается, нужно закрывать таски, лить, быть на связи, делать ревью. Чем старше разработчик, тем больше ответственности, особенно на удалёнке.
Надо расти, а не быть фулстеком и кнопки прикручивать. В серьёзных(денежных) проектах нет никаких фулстеков.
Одно общее поле для логина и для мыла
Седня чет виндовый всл2 мне знатно в штаны насрал.
Вчера всё работало, проект через мейк с докером развернулся.
А седня баг на баге, так и не поставил заново проект. Думаю убунту накатить второй осью.
Это так и должно быть, что для промежуточной таблицы не делается отдельная миграция? Возможно он где-то об этом говорит, но я просто сейчас без звука, а в документации тема не раскрыта.
>это из за wsl
Да, всё так. Даже ишью нашел под свой кейс и советы уровня "перезапустите докир и всл"
>На проде вечно ломается
Ну да, раз в неделю где-то приходят оттуда таски ворохом
>нужно закрывать таски
За пару часов закрываю на день-два вперед.
>быть на связи
Я на связи, капчую сижу, только параллельно в игоры играю, кино смотрю.
>Чем старше разработчик, тем больше ответственности, особенно на удалёнке.
Так поэтому и 100к, что я не старший и не стремлюсь в менеджмент, с другой стороны головняка минимум, что мне и нравится.
Бля, как смешно выглядит Ларавель по сравнению с Симфони.
В симфони в консоли(в мэйкере) прям пишешь название поля и вбиваешь название к какой таблице приджойнить. Занимает 5 секунд и миграции тебе сгерерит.
Только убунтой пользуюсь. Имхо, бэкендер не на линуксе - шо тракторист без трактора.
Лол, тут вообще без комментариев
Да если б wsl мозги не ебал.
Так то до этого 2 года на винде работал и на пхп и на голанге и всё ок было кроме одного случая когда долго ебался с установкой одного расширения в пхп, а проект был не под докером
Хоть всем и похуй, но я решил что для заметок и оценок нужно добавить автоинкремент и сделать из них элоквентовские модели/сущности. Хрен знает, правильно ли это.
Так оно и понятно, почему везде разные схемы - требования и функционал везде разные.
А почему бы с нуля не запилить и добавлять миграциями необходимые таблицы и поля?
Надо же с чего-то начинать. Лучше сразу представлять, как оно всё будет выглядеть. Понятно, что в процессе будет доработка, но всё же. Да и мне на самом деле накласть на доработки - это просто проект для гитхаба, чтобы было куда посылать на вопрос "а покажите ваш пример кода".
В реале таблиц в несколько раз больше под всякие прикладные и системные фичи. Но как каркас и основа такая схема сойдет.
Ну и отлично.
Берёшь а4 лист и рисуешь. Потом реализуешь, докидывать будешь чего не хватает.
Это часть url. Обычно генерируемая. Например, ты создаёшь страницу товара "Сталин-3000" и она доступна по адресу xxx.ru/products/stalin-3000. "stalin-3000" - это и есть слаг.
>>1925578
>>1925891
Поебался еще немного с всл. Так и не завел проект. То одна ошибка выскакивает, то другая. Пробовал разворачивать проект на в смонтированном диске (вместо /mnt/c/ в ~/ директории) - установка прошла чуть дальше, потом меня послали из-за прав. А с судо мейк вообще не работает.
По ходу совсем не остается вариантов кроме накатывания убунты второй осью. Если и там будут неразрешимые проблемы - минус работа... А так хотелось поучаствовать в крупном проекте...
А ты писал, что у тебя проект не разворачивается? Или только на двочах спрашиваешь сидишь?
Вчера пока рабочий день был - писал.
Сегодня нерабочий - не писал.
Самое странное, что в четверг удалось мейком поставить проект. А в пятницу мейк наебнулся.
Там у них есть пара тел на винде, но как я понял большая часть сидит на лине.
Ну попробуй на убунте. В любом случае тебя не уволят за то, что проект не смог развернуть
$user = new User("Вова", "Пупкин");
echo $user -> show_name();
или
$user = new User();
echo $user -> show_name("Вова", "Пупкин");
?
>echo $user -> show_name("Вова", "Пупкин");
Это че вообще? Что значит какой подход популярнее? Второй вариант не несет в себе смысла. Таким образом имеем не метод показа имени, а обычный принт/эхо на два поля.
Ну и
>echo $user -> show_name();
явно избыточно
Уж лучше делай $user->printName(); и внутри печатай куда надо
Либо $user->getFullName(); который вернет строку
$user = new User();
$user->setName('Вася');
$user->setLastname('Пупкин');
echo $user->getName(); или преобразовать объект в массив и вывести массив.
я щас почитал,с конструктором как бы более компактно и лаконичнее выглядит
Да ты шо? А если у тебя будет 30 полей?
$user = new User('asd', asdad, asdasd, asd asd,,asd aadas, asdas ,,sadas dasd,a dasd as,asd asd ,asd asd as,asd asd a,as das )
Будет анти-паттерн телескоп.
Делай как я. Почитай что такое сущность, в сущности нельзя в конструкторы пихать. Сущность должна быть пустой при создании объекта.
Дальше если ты хочешь параметры вложить - делай это через фабрику, и вот в фабрику можешь уже положить что хочешь.
Либо в конструктор, либо в параметры метода а-ля build(array $params)
В сущность в конструктор инъекции вкладывают или авто-генерацию чего-либо, никаких параметров чтоб не было при new User();
Это ты где такое узнал? Зачем нам создавать пустую сущность?
Второй пример неудачный, так как у объекта обычно есть свойства, которые хранятся внутри объекта. И show_name() берет имя из свойств объекта. А у тебя во втором примере зачем-то имя передается снаружи. Зачем тебе такой объект вообще, если ты в нем ничего не хранишь?
Судя по описанию, твоя проблема в плохом знании линуксов. Так как те же проблемы с правами скорее всего как-то решаются (сменой прав, использованием sudo и тд).
>>1925962
Для гитхаба лучше сделать что-нибудь попроще. Так как нормальный магазин потребует много времени на разработку. Вот там анон делает сайт с рецептами - это более подходящий уровень для сайта для портфолио.
Хотя, если бы ты хотел поглубюже разобраться в фреймворках, ORM, базах данных, то конечно более сложная задача создания магазина подошла бы лучше.
Только пароли надо солить и хешировать, потому проверка будет чуть сложнее. Сначала извлекаем из БД хеш пароля по условию name = :login OR email = :login, затем проверяем пароль и хеш на соответствие.
>>1925103
Обычно хранят полную историю голосования. Это позволяет и рейтинг рассчитывать по произвольной формуле, и в случае накруток почистить лишние голоса.
>>1924866
Не очень понял, индексы работают и на неуникальных полях. Также, в таких таблицах часто делают уникальный индекс по паре колонок: он и вставить дважды одинаковые значения не позволяет, и ускоряет выборку.
Для favorites стоит сохранять порядок добавления (номер по порядку или время), иначе у пользователя закладки будут выводиться в рандомном порядке.
>>1924657
style.css если совсем фантазии нет. Если есть то register.css.
>>1924375
> вместо того, чтобы один раз почитать мануал по бд и создать метод в три строки, который просто выполнит произвольный query через PDO. Но - для этого надо знать как работают бд! А в елоквенте пофигу, поэтому все быстрее и проще - возразят мне
Если ты начнешь все запросы руками писать, и писать код маппинга на объекты, то уже где-то на десятом запросе тебе придет в голову мысль, а нельзя ли это автоматизировать. Это и есть то, что делает ORM.
В реальности обычно используется и ORM (для рутинных операций), и прямые SQL запросы там, где ORM неэффективна.
Понимаю что курса мало, но как толчок в правильном направлении сойдет?
Если хочешь научиться делать как деды завещали, то вперед.
Многие годы работал дата энтри девачькой, а теперь дохуя профессионал?
Эти допотопные визитки лучшая антиреклама пыхи sooqa
TDD, DDD, Symfony, Event Sourcing, CQRS, Microservices, Hexagonal Architecture
если не в падлу кинь ресурсы которые тебе кажутся толковыми. Но желательно что-то с нуля
Нулевым надо учить пхп и стандартную библиотеку. Еще ООП и SOLID. Книгу Patterns of Enterprise Application Architecture Фаулера почитать и refactoring.guru
На пхп надо много писать крудов без фреймворка а потом с ним, и учиться поднятию докера с nginx, Симфони и прочей ерундой с этим крудом.
Остальное просто бессмысленно читать не имея работы и не зная как проекты нормальные смотрятся и работают.
Ахахахах. В совершенстве владеет опенкартом, вордпрессом и БУСТРАПОМ. Ору.
>Книгу Patterns of Enterprise Application Architecture Фаулера
Анончик, можно поподробнее, почему именно эту книгу?
а,я тупанул
Так вот вопрос. надо бы уже искать работу, на какой стул сесть? Php разраб или qa python? Нравится все одинаково, где больше перспективы?
Она по базовым архитектурным концептам и не оч далека от собственно кода, а то остальные книги по архитектуре либо не по базовым, либо вода и тупо слова, либо и то и то
Если выбирать между этой книгой и Совершенным кодом, что лучше прочитать в первую очередь?
Конечно совершенный код, он про ифы и прочую дребедень
>Нравится все одинаково, где больше перспективы?
Дам тебе самый базовый совет - учись принимать решения самостоятельно. Работать будешь ты, а не двач.
И самый заезженный совет - напиши все плюсы и минусы на листочке, и посмотри где чего больше.
Какой бы ты стул не выбрал - везде хлебнешь свою долю говна.
Обе.
Сначала Совершенный код, т.к. он описывает более примитивные вещи вроде грамотного названия методов.
Потом Паттерны, т.к. они затрагивают крупные системы.
Создаешь папочку надеюсь, ты умеешь в шторме папки создавать services в папке App и кладешь туда бизнес-логику.
А елоквент модели лучше держать максимально пустыми, т.к. туда и без того напихали логики актив рекорда перейди в базовый класс елоквент модели и почитай исходники
Подскажи, почему никто не посылает пароль через POST уже в хэшированном виде? Какие в этом подводные камни?
Вот это я для примера накидал
https://pastebin.pl/view/015b0408
Понятно что md5 нисикьюр, это не главное.
И я понмаю, что SSL сертификат сделает эту транзакцию зашифрованной в любом случае.
Вы точно знаете что хуесосы не знают ваш пароль.
Вы не видите бекенда, но вы ведете фронт. И вы знаете что ваш пароль не хранится в базе.
Поэтому таким образом, если база утечёт, народ не проебёт пароли. Много людей использует один пароль на всё. Это конечно хуёво, но людей не изменишь.
Такой метод пришёл мне сегодня на ум, и он весьма красив и гармоничен.
По psr один расово верный вариант
Потому что это ничего не меняет по сути и не дает преимуществ.
Никто уже давно не хранит пароли в чистом виде в базе.
Сравни 23 и 28 строки
С чего ты решил что тут тебе подскажут про питон? Перспективы от тебя зависят, насколько будешь стремиться и чего хочешь.
>владеет знаниями AJAX
Всегда проигрываю. Никогда бы не взял на работу и не имел бы дело с тем, кто пишет что "владеет навыком аякс".
ВОТ ЭТО ДОСТИЖЕНИЕ, НАУЧИЛСЯ ОТПРАВЛЯТЬ ЗАПРОС, НИЧЕГО СЕБЕ.
> много лет работал модератором, лил картинки и удалял комментарии
> счас я вас обучу веб-программированию!
Сплошные лулзы
Хранят. И эти базы вскрывают, к сожалению. Я когда фрилонсером подрабатывал видел вполне говнопроекты которые так делают
Ну херки же пишут в требованиях знания REST API, XML, JSON, AJAX
я очкошник
Проверка на четность
Выведите id тех комнат, которые арендовали нечетное количество раз.
В качестве результата выведите id комнаты и количество раз сколько ее брали в аренду (используйте псевдоним count).
Я пишу
SELECT room_id, SUM(total) AS count FROM Reservations
GROUP BY room_id
HAVING count % 2 = 1;
Что не так, аноны ?
Если соединение защищено SSL, а сервер не взломан, то пароль защищен от перехвата.
Если используется не SSL, то атакующий может встроить в скрипты кейлоггер (перехват нажатий кнопок клавиатуры) и украсть пароль. Если сервер взломан - то же самое, атакующий может внедрить кейлоггер.
То есть толку от этого особо нет. Разве что защитить пароль от логгирования по ошибке.
Первый платный, а второй может не угодить например нелюбителям майкрософта.
Да, идет. Но я суко сколько всего только не перепробовал - бесит все своей кривизной и мегатоннами глючной ненужной хрени. Поэтому в итоге юзаю ток notepad++ и очень изредка онлайн-идешки для тестов и отладки, т.к. на серваке все равно все удобней и быстрее.
vim
Тебе лень сбросить раз в месяц триал на шторме? ПХПшторм многие не покупают, пользуются триалом бесконечным.
Есть прямая связь с доходами и "экономностью". Дохера жадные и хитрожопые, которые не платят в интернетах, как правило зарабатывают мало, именно потому, что им нахер не надо много, так как они все равно нихера не платят и тырят варез. Те кто платит за контент - тем надо много. А чем больше надо, тем больше и дают.
Купил ютуб премиум, успокоил нервы, улучшилось либидо, больше стал зарабатывать. Программисты блин, поддерживайте друг друга. Не козлитесь на копейки уже!
Дурень.
>которые не платят в интернетах, как правило зарабатывают мало
Типичная хуйня от инфоцыган, а бараны ведутся, лол.
Китайцы даже плагин для шторма запилили, чтобы сбрасывать триал и всячески поддерживают пиратство.
>>1928594
В адекватных фирмах тебе оплатят шторм. А пока пользуемся в образовательных целях, так сказать.
А для особо совестливых шторм покупается на год с первой зп. На второй и третий год идет скидка.
А чего вим не накатишь?
Бля, чел, вали оттуда. У меня в мухосрани ждун вилка 30-50к это норма. Причём ждун самый ждуновый. Без опыта работы вообще. Знать базовые конструкции языка.
СУУУКА, ЧЕЛ. Если ты мидл ЛАРЫ, твой ЗП это 100к+
В ДС 200к на изи.
Где такие города искать? Я хочу лет через 5-10 открыть свою кабанью контору, и платить стафу в сумме столько сколько один мидл получает...
Есть города в провинции, где вот так мало платят. Думаю, что через лет 5-10 ничего не изменится. Так что можешь попробовать
В любом околомиллионнике полно гречневых, готовых мидлами веслать всего за х2 от средней по региону.
В моем городе до сих пор есть ваки ниже 50к для сеньоров всякие вебстудии с битриксом
Открываешь хх, поиск Laravel фильтр по удаленной работе. Получаешь около 300 вак часть из них дубли и нерелевант - откликаешься
>Думаю, что через лет 5-10 ничего не изменится
Не факт. Прошаренные кабанчики с жирными клиентами апают ставки, чтобы хантить разрабов получше вчерашних студентов.
Моя первая галера, где закончил на зп 40к, сейчас набирает людей за 100к+.
На их фоне вебстудии с микрозарплатами смотрятся блекло
Мне недавно в ДС предложили 70к за ларавел-мидлосеньёра. Я не ответил, потому что едва тяну на джуна.
У меня проектов на ларе толком не было. Сделал один простенький сайт, плюс видеокурс посмотрел, повторяя то, что описывали. Сейчас делаю пет-проект для гитхаба. Идёт медленно и печально.
Старый я. 36 лет. Все эти фасады-мидлверы-обсерверы-реквесты-модели-абстракции не то что "сложные", а просто как-то это всё угнетает.
Ну и вообще. Вот сейчас начал делать проект интернет-магазина. Он был в одном из прошлых тестовых. И мне говорили, что это типа дня на три максимум. Даже скорее на три вечера после работы. И вот начал делать. Сначала установка чистой лары со всеми прибамбасами. Тут композером, тут npm, тут пхпшторм настроить. Нет такого, что из коробки поставил и пользуешься. Потом придумывание схемы БД, создание кучи моделей, миграций, заполнение их тестовыми данными через сидеры и фабрики - это всё вроде э-ле-мен-тар-но, но почему-то у меня уходит дохера времени. Дальше контроллеры, вьюхи и прочее. И у меня при написании кода такое ощущение, что я ядерный реактор пытаюсь приспособить для подзарядки телефона. Типа, вот заготовка из ядерных элементов, вот графитовые стержни, пара тонн электроники, бетонные бункера - а дальше кидай проводку сам, делай что хочешь. И делаешь. Каждый шаг только поле изучения толстенного мануала и постоянно ощущение, что сделал всё неправильно. И если даже не ебанёт, то придёт опытный человек и будет долго и обидно ржать над КАЖДОЙ строчкой кода. Мол, контроллер толстый, проверки надо делать в мидлварах и т.д. А другой придёт и скажет, что проверки должен делать обсервер. Короче, ебанина какая-то. Слишком монструозно всё.
>говорили, что это типа дня на три максимум
Они все так говорят. 3 дня нужно, если у тебя есть готовые либы под рукой и ты знаешь, как делается аналогичный проект.
А так разработка интернет магазина на ларе дело небыстрое.
На первых порах будет сложно. Потом всё как по накатанной.
Ну и основной показатель для бизнеса - работоспособность кода, кто бы что ни говорил. Нужно запилить МВП и выйти на рынок, а потом уже код причесывать.
Весь день пытаюсь понять как и для чего его использовать, доки разные читаю - но везде лишь сырая информация об использовании отдельных функций.
Вот только нигде я не смог прочитать, а какая общая картина должна выстроиться в итоге?
Вот без этих всех штучек я делаю для каждой страницы ( или раздела ) отдельные css и js файлы, и один общий - для повторяемых элементов, например для навигационной панели и т.д.
А что мне с этим вашим миксом делать? Конечно я могу сделать то же самое, просто компилируя все файлы из resources в public, но по-моему это как-то не так должно работать.
Вроде должно быть на выходе по одному css и js полностью для всего приложения? Если так, то я сомневаюсь что люди сразу так и пишут все в один файл, неудобно же.
Значит, мне нужно как-то получить по одному css и js файлу на выходе с множества на входе?
>Значит, мне нужно как-то получить по одному css и js файлу на выходе с множества на входе?
Для этого и нужен микс/вебпак и прочие сборщики
>Вроде должно быть на выходе по одному css и js полностью для всего приложения? Если так, то я сомневаюсь что люди сразу так и пишут все в один файл, неудобно же.
Так в том и фишка, что ты пишешь всё в каталоге resources, как тебе удобно. 20 файлов - значит 20 файлов. А лара сама скомпилирует всё это в минифицированный объединённый код и кинет в public, в один файл. Причём, ты можешь писать на scss каком-нибудь, а скомпилится в css. То же самое с js.
>отдельные css и js файлы, и один общий
Настрой так, чтобы на выходе был не один общий, а так, как нужно. Конкретно как, не подскажу, пока что сам знаю микс только на уровне "скомпилируй мне всё в один файл". Я тоже нуб.
Как это сделать?
Создаю модель, сохраняю ее методом
save()
а после через свойство звязанной моджели меняю в ней счетчик?
А это все делается в рамках одной транзакции? А то создам я модель, после буду менять счетчик, а счетчик на этот момент уже 0.
>>1928927
Окей, хоть один пазл сложился. А как это сделать то, не подскажете?
Я догадался пока что склеивать файлы через combine() в один, после чего проводить компиляцию получившегося файла в public.
И если со стайлами это работает хорошо, то что делать со скриптами? Просто склеить скрипты не вариант - тогда сценарии, предназначенные для разных страниц будут просто идти один за другим.
Может нужно какой-то внутренний роутер в js писать, чтобы скрипт запускался только на нужной странице? Я то не знаю, как нормальные люди делают.
У меня написано тупо по дефолту.
mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.sourceMaps();
И в app.scss просто импортирую дополнительные файлы стилей: @import 'main.scss'; Наверное это не тру, но работает.
Всё у него через жопу хитровывернуто. Сегодня весь день делал список из БД. На Yii2 за пол часа сгенерировал бы код и всё, а тут... писда
> public function __construct ($name, $surname) {
// Вызов конструктора наследуемый класса
parent::__construct($name, $surname);
не понимаю смысла,разве он не насл автоматом?
Какая разница, какая у тебя зп? Говоришь "Рассматриваю зп 120к белыми".
>Ещё если руководитель моё резюме увидит, то будут неловкие вопросы...
Ебать ты... Ну увидит и что? Мб одумается, что второго такого за 30к не найдет, апнет зп
Смотря что используешь. Если только jQuery то в принципе не сильно важно собираешь или нет. Микс(вебпак на самом деле преконфиженный) дает тебе возможность писать новый жс(или даже тайпскрипт) для старых браузеров, транспилируя и вставляю нужные полифиллы, например если ты используешь промисы то ие11 охуеет от такого поворота. Если у тебя на сайте 50 страниц разных, то не сильно много смысла пихать все стили и скрипты в один бандл. Тут несколько стульев, можно делать несколько entry поинтов, по каждому на разную страницу типа, ты должен сам их подключать в нужных местах. Можно через жс организовать модульность, вебпак это может делать, например я наговнякал сейчас вот так как вариант: https://pastebin.com/bpp3eEk0 , в таком варианте проще делать .extract() на какие-то тяжелые либы(твой бандл сплитится на app.js, vendor.js и manifest-runtime)
Склеивать все в один файл - это подход, который работает только для маленьких сайтов. Это тупой подход, который выдает на выходе огромные JS/CSS файлы с кучей ненужного.
Для больших сайтов удобнее иметь один общий файл и один индивидуальный для каждой страницы файл. То есть примерно то же, что ты и делал до этого.
Просто сейчас ты "склеиваешь" код руками, а можно делать это через сборщик, собирая файлы из компонентов. Ну например, у тебя есть компонент "карточка товара", который встречается на страницах A и B. Вот ты и настраиваешь сборщик, чтобы этот компонент включался в скрипты для страниц A и B.
То есть, вместо огромных скриптов ты делаешь компоненты, а сборщиком из них собираешь итоговые скрипты.
Нет, по умолчанию новый конструктор в наследнике заменяет конструктор в предке (как и любой метод в наследнике заменяет метод предка).
Ты не умеешь управлять деньгами. А американец, который тебя нанимает за копейки на галере - умеет.
Вот именно что прямая связь, меньше тратишь - больше денег в кошельке, простая арифметика
Ты попал в обычную ловушку нищего, раньше ты довольствовался поездкой на автобусе и супом домашним, теперь ты больше зарабатываешь и тратишь кучу денег на такси и рестораны.
Ломанный ПХПшторм - для сильных духом, живущих в своём коттедже.
Лицензия ПХПшторма - ошейник у рабов.
>Ты попал в обычную ловушку нищего, раньше ты довольствовался поездкой на автобусе и супом домашним, теперь ты больше зарабатываешь и тратишь кучу денег на такси и рестораны.
PHP-DI
пимпл кстати не DI контейнер, но сервис-локатор по сути. Типа антипаттерн, скрывает требуемые для класса зависимости и все такое.
Захожу в исходники symfony console. Главный файл Application строк так 1.5к с кучей методов маленьких и побольше (до 2х экранов).
И это ваш красивый код?
$productId = $this->faker->numberBetween(1, 20);
$cartId = $this->faker->numberBetween(1, 10);
$quantity = $this->faker->numberBetween(0, 3);
Но есть важное условие: в таблице не должно быть одинаковых productId и cartId. То есть, отдельная корзина может упоминаться много раз с разными товарами, но вот двух записей, у которых одной и той же корзине соответствует один и тот же товар быть не может.
Как это вообще сделать? Я пытался в фабрике делать проверки, типа
Cart_item::all()->where('cartId', $cartId)->where('productId', $productId)->isNotEmpty(), но они не срабатывают, потому что фабрика сначала формирует данные, и только потом записывает единовременно в базу. Поэтому проверять базу бессмысленно.
В фабрике ты можешь написать любой код.
Сначала собери консистентные данные не записывая их в бд. Потом делай запись.
Конкретно здесь: тебе нужны уникальные пары карт_ид и продукт_ид. Ок, запили их на чистом пхп. Потом сгенеренные данные пиши куда надо.
P. s. прав по ходу был тот анон, что про нативный пхп говорил...
Но ведь мы вызвываем фабрику каждый раз, как в первый. Разве нет?
Cart_item::factory(20)->create();
То есть, мы загружаем фабрику 20 раз. Я понимаю, что данные, сгенерированные между вызовами где-то сохраняются, но не в самой же фабрике?
Указали ей сгенерить N записей - она лезет в бд, достает существующие пары, на основе них генерит новые N пар и отдает тебе пачкой.
Cart_item::factory(1)->create(); // за один вызов фабрики генерим набор записей
Я конечно хуй знает, но почему бы просто не сделать в базе этот набор уникальным?
Это надо в кишках лары полазить на предмет того, учитывает ли она уникальные ключи в фабрике.
Мне кажется, что нет.
Как? Есть параметр unique(), но он относится к генерируемому значению. То есть можно сгенерировать 20 несовпадающих чисел. Но в том-то и дело, что им по условию не запрещено совпадать. Совпадать запрещено их комбинации с другими числами.
Например,
4 8
5 9
4 9
- это нормально. А
4 8
5 9
5 9
уже нет.
unique можно поставить на несколько полей - т.е. создать уникальный составной индекс
Например, ставим на два первых поля (еще какое-то третье поле)
(4 8) 1
(5 9) 5
(5 9) 4 - уникальность нарушена
Он будет чекать пару целиком
>unique можно поставить на несколько полей
Как?
У меня вообще лажа какая-то. Запускаю
Cart_item::factory(13)->create(); //создать 13 товаров в корзинах
В самой фабрике написано
$cartId = $this->faker->unique()->numberBetween(1, 15); //ссылка на корзины
И валится ошибка:
Maximum retries of 10000 reached without finding a unique value
То есть фейкер за 10к попыток не смог подобрать 13 уникальных значений из промежутка от 1 до 15? Бред какой-то.
Тааак. У меня несколько фабрик. И такое ощущение, что faker->unique() как-то сохраняет инфу о "занятых" значениях между вызовами. Доходит до того, что запускаю фабрику 1 (один) раз, но она не может найти уникального значения. гуглил эту тему, пытаясь разобраться, как вообще работает фейкер, но не смог. Везде чисто обзорные статьи. Даже в документации. Ну или я плохо искал. Ебанина какая-то. Будь оно всё проклято.
Проходить собесы - это скилл. Надо научиться их проходить. Но сильно альфачом быть не нужно, они кодеров нанимают, а не вышибал в клуб.
Попроходи. Поищи вакансии где тебе нравится минимальная зарплата в вилке. Например, 100-140 пишут, говори что ожидаешь от 100к.
Они готовы больше платить. Так же если не взяли - спрашивай что не так и где не хватает знаний. Фикси и снова. Ну в другое место.
Так же, давай им понять что ты трудоустроен и ищешь лучших условий которые могут тебя переманить.
А залезть в кишочки фейкера религия не позволяет?
Ну и я бы не завязывался на внутренности либ, сделал бы всё своими силами, если не уверен, как оно там внутри устроено
Уже бы описал это дело в сидере и дальше ебашить пошел... Застрял на херне.
Какая задача стоит? Сгенерить для базы 20 позиций?
Не умею.
Нашёл, что unique() упоминается в генераторе
* @method Generator unique($reset = false, $maxRetries = 10000)
Но больше там ничего про него нет и как вообще понять, как оно устроено, я не знаю.
>>1929740
>Какая задача стоит? Сгенерить для базы 20 позиций?
В общем, да. Сгенерировать для одной таблицы штук 20 корзин, а для другой 20 товаров в корзинах (т.е. в таблице только ид товара, ид корзины и количество товара).
Дальше надо ещё заполнить таблицу Order и Order_item, но это уже точно ен смогу, потому что заполнять нужно не просто левыми данными, а так, чтобы цифры совпали. И данные... Короче, ну его нахуй. объяснить что-то и тяжело и нахрен никому не нужно, всё равно делать нужно мне, а не интернету. Забейте.
>Дальше надо ещё заполнить таблицу Order и Order_item, но это уже точно ен смогу, потому что заполнять нужно не просто левыми данными, а так, чтобы цифры совпали
Так в фабриках можно создавать связанные модели. В доке про это есть
$n=51651654165123;
$spelN=[];
for ($i=$n; $i>=1; $i=$i+0) {
$i=$i/1000;
$t=floor(1000fmod($i,1));
$spelN[]=$t;
}
$spelN=array_reverse($spelN);
Алсо, поясните, почему fmod выдает, например, первым числом 0,12300109863281 , а не 0,123? Ведь дробный остаток от деления $i/1000 по модулю 1 должен равняться именно 0,123. Именно потому, что пыха возвращает длинное число, использую 1000fmod с функцией floor.
Какие еще могут быть варианты с разделением числа на группы?
<?php
$n=51651654165123;
$spelN=[];
for ($i=$n; $i>=1; $i=$i+0) {
$i=$i/1000;
$t=floor(1000*fmod($i,1));
$spelN[]=$t;
}
$spelN=array_reverse($spelN);
Обосрался с разметкой
Это тайпхинты, при запуске проверяется тип переменной $bar, который должен соответствовать типу Bar, то есть в $bar должен быть передан класс Bar или класс который наследует класс Bar, либо класс который имплементирует интерфейс Bar. Если переданный тип будет не Bar или значение будет null то у тебя все упадет.
> Битрикса? Если нет, то к чему хостинги толкают свои YOBA 5GHz VDS именно для него?
Битрих бренд. А по факту низкопроизводительное говно. ему нужно дохуя мощности + пердолинга с конфигами пхп.
И поэтому хостинг провайдеры подготавливают для него все настрречки и накидываю деньжат. Бизнес в РФ он такой.
При запуске скрипта php-fpm создаёт отдельный процесс и на одном ядре могут крутится несколько процессов, этакая однопоточная многопоточность, вот именно для этого нужны еба процессоры, если будет меньше ядер и герц то эти запросы будут висеть в очереди nginx. А Битрикс это говно которое под капотом содержит в себе жрущего ресурсы монстра, у меня простая страница вывода статей через news.list делала 260 запросов к базе, что там за магия такая хуй его знает, а про чтение тысяч при каждом запусуе файлов я уже молчу.
>Бизнес в РФ он такой.
Да он везде такой, если тебе нужно запустить говно которому нужны дополнительные ресурсы и ебля с конфигами, то нужно дополнительно оплачивать своим админам и докупать железки, именно поэтому и накидывают ценник
>думаете утка?
>Вас ждет интенсивное обучение основам PHP и CMS Bitrix framework.
>Описание стажировки PHP и CMS Bitrix (1 месяц). 1 этап :
> Прохождение сертификации 1С-Битрикс в несколько этапов (в том числе мы оплачиваем за вас $ВСЕ платные$ экзамены уровня Базовый и Профессионал;
Тут вся подъебка за месяц ты хуй эти 2 экзамена сдашь, либо тебе нужно сидеть задрачивать этот битрикс сутками, поскольку там все через жопу, а сам экзамен заключается в том на сколько ты умеешь кликать мышкой в админке и делать ctrl+c и ctrl+v. А еще экзамен представляет собой подключение к удаленному серверу, где все будет адово тормозить, установлена древняя версия CentOS с древним гномом, короче от инфраструктуры для сдачи стресса больше чем от самого экзамена. После пары месяцев интенсивной работы над новыми проектами вполне вероятно сдашь, а так сходу без знакомства с этим поделием я не уверен, либо тебе нужно дрочить билеты.
> Стажировка не оплачивается и является удаленной. Если у вас нет компьютера, можно в офисе компании (Краснодар) проходить обучение.
> При успешном прохождении следует трудоустройство в штат (2 этап) с испытательным сроком (3 месяца). Также у вас на руках остаются именные сертификаты разработчика 1C-Битрикс Framework
Короче такой инкубатор, если из тебя получился битриксоид, то милости просим, если нет, то иди нахуй без денег.
> CMS Bitrix
Это самый наиглавнейший подъеб, для примера разверни эту хуйню у себя локально, поюзай чуток, а потом сравни с той же ларой.
Там самые основы основ, причем не особо свежие (7 и 8 версии пыхи не раскрыты)
Уж лучше по гайду из шапки идти
Спасибо огромное за ответ. Тогда выходит, что если там самые основы основ, то можно их залпом пройти за относительно недолгое время.
Ну да, там материала максимум на день.
https://www.php.net/manual/ru/function.exec.php
Прочитал бы, ну. Вообще лучше Symfony Console юзай, там апи хоть человеческий
Есть такое понятие, как код завершения процесса. Обычно. если все успешно, он равен 0, а если произошла какая-то ошибка, то не равен. Ты можешь проверять код завершения, который вернет exec().
Также, обычно при ошибке программа выводит какую-то информацию в стандартный поток ошибок (stderr). Через exec() ты его не перехватишь, потому лучше использовать библиотеку Symfony Process, которая умеет перехватывать выводимые запущенной программой данные.
Я имел ввиду, насколько он может распараллелить запросы по разным ядрам/потокам? Судя по встроенному тесту Битрикса, кол-во попугаев не зависит от кол-ва ядер.
> почему fmod выдает, например, первым числом 0,12300109863281 , а не 0,123?
Дело в том, что числа типа float (дробные числа) в PHP (и в других языках программирования) хранятся в приближенном виде, с так называемой плавающей запятой.
Это значит, что в памяти компьютера хранятся лишь первые несколько цифр числа (около 15-17 значащих цифр) и расположение запятой.
К примеру, var_dump(123456789012345678901234567890) выведет:
double(1.2345678901235E+29)
(E+29 значит "умножить на 10 в 29 степени). Как видно, сохранились лишь 14 значащих цифр, остальные были потеряны.
Более того, числа в памяти хранятся не в десятичном, а в двоичном виде, как N * 2 ^M (где N и M - целые). Если приглядеться к формуле, то с ее помощью можно точно представить лишь некоторые дробные числа (кратные 1/2, 1/4, 1/8, 1/16 и тд.), а большинство дробных чисел представить точно нельзя:
0,5 - можно точно представить как 1/2 или 1 * 2 ^ -1
0,125 = 1/8 = 1 * 2 ^ -3
А вот другие дроби, вроде 0,1 или 0,123 точно представить нельзя. Из-за этого они представляются в памяти как 0,10000000001... или 0,09999999999999... и возникает погрешность при вычислениях.
В твоем случае 0.0000010986... - это именно такая погрешность. От нее лучше избавляться не с помощью floor(), а с помощью round(), так как погрешность может быть и отрицательной и у тебя может получиться 0,1229999999 и floor() выдаст тут 122 вместо 123.
Тут надо не статьи читать, а исходный код.
Разберемся, как работает код
Factory::create()->unique()->randomNumber
Можно открыть исходники фейкера и посмотреть, как он работает. Начать с Factory::create(): https://github.com/fzaninotto/Faker/blob/master/src/Faker/Factory.php#L11
Видно, что она создает объект Generator и запихивает в него кучу провайдеров.
Затем смотрим код объекта Generator, в нем метод __call(), так как именно он вызовется в ответ на вызов ->unique().
Видно, что в Generator есть "форматтеры" - это конкретные методы для генерации значений вроде randomNumber и "провайдеры" - это классы с набором форматтеров.
Видно, что он ищет метод с именем unique во всех провайдерах и, когда найдет, вызывает его. Такой метод есть в классе Base, от которого наследуются другие провайдеры: https://github.com/fzaninotto/Faker/blob/master/src/Faker/Provider/Base.php#L561
Этот метод "оборачивает" объект Generator в обертку UniqueGenerator: https://github.com/fzaninotto/Faker/blob/master/src/Faker/UniqueGenerator.php
Дальше, я думаю, можно понять.
Тут еще важно, что после первого вызова $faker->unique() объект UniqueGenerator сохраняется в поле $this->unique и второй вызов $faker->unique() вернет тот же объект (с теми же сохраненными значениями).
В твоем случае, возможно что ты использовал faker->unique()->numberBetween в нескольких местах кода, сделал более 15 его вызовов и он перебрал все возможные числа от 1 до 15 и потому не может найти новое.
В общем, я думаю, полезно покопаться в коде, умение разбираться в чужом коде тебе понадобится не раз.
Тут надо не статьи читать, а исходный код.
Разберемся, как работает код
Factory::create()->unique()->randomNumber
Можно открыть исходники фейкера и посмотреть, как он работает. Начать с Factory::create(): https://github.com/fzaninotto/Faker/blob/master/src/Faker/Factory.php#L11
Видно, что она создает объект Generator и запихивает в него кучу провайдеров.
Затем смотрим код объекта Generator, в нем метод __call(), так как именно он вызовется в ответ на вызов ->unique().
Видно, что в Generator есть "форматтеры" - это конкретные методы для генерации значений вроде randomNumber и "провайдеры" - это классы с набором форматтеров.
Видно, что он ищет метод с именем unique во всех провайдерах и, когда найдет, вызывает его. Такой метод есть в классе Base, от которого наследуются другие провайдеры: https://github.com/fzaninotto/Faker/blob/master/src/Faker/Provider/Base.php#L561
Этот метод "оборачивает" объект Generator в обертку UniqueGenerator: https://github.com/fzaninotto/Faker/blob/master/src/Faker/UniqueGenerator.php
Дальше, я думаю, можно понять.
Тут еще важно, что после первого вызова $faker->unique() объект UniqueGenerator сохраняется в поле $this->unique и второй вызов $faker->unique() вернет тот же объект (с теми же сохраненными значениями).
В твоем случае, возможно что ты использовал faker->unique()->numberBetween в нескольких местах кода, сделал более 15 его вызовов и он перебрал все возможные числа от 1 до 15 и потому не может найти новое.
В общем, я думаю, полезно покопаться в коде, умение разбираться в чужом коде тебе понадобится не раз.
У тебя какой-то странный подход к заполнению таблиц. Во-первых, поле id часто автогенерируемое (заполняется в БД само), нельзя ли тут это использовать? Во-вторых, нельзя ли сначала сгенерировать отдельно список товаров, потом список корзин, cсохранить их в БД, а потом уже выбирая из них, сгенерировать список CartItem?
Pimple это DI контейнер.
Сервис-локатор это класс, который передается в конструктор вместо зависимостей:
function __construct($serviceLocator)
{
$this->x = $serviceLocator->getX();
}
Pimple так не используется, он является DI контейнером.
Допустим, есть класс A с полями a, b, c и его наследник B c полями d, e, f. Конструктор A отвечает за заполнение полей a, b, c а конструктор B за поля d, e, f. Если в конструкторе B не вызвать конструктор A, то поля a, b, c останутся незаполненнными.
>Во-первых, поле id часто автогенерируемое (заполняется в БД само), нельзя ли тут это использовать?
Да, оно заполняетса само. И как это использовать?
>сначала сгенерировать отдельно список товаров, потом список корзин, cсохранить их в БД, а потом уже выбирая из них, сгенерировать список CartItem?
Именно так и происходит. Но вот с правильным заполнением полей таблицы Cart_item проблма.
Мне кажется определение из вики вполне исчерпывающе.
JSON (англ. JavaScript Object Notation, обычно произносится как /ˈdʒeɪsən/ JAY-sən[2]) — текстовый формат обмена данными, основанный на JavaScript. Как и многие другие текстовые форматы, JSON легко читается людьми. Формат JSON был разработан Дугласом Крокфордом[3].
Несмотря на происхождение от JavaScript (точнее, от подмножества языка стандарта ECMA-262 1999 года), формат считается независимым от языка и может использоваться практически с любым языком программирования. Для многих языков существует готовый код для создания и обработки данных в формате JSON.
начни лучше просто с англ
Что искать собрался?
Берешь эластик, прикручиваешь, радуешься охуенному поиску, охуеваешь от нехватки памяти.
Меня беспокоит атомарность этого действия.
Я создаю модель, и сохраняю ее методом save().
После этого я должен декрементировать связанную отношением модель, это можно сделать через свойства.
Ну будет ли это все в рамках одной транзакци?
?
Ну оберни в транзакцию
Если тебе не хватает интеллекта даже запостить вопрос, то я советую тебе забросить веб программирование.
>А как понять, что ты ООП достаточно изучил?
Никогда не будет достаточно. В ООП нужен баланс и чуйка, где хороший код, где говнокод, а где вынужденный говнокод
>Если каждый пример кода запускать, то я еще 100500 лет буду разбираться.
Как ты собрался программированием заниматься без написания кода?
>Как ты собрался программированием заниматься без написания кода?
Ну, я Мэтта Зандстру начал читать. Там задач нет. На глаз код читаю, описанные примеры, вроде, все понятно, однако там 738 страниц, то что прочитал 70 страниц назад из головы выветривается.
Такие книги стоит читать, если есть опыт написания хотя бы одного проекта. Без наработанного опыта ничего не поймешь.
Читал когда-то давно Зандстру. Не сказать, что сильно помогло.
Ну, в шапке треда написано Зандстру читать. А я человек простой, ОП приказал, я читаю.
Спасибо, Анон! Ты как всегда очень добр к мимохую. Счастья тебе и удачи.
Видосики смотри, видео-курс какой по созданию сайта на ооп пройди.
Создаёшь в базе запись такой-то юзер начал проходить тест в такое то время, когда он отсылает отвёты сверяешь время получения ответов и время старта прохождения + лимит по времени теста
Вопрос: а почему хтмлакадемия не дает изучать ООП на голой пыхе? В этом есть какой-то сакральный смысл? Или они тупо пожалели зажопили полезную важную тему для новичков?
Имхо потому что ООП бессмысленно изучать в отрыве от создания приложений, а приложения должны иметь какую-то основу и структуру по минимуму. А писать основу и структуру самим с нуля - это как изобретать велосипед. По идее они должны давать введение в солид принципы и начинать с примера какой-либо основы. А основа и есть фреймворк. Там оно уже все реализовано как бы. Поэтому и такой скачок, одни выберут к yii, другие к зенд, третьи симфу, четвертые лару, а на деле все это - просто варианты структурной организации приложения, построенного на опп принципах. Хотя по умному, они должны не только дать несколько примеров структур, но и предложить создать свою для начала, но это затягивает время по сути, т.к. хер ты создашь что-то лучше, чем уже создано. В этом конечно есть серьезный косяк - фреймворки НЕ УНИВЕРСАЛЬНЫ, и когда берут основу типа симфони для приложухи, которая три строки кода в беке заняло бы, если бы сами писали, получаются говнопроекты.
Но так как после курсов выпускают джунов, в задачу которых не входит самостоятельная разработка, до для макаки более чем.
По моему опыту учебники следует пролистывать максимально по диагонали, прогнав немного тесты и задачки, но втыкать в них - ток зря время читать - нихера не запомнится и не поможет, т.к. голая теория нихера не усваивается - ток зря время теряешь.
По любому надо ковырять чужие коды рабочих приложений и stackoverflow, создавая и тестируя свои. когда натыкаешься на понятки - гуглишь что читать по теме уже. То есть хотя бы с элементарного начать, собственного сайтика со свистоперделками со встроенным порнхабом, тестами, парсерами всего, что можно стырить и т.п. Пока не включится интерес к ваянию всяко-разной херни, башка останется пустой а руки кривыми. Это как лепить из пластелина - надо суко лепить, а не читать книжки по лепке.
Потому что говнокурсы. ООП обязательно надо изучать на голой пыхе, чтобы вообще понимать как примерно работают фреймворки изнутри. Самостоятельно составить MVC-структуру, изучить автолоадер, роутер как работает, нэймспейсы, цепляются конфиги, наследование и прочее.
Поймёшь как это работает - легче будешь понимать фреймворки.
ООП - это база, это не продвинутый уровень.
Я в своё время проходил его, рекомендую, он сначала учит ООП на голой пыхе с созданием CMSке, а потом даже YII обучает, если хочется.
https://www.youtube.com/c/ВикторЗинченкоА/playlists
Полный код и ошибку можно?
Конкатенация
Я помню в шараге мы проходили базы данных на C Builder, это был пиздец, все отключалось, ломалось, нихуя не работало, был ахуй и пиздец нахуй.
Тогда не могу представить твой ахуй от элоквента.
доктрина + symfony maker. Ты тупо по словам накидываешь в консоли сущность, дальше создаёшь миграцию, выполняешь миграцию - всё в базе.
И чего, мейкер см телепатией знает, что нужно создать такие-то таблицы с такими-то полями таких-то типов?
Я ж написал - сущность описываешь сначала, он генерит сущность по твоим ответам
https://www.doctrine-project.org/projects/doctrine-orm/en/current/tutorials/getting-started.html#starting-with-the-product-entity
И по сущности миграцию генерит.
Например у меня есть переменна $a со значением 1000.
Нужно сделать так чтоб если $a == (промежуток между 1000-700 т.е. от 700 до 1000) то давало true, если 300 или меньше то false.
>1000-700 т.е. от 700 до 1000
Оц то-есть от 300 до 1000. Я всё напутал но надеюсь вы поняли что мы хотим)
Нет надо от 300 до 1000... Но можешь и вариант от 300 до 700 предпложить... Там в примере - условные цифры. Короче поомгайтк!
$b=($a>=300&&$a<=1000)?1:0;
$this->function() это попытка вызвать метод с именем function. А такого метода нет, отсюда ошибка.
А вот ($this->function)() это уже вызов анонимной функции, хранящейся в поле function.
Хз. По логике так логично быть должно - слева переменная, справа логическое выражение из двух неравенств. Но по опыту хер там пыха пустит, тем более седьмая, она за скобки параноит как шизло, там тупо обычные сокращения вложенных условий без них не прокатят, и присваивание булевых там другим синтаксисом делается. Хотя пробуй. Может оно и прокатит, если не запятую, а ; d конце влепить. Хотя я почему-то все таки сомневаюсь, поймет ли компилятор. По идее ты тысячу раз мог бы протестить уже, чем тут от нехуй делать кидать подобные вопросики по части алфавита блин. Типа почему жопа, а не жёпа. я хз, не я пыху писал. Да и хуй уже помню, какие там правила.
Путаешь. Для любых полей с датой.
И перестаньте пользоваться phpmyadmin уже, дикое говнище оно.
Есть же дохера попроще и потолковее инструментов. типа того же adminer. А то больно бл. смотреть, аж яйца крутит, на такие извраты.
Так вот, я привык все читать глазом и переписывать основные моменты в тетрадь.
Я начал читать Мэтта Зандстру ООП РНР. Дело нихуя не пошло, потому что я глазами читал и в тетрадь код переписывал.
Однако, тут меня в треде высмеяли и сказали, что код надо запускать на пеке.
Теперь я запускаю код на пеке, не записывая в тетрадь. И процесс пошел гораздо быстрее. В разы быстрее. ПИЗДЕЦ Я ДЕБИЛ, СТЫДНО БЫТЬ МНОЮ!!! КАКОЙ ЖЕ Я ТУПОЙ!
Спасибо, что есть умные аноны!
да, гугли типы данных, в какой формат переводить такие числа, чтобы не было ошибки. там интеджер мелкие слишком надо делать флоат чтобы столько девяток втащить. А с js там вообще танцы с бубнами. https://www.php.net/manual/ru/language.types.php
https://www.php.net/manual/ru/language.types.integer.php
Подсказка - гугл отвечает быстрее
Ой не ну результат перменную а просто результат. Короче помогайтек!!!!
Пон спс!
Вы серьёзно помогли этому долбаёбу? Он ведь даже не прочитал ОСНОВЫ ОСНОВ, но всё равно спрашивает гениев из этого треда о помощи в такой простой задаче. Я разочарован в вас.
Да, есть. В PHP числа могут храниться в 2 форматах: int - целое и double (иногда называют float) - число с плавающей запятой.
В формате int на 64-битных машинах можно представить только целые числа примерно от -9 * 10^18 (10 в 18-й степени) до +9 * 10 ^ 18. Точные максимальное и минимальное значения int хранятся в константах PHP_INT_MAX и PHP_INT_MIN, можешь вывести их с помощью echo. Числа в формате int хранятся точно, без погрешности.
Если число дробное или выходит за пределы int, то оно представляется в формате double. Это неточный, приближенный формат, который сохраняет лишь первые 15-17 значащих цифр и порядок числа (положение запятой и сколько за числом идет нулей). То есть, длинное число 12345678901234567890 сохранится как 1,2345678901235 * 10 ^ 19 - часть идущих в конце цифр теряется.
В формате double можно представить числа примерно от 10 ^ -308 до 10 ^ 308. Это, получается и есть "максимально возможное число".
Если тебе нужно работать с еще большими числами, или нужно точное представление без потери цифр, то стоит посмотреть на расширения BCMath и GMP. Они позволяют выполнять операции со сколь угодно большими целыми числами.
1.0E+29 обозначает "умножить 1.0 на 10 в 29 степени", или передвинуть запятую вправо на 29 разрядов, добавляя нули по мере необходимости. Как видишь, из-за преобразования в формат double число сохранилось с погрешностью.
Перед Ass? Попробовал без него, то же самое
А как ты, собственно, пытаешься создать инстанс, когда не подключил класс User в свой index.php ?
Мне кажется, тебе нужно для начала получше ознакомиться с немспейсами
Use всего лишь даёт алиас для пространства имен, а не подключает. В данный момент в твоём файле нет класса User, откуда по-твоему php должен его взять ?
Подключить файл можешь через require ‘User.php’ в самом начале.
И вправду, заработало. Спасибо большое. Действительно, стоить больше почитать про namespace. Я думал что "use" как раз и выполяет эту функцию. Спасибо анон.
Когда ты запускаешь index.php то в нем не определен класс User, потому PHP не может создать объект этого класса.
use не "подключает" класс, а лишь создает синоним (то есть use \Ass\User лишь говорит, что имя User это синоним для полного имени \Ass\User).
Тебе нужно либо руками через require подключить файл с классом, либо разобраться в автозагрузке. Начать лучше с первого, а потом переделать на второе. Вот урок про автозагрузку (так кстати и require упомянут): https://github.com/codedokode/pasta/blob/master/php/autoload.md
Код css (menuleft это меню слева, а showmenu это окно справа):
.menuleft{
position: absolute;
margin-left: 50px;
margin-top: -300px;
border-radius: 8px;
width: 255px;
box-shadow: 0 1px 2px 0 rgba(0,0,0,0.16);
background-color: rgb(255, 255, 255);
}
.menuleft li{
border-bottom: 1px solid #f5c800;
}
.menuleft li:hover{
color: #ffc222;
transition: all ease 0.5s;
cursor: pointer;
}
.showmenu{
color: #000000;
display: none;
margin-left: 230px;
width: 300px;
margin-top: -31px;
background:#f3f3f3;
height:200px;
box-shadow:0 5px 5px rgba(0,0,0,0.3);
}
.menuleft li:hover .showmenu{
display: block;
}
Код css (menuleft это меню слева, а showmenu это окно справа):
.menuleft{
position: absolute;
margin-left: 50px;
margin-top: -300px;
border-radius: 8px;
width: 255px;
box-shadow: 0 1px 2px 0 rgba(0,0,0,0.16);
background-color: rgb(255, 255, 255);
}
.menuleft li{
border-bottom: 1px solid #f5c800;
}
.menuleft li:hover{
color: #ffc222;
transition: all ease 0.5s;
cursor: pointer;
}
.showmenu{
color: #000000;
display: none;
margin-left: 230px;
width: 300px;
margin-top: -31px;
background:#f3f3f3;
height:200px;
box-shadow:0 5px 5px rgba(0,0,0,0.3);
}
.menuleft li:hover .showmenu{
display: block;
}
Ну пиши процедурно, потом покажешь
А всё мы додумались...
на вордпрессе пиши, оверинженегринг)) что тут происходит, ахах, рил
Чтобы подменю не исчезало, нужно, чтобы промежутка между меню и ним не было. Можно, например, обернуть подменю в обертку и добавить прозрачный невидимый паддинг слева.
Чтобы подменю не растягивало исходный пункт, нужно использовать такой способ позиционирования, который не влияет на размеры родителя. Например, абсолютное позиционирование.
Допустим, пишем во вьюхе
<input name="isPublished" type="hidden" value="0">
<input name="isPublished" type="checkbox" class="form-check-input" value="{{$item->isPublished}}" {{ old('isPublished', $item->isPublished) ? 'checked="checked"' : '' }} >
А в правилах валидации
'isPublished' =>'boolean'
И получается фигня какая-то. Если не менять галочку, то всё ок. Если снимаем, то в контроллер попадает 0 и всё тоже ок. Но вот поставить обратно её не получается, в контроллер всё равно уходит 0. Я уже и так и сяк с этими полями шаманил, никак не могу понять логику. По идее же у нас тупо два поля. если чекбокс не стоит, то это поле просто не учитывается и контроллеру улетает 0 из скрытого поля. А если галку ставим, то значение чекбокса перебивает скрытое поле и контроллеру идёт 1. Но такое ощущение, что если её снять, то это работает, а если поставить, то нет.
Стоит сначала разобраться, как передаются чекбоксы. Если галочка поставлена, то браузер передает имя (name) и значение (value) чекбокса в POST-данных (например: isPublished=x). Если галочка не поставлена, то значение чекбокса вообще не передается на сервер.
Тебе надо всегда передавать в value одно и то же, например, значение 1.
А скрытое поле, я думаю, не нужно. Оно только сбивает сервер с толку, так как при поставленной галочке туда передается параметр isPublished дважды.
Также, гугл выдает такую статью: https://5balloons.info/working-with-checkbox-input-in-laravel-form/
>Стоит сначала разобраться, как передаются чекбоксы.
Так в том-то и дело, что я знаю, как они передаются. и даже полностью объяснил это в своём посте (и ты повторил то, что я написал).
>Тебе надо всегда передавать в value одно и то же, например, значение 1.
Нет. Мне нужно передавать 1 только если чекбокс установлен.
>передается параметр isPublished дважды.
И снова нет. Можно создать сколько угодно полей с одинаковым name, и значение последнего значащего перепишет прдыдущие, на сервер отправится строго одно поле.
> гугл выдает такую статью: https://5balloons.info/working-with-checkbox-input-in-laravel-form/
Я её уже читал. Там не совсем то. Там написано, что можно сваять в контроллере костыль в виде проверки на существование параметра if($request->has('isPublished')), но к нему ещё придётся прописывать изменение данных в реквесте перед записью в бд. Как-то это криво, не думаю, что должно так быть.
>на сервер отправится строго одно поле.
Сразу уточнение: если оно установлено. Если ни одно поле не установлено, то на сервер оно не передастся вообще.
И моя проблема, по итогу, в том, что если галочка изначально не стоит, но мы её ставим, то уходит "isPublished" => "0", а должно быть "isPublished" => "1". Я не понимаю, где я накосячил.
>Я не понимаю, где я накосячил.
в value="{{ $product->isPublished() }}"
попробуй так:
https://pastebin.com/XMHW84Bz
Предыстория.
Учил swift для вкатывания на ios, на нем друзья уже программируют и работают уже не один год. Но что-то не задалось с ним, прошел 1 собес, выполнил все тестовые задания, но были проблемы с теорией. Обговорили зп и договорились, что подучу и выхожу на работу. А тут началась учеба, родичи заболели короной было не до этого и я забил на время как я думал. После всей хуйни нарисовался вариант пойти в небольшую фирму PHP программистом БИТРИКС 24. Долго думал идти или нет, но пошел. Уже были куплены курсы на GeekBrains, дали их и сказали учи. Уже месяц прошел, курсы эти не особо нравятся. А нормальных учебников так и не нашел. На swift было все просто открыл xcode, нашел видеоуроки, есть хорошие учебники. Одно и тоже, но в видеоформате и в текстовом, про сто и доступно. А с PHP ебать сложно. Одни говорят сразу учить пхп в одном редакторе, другие говорят нужно с началу HTML с CSS учить в других редакторах. Я уже запутался. Есть предложения каких-нибудь адекватных курсов, уроков, книг с чего стоит начать.
Если что в будущем нужно будет не сайты клепать, а приложения под CRM Битрикса 24.
Спасибо. Контроллер я менять не стал и хидден поле оставил, а вот value="1" в чекбоксе прописал. И всё заработало правильно.
>>1935531
Да бля, если в свифт то незнаю когда смогу устроится, а я студент и тут нормально относятся к тому, что хожу не каждый день. В планах пока тут хуярить, пока учебу не закончу еще 1.5 года. Если по окончанию учебы будут хорошо платить то останусь, если нет то устрою перекат на свифт + какой-то опыт будет в разработке.
Не судьба договориться со свифтерами на парт тайм?
Пхп само по себе дно, Битрикс еще большее дно
Я не сидел за сфитом уже месяца 3 и уже подзабыл что там к чему. Так еще в городе всего 2 вакансии на свифт джуна, хуй знает можно ли будет у них студентику работать.
А тут уже платят, сиди учи получай бабосы. Так дальше вроде как больше должно быть.
>тут уже платят, сиди учи получай бабосы
Погнался за 10 рублями сегодня, чтобы не идти за 100 рублями завтра...
Классическая ошибка для начинающего пхп разработчика. Пойми, что ты так в сторону веб-мастера катишься. Убегай на свифт давай, бака!
За жс хотя бы платят хорошо
Низкие зп, тонны легаси, цмски и е-комерс движки. Пхпшники - джамшуты от мира айти
Допустим у меня api выглядит так, то что оно принимает метод вызываемого контроллера через get параметры.
В таком случае лучше index метод контроллера должен звать остальные, или лучше сделать это через middleware?
>api выглядит так, то что оно принимает метод вызываемого контроллера через get параметры
Это на какой галере такие выкрутасы?
А ларавелисты наполовину джамшуты или полностью? А энтерпрайз проект например на друпале это тоже для джамшутов?
А вот паттерны в пхп стали тоже джамшутовыми от того, что они на пхп? Паттерны на сишарпе от них как-то отличаются? А фронтедер - это джамшут или нет? А битрикс ладно, это возможно частный случай проект для банка - джамшутинг?
Откуда вообще такое разделение на джамшутов?
>А ларавелисты наполовину джамшуты или полностью?
Из тех, с которыми работал 50/50. Были, кто откровенно говно в прод льет, были среднячки, хороших ларавелистов, увы, не встречал.
>А вот паттерны в пхп стали тоже джамшутовыми
Если бы их часто видел. Так нет, средний пхп проект - процедурщина, обернутая в классы моделей или контроллеров
>А битрикс ладно, это возможно частный случай проект для банка - джамшутинг
Учитывая начинку битрикса - да
Да знаю я что это такое, как по мне самый худший варик.
Это вопрос к тебе (ну или к заказчику), а не к нам: что должно происходить?
- запрещать удалять категории с товарами (безопасный вариант)
- удалять категорию у товара, но оставлять сам товар
- удалять категорию вместе с товарами (а что, если на эти товары есть оплаченные заказы?)
Вариант 3 самый неудачный, так как сотрудник может удалить категорию, думая, что она пустая, а по факту удалит пол-магазина с заказами.
Лучше сделать нормальное API с URL вроде http://example.com/products/list.
>>1934997
$b, $test, $str1 - плохое название переменной. Учись выбирать более говорящие названия.
Также, используя функции array_map и max можно найти макс. длину строки без написания цикла foreach.
Писать if ($value[$i]) неправильно, так как в массиве может не быть элемента $i и будет выдано предупреждение. Надо проверять, что такой элемент есть с помощью isset, array_key_exists или count.
в остальном решено верно.
Раз ты изучаешь ООП, то можешь глянуть как-нибудь нашу задачку про ООП-гостиницу: https://arhivach.net/thread/302511/#1082529
>>1932460
Не понял вопрос.
>>1931861
Можно сделать сущность "попытка прохождения теста" и в начале теста создавать такую сущность и записывать во сколько, кто начал проходить какой тест.
Попробуй решить задачу про ООП-Гостиницу, например: https://arhivach.net/thread/302511/#1082529 . Если не решается, значит, надо изучать ООП еще.
Еще есть задача про ООП-скидки: https://www.cyberforum.ru/php-oop/thread1459985.html
Более сложная задача - парсер математических выражений (сделанный на ООП), которому дается на вход математическое выражение вроде x(2a + b) + 5 + 3bx и он его упрощает до 2ax + 4bx + 5. Ну это конечно сложная задача, новичок над ней может месяц голову ломать. Но полезная. Там много классов получается. Я могу дать подсказку, если что.
Да, в принципе я поразмыслил, вопрос изначально дурацкий. Если оставить товар без категории каким то образом, то что, писать в графе "категория" [ДАННЫЕ УДАЛЕНЫ], чишо? Да и множество других неудобств сразу же вскрывается. Наверное лучше вместо этого просто предоставлять максимально широкие возможности редактирования категории.
1) Самый простой способ - использовать полнотекстовый поиск в БД (это через WHERE ... MATCH AGAINST ).Делаешь в таблице колонку, помещаешь туда текст для поиска, делаешь полнотекстовый индекс и используешь MATCH AGAINST
2) Уровень покруче - это внешний движок вроде Sphinx. Вот урок https://gist.github.com/codedokode/10539366
Ты настраиваешь запуск индексатора, например, раз в час, а также при желании можешь сделать realtime-индекс и при изменениях в БД слать в него данные в реальнмо времени. После чего ищешь через sphinx.
3) Elasticsearch, это по принципу работы как sphinx, только с 1000 разных ручек и переключателей, можно искать что угодно как угодно, группировать, сортировать данные, итд. Возможностей море.
Мне как раз сегодня задача пришла поиск на сайта потвикать как-то чтобы ЛУЧШЕ было. Сейчас сфинкс спокойно себе работает, но у меня сильное желание навернуть эластиксерч, просто потому что по нему больше инфы можно найти в инете (сфинкс как я понял это от снг разраба), обмазаться всякими морфологическими словарями и вообще апи удобное, DX так сказать. Боюсь только что он на джаве работает и могут возникнуть подводные камни, о которых я еще не догадываюсь. Говорят что память жрет как падла, но на сайте нужно примерно 3-5к итемов индексировать, я надеюсь что он будет до 1-1.5гб использовать
while ($row = mysqli_fetch_row($result)) {
for ($j = 0 ; $j < 3 ; ++$j)
{
$nameitem[$j] = $row[$j];
};
}
Вернусь к вопросу, посоветуйте книги по ПХП
>А битрикс
Джамшуты отдыхают здесь.
Это ебучее говно из портала в ад, который в дырке сельского туалета куда срали каждый день без оставновки со времён Екатерины II.
Как такое можно было сотворить я не представляю, простые вещи которые в той же ларе сделаешь за минут 20 на этом говне можешь делать несколько дней. Даже сука проект развернуть не так просто, можно целый день проебаться, структуры базы нет, все в инфоблоках, id которых встречаются по всему коду, качаешь базу себе, то кодировка 1251, то mbstring.func_overload надо, то не надо, то блядь база проекта с новым ядром не совместима, выкачивать папку /bitrix по фтп с прода весом пару гигов чтобы сука оно просто развернулось локально.
Кто-нибудь уже делал задачу про компанию "Вектор" в ООП-части гайда?
а как вам crm от SAP?
В Laravel response()->json(['value' => (float)$value]) возвращает цифру в научной нотации, то есть 5.54e6
Как пофиксить?
json_encode так не делает.
Я бы посоветовал поискать на phpclub.tech, но он не открывается. Тогда можно попробовать поискать на архиваче: https://www.google.com/search?q=клуб+php+ооо+вектор+site:arhivach.net
if ($request->hasFile('image')) {
$input['image'] = time() . '.' . $request->image->getClientOriginalExtension();
$request->image->move(public_path('images'), $input['image']);
}
Картинка при этом сохраняется в папку /public/images/, а путь к ней ($input['image']) записываем в базу отдельно, через create($input).
Однако, в документации описан другой способ:
$newFileName = time() . '-' . $request->file('image_url')->getClientOriginalName();
$path = $request->file('image_url')->storeAs('public', $newFileName);
Он записывает файл в каталог /storage/public/ и если сделать сразу $item->update($data), то в базу запишется путь к временному каталогу файла (на кой хрен - непонятно), поэтому я подшаманиваю название:
$data['image_url'] = $newFileName;
$result = $item->update($data);
И затем, чтобы сторедж был доступен из паблика, прописываю
php artisan storage:link
И обращаюсь из вью так:
<img src="{{asset("storage/$item->image_url")}}">
Вопрос: Какой способ более правильный? Или я вообще дичь тут какую-то нагнал?
А если придет не изображение? Тут же ни в одном из вариантов не проверяется что за файл.
Проверяется.
$this->validate($request, [
'title' => 'required',
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
Меня просто интересует сама концепция, куда лучше загружать файл? В сторедж или паблик? И конструкция file('image_url')->storeAs('public', $newFileName) - она, получается свежая, раньше не было? Раз нигде не упоминается, кроме документации.
А можешь пояснить чем плох этот api?
Только бля, без хуйни. Просто аргументированно скажи почему это плохой дизайн. Какие у него могут быть проблемы и тд. Я хочу разобраться
В первом варианте ты руками копируешь файл в public/ папку сайта
Во втором ты сохраняешь файл в свой публичный диск(концепция ларавела, который по дефолту находится в storage/public/. Нюанс в том что ты можешь в конфиге поменять "драйвер" публичного диска на какое-то облако, и тебе особо ничего не нужно будет менять в коде, а в первом случае придется переписывать. Всё это дело можно посмотреть в config/filesystems.php
>storage/public/
То есть, по фен-шую нужно закачивать картинки в /storage/public/ и линковать это хранилище в /public, так? Окей, понял, принял.
>Вроде бы пиздеть не должны
С чего бы? Потом хрюша скажет что это не для вас написано и вообще вы нам не подходите, много спрашиваете
Сеньор по определению мультиязычник, а не пыхарь. То есть может делать побольше существенно, и похеру на каком языке. Так что тут как бы сам вопрос не совсем корректно стоит.
>Так всегда было и будет. :)
А потом кабанчик нанимает ребят в кожанке чтобы тебе дали пиздюли для повышения работоспособности
{"user_id":10,"session_id":"2c2l3h4ii271aojentejtdcmh3","products":[{"product_id":15,"options":{"15":[45,47],"18":52},"quantity":1,"price":1500},{"product_id":16,"options":{"15":[47,48],"18":51},"quantity":2,"price":1000}]}
как с этого получить именно products > product_id > значение?
Ох блт, в каком ужасном мире ты живешь. Сочувствую тебе искренне.
Если представить что это пхп массив то products[0]['product_id']
$arr = ['d' => ['f', 'e' ],'a' => ['c', 'b'] ];
А ещё как сортировать по алфавиту - чтобы в а были б и ц и т.д.
а) Ввести дополнительное поле в таблицу и в зависимости от реквеста, вытаскивать цену из нужного поля.
б) Оставить одно поле цены, но проверять реквест, и если в нём указана другая валюта, налету преобразовывать цену перед отправкой посетителю.
Какой подход более правильный? У меня ощущение, что меня за любой будут ругать.
Б лучше. Взять какую-то валюту за базовую и на основе неё считать цены в других валютах.
При варианте А придется следить за 2мя полями (при 2х валютах) в таблице, в которых считай одна цена лежит. И при росте кол-ва валют соответственно будет расти кол-во таких полей.
Зато обновление цен будет проходить один раз при смене цены товара (или курса) в админке. А при первом варианте сервер будет пересчитывать все цены на каждом запросе. При хайлоаде будет гораздо выгоднее добавить бесплатное поле в таблице (пусть даже сотню полей), чем нагружать проц.
Ну, мне кажется, что так ответят гуру.
>>1938969
Скажешь гуру, что они оторванные от жизни долбодятлы.
В реальности у продавцов могут быть разные цены для разных валют, не согласованные с курсом, к примеру потому, что по каким то причинам им предпочтительнее одна валюта чем другая, и цена с учетом курса может различаться. Логики особой тут нет, но обычно это именно так. Поэтому должно быть множество цен - для каждой из валют. Рассчет по курсу применим только при предварительной договоренности с конкретным продавцом, так как их "а вот у меня курс лучше!" будет в каждом втором случае. Ну, это скорее из реального "коммерческого опыта" соображение.
я делал вообще всегда отдельной таблицей - ид товара - ид валюты - цена.
Ок, понял, принял.
То, что касается производительности, надо измерять, а не гадать. Я сомневаюсь, что пересчет валюты (одно умножение) хоть как-то повлияет на время выполнения запроса.
Она рабочая, просто надо домотать до задачи. Скопирую тогда сюда:
Есть Гостиница, в ней есть Номера. Для каждого Номера известен его номер, количество Гостей, которое в него влезет, а также цена за сутки. В Гостиницу приезжают Гости. Нужно сделать ООП-модель Гостиницы с такими возможностями:
- получить список свободных номеров на определенную дату
- получить список свободных номеров, которые будут свободны в определенный диапазон дат (от A до B)
- дан список Гостей и диапазон дат, в которые они хотели бы заселиться. Необходимо подобрать им самый дешевый и маленький Номер, который их вместит и который свободен в это время.
- то же самое, но при отстутствии одного подходящего номера для Гостей разрешается заселить их в несколько номеров, опять же, начиная с самых дешевых. Например, приехало 3 Гостя, но все 3-местные номера заняты и мы выделяем 2 2-местных, или 3 1-местных или 1-местный + 2-местный.
- зарегистрировать проживание данных Гостей в данных Номерах на данный период
- получить историю заселения Номера (кто в нем когда жил)
- получить историю заселения Гостя (в каких номерах он жил)
- получить статистику доходов Гостиницы за данный диапазон дат (в день A отдель заработал X тугриков, в день B - Y тугриков и так далее)
То есть надо создать классы, и сделать в них методы, которые вычисляют то, что описано выше.
var_dump($arr);
print_r($arr);
echo json_encode($arr, JSON_PRETTY_PRINT);
Сортировать с помощью функций типа sort, usort.
>>1937549
Обычно подключается сторонний сервис для приема платежей (например: робокасса, яндекс-касса). Ты заключаешь с ними договор. Сервис либо дает тебе код, который ты должен подключить на страницу, чтобы на ней появилась форма оплаты, либо ссылку по которой надо отредиректить пользователя на форму оплаты. При этом ты передаешь сервису номер заказа. Пользователь оплачивает, дальше сервис дергает какой-то URL на твоем сервере и сообщает об успешной или неуспешной оплате.
Периодически тебе приходит на почту отчет со списком оплат: за такой-то заказ получено столько-то денег. И периодически тебе на счет переводят деньги.
Он плох тем, что некрасивый и негибкий. Сравни сам:
/index.php?controller=product&method=list&price_from=2000
/product/list?price_from=2000
Также, такую систему могут не поддерживать системы документирования вроде swagger, как ты будешь делать документацию на API?
А так, использовать можно, не думаю, что тут требуется middleware. Оно вообще не для этого, а для того, чтобы поменять что-то в запросе или что-то в ответе (заголовок какой-нибудь добавить).
В конечном счете пляшем от бизнес требований.
На какой-нибудь бирже нужны динамичные цены, зависящие от какой-то базовой валюты.
В маркете тот же стим нужны фиксированные цены
ну в принципе да, речь шла именно об обычных маркетах барахолках. у бирж там отдельная тема вообще.
Как сделать так чтоб при объявлении (создании нового ) объекта он автоматически добавлялся в глобальный массив?
ПОМОГАЙТЕ БЫСТРЕЕ!!!!!
ПОЧЕМУ НЕ ДАЁТ и как это тогда сделать?
>>1939750
Модификатор доступа укажи https://www.php.net/manual/ru/language.oop5.properties.php
И if должен быть внутри функции и ты должен вызывать эту функцию за пределами класса
>и ты должен вызывать эту функцию за пределами класса
Так это ведь постоянно функцию вызывать придётся после объявления объёкта. И функций тоже наверное дохера надо, оно же только 1 return сможет сделать.
То-есть нужны будут функции define salary, define coffee, define papers... Жесть?!
Да ничего сложного
Создаёшь класс
class Zalupa {
// Тут твои переменные класса, с модификаторами доступа
public function huita () {
// Вот тут твой if
}
}
А потом создаёшь экземпляр и вызываешь метод
$zalupa =. new Zalupa();
$zalupa->huita();
После $zalupa->huita(); у всех показателей залупы выставятся нужные значения? А можно сделать так чтоб они выставлялись сразу при создании новой залупы обозначением професси в конструкте (скобочках), без строчки с вызовом функции?
Хмммммм.......... Наверное - понял!!!
Удалять может быть плохо, так как теряются результаты прохождения. Человек старался, проходил тест, а результаты удалили. Проще использовать isDeleted (этот подход называется soft delete). Или можно заморочиться и смотреть: есть результаты прохождения? Если нет - то удалять целиком, если есть - то скрывать.
Удалять надо, конечно, вместе с вопросами и тегами. При десятке-другом вопросов нагружать БД сильно не должно, но ты можешь сделать измерения и проверить.
> Алсо, еще вопрос про порядок вопросов - в базе есть поле sequence_number, и если допустим при редактирование юзер меняет местами вопросы или удаляет их, то просто обновлять всем вопросам это поле или может есть какой-нибудь хитрый алгоритм?
Наверно, придется обновлять все значения.
Внутри конструкции class { ... } идут только определения констант, полей и методов.
class A
{
// константа
private const X = 1;
// поле
private $x = 1;
// метод
public function doSomething($a) { ... }
}
Там нельзя писать произвольный код, определять переменные или писать слово if. Произвольный код и создание переменных пишут внутри методов.
Мы пока вот так сделали... Понадеемся што - сработает!
class Employee
{
const PROFESSION_MANAGER = "Менеджер";
const PROFESSION_MARKETER = "Маркетолог";
const PROFESSION_ENGINEER = "Инжинер";
const PROFESSION_ANALISER = "Аналитик";
public $name;
protected $workPlace; // В какой департамент назначен работник
protected $profession; // Профессия работника
protected $rank; // Ранг работника
protected $isLeader; // Руководитель ли работник
protected $salary; // Зарплата работника
protected $coffeConsumption; // Объём потребляемого сотрудником кофе в литрах
protected $papers; // Количество производимых работников отчётов
public function __construct()
{
$this->name = $name;
$this->workPlace = $workPlace;
$this->profession = $profession;
$this->rank = $rank;
$this->isLeader = $isLeader;
if ($this->profession = Employee::PROFESSION_MANAGER)
{
$this->salary = 500;
$this->coffeConsumption = 20;
$this->papers = 200;
}
elseif ($this->profession = Employee::PROFESSION_MARKETER)
{
$this->salary = 400;
$this->coffeConsumption = 15;
$this->papers = 150;
}
elseif ($this->profession = Employee::PROFESSION_ENGINEER)
{
$this->salary = 200;
$this->coffeConsumption = 5;
$this->papers = 50;
}
elseif ($this->profession = Employee::PROFESSION_ANALISER)
{
$this->salary = 800;
$this->coffeConsumption = 50;
$this->papers = 5;
}
}
}
Мы пока вот так сделали... Понадеемся што - сработает!
class Employee
{
const PROFESSION_MANAGER = "Менеджер";
const PROFESSION_MARKETER = "Маркетолог";
const PROFESSION_ENGINEER = "Инжинер";
const PROFESSION_ANALISER = "Аналитик";
public $name;
protected $workPlace; // В какой департамент назначен работник
protected $profession; // Профессия работника
protected $rank; // Ранг работника
protected $isLeader; // Руководитель ли работник
protected $salary; // Зарплата работника
protected $coffeConsumption; // Объём потребляемого сотрудником кофе в литрах
protected $papers; // Количество производимых работников отчётов
public function __construct()
{
$this->name = $name;
$this->workPlace = $workPlace;
$this->profession = $profession;
$this->rank = $rank;
$this->isLeader = $isLeader;
if ($this->profession = Employee::PROFESSION_MANAGER)
{
$this->salary = 500;
$this->coffeConsumption = 20;
$this->papers = 200;
}
elseif ($this->profession = Employee::PROFESSION_MARKETER)
{
$this->salary = 400;
$this->coffeConsumption = 15;
$this->papers = 150;
}
elseif ($this->profession = Employee::PROFESSION_ENGINEER)
{
$this->salary = 200;
$this->coffeConsumption = 5;
$this->papers = 50;
}
elseif ($this->profession = Employee::PROFESSION_ANALISER)
{
$this->salary = 800;
$this->coffeConsumption = 50;
$this->papers = 5;
}
}
}
Имеется объект, который при определённом значении одного из своих свойств должен залазить в свойство-массив первого объекта.
КАК ЭТО СДЕЛАТЬ?
>$this->name = $name;
>$this->workPlace = $workPlace;
>$this->profession = $profession;
>$this->rank = $rank;
>$this->isLeader = $isLeader;
Конструктор это из воздуха должен брать? Добавь аргументы в метод. И да, за такой elseif по рукам бьют. Мало того что выглядит плохо, так еще всё на магических числах.
Наткнулся на функцию mix.extract, вроде бы для чего-то похожего предназначена, но хз, профита из нее извлечь не получается.
>Конструктор это из воздуха должен брать?
Да, эти штучки будут задаваться в скобках при объявлении объекта.
>И да, за такой elseif по рукам бьют. Мало того что выглядит плохо, так еще всё на магических числах.
Не понял ничего.
ОП человек занятой, бабки зашибает. Нет у него времени гайды и шапку 10-летней давности на форуме для анимешников переписывать.
Ну, тогда че, лучше nginx?
ПОМОГИТЕ БЫСТРЕЕЕ!!!!
>КАК ЭТО СДЕЛАТЬ?
При определённом значении одного из своих свойств имеющегося объекта, залезаешь в свойство-массив первого объекта.
ТАК СРАБОТАЕТ?
<?php
error_reporting(-1);
class Department
{
public $workers = array();
}
$procurementDepartment = new Department;
$sellDepartment = new Department;
$adDepartment = new Department;
$logisticDepartment = new Department;
class Employee
{
public $name;
protected $workPlace; // В какой департамент назначен работник
protected $profession; // Профессия работника
protected $rank = 1; // Ранг работника
protected $isLeader = "Не руководитель"; // Руководитель ли работник
protected $salary; // Зарплата работника
protected $coffeConsumption; // Объём потребляемого сотрудником кофе в литрах
protected $papers; // Количество производимых работников отчётов
public function __construct()
{
$this->workPlace = $workPlace;
}
if ($this->workPlace == "Закупки")
{
$procurementDepartment->workers = $this;
}
}
}
ТАК СРАБОТАЕТ?
<?php
error_reporting(-1);
class Department
{
public $workers = array();
}
$procurementDepartment = new Department;
$sellDepartment = new Department;
$adDepartment = new Department;
$logisticDepartment = new Department;
class Employee
{
public $name;
protected $workPlace; // В какой департамент назначен работник
protected $profession; // Профессия работника
protected $rank = 1; // Ранг работника
protected $isLeader = "Не руководитель"; // Руководитель ли работник
protected $salary; // Зарплата работника
protected $coffeConsumption; // Объём потребляемого сотрудником кофе в литрах
protected $papers; // Количество производимых работников отчётов
public function __construct()
{
$this->workPlace = $workPlace;
}
if ($this->workPlace == "Закупки")
{
$procurementDepartment->workers = $this;
}
}
}
Я не шарю, но scss всегда почему-то весь пересобирается, тут как вариант импортировать не весь бутстрап а отдельные модули его, например grid, table и т.д.
А оп кстати все еще пхпшник или на голанг/джаву ушел?
<?php
$anonDice1 = mt_rand(1, 6);
$anonDice2 = mt_rand(1, 6);
$compDice1 = mt_rand(1, 6);
$compDice2 = mt_rand(1, 6);
$anonSum = $anonDice1 + $anonDice2;
$compSum = $compDice1 + $compDice2;
echo "У Анонче выпало $anonDice1 и $anonDice2. У Компухтера $compDice1 и $compDice2.\n";
if (($anonDice1 == $anonDice2) && ($compDice1 == $compDice2)) {
echo "2 дабла. ПОВТОРНЫЙ РАУНД!";
exit();
} elseif ($anonDice1 == $anonDice2) {
echo "Компухтер выиграл.";
exit();
} elseif($compDice1 == $compDice2) {
echo "Анонче выиграл.";
exit();
}
if ($anonSum > $compSum) echo "Анонче выиграл.";
else echo "Компухтер выиграл.";
Скоро я начну получать деньги?
<?php
$anonDice1 = mt_rand(1, 6);
$anonDice2 = mt_rand(1, 6);
$compDice1 = mt_rand(1, 6);
$compDice2 = mt_rand(1, 6);
$anonSum = $anonDice1 + $anonDice2;
$compSum = $compDice1 + $compDice2;
echo "У Анонче выпало $anonDice1 и $anonDice2. У Компухтера $compDice1 и $compDice2.\n";
if (($anonDice1 == $anonDice2) && ($compDice1 == $compDice2)) {
echo "2 дабла. ПОВТОРНЫЙ РАУНД!";
exit();
} elseif ($anonDice1 == $anonDice2) {
echo "Компухтер выиграл.";
exit();
} elseif($compDice1 == $compDice2) {
echo "Анонче выиграл.";
exit();
}
if ($anonSum > $compSum) echo "Анонче выиграл.";
else echo "Компухтер выиграл.";
Скоро я начну получать деньги?
elseif ($anonDice1 == $anonDice2) {
echo "Компухтер выиграл.";
exit();
} elseif($compDice1 == $compDice2) {
echo "Анонче выиграл.";
exit();
}
Это что и зачем?
Всё понял.
https://ideone.com/4hi8U9
Переменные класса объявлять надо вне функций, до конструктора.
И поменяй местами выражения, тумкало - ты присваиваешь неизвестно чему неизвестно что.
>Устанавливать линукс или оставить винду?
Что нравится, единственно что в линуксах пориятнее терминал и большинство кто занимается бекендом сидят либо на линуксе, либо на маке. У нас на работе с виндой в основном фронтендеры сидят.
>Что предпочтительнее?
Linux
>Надо ли будет знать на работе линух?
Да
>Если да, то хотел бы тогда поставить ubuntu, она подойдет?
Лучше начинать с убунты или минта
Не работает - твоя магия... Не хочет оно к массиву внешнего объекта приписывать объект.
Почти одинаково, скриптовые языки. Правда на РНР еще надо безопасность маленько знать, чтобы тебя не хакнули, не бэкдорнули, не эксплоитнули, не инъекцировали.
Короче, был наполеоновский план запилить несколько своих сайтов, перед этим выучив верстку и js. Бэк мечтал написать на ноде. С фронтендом разобрался, запилил несколько страниц шаблонов, и после признался самому себе, что у меня к куям отсутсвтует дизайнерский талант и выглядят мои страницы не очень. Решил мозга не ебать, и запилить на вордпрессе, взяв готовую тему (уже нашел красивую). Для вордпресса говорят пхп нужно знать. JS я типа как синтаксис и обращение с DOMом "выучил", в той степени, что могу всякие выпадающие меню и слайдеры делать сам с нуля. Потому и спросил что сложнее. Буду сейчас пыху учить.
Какие вообще знания php нужны для вордпресса? Какой учебник актуален для последней версии? Можно и на английском. Спасибо.
Если ты пиздец как торопишься, то смотрит обучающие всякие видео по вордпрессу.
А если не торопишься и хочешь хорошо подготовиться, то тогда надо идти по шапке треда, учить голую пыху по задачам, мануалам, ООП пыхи учить. Про безопасность читать, а то вдруг тебя хакнут https://www.youtube.com/watch?v=dOaGvMaFkbY
В шапке что-то совсем беда, кроме мануала все лохматых годов...
Вот это вот Learn PHP 8: Using MySQL, JavaScript, CSS3, and HTML5 читал кто-нибудь, аноны, стоящая книжка?
Как по мне лохматость не слишком страшна. Не так уж много изменилось. Базовые принципы остались те же. ИМХО!
Почитай котерова и симдянова рнр 7. Именно по языку большой охват. Гит, композер, бд. Хтмл и цсс это лучше отдельно посмотреть.
Решал задачу из гайда для нюфанек на написание суммы прописью.
Тужился около двух недель, в перерывах между основной работой и семейными делами, но упрямо не бросал ее. В итоге родил вот что:
https://ideone.com/Pw4DPm
Постарался кратко, с максимально необходимыми комментариями.
Подскажите, где я хуй?
p.s. Где поучиться клинкодингу? Чувствую, если сейчас буду упускать какие-то моменты, потом переучиться будет ОСНЕ сложно.
p.p.s. Платиновый вопрос: почему phpformatter, пидорас такой, не пропускает запись массива вида $x=[] ?
Условия задачи жопой читал?
Если дабл у обоих- ничья, и смысла играть дальше нет.
Выпадение дабла у одного из игроков ничего не меняет, сравниваются суммы.
Что выдаст твоя программа, если суммы очков Анона и компьютера будут равны?
Согласен, программы больше чем на 20-30 строк удобнее запускать у себя, а не через сайты. Для этого тебе надо:
1) установить PHP, вот один из (немного устаревших) гайдов: https://github.com/codedokode/pasta/blob/master/soft/php-install.md
2) установить IDE или редактор кода на твой выбор. Платно: PhpStorm, бесплатно: VS Code (+ плагины для PHP), Sublime Text, Eclipse for PHP.
Если ты не на винде, то в редакторе надо настроить запуск PHP программ. Обычно для этого в настройках надо прописать путь к PHP, как именно - зависит от редактора кода.
Если все сделать правильно, то ты сможешь запускать программу одной кнопкой из редактора.
Дружище, дрочить 2 недели такую задачу, пусть и по вечерам, это пиздец. Ты же понимаешь, что у тебя проблема с реализацией алгоритма? Программирование для знающих математику. Кто бы что не говорил. Все эти разговоры, что на деле хватает начальной алгебры — бред. Я даже не знаю как тебе помочь. Ну, реализовал ты кривоработающий код, спиздил куски, а толку? Ты же себя не наебешь, дружаня. Математика качает мозг. Решение подобных задач не должно вызывать решения в течении 2х недель.
Вместо гигантского elseif можно сделать массив, вида
[профессия => [зарплата, кофе, страницы]]
и брать данные из него. Будет компактнее.
Также, будь внимательнее. Здесь:
($this->profession = Employee::PROFESSION_MANAGER)
Нужно писать не =, а == или ===.
Когда допишешь, советую запостить код тут на проверку.
>>1940410
Возможно, совет немного устарел.
Вообще, чтобы запускать у себя на компьютере код, проще всего использовать встроенный в PHP сервер без всяких Апачей. А если хочется заморочиться то да, можно поставить nginx + php-fpm, это будет конфигурация как на продакшене.
Качаешь с сайта рнр архив под винду, если ты под виндой, запускаешь консоль из папки с разархивированным пхп дистрибутивом, пишешь php -a и выполняешь код прямо в консоле в интерактивном режиме.
Это неправильный подход. Начнем с того, что у тебя в конструкторе недоступна переменная $procurementDepartment (так как внутри функций доступны только переменные, которые явно переданы через аргументы) и ты добавить ничего не сможешь.
Также, это не гибко. Завтра добавится новый департамент и мы должны будет переписывать код Работника, который по идее к этому отношения никакого не имеет? Это нехорошо. Вообще, это не задача Работника знать, какие именно департаменты существуют. Он не должен об этом знать и не должен в себе содержать их список.
Есть такой принцип, разделение ответственности. У каждого класса должна быть своя зона ответственности и он не должен заниматься чем-то посторонним.
Тогда уж логичнее передавать не название департамента, а сам объект департамента в конструктор. Это один вариант решения проблемы. Другой вариант - можно вообще не хранить в Работнике, к какому департаменту он относится. Код тогда будет выглядеть так:
// Создаем свободного работника
$e= new Employee(....);
// принимаем его на работу в Департамент
$someDepartment->addEmployee($e);
Плюс такого подхода в том, что работника проще переместить в другой Департамент или уволить. Достаточно обновить информацию в Департаменте. При твоем подходе при перемещении или увольнении надо не забыть обновить информацию и в Департаменте, и в Работнике - больше возни. Еще один плюс в том, что Работник ничего не знает о Департаменте (и при изменениях кода Департамента нам не придется ничего менять в Работнике). Минус этого подхода в том, что работник "не знает", где он работает.
Также, нехорошо, что ты залезаешь внутрь объекта Департамента и напрямую что-то добавляешь в массив. Правильнее вызывать метод addEmployee, как описано в коде выше, а массив закрыть от прямого доступа снаружи. Почему? Ну например, может быть Департаменту надо обновлять какую-то информацию при добавлении Работника, и если добавлять его напрямую в массив, Департамент об этом не узнает. Прочти-ка про инкапсуляцию: https://github.com/codedokode/pasta/blob/master/php/encapsulation.md
Это неправильный подход. Начнем с того, что у тебя в конструкторе недоступна переменная $procurementDepartment (так как внутри функций доступны только переменные, которые явно переданы через аргументы) и ты добавить ничего не сможешь.
Также, это не гибко. Завтра добавится новый департамент и мы должны будет переписывать код Работника, который по идее к этому отношения никакого не имеет? Это нехорошо. Вообще, это не задача Работника знать, какие именно департаменты существуют. Он не должен об этом знать и не должен в себе содержать их список.
Есть такой принцип, разделение ответственности. У каждого класса должна быть своя зона ответственности и он не должен заниматься чем-то посторонним.
Тогда уж логичнее передавать не название департамента, а сам объект департамента в конструктор. Это один вариант решения проблемы. Другой вариант - можно вообще не хранить в Работнике, к какому департаменту он относится. Код тогда будет выглядеть так:
// Создаем свободного работника
$e= new Employee(....);
// принимаем его на работу в Департамент
$someDepartment->addEmployee($e);
Плюс такого подхода в том, что работника проще переместить в другой Департамент или уволить. Достаточно обновить информацию в Департаменте. При твоем подходе при перемещении или увольнении надо не забыть обновить информацию и в Департаменте, и в Работнике - больше возни. Еще один плюс в том, что Работник ничего не знает о Департаменте (и при изменениях кода Департамента нам не придется ничего менять в Работнике). Минус этого подхода в том, что работник "не знает", где он работает.
Также, нехорошо, что ты залезаешь внутрь объекта Департамента и напрямую что-то добавляешь в массив. Правильнее вызывать метод addEmployee, как описано в коде выше, а массив закрыть от прямого доступа снаружи. Почему? Ну например, может быть Департаменту надо обновлять какую-то информацию при добавлении Работника, и если добавлять его напрямую в массив, Департамент об этом не узнает. Прочти-ка про инкапсуляцию: https://github.com/codedokode/pasta/blob/master/php/encapsulation.md
Не ушел.
>>1940648
В общем, хорошо решено. В правилах, правда ничего не было про то, что дабл дает победу, но можно сделать и так.
>>1940697
Да, не было, но в принципе можно и добавить такое правило.
>>1940700
У тебя в определении конструктора нет аргументов в скобочках:
public function __construct($x, $y, $z <-- вот тут) { ... }
Вместо числа 3 (непонятно, что это) лучше было бы использовать переменную $percent, равную 3. И число 5000 тоже заменить на переменную.
И немного коряво выглядит то, что мы можем уйти в минус. Лучше бы смотреть, сколько осталось долга и платить наименьшее из остатка и 5000.
>>1940783
Можно установить обе системы. Если страшно переходить, можно попробовать сначала установить линукс в виртуальной машине.
Благодарю за развёрнутый ответ. Буду - пробовать!
Ни одного куска кода нигде спизжено не было, к каждой строчке пришел сам.
Вместо хейта можно было бы указать на слабые стороны, не? Если кроме "все хуёво" нечего сказать, то и говорить необязательно.
Не определяй функции с именами внутри других функций (анонимные функции - можно). Так как функцию с именем можно определить лишь один раз, второй раз будет ошибка. Если у тебя вызывать функцию summ_to_text() дважды, то на втором вызове программа упадет. PHP это не JS, тут так делать нельзя.
> $splitArray=[];
Лучше назвать это $groups
> $i=$i+0
Если ничего не требуется делать, то тут можно оставить пустое место.
Брать 3 последние цифры числа проще через $i % 1000 (остаток от деления на 1000). А все, кроме последних цифр получается как floor($i / 1000).
> $regexpLastNumber1='/^[1]$/';
Это очень корявенько, работать с числами через регулярки. Правильнее использовать математические выражения, например
$lastDigit = $n % 10; // последняя цифра
if ($lastDigit == 1) ...
> discharge_sum ($dischargeValue,$x)
Если вместо $x передавать 3 формы слова, то получилась бы универсальная функция, которая умеет выбирать формы для любых слов, а не только тысяч, миллионов, рублей.
> $spelN
Лучше $number
> $spelN=array_reverse($spelN);
Это коряво. Лучше передавать массив в функцию в правильной форме, чтобы она не занималась его переворачиванием. Более того, переворачивание логичнее всего сделать в splittingIntoGroups(), чтобы она сразу возвращала массив в правильном порядке.
Получается странная функция: в нее надо передать массив чисел в обратном порядке, и она вернет массив слов - тоже в обратном порядке.
Понятно, что ты так сделал из-за того что у тебя splittingIntoGroups так работает, но это неправильно, что из-за особенностей одной функции мы делаем нелогичной другую функцию.
Есть такой принцип разделения ответственности - каждая функция должна заниматься своим делом и ее не должно беспокоить, что делает какая-то другая функция.
Еще, если подумать, то нелогично, что в smallNumberToText мы передаем массив 3-значных чисел, а она возвращает нам массив слов. Опять же нелогично. Логично передавать одно трехзначное число и возвращать его написание. А потом, если требуется, можно дописать функцию, которая преобразует массив трехзначных чисел в слова.
> $textArray[]
Лучше назвать $words
> Эта функция меняет фразы "один тысяча" и "две тысяча" на "одна тысяча" и "две тысячи" соответственно
Это очень коряво. Правильнее было бы передавать род в функцию, которая преобразует число в текст, чтобы она брала "одна" вместо "один". То есть у функции 2 аргумента - число и род.
Плюс, функция correct_thousand опять написана нелогично. Она принимает на вход какой-то массив, и почему-то заменяет в нем элемент номер 1. Где тут логика (если не смотреть на остальной код)? Логичнее было бы передавать в нее не весь массив, а только нужную строку. Опять нарушение разделения ответственности - функция "знает" то, что знать ей не требуется и занимается не своим делом.
Старайся делать функции более независимыми друг от друга, делать логичными набор входных аргументов и возвращаемый результат. А не делать их странными из-за того, что где-то в другом месте кода так требуется.
Например: функция принимает 3-разрядное число и возвращает массив слов (или строку, тоже можно).
Удалять лишние пробелы - тоже коряво. Правильнее не создавать их. Например, сделать, чтобы функция возвращала массив слов, а не строку пробелами. И склеивать такой массив через implode(). Или как-то сделать, чтобы лишние пробелы не появлялись.
Например, так:
слова = [];
для каждого 3-разрядного числа:
если это число > 0, то:
добавляем в слова[] написание этого числа
доабвляем в слова[] нужную форму слов рубль, тысяча, миллион
> delete_double_space
> splittingIntoGroups
Нужно использовать единый стиль в именах.
> $regexpDoubleSpace='/(\\s){2,}/ui';
>$textAfterDeleteDoubleSpace=preg_replace($regexpDoubleSpace,' ',$textForDeleteSpace);
>return $textAfterDeleteDoubleSpace;
Тут можно написать короче:
return preg_replace('/(\\s){2,}/ui', $text);
> $dischargeArraySpelN[roubles]
Пропущены кавычки у roubles.
> if ($splitArray[0]==0){
> $wordAfterRoubles='рублей';
Это (выбор формы слова) ответственность функции discharge_sum и это должно быть написано в ней, а не тут.
В общем, код стоит доработать. Он станет и короче, и читабельнее.
Не определяй функции с именами внутри других функций (анонимные функции - можно). Так как функцию с именем можно определить лишь один раз, второй раз будет ошибка. Если у тебя вызывать функцию summ_to_text() дважды, то на втором вызове программа упадет. PHP это не JS, тут так делать нельзя.
> $splitArray=[];
Лучше назвать это $groups
> $i=$i+0
Если ничего не требуется делать, то тут можно оставить пустое место.
Брать 3 последние цифры числа проще через $i % 1000 (остаток от деления на 1000). А все, кроме последних цифр получается как floor($i / 1000).
> $regexpLastNumber1='/^[1]$/';
Это очень корявенько, работать с числами через регулярки. Правильнее использовать математические выражения, например
$lastDigit = $n % 10; // последняя цифра
if ($lastDigit == 1) ...
> discharge_sum ($dischargeValue,$x)
Если вместо $x передавать 3 формы слова, то получилась бы универсальная функция, которая умеет выбирать формы для любых слов, а не только тысяч, миллионов, рублей.
> $spelN
Лучше $number
> $spelN=array_reverse($spelN);
Это коряво. Лучше передавать массив в функцию в правильной форме, чтобы она не занималась его переворачиванием. Более того, переворачивание логичнее всего сделать в splittingIntoGroups(), чтобы она сразу возвращала массив в правильном порядке.
Получается странная функция: в нее надо передать массив чисел в обратном порядке, и она вернет массив слов - тоже в обратном порядке.
Понятно, что ты так сделал из-за того что у тебя splittingIntoGroups так работает, но это неправильно, что из-за особенностей одной функции мы делаем нелогичной другую функцию.
Есть такой принцип разделения ответственности - каждая функция должна заниматься своим делом и ее не должно беспокоить, что делает какая-то другая функция.
Еще, если подумать, то нелогично, что в smallNumberToText мы передаем массив 3-значных чисел, а она возвращает нам массив слов. Опять же нелогично. Логично передавать одно трехзначное число и возвращать его написание. А потом, если требуется, можно дописать функцию, которая преобразует массив трехзначных чисел в слова.
> $textArray[]
Лучше назвать $words
> Эта функция меняет фразы "один тысяча" и "две тысяча" на "одна тысяча" и "две тысячи" соответственно
Это очень коряво. Правильнее было бы передавать род в функцию, которая преобразует число в текст, чтобы она брала "одна" вместо "один". То есть у функции 2 аргумента - число и род.
Плюс, функция correct_thousand опять написана нелогично. Она принимает на вход какой-то массив, и почему-то заменяет в нем элемент номер 1. Где тут логика (если не смотреть на остальной код)? Логичнее было бы передавать в нее не весь массив, а только нужную строку. Опять нарушение разделения ответственности - функция "знает" то, что знать ей не требуется и занимается не своим делом.
Старайся делать функции более независимыми друг от друга, делать логичными набор входных аргументов и возвращаемый результат. А не делать их странными из-за того, что где-то в другом месте кода так требуется.
Например: функция принимает 3-разрядное число и возвращает массив слов (или строку, тоже можно).
Удалять лишние пробелы - тоже коряво. Правильнее не создавать их. Например, сделать, чтобы функция возвращала массив слов, а не строку пробелами. И склеивать такой массив через implode(). Или как-то сделать, чтобы лишние пробелы не появлялись.
Например, так:
слова = [];
для каждого 3-разрядного числа:
если это число > 0, то:
добавляем в слова[] написание этого числа
доабвляем в слова[] нужную форму слов рубль, тысяча, миллион
> delete_double_space
> splittingIntoGroups
Нужно использовать единый стиль в именах.
> $regexpDoubleSpace='/(\\s){2,}/ui';
>$textAfterDeleteDoubleSpace=preg_replace($regexpDoubleSpace,' ',$textForDeleteSpace);
>return $textAfterDeleteDoubleSpace;
Тут можно написать короче:
return preg_replace('/(\\s){2,}/ui', $text);
> $dischargeArraySpelN[roubles]
Пропущены кавычки у roubles.
> if ($splitArray[0]==0){
> $wordAfterRoubles='рублей';
Это (выбор формы слова) ответственность функции discharge_sum и это должно быть написано в ней, а не тут.
В общем, код стоит доработать. Он станет и короче, и читабельнее.
Но в этой задаче нет математики сложнее, чем деление с остатком. Не думаю, что изучение матанализа тут как-то поможет. Тут надо уметь грамотно разбивать код на функции, определять их входные аргументы и результаты, а математика тут особо не нужна.
Анон, никакого хейта. Ты над примитивной задачей ломал голову 2 недели. Тебе определённо стоит задуматься над тем нужно ли тебе программирование. Если уж так сильно хочется, то определись, что ты хочешь программировать. Может стоит взглянуть в сторону бухгалтерии с их 1С? Есть неплохая книга https://www.labirint.ru/books/723474/ попробуй из неё для начала решить хоть сколько-то задач, чтобы затем браться за то, что в шапке. У тебя проблема с пониманием и решением задачи и её переноса на код.
Математика тут не нужна? Математическое мышление и комплексный подход к решению задачи нужен. Увы, но математику не зря считают основной всех наук. Без этих вещей никуда.
Важна не выученая формула, а принцип работы. Понимаешь, что я хочу донести? У человека проблемы с алгоритмом и пониманием. Это не связанное с программированием напрямую действие.
BYOD давним давно в моде. У нас программисты себе заказали топовые 27 iMac. Охуели в край. Я себк ноут для рвботы просил — купили НР, но по характеристикам не плохой. Матрица говно. Вдмины всё орали, чтобы не удалял винду по корпоративным правилам, но я из послал назуй и накатил то, что мне нужно.
Загуглил что такое BYOD, не совсем понял как это соотносится с тем, что вам ноуты покупают.
Это к тому, что ты можешь со своим девайсом приходить на работу. Я же написал про ноут как пример, что смог накатить самостоятельно, что мне нужно для работы. Но учти, что далеко не везде такая свобода.
Анон, не знаю, зачем ты этим занимаешься, но очень надеюсь, что закон кармы сработает и добро вернется к тебе. Спасибо.
>>1941232
Две недели над задачей- это две недели с учетом наличия основной работы и семейных дел. В итоге далеко не каждый день удавалось вырвать по часу-два на обдумывание кода и его написание. Порой даже не успевал сконцентрироваться и вспомнить, какая переменная для чего мне нужна.
Программирование пока рассматриваю просто как баловство, как кроссворд, над которым интересно поломать голову. После того, как Анон указал мне, что пользоваться регулярками для чисел- дурной тон, у меня случился фейспалм от того, что я сам до этого не додумался.
Я просто учусь, мне незнакомы нормы и приемы, кажущиеся тебе очевидными и базовыми.
https://ideone.com/8Rn7BN это нормальная проверка на палиндром или php не для меня?
если есть запрос в SQL типа такого "WHERE something LIKE %some%"
тут ясно как работакет LIKE %%.
А как что-то такого зделатть в парсинге JSON.
$wheredata = array(
"something" = %some внутри строки%)
ой, оказывается на английском палиндром будет palindromE, но теперь уже ничего не изменить
Ты словно не понимаешь про что я пишу. 2 недели даже в неспешном темпе это долго. Я не говорю, что ты должен алгоритм за секунду построить в уме и воплотить его в коде.
Для себя программирование это дело полезное, пригодится в любом случае, но лучше поеби мозги с решением задач из книги, которую я тебе скинул. Почитай книгу: грокаем алгоритмы. Программирование это не про написание кода, это про размышление как реализовать это в коде.
я так понимаю "официального" множественного наследования нет как такового, но в целом сделать возможно
я читал, что грокаем алгоритмы это очень слабая книга, типа для детей прям, она точно меня продвинет хоть насколько-нибудь к пониманию, как использовать программирование для решения задач?
если что я не он
>>1941269
кстати, вначале, когда только начал изучать программирование, задачи очень тяжело шли, у меня в школе/вузе не было никогда его, наверное поэтому
постепенно я начал решать их быстрее, потом начал удивляться, как вообще я мог так долго решать такую чепуху?
Если ты знаком с алгоритмами и структурами данных, то не нужна.
Оборачивать создание модели в метод сервиса? Переопределять метод create()? Или может поместить всю эту логику в еще в какое-то место, о котором я даже не подозреваю?
>что принято делать в ларавеле если логика создания модели сложнее
То же, что и не в ларавеле.
>Оборачивать создание модели в метод сервиса? Переопределять метод create()? Или может поместить всю эту логику в еще в какое-то место, о котором я даже не подозреваю?
Выносить куда-нибудь, например в сервисный слой. А в особо сложных случаях - в доменный слой
Если туго с алгоритмическим мышлением, можно порешать задачки, например с кодварса.
При решении задач сначала описываешь решение (хоть на бумаге), затем переводишь в код.
согласен, кодварс хорошая тема, можно в конце чужие решения прочекать, много нового узнаешь
>То же, что и не в ларавеле.
>Выносить куда-нибудь, например в сервисный слой.
Окей, спасибо за ответ. Изначально так и сделал.
Спасибо. Учту и ознакомлюсь с книгой, обязательно. Вообще, еще до того, как начал эту задачу, решил, что нужно расширить кругозор, а не просто задрачивать гайд Анона.
Скоро еще должен подъехать php 7 в подлиннике, на бумаге.
> можно в конце чужие решения прочекать, много нового узнаешь
Нашел там только говнокод и всякие хаки, которые делают код write-only
У меня рнр в подлиннике есть еще 5 версии. В 2009-2010 годах собирался вкатываться в программирование по ней))) 7 тоже покупал, но так и не вкатился.
>кажется что глупо их не использовать, если уж предоставляют такую возможность
Спорный момент. Фасады нужны для быстрой разработки, но они так же ухудшают поддерживаемость кода. Так что нужно знать, когда их применять.
>В итоге у меня все сервисы получаются статическими, это вообще нормально?
Можешь вместо использования фасадов явно инжектить свои сервисы куда надо
Простенькие примеры я выполнял через онлайн интерпретатор.
Окей, а как более правильно будет организовать доступ к базе данных, если не через фасады?
>Хочу научиться делать сайты на пыхе, в шапке про апач написано, можно ли через опенсервер пробовать скрипты выполнять?
Если речь про бекенд, то вот варианты:
- Встроенный php сервер
- XAMP
- OpenServer
- Docker
Выбирай любой удобный способ
Для выполнения консольных скриптов - соответственно из консоли запускаешь.
>И в чем писать код, в блокноте?
PHPStorm
Спасибо.
решал полчаса, шансы на вкат есть?
Речь про более высокий уровень. Не про "доступ к базе данных", а про "доступ к доступу к базе данных".
ООП программа - это гигантская матрешка. Каждый объект всегда вложен в другой. И если делать все по уму, то есть единый "чертеж" этой матрешки - конфиг. На самом старте приложение анализирует запрос пользователя и в соответствии с чертежом собирает нужную матрешку.
Если тебе нужен "доступ к базе" в твоем "охуенном сервисе", то ты указываешь это на "чертеже", в конфиге. И при сборке нужный объект будет доставлен в нужный сервис. Это дает дополнительные степени свободы, ты можешь меняя конфиг менять "доступ к базе" на "доступ к другой базе" или "доступ к файлу", не меняя ни строчки кода. Но разумееится чем сложнее здание, тем сложнее чертеж. Нужно понимать картину в целом и вообще получается дохуя когнитивной нагрузки.
Поэтому в ларавеле и придумали "фасады". Вообще фасад это неправильное название, по факту это сервис локатор, но все как-то привыкли. Фасад позволяет получить доступ к любой части матрешки напрямую, прямо здесь и сейчас, без чертежей и конфигов. Это быстро, думать нихуя не надо, знать о программе нихуя не надо. Но при этом никакой "картины в целом" больше не существует. Чертеж размазан по программе со всеми вытекающими последствиями. Если ты пишешь софт на заказ и больше его никогда не увидишь, то просто идеальный вариант. Поэтому собственно лара вообще и взлетела.
Спасибо за широкий ответ, он скорее относится к моему первому вопросу >>1942659
Второй вопрос >>1943331 как раз о низшем уровне. О том, что именно будет правильнее внедрять в сервис для доступа к БД. Не инстанс модели же?
Вообще, я был бы очень рад не задавать здесь дебильных вопросов, но нормальных примеров просто нету. В доках лары одни фасады.
Решил чекнуть опенсорсные проекты на ларе - так вообще веру в человечество потерял. В одних толстейшие контроллеры в которых по 50 use в самом верху. В других сервисы напрямую взаимодействуют с реквестом и т.д.
Если у кого-то есть пример хорошего кода на Laravel, буду очень признателен если поделитесь.
Что дальше?
Как запускать и тестировать файлы?
Я на первой работе писал логику в контроллер, на одну сущность один контроллер.
У тебя какая-то каша в голове.
Сначала где-нибудь пропиши логику, потом видно будет, куда её выносить, когда начнешь переиспользовать код
Если бы приходилось разгребать проекты, где вся логика в контроллерах, не задавал бы таких вопросов
Личинка прогера ползет к успеху в этом итт.
<?php
$money = 10000;
$years = 16;
for (;;){
$money += $money/10;
$years += 1;
if ($money >= 1000000){
break;
}
}
echo "Мы накопили {$money} за {$years} лет, поздравляем!" ;
Судя по тому, что ты написал, тебе надо скачать microsoft excel/1C.
https://github.com/codedokode/pasta/blob/master/forms.md
И что-то не могу до конца понять посыл ОПа. В плане того, что он предлагает нам сделать отдельный класс UserForm, хранить в нем сущность User, отдельный класс валидации и проводить валидацию непосредственно в классе UserForm после заполнения уже изначально невалидными данными.
Вот его пример:
$post = new Post;
$postForm = new PostForm($post, $postValidator);
Сначала заполняется изначально невалидными данными: $postForm->fill($_POST);
После он проверяет: $errors = $postForm->validate($post);
Какой смысл в том, чтобы изначально создавать объект, в котором уже находятся невалидные данные ? И что делать в случае, если у нас у сущности Post на свойствах стоят тайп хинты, тогда каким образом мы будем ее заполнять, если у нас прилетит вместо строки условно массив, при попытке записать в это свойство вылетит ошибка. Аноны, объясните, это я тупой и не понимаю, что пытается донести ОП или какой правильный подход в таких ситуациях
Тайп хинты на свойствах появились буквально вчера, раньше такого не было. Ну и у ОПа видно что пример сильно вдохновлён симфони формами, где один контроллер и отрисовывает форму по GET, и обрабатывает по POST, вот из-за этих вариантов и получается что интерфейс немного странно выглядит. Вообще лучше представить что объект $post или $user в таких примерах это не прям сущность из бд, а объект, который представляет поля формы, просто в несложных формах можно срезать и сделать это дело одной сущностью, чтобы потом руками не писать например $user->changeName($userForm->name) и т.д. (представь что таких полей много)
>Какой смысл в том, чтобы изначально создавать объект, в котором уже находятся невалидные данные ?
Если объект представляет собой данные из формы, а не настоящего юзера или пост, значит он может находиться в невалидном состоянии, просто для простоты в тех же доках симфони эти понятия совмещаются, всё херачится прямо в контроллере в нескольких ифах и как бы на этом ок. Когда у тебя очень много разных форм и сущностей то такой подход конечно намного быстрее
>Вообще лучше представить что объект $post или $user в таких примерах это не прям сущность из бд, а объект, который представляет поля формы
Так у ОПа там вроде бы идет явное разделение, что Post это сущность, а PostForm это объект, которые представляет именно данные из формы (в который непонятно зачем передается еще и сама сущность)
И как в итоге лучше делать в таких ситуациях, не убирать же тайп хинты ?
У меня есть идея, что у нас есть сущность, есть объект (данные, которые ожидаются из формы) в который мы передаем валидатор и сами данные, что-то вроде:
$postData = new PostData($validator, $_POST)
Там уже сразу проверяем, валидные данные или нет. Если все данные валидные, то заполняем свойства этими данными, а если нет, то заполняем к примеру свойство с ошибками. И вроде бы так же остается разделение ответственности валидации, о чем ОП и говорил, что валидации без разницы, какие данные она валидирует.
Потом уже проверяем, если это свойство пустое, то отправляем этот объект в сущность
$post = new Post($postData);
И делаем дальше необходимые действия. Правильный ли это подход ? Если нет, то как правильно это нужно сделать
ПОМОГИ
Запускать php tvoyFail.php
Можно поставить сервер и запускать, тестировать phpunit, но тебе далеко ещё и судя по тому какие вопросы задаешь и вовсе не придется
Зачем тебе PHP? Это мертвый язык, посмотри в любую статистику - например от хабра или dou. Оплата труда самая низкая после 1C, вакансий становится меньше, новых проектов меньше. Медианный опыт работы php разраба - 6 лет. Да и люди в этом треде как видишь злые, бесплатно хрен помогут тебе. Питон или js намного круче сейчас, даже сам Хауди Хо об этом говорит. Го к нам в питон тред: https://2ch.hk/pr/res/1943168.html#1944728 (М)
Тебе сперва надо SICP прочитать чтоб понимать что делаешь.
Наверняка за подобные вопросы
А IDE бы подсветила, что херню делаешь, присваивая одному свойству разные значения
Спасибо
>например с 7.4 до 8
В мажорных ломают обратную совместимость
>7.3 => 7.4
В минорных вводят новые фичи
Приведи пример кода
Объект вызывает метод, тот что-то возвращает, у этого чего-то вызывается метод, который тоже что-то возвращает и так далее.
https://en.wikipedia.org/wiki/Method_chaining
{
const PROFESSION_MANAGER = "Менеджер";
const PROFESSION_MARKETER = "Маркетолог";
const PROFESSION_ENGINEER = "Инжинер";
const PROFESSION_ANALISER = "Аналитик";
protected $name;
protected $profession; // Профессия работника
protected $rank = 1; // Ранг работника
protected $isLeader = ""; // Руководитель ли работник
protected $salary; // Зарплата работника
protected $coffeeConsumption; // Объём потребляемого сотрудником кофе в литрах
protected $papers; // Количество производимых работников отчётов
public function __construct($name, $profession, $rank, $isLeader)
{
$this->name = $name;
$this->profession = $profession;
$this->rank = $rank;
$this->isLeader = $isLeader;
if ($this->profession == Employee::PROFESSION_MANAGER)
{
$this->salary = 500;
$this->coffeeConsumption = 20;
$this->papers = 200;
}
elseif ($this->profession == Employee::PROFESSION_MARKETER)
{
$this->salary = 400;
$this->coffeeConsumption = 15;
$this->papers = 150;
}
elseif ($this->profession == Employee::PROFESSION_ENGINEER)
{
$this->salary = 200;
$this->coffeeConsumption = 5;
$this->papers = 50;
}
elseif ($this->profession == Employee::PROFESSION_ANALISER)
{
$this->salary = 800;
$this->coffeeConsumption = 50;
$this->papers = 5;
}
if ($this->rank == 2)
{
$this->salary = 1.25;
}
elseif ($this->rank == 3)
{
$this->salary = 1.50;
}
if ($this->isLeader == "Руководитель")
{
$this->salary = 1.50;
$this->coffeeConsumption = 2;
$this->papers = 0;
}
}
}
$ИванПетров = new Employee("Иван Петров", "Маркетолог", 1, "");
$ИванПетров2 = new Employee("Иван Петров2", "Маркетолог", 1, "");
$ИванПетров3 = new Employee("Иван Петров3", "Маркетолог", 1, "");
$procurementDepartment->workers = $ИванПетров;
$procurementDepartment->workers = $ИванПетров2;
$procurementDepartment->workers = $ИванПетров3;
var_dump($procurementDepartment->countAll());
{
const PROFESSION_MANAGER = "Менеджер";
const PROFESSION_MARKETER = "Маркетолог";
const PROFESSION_ENGINEER = "Инжинер";
const PROFESSION_ANALISER = "Аналитик";
protected $name;
protected $profession; // Профессия работника
protected $rank = 1; // Ранг работника
protected $isLeader = ""; // Руководитель ли работник
protected $salary; // Зарплата работника
protected $coffeeConsumption; // Объём потребляемого сотрудником кофе в литрах
protected $papers; // Количество производимых работников отчётов
public function __construct($name, $profession, $rank, $isLeader)
{
$this->name = $name;
$this->profession = $profession;
$this->rank = $rank;
$this->isLeader = $isLeader;
if ($this->profession == Employee::PROFESSION_MANAGER)
{
$this->salary = 500;
$this->coffeeConsumption = 20;
$this->papers = 200;
}
elseif ($this->profession == Employee::PROFESSION_MARKETER)
{
$this->salary = 400;
$this->coffeeConsumption = 15;
$this->papers = 150;
}
elseif ($this->profession == Employee::PROFESSION_ENGINEER)
{
$this->salary = 200;
$this->coffeeConsumption = 5;
$this->papers = 50;
}
elseif ($this->profession == Employee::PROFESSION_ANALISER)
{
$this->salary = 800;
$this->coffeeConsumption = 50;
$this->papers = 5;
}
if ($this->rank == 2)
{
$this->salary = 1.25;
}
elseif ($this->rank == 3)
{
$this->salary = 1.50;
}
if ($this->isLeader == "Руководитель")
{
$this->salary = 1.50;
$this->coffeeConsumption = 2;
$this->papers = 0;
}
}
}
$ИванПетров = new Employee("Иван Петров", "Маркетолог", 1, "");
$ИванПетров2 = new Employee("Иван Петров2", "Маркетолог", 1, "");
$ИванПетров3 = new Employee("Иван Петров3", "Маркетолог", 1, "");
$procurementDepartment->workers = $ИванПетров;
$procurementDepartment->workers = $ИванПетров2;
$procurementDepartment->workers = $ИванПетров3;
var_dump($procurementDepartment->countAll());
Ой извините...
<?php
error_reporting(-1);
class Department
{
public $workers = array();
public function countAll() // Считает зарплату, потребление кофе, производство бумаг и расход валюты на 1 бумагу
{
$salaryTotal = 0;
$coffeeTotal = 0;
$papersTotal = 0;
$moneyPerPaper = 0;
foreach ($this->workers as $employee)
{
$salaryTotal += $employee->salary;
$coffeeTotal += $employee->coffeeConsumption;
$papersTotal += $employee->papers;
}
$moneyPerPaper = $salaryTotal / $papersTotal;
$returnMassive = array(0 => $salaryTotal, 1 => $coffeeTotal, 2 => $papersTotal, 3 => $moneyPerPaper);
return $raturnMassive;
}
}
$procurementDepartment = new Department;
$sellDepartment = new Department;
$adDepartment = new Department;
$logisticDepartment = new Department;
class Employee
{
const PROFESSION_MANAGER = "Менеджер";
const PROFESSION_MARKETER = "Маркетолог";
const PROFESSION_ENGINEER = "Инжинер";
const PROFESSION_ANALISER = "Аналитик";
protected $name;
protected $profession; // Профессия работника
protected $rank = 1; // Ранг работника
protected $isLeader = ""; // Руководитель ли работник
protected $salary; // Зарплата работника
protected $coffeeConsumption; // Объём потребляемого сотрудником кофе в литрах
protected $papers; // Количество производимых работников отчётов
public function __construct($name, $profession, $rank, $isLeader)
{
$this->name = $name;
$this->profession = $profession;
$this->rank = $rank;
$this->isLeader = $isLeader;
if ($this->profession == Employee::PROFESSION_MANAGER)
{
$this->salary = 500;
$this->coffeeConsumption = 20;
$this->papers = 200;
}
elseif ($this->profession == Employee::PROFESSION_MARKETER)
{
$this->salary = 400;
$this->coffeeConsumption = 15;
$this->papers = 150;
}
elseif ($this->profession == Employee::PROFESSION_ENGINEER)
{
$this->salary = 200;
$this->coffeeConsumption = 5;
$this->papers = 50;
}
elseif ($this->profession == Employee::PROFESSION_ANALISER)
{
$this->salary = 800;
$this->coffeeConsumption = 50;
$this->papers = 5;
}
if ($this->rank == 2)
{
$this->salary = 1.25;
}
elseif ($this->rank == 3)
{
$this->salary = 1.50;
}
if ($this->isLeader == "Руководитель")
{
$this->salary = 1.50;
$this->coffeeConsumption = 2;
$this->papers = 0;
}
}
}
$ИванПетров = new Employee("Иван Петров", "Маркетолог", 1, "");
$ИванПетров2 = new Employee("Иван Петров2", "Маркетолог", 1, "");
$ИванПетров3 = new Employee("Иван Петров3", "Маркетолог", 1, "");
$procurementDepartment->workers = $ИванПетров;
$procurementDepartment->workers = $ИванПетров2;
$procurementDepartment->workers = $ИванПетров3;
var_dump($procurementDepartment->countAll());
Ой извините...
<?php
error_reporting(-1);
class Department
{
public $workers = array();
public function countAll() // Считает зарплату, потребление кофе, производство бумаг и расход валюты на 1 бумагу
{
$salaryTotal = 0;
$coffeeTotal = 0;
$papersTotal = 0;
$moneyPerPaper = 0;
foreach ($this->workers as $employee)
{
$salaryTotal += $employee->salary;
$coffeeTotal += $employee->coffeeConsumption;
$papersTotal += $employee->papers;
}
$moneyPerPaper = $salaryTotal / $papersTotal;
$returnMassive = array(0 => $salaryTotal, 1 => $coffeeTotal, 2 => $papersTotal, 3 => $moneyPerPaper);
return $raturnMassive;
}
}
$procurementDepartment = new Department;
$sellDepartment = new Department;
$adDepartment = new Department;
$logisticDepartment = new Department;
class Employee
{
const PROFESSION_MANAGER = "Менеджер";
const PROFESSION_MARKETER = "Маркетолог";
const PROFESSION_ENGINEER = "Инжинер";
const PROFESSION_ANALISER = "Аналитик";
protected $name;
protected $profession; // Профессия работника
protected $rank = 1; // Ранг работника
protected $isLeader = ""; // Руководитель ли работник
protected $salary; // Зарплата работника
protected $coffeeConsumption; // Объём потребляемого сотрудником кофе в литрах
protected $papers; // Количество производимых работников отчётов
public function __construct($name, $profession, $rank, $isLeader)
{
$this->name = $name;
$this->profession = $profession;
$this->rank = $rank;
$this->isLeader = $isLeader;
if ($this->profession == Employee::PROFESSION_MANAGER)
{
$this->salary = 500;
$this->coffeeConsumption = 20;
$this->papers = 200;
}
elseif ($this->profession == Employee::PROFESSION_MARKETER)
{
$this->salary = 400;
$this->coffeeConsumption = 15;
$this->papers = 150;
}
elseif ($this->profession == Employee::PROFESSION_ENGINEER)
{
$this->salary = 200;
$this->coffeeConsumption = 5;
$this->papers = 50;
}
elseif ($this->profession == Employee::PROFESSION_ANALISER)
{
$this->salary = 800;
$this->coffeeConsumption = 50;
$this->papers = 5;
}
if ($this->rank == 2)
{
$this->salary = 1.25;
}
elseif ($this->rank == 3)
{
$this->salary = 1.50;
}
if ($this->isLeader == "Руководитель")
{
$this->salary = 1.50;
$this->coffeeConsumption = 2;
$this->papers = 0;
}
}
}
$ИванПетров = new Employee("Иван Петров", "Маркетолог", 1, "");
$ИванПетров2 = new Employee("Иван Петров2", "Маркетолог", 1, "");
$ИванПетров3 = new Employee("Иван Петров3", "Маркетолог", 1, "");
$procurementDepartment->workers = $ИванПетров;
$procurementDepartment->workers = $ИванПетров2;
$procurementDepartment->workers = $ИванПетров3;
var_dump($procurementDepartment->countAll());
К этому моменту
$procurementDepartment->workers = $ИванПетров;
массив workers уже проинициализирован. Так что можешь смело пушить в массив свои работничков.
Ну и у пхп такое поведение, что при добавлении в непроинициализированный массив, он создаст новый массив хотя так лучше не делать, т.к. неявное поведение
AbstractA в конструкторе требует AbstractB. И если я в конструкторе A пропишу что аргументом должен быть не какой-нибудь AbstractB, а конкретно B, все будет хорошо работать и даже IDE ругаться не будет ( будет ругаться если не выполнить parent::construct($b) ).
Это нарушение LSP? Потому что если я проведу аналогичные действия не с конструктором, а каким-нибудь другим методом, выбрасывается Fatal Error: Declaration of A::method(B $b) must be compatible with BaseA::method(BaseB $b)
И еще вопрос. Возможно есть какой-нибудь паттерн, по которому я смогу осуществить желаемое ( не копипастить у множества классов одинаковые методы, которые отличаются лишь требуемым типом аргумента при неверном типе безоговорочно должно выбрасываться исключение )?
Вроде видел как в джаве что-то похожее через дженерики реализуется, но это не точно.
Принцип Лисков требует, чтобы объект-наследник мог использоваться в коде вместо предка. Принцип относится к использованию уже созданного объекта, а не к его созданию.
Поэтому конструкторы предка и наследника не обязаны быть совместимыми. Они могут быть абсолютно разными.
А вот обычные методы в наследнике должны быть совместимыми с предком. Потому нельзя при наследовании заменить тайп-хинт AbstractB на B - это сломает код, который передает в этот метод объект, отличный от B. Раз предок принимает такие объекты, то и наследник должен.
> Возможно есть какой-нибудь паттерн, по которому я смогу осуществить желаемое ( не копипастить у множества классов одинаковые методы, которые отличаются лишь требуемым типом аргумента
Боюсь, что такого в PHP нет.
ПОМОГИТЕ
Слово array в строке с ошибкой лишнее.
>>1945393
Плохо, когда код снаружи залезает внутрь объекта и что-то меняет в массиве. Тебе лучше сделать в классе Department метод addEmployee(Employee $e) и с его помощью добавлять работников, а прямой доступ к массиву $workers закрыть.
Вместо одной функции countAll(), которая считает все характеристики сразу, лучше сделать отдельные функции для подсчета зарплаты, кофе итд. А то получается, что нам нужно например только кофе, а возвращают массив с кучей лишних данных.
> $isLeader = ""
тут для обозначения, является ли человек лидером, лучше использовать значения типа bool, то есть true и false.
Далее, ты делаешь ошибку. Базовая ставка и итоговая (с учетом надбавок) зарплата - это две разные величины. Ты же не сохраняешь базовую зарплату, а хранишь только итоговую. Из-за этого тебе будет сложно пересчитывать зарплату при смене ранга или статуса босса.
>Слово array в строке с ошибкой лишнее.
Как я должен был это понять?
>Тебе лучше сделать в классе Department метод addEmployee(Employee $e)
Да, ты прав. Хороший совет.
>Из-за этого тебе будет сложно пересчитывать зарплату при смене ранга или статуса босса.
Почему?
Фуу, что хорошего в ноде? Нечитаемая лапша с 10 уровнями вложенности, везде уродливые промисы вместо линейного синхронного кода, по 10 анонимных функций вложены друг в друга. Нет тайп-хинтов, потому читать код невозможно. Нет private/protected, костыли (прототипы) вместо нормального ООП. Если ошибиться в написании свойства (this.errror), то никаких ошибок не выдастся. Нет Доктрины и Симфони, потому собирают из сотен библиотек самодельный фреймворк.
Не верится, что кто-то выберет это вместо PHP. Подозреваю, что на начальном этапе, где не требуется поддерживать или рефакторить код, на ноде еще как-то можно писать, но при появлении первых сложностей эти горе-работнички просто сбегут и оставят работодателя с кучей нечитаемого кода.
Запускать PHP лучше не двойным кликом (так как окно сразу закрывается), а из консоли. Вот урок про основы использования консоли: https://github.com/codedokode/pasta/blob/master/soft/cli.md
Судя по тексту ошибки, тебе надо установить Visual C Redistributable (распространяемый компонент Visual Studio, не саму Visual Studio) версии 14.28 или выше с сайта майкрософт.
Ссылки на него есть тут: https://support.microsoft.com/ru-ru/topic/последние-поддерживаемые-версии-visual-c-для-скачивания-2647da03-1eea-4433-9aff-95f26a218cc0
Выбери vc_redist.x64.exe или vc_redist.x86.exe в зависимости от разрядности (32-битный или 64-битный) PHP. Если не уверен, можешь поставить оба.
>Нечитаемая лапша с 10 уровнями вложенности
Как напишешь - так и будет.
>везде уродливые промисы вместо линейного синхронного кода, по 10 анонимных функций вложены друг в друга
Наверное даже именно поэтому в 8 версию пхп не завезли поддержку стрелочных фукнций. Ой падажжи...
>Нет private/protected
А ты каждый объект рвёшься вывернуть наизнанку или документацию к библиотеке не читаешь?
>костыли (прототипы) вместо нормального ООП
Тайпскрипт, алло.
>Нет Доктрины и Симфони, потому собирают из сотен библиотек самодельный фреймворк.
>Симфони
Который сам по-сути набор независимых библиотек? Неожиданно.
>( не копипастить у множества классов одинаковые методы, которые отличаются лишь требуемым типом аргумента при неверном типе безоговорочно должно выбрасываться исключение )?
Не совсем понятно что ты имеешь ввиду. У меня сильное подозрение, что у тебя что-то пошло не так с архитектурой.
>В плане того, что он предлагает нам сделать отдельный класс UserForm
Логично же для представления набора данных из формы сделать объект. Нам ведь надо как-то их хранить, передавать на проверку. Не использовать же для этого массив. Если данные правильные, то мы их перенесем в User, если нет - выведем форму с этими данными для исправления ошибок.
Мы не всегда можем для этого использовать User, так как набор полей и их значения в форме могут отличаться (например: в форме может быть меньше или больше полей, чем в сущности. Или в форме есть 2 поля ввода пароля, а в сущности - только поле с хешем от пароля).
Если список полей в User и в форме совпадают, то в принципе может хранить данные формы в объекте User, без использования UserForm.
Так (отдельные классы для сущности и для формы) сделано в Симфони, правда там сам класс формы один для любых форм, отличается только конфиграция этого класса.
> Сначала заполняется изначально невалидными данными
Они могут быть и валидными. Мы это не знаем, пока не проверим их.
> Какой смысл в том, чтобы изначально создавать объект, в котором уже находятся невалидные данные ?
Мы создаем объект, в котором хранятся введенные пользователем данные, они могут быть валидные или нет.
> И что делать в случае, если у нас у сущности Post на свойствах стоят тайп хинты, тогда каким образом мы будем ее заполнять, если у нас прилетит вместо строки условно массив, при попытке записать в это свойство вылетит ошибка.
Мы принудительно преобразуем значение в строку с помощью strval(). Ведь мы знаем, какие типы полей в нашей форме и знаем, что это поле является строкой, а если пришла не-строка, то это не данные из формы, а хакер ищет уязвимости. Потому мы принудительно преобразуем данные в строку в любом случае.
В простейшем варианте код в UserForm может выглядеть так:
public function fill(array $data)
{
$this->name =strval($data['name'] ?? '');
...
}
В более сложном случае мы можем не писать руками эти присваивания, а использовать библиотеку JMSSerializer или Symfony Serializer, которая умеет заполнять объект свойствами из массива с преобразованием типов (типы прописываются в объекте как аннотации).
>>1944161
> Ну и у ОПа видно что пример сильно вдохновлён симфони формами, где один контроллер и отрисовывает форму по GET, и обрабатывает по POST
Это самый логичный способ, если мы используем не-аяксовые формы, да и в аяксовых формах он позволяет уменьшить объем кода и дублирование.
>>1944181
> а PostForm это объект, которые представляет именно данные из формы (в который непонятно зачем передается еще и сама сущность)
Идея была в том, что если у тебя в форме 5 полей совпадают с полями сущности, а 2 поля отличаются, то можно в PostForm хранить только эти 2 поля, а оставшиеся 5 полей хранить прямо в Post (для чего он и передается в PostForm).
Также, в этом случае мы можем написать основной валидатор, чтобы он проверял объект Post (и был независим от формы), и небольшой дополнительный валидатор для 2 оставшихся полей формы, которых нет в Post.
Момент с валидацией тут основной. Если мы напишем валидатор для PostForm, то мы получим намертво привязанный к форме валидатор, которым нельзя проверять приходящие из других источников объекты Post, например, из БД. Потому валидатор лучше делать для объекта Post. И для этой цели Post вкладывается в PostForm - чтобы можно было передать его валидатору.
Иногда бывает еще сложнее, часть правил относится к любым объектам Post, а часть правил валидации относится только к этой форме (то есть их можно нарушать, например, при создании объекта программно). Тут тоже приходится делать 2 валидатора: для Post и для PostForm.
> Там уже сразу проверяем, валидные данные или нет. Если все данные валидные, то заполняем свойства этими данными, а если нет, то заполняем к примеру свойство с ошибками
Тут минус в том, что валидатор намертво привязан к форме и не может проверять данные из других источников.
> $post = new Post($postData);
Тут косяк в том, что с таким конструктором Post намертво привязан к форме (PostData) и невозможно создать его без формы, например, программно.
>В плане того, что он предлагает нам сделать отдельный класс UserForm
Логично же для представления набора данных из формы сделать объект. Нам ведь надо как-то их хранить, передавать на проверку. Не использовать же для этого массив. Если данные правильные, то мы их перенесем в User, если нет - выведем форму с этими данными для исправления ошибок.
Мы не всегда можем для этого использовать User, так как набор полей и их значения в форме могут отличаться (например: в форме может быть меньше или больше полей, чем в сущности. Или в форме есть 2 поля ввода пароля, а в сущности - только поле с хешем от пароля).
Если список полей в User и в форме совпадают, то в принципе может хранить данные формы в объекте User, без использования UserForm.
Так (отдельные классы для сущности и для формы) сделано в Симфони, правда там сам класс формы один для любых форм, отличается только конфиграция этого класса.
> Сначала заполняется изначально невалидными данными
Они могут быть и валидными. Мы это не знаем, пока не проверим их.
> Какой смысл в том, чтобы изначально создавать объект, в котором уже находятся невалидные данные ?
Мы создаем объект, в котором хранятся введенные пользователем данные, они могут быть валидные или нет.
> И что делать в случае, если у нас у сущности Post на свойствах стоят тайп хинты, тогда каким образом мы будем ее заполнять, если у нас прилетит вместо строки условно массив, при попытке записать в это свойство вылетит ошибка.
Мы принудительно преобразуем значение в строку с помощью strval(). Ведь мы знаем, какие типы полей в нашей форме и знаем, что это поле является строкой, а если пришла не-строка, то это не данные из формы, а хакер ищет уязвимости. Потому мы принудительно преобразуем данные в строку в любом случае.
В простейшем варианте код в UserForm может выглядеть так:
public function fill(array $data)
{
$this->name =strval($data['name'] ?? '');
...
}
В более сложном случае мы можем не писать руками эти присваивания, а использовать библиотеку JMSSerializer или Symfony Serializer, которая умеет заполнять объект свойствами из массива с преобразованием типов (типы прописываются в объекте как аннотации).
>>1944161
> Ну и у ОПа видно что пример сильно вдохновлён симфони формами, где один контроллер и отрисовывает форму по GET, и обрабатывает по POST
Это самый логичный способ, если мы используем не-аяксовые формы, да и в аяксовых формах он позволяет уменьшить объем кода и дублирование.
>>1944181
> а PostForm это объект, которые представляет именно данные из формы (в который непонятно зачем передается еще и сама сущность)
Идея была в том, что если у тебя в форме 5 полей совпадают с полями сущности, а 2 поля отличаются, то можно в PostForm хранить только эти 2 поля, а оставшиеся 5 полей хранить прямо в Post (для чего он и передается в PostForm).
Также, в этом случае мы можем написать основной валидатор, чтобы он проверял объект Post (и был независим от формы), и небольшой дополнительный валидатор для 2 оставшихся полей формы, которых нет в Post.
Момент с валидацией тут основной. Если мы напишем валидатор для PostForm, то мы получим намертво привязанный к форме валидатор, которым нельзя проверять приходящие из других источников объекты Post, например, из БД. Потому валидатор лучше делать для объекта Post. И для этой цели Post вкладывается в PostForm - чтобы можно было передать его валидатору.
Иногда бывает еще сложнее, часть правил относится к любым объектам Post, а часть правил валидации относится только к этой форме (то есть их можно нарушать, например, при создании объекта программно). Тут тоже приходится делать 2 валидатора: для Post и для PostForm.
> Там уже сразу проверяем, валидные данные или нет. Если все данные валидные, то заполняем свойства этими данными, а если нет, то заполняем к примеру свойство с ошибками
Тут минус в том, что валидатор намертво привязан к форме и не может проверять данные из других источников.
> $post = new Post($postData);
Тут косяк в том, что с таким конструктором Post намертво привязан к форме (PostData) и невозможно создать его без формы, например, программно.
Поставь уже phpstorm. Пусть он тебя по рукам за кривой синтаксис бьет
Здесь непонятно волшебное число 10. Лучше сделать переменную $percent = 0.1 и использовать ее для читаемости. Вместо $years += 1 можно писать $years++; Условие $money < 1000000 можно поместить в заголовок цикла и тогда if будет не нужен.
>>1943629
Проблема кода в контроллерах в том, что его нельзя повторно использовать (вызывать откуда-то). Например, у тебя есть в контроллере код простановки лайка. Из-за того, что он в контроллере, обрабатывает данные из $_POST, $_COOKIE, $_SESSION ты не можешь вызвать этот код из другого места, чтобы программно поставить лайк.
А вот если бы он был в сервисе и изолирован от $_POST и тд, то его можно было бы вызывать откуда угодно. И тестировать проще. И читабельность выше.
Редактор кода должен знать, где находится PHP, чтобы иметь возможность его запускать.
Тут описано, где прописать путь к PHP в базовой конфигурации (без плагинов): https://code.visualstudio.com/docs/languages/php Это, правда, годится только для проверки кода по мере набора.
Чтобы запускать PHP программу одной кнопкой F5, надо прописать другие настройки. А в них путь к PHP. Как, описано тут: https://www.codewall.co.uk/how-to-run-php-code-directly-in-the-visual-studio-code-console-terminal/
Злоупотребление фасадами может навредить. Ну представь, ты решил написать сервис для простановки посту лайка, но в коде сервиса обращаешься глобально к функциями вроде session(), фасадам Auth, Cookie, Request. Тогда твой код нельзя будет повторно использовать (вызвать, чтобы программно поставить лайк), так как он завязан на реквест и сессию, которых может не быть при запуске в командной строке.
Лучше было бы передавать нужные параметры (вроде текущего пользователя) явно через аргументы.
> О том, что именно будет правильнее внедрять в сервис для доступа к БД. Не инстанс модели же?
Если тебе нужен прямой доступ к БД , то внедрять надо объект Illuminate\Database\Connection (взял из таблицы отсюда: https://laravel.com/docs/8.x/facades#facade-class-reference )
Строки 5-9 дублируют то, что написано в цикле и не нужны. Код должен корректно работать и без них. Не нужен отдельный код для первого месяца.
Имя функции лучше начинать с глагола. Имена переменных начинаются с маленькой буквы.
В остальном, решено верно.
>>1941619
Решение неправильное. Во-первых, нельзя пытаться получить букву из строки с помощью скобок: $text[$i]. Это возвращает не i-ю букву, а байт, а одна буква может состоять из нескольких байт. Вот урок про это: https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
Далее, это неправильное сравнение: if ($count == $words) так как ты сравниваешь число совпавших букв с числом слов в тексте. Они не обязаны быть равны.
>>1941844
Выглядит верно.
>>1941729
Можно писать WHERE JSON_VALUE(....) = '....'. Функция JSON_VALUE выделяет один элемент из JSON-объекта.
>>Слово array в строке с ошибкой лишнее.
> Как я должен был это понять?
Ты должен знать синтаксис PHP или использовать проверку в редакторе кода, которая подчеркнет ошибку. Слово array использовалось в старых версиях PHP для создания массива, например array(1, 2, 3) (сейчас пишут просто [1, 2, 3]), непонятно, зачем оно там вписано в коде.
>>Из-за этого тебе будет сложно пересчитывать зарплату при смене ранга или статуса босса.
> Почему?
Ну попробуй сейчас в Employee сделать метод changeRank() и чтобы после его вызова все зарплаты, кофе, страницы пересчитывались корректно. У тебя вряд ли получится, так как в некоторых случаях ты сбрасываешь this->papers в ноль и теряешь исходное значение числа произведенных страниц.
>>1945743
>> Нет private/protected
> А ты каждый объект рвёшься вывернуть наизнанку или документацию к библиотеке не читаешь?
А у тебя к каждому объекту отдельная документация, где написано, что с ним можно делать и что нельзя? В PHP неправильный доступ невозможен на уровне языка.
Когда научат нейросети угадывать, что на самом деле нужно заказчику.
Пока это даже людям неподвластно
На лендингах
интересная ката, помогает потихоньку осиливать встроенные функции методы? strtr/str_replace и всё такое, но можно и через циклы (как я и решил, так как очередной вкатун)
Нейросеть - это же не искуственный интеллект, который будет за тебя работать. Это просто алгоритм, который обучают при подаче на вход набора чисел выдавать на выходе другой набор. Так что генерировать твоя нейросеть сможет только то, что в нее перед этим заложили.
понял, спасибо
На самом деле у меня других вариантов нет, я живу в городе 300к населения и в городе мало контор, и чтобы вырваться в мск и другие сферы программирования, я должен хоть с чего-нибудь начать, хотя бы с веба
изучай
>Подскажите, пожалуйста, сколько примерно времени у меня может уйти на изучение стека PHP, JS, MySQL на базовом уровне, если я буду заниматься ежедневно по 6-8 часов?
У всех очень по-разному идёт. Непонятно как у тебя вообще с ИТ и информатикой, какой бэкграунд, как быстро обучаешься, способность к самообучению и тд. Неясно так же что подразумевается под "на базовом уровне" - на этом уровне ты никакую работу уже не найдёшь, скорее всего.
Просто дай себе месяц регулярных ежедневных занятий, а там посмотри - нравится или нет.
>Пока только освоил HTML/CSS.
С этим тоже осторожнее - я такое слышал от таких, которые по-факту ничего не умеют и работу им не доверить.
>дай себе месяц регулярных ежедневных занятий
И не по 6-8 часов. Сдуру и хуй сломать можно. По 2 часа 5\7 будет за глаза - больше и не надо.
что при любом занесении к-л изменений в БД,
после этого идет код, где в сессии запихиваем то,что запихивали в БД,чтобы потом лазя по страничкам все было сохранено?
В чем ее профит?
Тред уже в бамплимите.
Я думаю, что неправильно. Зачем дублировать данные, помещая их и в базу данных, и в сессию? А обновлять и удалять ты тоже в двух местах сразу будешь? Бред какой-то.
Сессия вообще ненадежное место для хранения данных. Если человек зайдет на сайт с другого компьютера, то у него будет новая пустая сессия. Потому те данные, которые надо сохранять надежно и надолго, стоит помещать в БД.
так они и так в бд.
вот я вхожу на сайт,аутентификатор ищет меня,а потом извлекает из бд имя,фамилию,город в сессию,что бы была страничка юзера(как в ВК)
Эта уязвимость давно уже неактуальна, она возможно только если разрешить передавать id сессии через GET-параметры (/script.php?SESSION_ID=1234). Сейчас по умолчанию это отключено и уязвимость не сработает, если только специально не поменять настройки.
При этом, session_regenerate_id никак от этого не спасет.
>>1947771
Это можно делать при разлогинивании (или при логине) пользователя. Чтобы при новом входе получалась гарантированно новая сессия.
>>1947923
Что тебе мешает брать эти данные из БД? Зачем их дублировать в сессии? Дублирование только усложняет жизнь, например, если пользователь поменяет имя, надо менять его и в сессии.
Если хочется кешировать данные, то для этого есть редис, который с кешированием справляется гораздо лучше, чем сессия которая по дефолту хранит данные в файлах.
По моему, так это глупая идея.
>Сейчас по умолчанию это отключено и уязвимость не сработает, если только специально не поменять настройки.
Но ведь PHPSESSID передается в куках, а куки можно украсть.
Чтобы украсть куки, нужна либо XSS-уязвимость в приложении, либо получить доступ к компьютеру.
Если ты можешь украсть куки, ты и любые запросы можешь делать от имени пользователя. Session fixation тебе просто не нужна. Ну и regenerate_session_id тут никак не поможет.
>По моему, так это глупая идея.
везде для начинающих именно такой подход.
про кеширование я вообще не знаю
Допустим, у нас есть таблицы
Cart (id, user_id, session_id, name, email, phone, address)
и
Cart_item (id, product_id, cart_id, quantity)
Вот юзер зашёл на сайт, стартовала сессия, в куку записали session id. Юзер нажал "добавить в корзину" некий товар. Сработал аякс(!) скрип и в специальный аякс контроллер ушёл запрос на добавление. Контроллер проверяет, существует ли для этого session_id запись в Cart, если не существует, то создаёт. Ок, на этом этапе всё вроде более-менее логично. Но дальше надо проверить, существует ли уже такой заказ в Cart_item? Если нет, со создать, если есть, то инкрементировать в нём quantity. То есть из аякс контроллера управлять Cart_item моделью. Херня какая-то. Или это норма? То же самое с уменьшением количества, нужно либо уменьшить quantity, либо (если оно было равно 1) вообще удалить всю запись из Cart_item.
Однако, это же круд получается. Добавить/редактировать/удалить сущность. И, по идее, для этого нужно использовать рест контроллер. Аякс рест контроллер. Но таких нет. Я нагуглил решение на мидлвере https://coderoad.ru/28970350/Как-сделать-restful-ajax-маршрутами-к-методам-в-Laravel-5 ,но эта ссылка чуть ли не единственная. Поэтому у меня ощущение, что я что-то делаю глобально не так. А как надо?
А что смущает конкретно? Я не понял.
Вообще в контроллере логично создавать модели и управлять ими.
Для красоты можешь в класс Cart добавить метод addItem() и внутри него уже делать операции с CartItem.
Смущает то, что фактически я пишу рест контроллер, когда они есть из коробки. Но только обычный, без аякса. Вот и подумал, что пишу велосипед.
А в коробочном РЕСТ-контроллере для экшонов можно задать поведение, чтобы отдавать результат в ajax-формате? JSON какой-нибудь.
Задать-то можно, но фишка рест контроллера в том, что он оперирует с пост/пут/патч/делет реквестами (то есть, роутер посылает автоматически нужный тип запроса к нужному методу контроллера). А аякс только пост посылает. Вот как раз прикручиванию этого костыля пример по сылке выше и посвящён.
А зачем тебе нужна вообще РЕСТ-концепция в твоем проекте?
>Однако, это же круд получается. Добавить/редактировать/удалить сущность. И, по идее, для этого нужно использовать рест контроллер. Аякс рест контроллер. Но таких нет.
Ты пытаешься понять то, что тебе сейчас не нужно. У тебя есть урл, и его програмный обработчик, это твой route. Дальше ты можешь делать что угодно. В твоём кейсе, у тебя есть какой-то CartController, и у него много разных методов, например addItem(item_id),
incrementItem(item_id) и т.д. Ты у себя в рутах и пишешь что-то на уровне Route::post('cart/add', 'CartController@addItem'), понятное дело с разными проверками на авторизацию(это можно писать прямо в контроллере, можно выносить в мидлвары и группировать руты как AuthOnly, суть ты понял. В самом контроллере делаешь что тебе нужно. Если ты знаешь что твой CartController@addItem будет вызываться только через аякс, то возвращаешь json ответ, если не только через аякс, то можно сделать проверку в самом конце обработчика вроде if ($request->wantsJson()) { ... } else { redirect(...) }, wantsJson вроде проверяет как и Accept заголовок, так и Requested-With: XMLHttpRequest, можешь вообще явно на каждый рут передавать доп. параметр вроде format, который по дефолту равен html. Если тебя смущает то, что ты базу дрочишь прямо в контроллере, то не смущайся, если хочешь то сделай отдельный сервис(отдельный пхп класс в отдельной папочке, у которого может быть или небыть богатая логика и вот это всё) и дергай всё через него
<!DOCTYPE HTML>
<html>
<head>
<title>Список студентов</title>
<meta>
</head>
<body>
<? echo $_SERVER['HTTP_USER_AGENT'];?>
</body>
</html>
Погоди немного, всего 1000 постов.
>>1948299
Вообще, запросы на увеличение/уменьшение кол-ва - плохая идея, так как они не идемпотентны (если произойдет ошибка и запрос отправится повторно, то кол-во товара изменится 2 раза). Лучше слать запрос вида "задать кол-во товара X равным Y". Его можно повторять сколько угодно раз и ничего не изменится. Также, надо сделать валидацию, что такой товар существует, что его достаточно в наличии.
Операцию изменения количества наверно правильнее сделать в сервисе. Потому что завтра тебе захочется, например, добавлять в корзину подарок и как ты это будешь делать? Код в контроллере не повторно используемый, а сервис можно будет вызвать для добавления подарка.
Я думаю, просто кто-то один придумал такой подход и все его бездумно копируют. Наверно, первоначально идея была в том, чтобы снизить нагрузку на базу за счет кеширования данных в сессии. Но по моему, так это корявый подход, а для кеширования лучше использовать более подходящие движки вроде redis.
Более того, в учебном приложении, которое ты делаешь только для себя, большой нагрузки никогда не будет.
Хороший учебник должен объяснять, зачем это делается, а не предлагать копировать код, не понимая, зачем он нужен.
> Yii?
Yii безбожно устарел + там хватает своих неочевидностей и магии.
Если хочется окунутся в легаси 10летней выдержки, то бери этот фреймворк, работы на наш век хватит
>А какой РНР-фреймворк быстрее всего изучить для нуба?
Зависит от твоего подхода к разработке.
Если склонен к хуяк-хуяк, то ларавел.
Если к тырпрайзу - симфони
В простейшем случае можно ограничится одним полем в таблице юзеров is_admin, можно поставить enum или даже внешний ключ на список ролей.
Можно завести систему ролей и прав RBAC (права к ролям, роли к юзерам).
>для админа.где нибудь ссылка мелким шрифтом на основной странице внизу,которая переведет на форму ввода его логин(мыло) и пароль
Ну сделай так. Либо просто отдельным роутом вида site.com/admin без явно кнопки/ссылки если юзеру не положено знать про админку
> можно поставить enum или даже внешний ключ на список ролей.
>шта?
enum в таблице user поле role и варианты: user, admin
либо вынести доступные роли в отдельную таблицу user_role
в ней будет 2 записи - роли user и admin
в таблице user поле role_id fk на таблицу user_role
Сам решил вот так:
echo preg_replace('#a[^\\sa]+a#', '!', 'aba acacca azzza wwwwa aaa');
Что скажете? Я что-то не так понял, или все-таки я сделал правильно?
не user_role, а просто role
>enum в таблице user поле role и варианты: user, admin
либо вынести доступные роли в отдельную таблицу user_role
в ней будет 2 записи - роли user и admin
в таблице user поле role_id fk на таблицу user_role
как эта тема называется(хочу почитать)
Это основы реляционных баз данных
$sth = $pdo->prepare('SELECT* FROM users');
$sth->execute();
$sth->setFetchMode(PDO::FETCH_ASSOC);
while($row=$sth->fetch()){
$id=$row['id'];
$login=$row['login'];
$email=$row['email'];
}
почему он выводит только одно поле?
}
через foreach тоже самое
>foreach ( $model->all() as $model )
То эта функция будет вызываться при каждой итерации. Это правда?
https://ideone.com/zNbOoQ
Да нет, один раз вызывается и потом крутит в foreach результат функции.
Суть такова - есть приложуха на slim, пытался васянить чистую архитектуру, active-domain-responder, eloquent ORM, но получилась хуита такого плана - экшены вызывает сервис из слоя домен, а в сервисе у меня полнейший венегрет. Я стараюсь делать провайдеры которые в сервисе вызываются, и которые в себе уже вызывают ORM классы ( которые у меня в отдельной папке в условно одну кучу, так как нужны в каждом сервисе).
Но чет мне это все не нравится.
Че почитать что бы правильно сделать.
Про всякие "сущности" вообще нихуя не понимаю.
Недавно, ради интереса и опыта, связался с одним челом, который предложил вместе сделать сайт - типа он верстает, а я сделаю функционал и натяжку его вёрстки. Мне делать было нех и я согласился неглядя. Ну там речь шла о небольшом блоге-статейнике, как мы с ним уговорились.
Первые звоночки прозвенели когда он начал рассказывать какие сайты как много зарабатывают, не сверстав даже главную. Потом он начал мочить по функционалу - какой-то форум захотел, разделы блядь, ещё какую-то неведомую срань. Как выяснилось этот перец вообще ни в зуб ногой по сайтам и вебдеву и тупо копирует увиденное у других.
Ну а потом он дал свою вёрстку - чтобы её натянуть мне нужно будет всё перевёрстывать т.к. она запилена в каком-то визуальном редакторе под другую CMS. Я ему предлагал тупо взять левый дизайн и вёрстку и делать на ней, но он сам хочет верстать.
Теперь вопрос - как мне его слить по-тихому? Я придумал пока 2 варика: 1 - ебать ему мозг правками по вёрстке пока сам не свалит, 2 - сказать ему прямо, что я ебал работать с его материалом и без чёткого плана он составить его точно не сможет. Что лучше?
>active-domain-responder
Какой ещё ADR, если Слим на MVC работает? Сдаётся мне, что ты не совсем понимаешь что делаешь - для ADR сам фрейм пиши. Да и вообще он бесполезная хрень, если подумать - в норме контроллеры тонкие, и если ещё и разделять на экшон и респондер логику, то там по 2 строчки кода будет. И по 25 бойлерплейнта из неймспейсов и структур ООП.
Из контроллера вызывай сервис, где содержится логика работы приложухи. Всё.
>Работаешь бесплатно?
Думал попрактиковаться немного, и, если получится, то сесть на поддержку этого сайта. Теперь хуй подпишусь на такое - гемор один.
зачем такой "коллега" нужон? капец, что сложного просто сверстать адаптив 1 страницы за день? даже не зная ничего не уйдет больше трех дней
короче, тебе проще самому взять все сверстать и натянуть это дело, как нравится
>зачем такой "коллега" нужон?
Я подразумевал, что он ещё и контент пилить будет - сайт по тематике которую он знает.
>что сложного просто сверстать адаптив 1 страницы за день? даже не зная ничего не уйдет больше трех дней
Ну вот он не знает и верстает 3 дня одну страницу, а на выходе меню из <label> без <a>, стили впердолены прямо в разметку блоками, причём перекрывая друг-друга мне это разгребать весь день придётся при натяжке, 2 футера и прочий трэш, который хочется развидеть.
>проще самому взять все сверстать и натянуть это дело, как нравится
Я джва раза предлагал взять\украсть нормальную вёрстку. Он морозится. Но зато постоянно скидывает сайты и спрашивает - сложно ли их делать, будто мне делать нех кроме как оценивать чужую разработку.
Не связывайтесь с нулевыми, Иваны.
>>Сдаётся мне, что ты не совсем понимаешь что делаешь - для ADR сам фрейм пиши.
Так и есть, если не в напряг распиши в чем суть ADR? Или статью какую.
Я когда пердолился со слоистой архитектурой, особенно как пример отделения логики приложения от реализации БД - вроде как типа понял. Но потом дошел до реализации, с ORM моделями елоквента ( в которых как часто в гайдах и показывают - какая то бизнес-логика живет обычно ) - и понял что хуита у меня а не слои.
>в чем суть ADR?
Там методы из контроллера в объекты инкапсулируются, которые и вызывают бизнес-логику, потом результат уже отдают респондеру, который подгружает шаблон и тд. Я сейчас даже не вспомню конкретику.
Такое есть смысл пилить при толстых контроллерах - чтобы их хоть как-то разгрузить, а при тонких если писать нормально это не имеет смысла. В тонких только валидация реквеста, отработка логики приложения и формирование ответа, что там отдельно выносить?
>статью какую
Я в гугле неплохие статьи находил.
>ORM моделями елоквента ( в которых как часто в гайдах и показывают - какая то бизнес-логика живет обычно
Я туда только всякие небольшие преобразования данных пишу, вроде вывода отформатированной даты. Не любитель я всё в модель пихать - через сервисы\менеджеры делаю.
Не делает никто так, как на скрине.
Данные берутся из каких-то источников. Например, можешь представить, что тебе пришел json с сотрудниками - парси из json-а
Я новичок. Объясни как сделать это со стандартным php 8.0, без джсонов и факеров.
Запихуть 16 сотрудников в массив объекта в наиболее компактной и удобной форме.
>>если я буду заниматься ежедневно по 6-8 часов?
Ох уж эти фантазии. Я все это проходил.
Чел если ты до сего момента не имел подобного опыта и дисциплины на это - у меня для тебя оче плохие новости.
Через пару лет "обучения" ты вдруг поймешь что проебывался 70% времени, и это еще хорошо. Потому что скорее всего забьешь хер.
Скинь, если не сложно, как у тебя все это организованно. Хоть кривой жепег картинкой.
Где сервисы хранишь, каждый сервис уникален для отдельного контроллера? Но полюбасу есть такие которые инкапсулируют общуюю какую то логику. Их в отдельном общем каталоге? А потом от них наследуешь сервис для конкретного контроллера?
А то у меня уже ORM моделей наплодилось блядь. И в разных "контроллерах" постоянно почти одинаковые вещи всплывают, типа получить выборку по модели, с определенным набором отношейний.
По хорошему нужно какую то прослойку сделать, в которой будут какие то общие бизнес-логические задачи реализовываться, а орм-ки будут в этой прослойке. Что то типа "сущности", но пока что как то не понятно.
А еще вопрос, если не брать в расчет контейнеры зависимостей, которые через рефлексию подтягивают все зависимости, типа PHP-DI, и не брать в расчет пимпл, который есть сревис локатор - получается низкую связность можно организовать чем то типа фабрик с тайпхинтами?
на последний вопрос если что можешь не отвечать, понимаю что это чето совсем не конкретное, это больше мысли в слух
Никак компактнее не сделаешь. У тебя объекты не объединены никак, так что по ним не пройти как по коллекции.
Можно сразу создавать объекты и писать в массив:
$employes = [
new Employe(...),
new Employe(...),
...
]
Либо так же как создал 16 строками, еще 16 строками запихнуть в массив
Из БД я формирую статистический отчет. Это пост запрос из формы с кучей праметров. Сервис обрабатывает запрос и возвращает результирующий массив. Далее мне необходимо сделать две вещи - вывести данные клиенту на страницу, и сформировать эксель файл.
С выводом данных клиенту нет особых вопросов.
С формированием файла проблем тоже нет, делаю либой PHPSpreadsheet.
Непонятка с тем как управляться с этими созданными эксель-файлами, и как их удалять с сервера.
По логике выглядит так - отправляю запрос ajax-ом, запрос достает данные из БД, формирует эксель-файл, сохраняет его в отдельный каталог на сервере. А клиенту возвращаются данные и ссылка на этот эксель файл, на скачивание. Вопрос первый - уникальность имени сохраненного файла, так как все файлы в одном каталоге - то имена должны быть уникальны. Но уникальные рандомные симфолы - это не красиво как то. Второе как удалять? Кроном запускать скрипт который данный котолог проверяет, и удаляет файлы отчетов дата создания которых старше чем 15 минут. Это то что я сделал.
Но может иные более оптимальные варианты есть?
и кстати , сколько на свободном рынке стоит такой небольшой сервис, в котором зареганные пользователи создают записи,с разными данными, а потом эти записи достаются статистическими запросами, по разным полям записи, для сотрудников небольшого бизнеса сделал. Типа в системе записывается некая работа, и расходники которые на нее потрачены. Потом по этим работам, по исполнителям, по расходникам и т.п. стат. отчеты за период по времени
>Но уникальные рандомные симфолы - это не красиво как то.
таймстеп + пару рандомных символов как вариант
>Второе как удалять? Кроном запускать скрипт который данный котолог проверяет, и удаляет файлы отчетов дата создания которых старше чем 15 минут. Это то что я сделал.
Норм, если уверен что данные формируются быстро <1с то можно на лету генерить не сохраняя никуда(ссылка скачать превращается в форму), но лучше так не делать
>котолог
$ИваныПетровы[] = new Empolye(...);
$ИваныПетровы[] = new Empolye(...);
...
$ИваныПетровы[] = new Empolye(...);
Я возьму фейкер и нагенерю скок хочешь.
А тот анон не может в фейкер и будет сидеть построчно выводить $employe138542 = new Zalupa(hui, vkachus);
Убери форич и твой код сломается
Близко
>как у тебя все это организованно
Сервисы делаются элементарно - есть у тебя толстый контроллер, где ты с моделями делаешь манипуляции всякие непотребные. Так убери эти манипуляции в метод какого-то класса. Этот класс и будет сервисом. А в контроллере просто вызывай этот метод с нужными параметрами. В результате таких манипуляций с кодом в архитектуре появится слой сервисов, который содержит всю логику приложения, а контроллеры только обрабатывают запросы.
>если не брать в расчет контейнеры зависимостей
>можно организовать чем то типа фабрик с тайпхинтами?
Контейнеры и есть фабрики. Но так да - я тоже люблю получать зависимости так:
function funcName(App\Namespace\SomeClass $object)
или даже так:
function funcName(App\Namespace\SomeClassInterface $object)
засунуть таблицу в цикл?
Как грамотно заполнить массив, объявленный глобально, через функцию?
Что-то мне подсказывает, что использовать global <var> это какой-то быдлокод.
поправьте пжл
echo"</td>";
переделал,но td в запросе висит
ты красава, я еще регулярки изучаю, к полноценной практике еще даже не прикасался
И еще вопрос, я вот уже 5 месяцев учу ПХП(книги, ютубчик, халявные скаченные курсы) и везде прикладная тема обучения разнцая, где то учат нативному пхп на примере задачек, где то учат куки с сессиями прописывать и формы клепать, а где после 2 уроков "это переменная, а это цикл" идет полиморфизм с инкапсуляцией.
Я прихожу к удручающему выводу, что 5 месяцев проебал не понятно на что, и надо было сразу лезть на юдеми какой нибудь и наваливать англоязычные материалы.
Ты уверен, что нельзя вывод прописать единожды ?
Погугли print_r, может поможет локаничнее прописать.
>разбить это все дело с использованием пространства имен
Если код до 200 строк то нефиг ничего разбивать.
Обычно выносят либо повторяющийся код, либо вложенные циклы, условия, либо просто для понятности 1 функция со внятным именем вместо десятка невнятных строк делает код читабельнее.
>уже 5 месяцев учу ПХП(книги, ютубчик, халявные скаченные курсы)
Самостоятельно хоть что-то сделал, или только по туториалам и задачкам учишься?
Пили про студентов таблицу - из ОПпоста, если ещё не.
Решил сделать простейшие игры, одна спрашивает четное ли число, а другая рандомно выдает мат выражение, в обоих случаях приветствует тебя, проверяет твой ответ и прощается после 3 раундом. Если ответ не верный, игра завершается.
Собственно сложность была для меня общую логику игр в отдельный фаил уместить и через автозагрузку и пространство имен подключать, а не рекуаеры и инклюды использовать. Для запуска игр использовал отдельные файлы в бин, пути к ним прописал в Makefile линукса и запускал через команду в консоли.
Я понимаю что к вебу это имеет отношению примерно никакое, но я следую туториалам и шаблонам програмирования, типа бест практис и все такое. Опыта такого подхода никакого нет, до этого только в кодварс пытался решать задачки ну и курсы проходить, это уже какой то некст лвл для меня и мозг кипит, а я еще даже ООП не касался и с БД работал постольку по скольу.
алсо вопрос в дагонку, верно ли что Линукс осваиваю для пыхи?
Вообще я мечу на фриланс в будущем(в неопределенном), но я так понимаю без ебучей бесконечной верстки(и JS) там никак? Или есть задачи?
>Пили про студентов таблицу - из ОПпоста, если ещё не.
Спасибо анон, ознакомился, выглядит не плохо, надо будет взяться.
Собираюсь вкатиться работать на заводик (через год там будет зп 50к при работе 2/2. Параллельно хочу вкатиться в wordpress разработку. В идеале зарабатывать хотя бы 500-1000 в день. Каковы шансы? Или таких как я миллиард и лучше даже не пытаться?
Такое
$dir = __DIR__ . "/../../catalog/test.txt";
чет не работает. ОС - шиндовс пок что.
Скажу по себе - сложно потому что не пхп сложен, а потому что будет тяжело себя заставить учиться. А потом будет тяжело себя заставить инициативно искать работу, выполнять таски и все такое.
Если ты таким никогда не был - умножай вероятность слива на 10
Я рофла ради освоил верстку в вузе (онли html/css) за месяц где-то на уровне 4/10. Сейчас хватает, чтобы верстать сайты типа (okna-ramenskoye.ru). Сверстал его за 3 вечера, не особо торопять. Багов много, но заказчику по сути вообще на всё похуй. Нужен был сайт шоб был как говорится. Мог бы сверстать лучше, по бэму, кроссбраузерность норм поправить и всё такое. Заплатили за него 5к, т.к. сам предложил ценник. Могли бы заплатить больше, как оказалось)
Так что, думаю, с пыхой проблем не будет в изучении, да и в вп уже ковырялся. Могу сделать кастомные поля для записи, например. Самое жесткое, что я делал это кастомные записи (полдня гуглил). Хочу просто брать заказы, чтобы вешать верстку на вп и прикручивать вукомерс. Это половина заказов на фрилансе. И потрачу на изучение этого где-то полгода не больше.
А ему и отвечают: "Плати больше, будет меньше багов"
Все верно, только можно было бы обойтись без if, если определять сумму платежа как наименьшее из месячного платежа и остатка долга.
>>1951244
Можно попробовать <a href="../file.php">. Вот урок про относительные URL: https://github.com/codedokode/pasta/blob/master/network/urls.md
>>1951097
Должно работать. Еще можно попробовать dirname(__DIR__), чтобы подняться на один уровень выше.
А что плохого в верстке? Верстка это как декларативное программирование, ты разбиваешь страницу на блоки, задаешь их позиционирование, а браузер расставляет их на странице. Там есть свои довольно сложные стандарты.
>>1951043
Не знаю, как научиться разбивать код на функции. Но в данном примере, очевидно, генерацию выражения можно вынести в отдельную функцию.
Можно попробовать сделать так. Опиши кратко алгоритм и по нему пиши код, вынося шаги алгоритма в функции. У тебя алгоритм будет:
- узнать имя пользователя
- N раз подряд:
- сгенерировать выражение
- узнать ответ на выражение
- проверить ответ
- попрощаться с пользователем
Вот видишь, тут "сгенерировать выражение" идет как один шаг и его логично вынести в функцию. Заметь, что сам алгоритм простой - состоит всего из 6 шагов, значит и код для него будет простой, если выносить шаги в функции.
Также, не очень понятно, почему greetUser и question это разные функции. Они ведь только выводят подсказку и ждут ввода ответа?
Неймспейс лучше было назвать не General, а по имени программы. Последний if ($i ==General\COUNT_ROUNDS) не имеет смысла.
Могу посоветовать тебе больше решать задач, где требуется разбивать код на функции. Если ты дошел до ООП, то у нас есть задачки, где это требуется: >>1936147 >>1939079
Если ты не дошел до ООП, то можешь решить такую задачку: напиши функцию, которая принимает число от 0 до 999 999 999 и возвращает его прописью, например "десять тысяч (10 000) рублей". Тут понадобится разбивать код на функции, чтобы не получилась лапша.
Замечания.
Параметры соединения с БД не надо копипастить в каждый файл, лучше вынести их в конфиг. HTML-код надо вынести в шаблон, как описано тут https://github.com/codedokode/pasta/blob/master/php/templates.md
Данные при выводе в HTML надо экранировать для предотвращения XSS.
Удаление делается не GET-, а POST-запросом (отправка формы кнопкой, например). GET запрос не должен менять состояние сервера и что-то на нем удалять.
>>1950889
Лучше всего так:
$array = some_function();
Вообще, у нас в шапке есть задача про список студентов ( https://github.com/codedokode/pasta/blob/master/student-list.md ). Она очень похожа на то, что ты делаешь, но к ней идет много полезных комментариев, как это лучше делать. Советую ее почитать.
>>1950804
Код очень корявый, но сайд-эффектов тут нет. Переменная $item создается при выполнении цикла и так как ее никто не удаляет, то она остается доступной. Но писать так не стоит.
Строчка $item['field']; получает значение элемента и ничего с ним не делает, просто отбрасывает его. Она вообще никаких эффектов не делает, ее можно убрать и ничего не изменится.
>>1950784
Тебе надо перенести foreach в HTML-файл.
>Данные при выводе в HTML надо экранировать для предотвращения XSS.
Удаление делается не GET-, а POST-запросом (отправка формы кнопкой, например). GET запрос не должен менять состояние сервера и что-то на нем удалять.
экранирование я забыл,тут ты прав
гет я взял,чтобы не возиться с кнопкой,а так гет не безопасен
>Тебе надо перенести foreach в HTML-файл.
сделал ранее на замечание анона выше
Можно так, но вместо этого:
[^a-zA-Z0-9]
лучше написать только "пробел, минус или скобки", чтобы номер с какими-то другими символами не считался корректным.
>>1950633
Это неправильный код. Если тебе хочется обратиться к переменной по имени, составленному из другой переменной (${"var".$i}), то тебе нужна не переменная, а массив: $var[$i].
>>1950555
Если эксель-файл формируется не дольше нескольких секунд, то зачем его сохранять на диск? Отдавай его в ответ на запрос, не сохраняя на диск. То есть пользователь жмет "скачать", отправляется запрос и в ответ на него генерируется и отдается файл.
Можно сделать массив с описанием сотрудников, такого вида:
$people = [
// имя, должность, ранг, босс, количество
["Иван Петров", "Менеджер", 1, false ,5],
["Иван Петров", "Менеджер", 2, false , 3],
....
]
Далее на основе массива создать объекты-сотрудники.
>>1950510
> каждый сервис уникален для отдельного контроллера?
Вообще, это неправильно. Сервисы не создаются для контроллера, а для бизнес-логики. Есть задача управлять списком пользователей - создаем сервис. Есть задача генерировать отчеты - создаем сервис.
А контроллеры создаются по страницам/разделам сайта. Их количество и названия не обязаны совпадать с сервисами.
> А потом от них наследуешь сервис для конкретного контроллера?
Скорее всего, это неудачная идея. Что может быть общего у сервиса регистрации пользователя и генерации отчета? Ничего.
> и не брать в расчет пимпл, который есть сревис локатор -
pimple это DI container. Не надо его использовать как Service Locator.
А тебе не подойдет архитектура MVC, описанная тут: https://github.com/codedokode/pasta/blob/master/arch/mvc.md ?
>>1949089
У него там есть тонкий момент. По умолчанию квантификаторы вроде плюса жадные - они стремятся захватить максимально возможное число символов (но чтобы при этом регулярка совпадала со строкой). А там в решении используется нежадный квантификатор +?, который стремится захватить минимальное число символов. Потому выражение .+? не совпадет с буквой a. За одним исключением: так как даже нежадный плюс требует минимум одно совпадение, то в строке "aaa" совпадение все же будет.
Получается, у автора ошибка: https://ideone.com/Ai5K7G
Если ты используешь шаблонизатор вроде twig, то там есть макросы, у которых могут быть параметры. Если не используешь ... можно написать такую функцию в отдельном шаблоне:
<?php
function alert(...) {
?>
тут HTML-код
<?php
}
Корявенько, потому лучше использовать шаблонизатор с макросами.
А в адресной строке браузера идет что-то вроде http://localhost:8000/file.php или file:///c:/file.php ? Если второе, то ты не запускаешь PHP код, а просто открыл исходник браузером. Адрес должен начинаться с http. Файл должен иметь расширение .php
Можно создать массив с номерами от 1 до N. Затем проходиться по нему и удалять из него элементы, пока не останется нужное количество.
$x=1;
while($x<=49){
echo "<div>".$x."</div>";
$x++;
}
?>
как мне сделать 5 блоков в ширину и 6блоков в высоту?
или это не рабаотает так?
Все по-разному делают, на самом деле. Можно сделать на Вордпрессе и Элементоре и будет тормозное говно, но быстро и дёшево. А можно взять чистый фреймворк и пилить на нём целый месяц - будет ответ за 10-100 мс от сервера, везде асинхронность и сопли девственниц, и цена как за хату в хрущёвке.
>как мне сделать 5 блоков в ширину и 6блоков в высоту?
Я бы сделал просто - вывалил 30 блоков в хтмл, а потом через стили\жс ограничил ширину в 5 блоков, и всё бы само встало как надо.
Но тебе лучше делать через 2 вложенных цикла for.
Слишком быстро забил.
вот я что то ввел и я хочу чтобы в колонке рядом за пару секунд в появилось то что я написал.
это решается на жс,так?
>pimple это DI container. Не надо его использовать как Service Locator.
На сколько помню пимпл в принципе в контроллере слим передается как свойство this. В себе он в замыкании которое мы добавляем в контейнер вызывает класс ( не помню как он разрешает зависимости этого класса ) , создает экземпляр класса и сохраняет его.
А вообще всей этой петрушки с инверсией управления и низкой связностью не до конца и не понял пока что.
В контроллеры - пофиг, можно и целиком передавать. А вот внутренние зависимости лучше руками конфигурить.
>>1951614
>>1951712
https://ideone.com/lDV275
Почти три часа решал, а все из-за того, что при присвоении переменной массива временной переменной, ключ(индекс) последний оставался тем же значением, что и до удаления элемента. Поэтому иф во вложенном цикле никогда не работал и из-за некста индекс улетал за пределы массива. Поэтому ласт ветвление я добавил в самом конце. Хз, мб из-за того шо рубит так плохо думалось, но почему-то никак не мог найти эту деталь.
Сори за говнокод посоны.
как я понял, можно и без временной переменной сделать с помощью array_key_last, но похоже не везде работает эта функция
echo "Среднее (({$procurementDepartment->countAll()[0]} + {$sellDepartment->countAll()[0]} + {$adDepartment->countAll()[0]} + {$logisticDepartment->countAll()[0]}) / 4)";
Помогите, пожалуйста.
Лучше взять массив департаментов, пройтись по ним циклом и просуммировать значения.
Внутри строки в кавычках нельзя писать произвольные выражения и суммировать.
>табличка test_results, где записан просто общий балл за пройденный тест
Очевидно, что такой вариант не подходит для
>просмотр своих ответов и ошибок в задаче
Стоит хранить данные по ответам на тесты в более первозданном виде: юзер, на какой вопрос, как ответил, правильно/не правильно, и уже на основе этих данных получать данные об ошибках
мимо хочу стать верстаком под цмс вордпресс
Только для текущего, конечно. Делать кнопки, которые сами по себе меняют поведение — плохая идея, имхо.
Спасибо, Анон. Так и сделал изначально, потом решил чекнуть, так или не так. Погуглил, нашел примеры, так там у типов при клике на какой-либо столбец (н-р. asc сортировка) линк на desc меняется у всех, а не только у того, по которому кликнули. Вот и решил уточнить.
>нашел примеры, так там у типов при клике на какой-либо столбец (н-р. asc сортировка) линк на desc меняется у всех, а не только у того, по которому кликнули
Похоже на баг
>Стоит хранить данные по ответам на тесты в более первозданном виде: юзер, на какой вопрос, как ответил, правильно/не правильно, и уже на основе этих данных получать данные об ошибках
Так и думал делать, но что если автор теста изменит вопрос или удалит его, поменяет правильный ответ?
У курсе?
А не замусорит ли это базу, если на каждое редактирование запятой в вопросе или ответе, создавать еще одну запись?
Тебе пары килобайт жалко?
но вот в чем прикол-если посмотреть исходник,там видны значения id,как если бы делал через get.
это же не безопасно?
Смотрю и плачу блядь.
Поздравляю - у тебя прогресс.
Обводит первую букву в квадратные скобки — https://ideone.com/wz2Aus
Заменяет английские буквы на русские — https://ideone.com/nplOGz
Не до конца сделал, как я понял. Но я не понял, как сделать так, чтобы код сумел понять, что это именно русское/английское слово. Потому что, например, регулярка подходящая под английское слово так же подойдет и под русское, а для русских слов надо писать отдельную программу, как и для английских. Получается, что регулярка найдет и в программе для изменения русских букв на английские английское слово, и в программе для изменения английских на русские. В итоге получится каша. Как сделать так, чтобы определить, что это именно русское слово, а не английское, и наоборот? Возможно, до меня что-то очень простое не доходит, а я и не вижу. Сори за говнокод.
>Как сделать так, чтобы определить, что это именно русское слово, а не английское, и наоборот?
Можно пройтись пройтись слову, если в нем английских букв больше (или, например, есть буква, характерная только для английского, типа Q J W V F и подобные), то значит это инглиш.
а франсе?
Точняк. Второй вариант больше подходит. В первом же случае, слово, например, "соус" может целиком состоять из английских букв, но это же русское слово. Хотя и второй вариант не поможет с такими словами. Но все-таки это уже что-то, ведь и правда, в русском слове не будет таких букв. Спасибо.
- Почему у пыхи самое няшное коммунити ( сужу по сосачу ). В других тредах все обкидывают друг друга говном на любой почве, аж глаз дергается.
- Почему некоторые рофлят над пыхой? Если язык спустя столько времени популярен и активно используется, разве это не говорит о том, что он по крайней мере хорош?
- Как я понимаю пыха - это easy to learn hard to master? Для меня при подобном занятии важно созерцание того, что я наклепал, хочется видеть какие-то результаты сразу, пусть и хуевые. В пыхе это возможно? Ну как бэ хочеца через какое-то время сделать свое поделие, кривое, косое, но я сделаль, а не дрочить теорию овер9000 лет, дабы увидеть первый рабочий проектик.
Заранеее спасибо за то, что прочитал мою простыню. <3
> хочеца через какое-то время сделать свое поделие, кривое, косое, но я сделаль
Смотря что ты хочешь сделать. К ЯП это отношения не имеет.
>Смотря что ты хочешь сделать. К ЯП это отношения не имеет.
Что угодно юзабельное и в теории нужное другим людям
комунити в треде хорошее из-за ОПа, он приходит и отвечает на вопросы, чекает код и поправляет, где надо, хочется сказать ему спасибо
>- Почему у пыхи самое няшное коммунити ( сужу по сосачу ). В других тредах все обкидывают друг друга говном на любой почве, аж глаз дергается.
Это ты не был в телеграм чатах по пыхе. Вот где друг друга хуями обкладывают. Причем делают это 30+ васяны
>- Почему некоторые рофлят над пыхой? Если язык спустя столько времени популярен и активно используется, разве это не говорит о том, что он по крайней мере хорош?
Ну рофлят и рофлят. Работа на пыхе есть, вкат доступен.
>- Как я понимаю пыха - это easy to learn hard to master?
easy to learn относительно других бекенд языков
hard to master больше про архитектуру и ифраструктуру
>хочется видеть какие-то результаты сразу, пусть и хуевые. В пыхе это возможно?
Да, как и в любом интерпретируемом языке.
>Ну как бэ хочеца через какое-то время сделать свое поделие, кривое, косое, но я сделаль, а не дрочить теорию овер9000 лет, дабы увидеть первый рабочий проектик.
С этим проблем нет. Пыха в целом про хуяк-хуяк-в-продакшен
Не понимаю, как работает строка
$new_string .= ($key & 1) == 0?
mb_ucfirst(strtolower(trim($sentence))) :
$sentence.' ';
Как понять $key & 1? То есть побитовый оператор. Я посмотрел, там же получается нумерованный массив из элементов, которые являются предложениями. Но элемент с индексом 1 получает $sentence.' '; так ведь не должно работать, предложение с индексом 1 не получит заглавную букву. Но все работает, все предложения в тексте становятся с заглавной буквы. Не ПоНемАю!
>у пыхи самое няшное коммунити
Зависит от платформы - у Битриксоидов вполне себе обычное, как и у ВП-разрабов. Но в среднем на ПХП оно просто более профессиональное и уравновешенное - сам язык уже довольно зрелый и на нём пишет много бывших говнокодеров, а ныне уважаемых синьоров с многолетним опытом. Хотя тож всякое бывает.
>Почему некоторые рофлят над пыхой?
Раньше язык был не очень и с тех пор повелось. Мне, например, такой расклад даже нравится - отпугивает всяких хайпожоров-дегенератов, школоту, и получается, что тут больше вменяемых людей, и тех кто себе на уме. Порог входа такой у него.
>easy to learn hard to master?
Это любой современный ЯП вроде пхп, жс, пистона и тд.
>Для меня при подобном занятии важно созерцание того, что я наклепал
Бекенд про данные, а не созерцание. Хочешь сразу видеть результат - иди на фронтенд, а на беке принято передёргивать на структуры, архитектуру и абстракции.
>Как понять $key & 1?
Возможно это такая проверка на наличие. Вообще это порядочный говнокод и такие сокращения пишут только идиоты.
>mb_ucfirst(strtolower(trim($sentence))) :
Завернул аж в 3 функции, в одну строку - чтоб окончательно всех запутать. Говнокодер детектед.
($X & $Z) возвращает те биты, которые включены (равны 1) одновременно у обоих переменных. Если общих битов нету, то возвращается 0.
1 в двоичном виде это 0001. То есть ($key & 1) возвращает 1, если у $key первый бит включен, или 0, если выключен. Примеры:
0 — 0000 | 0 & 1 = 0
1 — 0001 | 1 & 1 = 1
2 — 0010 | 2 & 1 = 0
3 — 0011 | 3 & 1 = 1
4 — 0100 | 4 & 1 = 0
5 — 0101 | 5 & 1 = 1
...
То есть, для каждого чётного числа, включая 0, возвращается 0, для нечётного — 1.
https://www.w3resource.com/php/operators/bitwise-operators.php
А надо писать максимально очевидно. В идеале чтобы твой код даже бабасрака поняла.
ну я понял, но не понял только, как он делает так, что каждое предложение с заглавной начинается, ведь по такому принципу не каждое предложение будет обрабатываться mb_ucfirst
>То есть, для каждого чётного числа, включая 0, возвращается 0, для нечётного — 1.
>1 в двоичном виде это 0001. То есть ($key & 1) возвращает 1, если у $key первый бит включен, или 0, если выключен. >Примеры:
>0 — 0000 | 0 & 1 = 0
>1 — 0001 | 1 & 1 = 1
>2 — 0010 | 2 & 1 = 0
>3 — 0011 | 3 & 1 = 1
>4 — 0100 | 4 & 1 = 0
>5 — 0101 | 5 & 1 = 1
А нужно-то было всего лишь пройти циклом for по всем $sentences, проверяя кратность счётчика двойке в виде if($i % 2 == 0). Куда вы в биты-байты поехали?
Функция до этого разбивает предложение так, что в нечётных ключах оказываются точки, а в чётных предложения.
Хз, мб так быстрее получается? Вместо деления просто проверяется первый бит. Ну или тот чел пришёл из крестов, и там такие штуки часто используются.
ААААААА, теперь понял, спасибо. Час сидел и пялился в код, не мог увидеть этого. Это из-за PREG_SPLIT_DELIM_CAPTURE, да?
Без ООП может выйти такая лапша, что в голове не уложится
ООП наоборот упрощает. С бабой сракой я образно выразился.
Джун синьорский код легко прочитает, а вот джунский код зачастую без бутылки не разберёшь.
Если ООП не можешь, то рано тебе про качество кода думать - сперва базу выучи.
седня попробую сделать к-л круд на ООП
В чем охуевание? Три встроенные функции прекрасно читаются. Комментарий да, не помешал бы, но тут и по самим функциям можно понять что происходит, комментарии стоит писать когда там какие-то нетривиальные вещи делаются.
>>1954797
Твой пик несет нулевую полезную нагрузку, пример можно? Вот перепиши эту конкретную строку так чтобы она из джунской стала сеньорской.
Скажем спасибо ОПу же! Я тоже подумал, что он няшный. Хотя здесь особо не бываю.
>>1954727
Может быть, дес. Но мне показалось няшным.
>>1954730
>Это ты не был в телеграм чатах по пыхе. Вот где друг друга хуями обкладывают. Причем делают это 30+ васяны
Видел только один чат по какой-то конференции пыхеров, довольно няшно общались.
>Работа на пыхе есть,
Был удивлен тому, что даже в моей мухосране нужен джун на пыху.
>Да, как и в любом интерпретируемом языке.
Спасибо, дес. Учту.
>easy to learn относительно других бекенд языков
Помимо жабы что-то активно используется? А жаба разве сильно сложнее?
>С этим проблем нет. Пыха в целом про хуяк-хуяк-в-продакшен
Слава пыхобожеству.
>>1954762
>Зависит от платформы - у Битриксоидов вполне себе обычное, как и у ВП-разрабов. Но в среднем на ПХП оно просто более профессиональное и уравновешенное - сам язык уже довольно зрелый и на нём пишет много бывших говнокодеров, а ныне уважаемых синьоров с многолетним опытом. Хотя тож всякое бывает.
А правда. что большинство пыхеров начинали с параш вроде битрикса и вордпресса?
>Мне, например, такой расклад даже нравится - отпугивает всяких хайпожоров-дегенератов, школоту, и получается, что тут больше вменяемых людей, и тех кто себе на уме. Порог входа такой у него.
Но такой стереотип же и может в негативную сторону работать, привлекая Васянов.
>Это любой современный ЯП вроде пхп, жс, пистона и тд.
Учту. Спасибо, дес.
>Бекенд про данные, а не созерцание. На беке принято передёргивать на структуры, архитектуру и абстракции.
И все же я попробую, вдруг зайдет же.
>иди на фронт
Туда каждый первый вкатывальщик вкатывается, это меня отпугивает.
Скажем спасибо ОПу же! Я тоже подумал, что он няшный. Хотя здесь особо не бываю.
>>1954727
Может быть, дес. Но мне показалось няшным.
>>1954730
>Это ты не был в телеграм чатах по пыхе. Вот где друг друга хуями обкладывают. Причем делают это 30+ васяны
Видел только один чат по какой-то конференции пыхеров, довольно няшно общались.
>Работа на пыхе есть,
Был удивлен тому, что даже в моей мухосране нужен джун на пыху.
>Да, как и в любом интерпретируемом языке.
Спасибо, дес. Учту.
>easy to learn относительно других бекенд языков
Помимо жабы что-то активно используется? А жаба разве сильно сложнее?
>С этим проблем нет. Пыха в целом про хуяк-хуяк-в-продакшен
Слава пыхобожеству.
>>1954762
>Зависит от платформы - у Битриксоидов вполне себе обычное, как и у ВП-разрабов. Но в среднем на ПХП оно просто более профессиональное и уравновешенное - сам язык уже довольно зрелый и на нём пишет много бывших говнокодеров, а ныне уважаемых синьоров с многолетним опытом. Хотя тож всякое бывает.
А правда. что большинство пыхеров начинали с параш вроде битрикса и вордпресса?
>Мне, например, такой расклад даже нравится - отпугивает всяких хайпожоров-дегенератов, школоту, и получается, что тут больше вменяемых людей, и тех кто себе на уме. Порог входа такой у него.
Но такой стереотип же и может в негативную сторону работать, привлекая Васянов.
>Это любой современный ЯП вроде пхп, жс, пистона и тд.
Учту. Спасибо, дес.
>Бекенд про данные, а не созерцание. На беке принято передёргивать на структуры, архитектуру и абстракции.
И все же я попробую, вдруг зайдет же.
>иди на фронт
Туда каждый первый вкатывальщик вкатывается, это меня отпугивает.
Почему при $anonDice1 && $anonDice2 = mt_rand(1, 6) комплятор отправляет меня кушать хуйцы, а при
$anonDice1 = mt_rand(1, 6)
$anonDice2 = mt_rand(1, 6)
Всё заебись?
>Видел только один чат по какой-то конференции пыхеров, довольно няшно общались.
Конфачеры как раз норм, т.к. ирл общаются, им нужно лицо держать. Есть пара других чатов на пару тысяч тел. Вот там треш и угар.
>Помимо жабы что-то активно используется? А жаба разве сильно сложнее?
Что угодно тащят на бек: пхп, питон, руби, нода жс, жава, шарп, скала, го
За сложность джавы не скажу
>А правда. что большинство пыхеров начинали с параш вроде битрикса и вордпресса?
Пару раз трогал вп и битрикс и сразу же дропнул их, пересев на ларавел
>Но такой стереотип же и может в негативную сторону работать, привлекая Васянов.
Васяны бегут туда, куда больше курсов хайповых. В тот же фронт.
В пыху бегут не так охотно. В основном из пердей, где это единственный бекенд язык.
>иди на фронт
>Туда каждый первый вкатывальщик вкатывается, это меня отпугивает.
Потому что там достаточно простой вкат и высокий спрос на спецов, т.к. фронт у всех один - жс (в основном реакт)
>А правда. что большинство пыхеров начинали с параш вроде битрикса и вордпресса?
Не - я сразу на фреймворки полез.
Имел дело с вордпрессом и не понравилось - после фреймворков и нормальных архитектур отдаёт протухшими помоями.
Вместо ВП использую October.
>может в негативную сторону работать, привлекая Васянов
Почему? Васянам наоборот надо чтобы ЧСВ, чтобы макакой не называли, чтобы ЯП на котором они пишут был уважаемый. А тут ПХП, лол. Пацаны во дворе же засмеют.
>Туда каждый первый вкатывальщик вкатывается, это меня отпугивает
Значит запрос есть, наверное.
я вообще выше спрашивал про последовательность чисел,но не слитных.чтобы потом была сверка.
первая мысль была про массив,но почитав-пишут что это изврат и надо либо жсон или сериализация
так жсон?
>А жаба разве сильно сложнее?
Сам язык нет, почти тот же пхп, только коллекции и дженерики нужно подучить. А вот все остальное, это лютый трешпиздец, jdbc hibernate, spring и прочее, в это когда окунаешься вообще нихуя не понятно, простые вещи сложными путями делаются, если готов к трудностям первое время, то можно попробовать
>у Битриксоидов вполне себе обычное,
Пробовал как-то спросить одну хуйню по каталогу и корзине, мне сказали что я долбоеб и не умею это говно в фантики от конфет заворачивать и продавать по цене шоколада. Короче наколхозил что-то в библиотеке BX для фронта, уже не помню что и оно вроде как заработало и запушил к ебеням. Сейчас к этому говну не притрагиваюсь, пусть другие развлекаются.
почему он генерирует один и тот же набор при новой записи?
может мне сделать инкремент с 1000000000000?
А ничего, что он генерит максимальное значение 32 разрядного инта (со знаком)?
>одной строки
>$new_string .= ($key & 1) == 0?
mb_ucfirst(strtolower(trim($sentence))) :
$sentence.' ';
Это не строка, а говно. Пиши на нормальном ЯВУ, а не на байтоёбской хуйне. Такое код-ревью нигде не пройдёт.
Свободен.
Зачем генерить номер тикета пыхой? Используй автоинкремент в базе, если нужен тикет определенной длины просто добей нулями в начале.
Если убрать байтоёбство, то получится
$new_string .= ($key % 2 == 0)
? mb_ucfirst(strtolower(trim($sentence)))
: $sentence.'';
То есть, строка с тремя функциями никуда не делась. А именно к ней у тебя и были претензии
С pdo не работал напрямую, такой код разве не даст SQL инъекцию? Или там в pdo все фильтруется?
я забыл добавить фильтр для чисел и только 7 значений
Накидал что-то такое, хз правильно ли это (но вроде работает), но может можно как-то лучше сделать
SELECT * FROM (
SELECT columns FROM table ORDER BY column DESC LIMIT 5, 5
) as s ORDER BY columnt
В моей мухосрани есть только вакансии по PHP, хотя в двух часах езды есть миллионник с вакансиями и по Питону и по JS. Если основной критерий простота трудоустройства, то лучше PHP, я правильно понимаю? Или начать изучать новомодные JS или Питон, с расчетом на большую стабильность и востребованность в будущем?
Алсо насколько будет глупо и сложно начать например с PHP, а потом перейти например на JS или Питон? Какова вероятность что PHP устареет и будет заменен ими?
>JS или Питон? Какова вероятность что PHP устареет и будет заменен ими?
Это пророчили php еще лет 10 назад. Как видишь, сейчас php так же прочно стоит на ногах и продолжает развиваться.
Но если УЖЕ 10 ЛЕТ НАЗАД ему это пророчили, то что если вот вот еще чуть чуть и всё пиздец?
Вот эксперты программирования на ютюбе говорят, что в PHP 8 как-то все новомодные фичи криво прикрутили и вообще обосрались и это была отчаянная попытка что-то стапасти, и она провалилась.
>Вот эксперты программирования на ютюбе
Эксперты программирования работают в топ проектах, фичи релизят, а не на ютубе вещают
Тебя никто идти в пхп не заставляет. Веришь в мантры про скорую смерть пыхи - иди учи что-нить новомодное. Не мешай людям вкатываться и работать
Яб всё изучал. Начни с похапе, как более-менее освоишься - окунись в путон и ноду. Это все актуальные технологии, их знание лишним не будет.
> начать изучать новомодные JS
Опять же, это все веб, без JS ты в любом случае далеко не уедешь, так что нужно будет так же изучать. Как и HTML+CSS, хотябы базово.
Пророчить могут что угодно, но задачи есть и их нужно решать сейчас. И не всегда новомодные технологии подходят для их решения. Ты удивишься, но множество сайтов до сих пор создаются на технологиях десятилетней давности, а то и старше. И все вполне себе работает.
какое код ревью еще на сиэмэсках тебе? скажешь тоже, главное чтоб работало, красиво рассказать, завернуть и продать, всё
>>1955429
на ноде.жс берут с опытом, вакансий без опыта почти нет, на путхоне во множестве вакансий для новичков есть требование вышки, в то время как на пхп почти нигде такого требования нет, соответственно, сначала залетаешь на пхп (но html, css, js, jquery, sql все равно надо), через год перекатываешься в пайтон или ноду.жс или в ror/go и тд
> на путхоне во множестве вакансий для новичков есть требование вышки
Кто сейчас требует вышку на программерские должности, кроме всяких госконтор?
Спасибо анон. Еще заметил такую странную херню, когда работодатель выставляет вакансию "Разрабочик PHP/бекэнд" и далее в требованиях к ней указывает "Знать Node.js, Python и т.д." Это работодатель долбоеб и не понимаешь что пишет или тебе действительно нужно владеть кучей разных взаимоисключающих технологий?
Да, зачастую наниматель или HR просто не разбираются в теме и берет описание должности из интернета тупо копипастой. В идеале нужно общаться с человеком который непосредственно занят разработкой. Ну и иногда действительно бывают случаи что нужен человек-оркестр.
На пыхе ты по дефолту человек-оркестр блджад
Любая галера с айти отделом больше десятка человек. Все из-за наплыва нулевых голддигеров с курсов программирования.
В чем проблема проверить человека на собеседовании? ВО для программиста это ничего не определяющий маркер. У нас же нет учебных заведений которые готовят именно программистов.
А ты отсобесь каждого из 200 вкатунов, среди которых 190 выпускники говнокурсов
Даешь удаленно задание, после выполнения предлагаешь созвониться и поговорить о том как ты его делал. Тот кто делал сам с удовольствием все расскажет. Тот кто нагуглил готовое сразу же сольется.
А 200 чел на вакансию это больше похоже на влажные мечты HR.
Ну, и наконец, как тебе тут поможет твой фильтр в виде ВО? Просто уменьшит количество соискателей? Так ты сам можешь отвечать например каждому пятому, это будет тоже самое.
>Даешь удаленно задание
Тут уже 90% отвалятся. Причем среди них будут как вкатуны, так и норм соискатели
>А 200 чел на вакансию это больше похоже на влажные мечты HR
Всякие петровичи после курсов по верстке лендингов и туду листа на жопаскрипте так и валят. Иначе чем объяснить повальное засильное всяких курсов?
>Ну, и наконец, как тебе тут поможет твой фильтр в виде ВО?
Если вышка близка к програмистской, тот же физмат - таких кандидатов можно смотреть в первую очередь, т.к. они идут в индустрию не просто за длинным рублем
Сам генератор должен работать нормально, походу у тебя проблема в другом, при записи используется старое значение.
ps. Ты же в курсе что теоретически существует вероятность что генератор тебе два одинаковых значения выдаст?
> Тут уже 90% отвалятся
Лол, а как, по твоему, нужно собеседовать? Телепатически или по звездам?
> чем объяснить повальное засильное всяких курсов?
Тем что это популярная тема и создатели курсов хотят срубить баблишка с лохов. Так же как всякие коучи и бизнес-тренеры.
> Если вышка близка к програмистской, тот же физмат - таких кандидатов можно смотреть в первую очередь
Хуйня полная, связь между физматом и программированием это распространенный стереотип. Ладно, если там вакансия на что-то прикладное, но блядь в вебе то это всё зачем?
>Лол, а как, по твоему, нужно собеседовать?
Честно, хз. Я бы наверно ничего умнее не придумал и взял бы существующие методы:
для кандидатов без опыта - обязательное тестовое (с докером, тестами, ридми и чтобы одной командой поднималось с тестовой бд)
для джунов (до 2 лет опыта) - ебля теорией на собесе и задачки с литкода + про работу рассказать
для мидлов+ - разговор за опыт и рабочие кейсы
>Хуйня полная, связь между физматом и программированием это распространенный стереотип. Ладно, если там вакансия на что-то прикладное, но блядь в вебе то это всё зачем?
Как минимум наличие желания ковыряться в какой-то сложной технической хуйне. Далеко не у всех это желание есть. Это и отличает разраба от макаки.
можете не отвечать,это я не прочитал о максимальном значении лол
Если для резюме, то любой проект можно описать как коммерческую разработку, если скзаать, что делал знакомому/на фрилансе
Хм, или может вместо токена просто впихивать в реквест айди юзера и его хешированный пароль, вытянутый из базы? Нормально так будет, или нет?
Окей, спасибо за ответ. Я так понимаю, этот токен необходимо просто генерировать при регистрации юзера, в джаваскрипт пробрасывать через скрытый input ( или может лучше через мета тег? ), а на бекенде просто находить юзера с таким токеном, верно?
Нужно выдрочить все скрипты из шаблона в файлы и подключать их?
Использовать один токен с самой регистрации несекурно. Если он уплывет, то всё. Генери при каждом логине, добавь им время протухания еще. Заодно почитай про oAuth, сегодня он повсюду.
А что за Sanctum и Passport скажешь? Если я планирую в будущем внедрять аутентификацию через сторонние сервисы, то может лучше сразу через Passport это дело проделывать?
Может кто подскажет, с помощью чего изучать этот ЯП?
Самому 25 лет, раньше верстал, с помощью гугла пилил формы обратной связи на php, слайдеры на js, но как таковые языки эти я не знаю, поэтому он будет у меня первым.
И отсюда вытекает следующие вопросы: не поздно ли в 25 вкатываться в пхп, чтобы в 25.5 или 26 пойти джуном и как вообще отразится на мне в будущем, если выберу этот ЯП как первым языком? Где-то читал, что пхп как первый яп - хуёвый тон. В дальшнейшем планирую работать в вебе, поэтому плюсы, джавы всякие отпадают.
>джавы всякие отпадают
На джаве тоже бек пишут
>не поздно ли в 25 вкатываться в пхп
Не поздно. Самое время
>как вообще отразится на мне в будущем, если выберу этот ЯП как первым языком?
Можешь так же оставаться на пхп, повышая сложность проектов и зп. А можешь через годик перекатиться на другой бекенд язык
>с помощью чего изучать этот ЯП?
С прочтения шапки треда. Там достаточно материала, чтобы до джуна дойти
С PHP гораздо легче вкатиться в вебдев, где помимо самого ЯП нужно разбираться в куче смежных областей (работа сервера, протоколов, БД, желательно фронтенд базово, методологии разработки, mvc, гит, различные пакетные менеджеры, тестирование). Имея эти знания в багаже (не теоретические, а уже практические) ты потом легко перепрыгнешь с PHP на любой другой ЯП.
а слышал, что пхп уже опять умирает, 8 версия обратно в болото увела пыху.
допустим, если засяду учить пыху, какую версию учить?
Я тебе по секрету скажу - полным полно проектов которые до сих пор работают на 5 версии и на 7 просто не запустятся. Учить нужно не конкретную версию, а язык в целом. Когда прокачаешься - уже будешь заморачиваться с новомодными фишками свежих версий.
>8 версия обратно в болото увела пыху
Какие из изменений увели в болото?
Сейчас пыха взяла курс на более строгую типизацию, атрибуты завезли. Вот вот енумы завезут, заживем.
В джит можно запихнуть папочку вендор, т.к. её содержимое меняется крайне редко. А в остальном да, джит перфоманса не добавил. Но там и без него в 7ке пыху неплохо оптимизировали. И узкое место тут как обычно бд и внешние сервисы, а не рантайм пыхи.
Че то щас просмотрел вакансии php-разработчика: джуна, миддла и т.д. везде блять требуедсят js. Причём пишут так: "Обязательно отличные знания PHP/MySQL/HTML/CSS/JS".
Можете сказать, нахуя мне отличные знанич js, если я буду на пыхе писать?
Или хрки на сегодняшний день вообще ебанулись массово?
Много вакансий на пыхе предполагают частичный фуллстек. Фронтенд на уровне - сверстать формочку и оживить на ванильном жс. Более сложная херь вроде реакта явно обозначается как фулстек вака.
Сейчас вот тоже немножко жс шатаю в соотношении 80 бека и 20 фронта.
да я ни пыху, ни джс не знаю, просто хотел в бэк онли окунуться, т.к. фронт пиздец там. верстаю-то я нормально, флексбокс, бэм всякие понимаю, но короче заебала ебля эта с классами, семантикой и прочей поебистикой.
Хочу через какое-то время просто брать заказы по вп какому-нибудь и хотя бы 40к получать с фриланса. Хз, достижимо это за 4-6 месяцев изучения пыхи или нет
Не совсем так, еще надо докрутить ввод пользователем и проверку на число и все такое. Но меня интересует, в целом должно быть примерно так?
Если дело на этапе контроллера - то тут понятно, нет прав - заворачиваем с уведомлением.
А если мне нужно в зависимости от прав какую либо кнопку сделать видимой / или не видимой?
В ларавел есть хелпер который прямо в разметке шаблона вызывается.
У меня слим4 + твиг и я не понял как делать такой хелпер.
Но мне даже скорее интересно как такое сделать без хелперов которые проверяются прямо в коде.
Переменную с логическим значением передавать? Но таких переменных может быть несколько. Можно конечно передать, в массиве что бы не хламить.
Но как то не особо красиво что ли.
Мне нужно сделать из этого инициалы , такое: "Иван Иванович" в "И.И."
Собственно проблем нет никаких. Трабла в том что в браузере если фио полностью отрисовывается - то все норм.
А если созданные мною инициалы отрисовать - почему то черный ромб с вопросом внутри.
Че это за херня?
п.с.
дело прояснилось - короче доступ к символу в строке в которую я из базы достаю, допустим 'Вася', как к массиву в таком виде:
$name = 'Вася';
echo $name[0]
не работает потому что в базе у меня строки хранятся занимая место - два байта на одну букву. Поэтому я букву получить могу только допустим с помощью substr();
А я чет затупил в этом вопросе.
Пхп всегда, если рассматривать строку как массив, на одно значение массива из строки берет не более одного байта?
mb_substr не пробовал?
Ты правильно нашел проблему. $name[0] берет не первый символ, а первый байт символа и потому его использовать нельзя. Надо использовать mb_substr. Подробнее в отдельном уроке https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
Можно сделать объект ПроверяльщикПрав и передавать в twig его. А там делать вызовы вроде if ($accessChecker->can(AccessChecker::EDIT_ARTICLE)) { ... }.
Можно сделать как в симфони. Там есть twig-хелпер {% if is_granted('ACCESS_EDIT_ARTICLE') %}.
То есть, на каждое действие делается константа и через какой-то объект проверяется наличие прав на это действие. Иногда кроме константы еще и передается объект, на доступ к которому проверяются права:
if ($security->isGranted(SomeClass::SOME_ACTION, $object))
В мануале по mt_rand упоминается функция mt_getrandmax(). Она возвращает максимальное число, которое можно передавать в mt_rand. Попробуй выполнить код var_dump(mt_getrandmax()); У меня он возвращает 2 миллиарда.
А ты передаешь 1 триллион. От этого mt_rand ломается. Как я понял, он работает только с числами от 0 до 2 млрд. Используй 2 вызова mt_rand, если тебе нужно сгенерировать длинное число.
Это же вроде как в настройках PHP указывается. Я проверял его числа в песочнице - там рандом нормально работает.
6051441335772
6139515971580
1001079545172
4806508211446
1196189095429
2364670928361
9178557967093
7900054432436
3104628173548
4715106407596
Вообще, эта идея полагаться на то, что точки будут всегда в четных или нечетных элементах, выглядит довольно хлипко. Я бы лучше сделал проверку через preg_match('/^[.?!]+$/') - может, это чуть помедленнее, но зато читабельнее.
Потому что в PHP нельзя написать "присвоить a и b случайные значения". Можно присвоить 2 переменным одинаковое значение, написав так:
$a = $b = 1;
Это работает, потому что оператор = выполняется справа налево и возвращает присвоеннное значение дальше. То есть в записи выше сначала выполнится выражение $b = 1, оно вернет 1 и получится выражение $a = 1, которое и выполнится.
Чтобы присвоить разные значения, надо писать так:
$a = 1;
$b = 2;
У тебя же выражение выполняется так:
$anonDice1 && ($anonDice2 = mt_rand(1, 6))
Сначала выполняется присваивание $anonDice2 случайного числа (допустим, это 5), это число передается дальше и получается выражение:
$anonDice1 && 5
Это выражение не получится вычислить, так как переменной $anonDice1 не существует. Отсюда ошибка.
То есть интерпретатор PHP не способен понимать произвольные команды, команды должны делаться по жестко заданным правилам. Люди также делают другую ошибку: когда хотят написать условие "a и b равны 1" они пишут
// неправильно
if ($a && $b == 1)
А надо писать "a равно 1 и b равно 1":
// правильно
if ($a == 1 && $b == 1)
Потому что в PHP нельзя написать "присвоить a и b случайные значения". Можно присвоить 2 переменным одинаковое значение, написав так:
$a = $b = 1;
Это работает, потому что оператор = выполняется справа налево и возвращает присвоеннное значение дальше. То есть в записи выше сначала выполнится выражение $b = 1, оно вернет 1 и получится выражение $a = 1, которое и выполнится.
Чтобы присвоить разные значения, надо писать так:
$a = 1;
$b = 2;
У тебя же выражение выполняется так:
$anonDice1 && ($anonDice2 = mt_rand(1, 6))
Сначала выполняется присваивание $anonDice2 случайного числа (допустим, это 5), это число передается дальше и получается выражение:
$anonDice1 && 5
Это выражение не получится вычислить, так как переменной $anonDice1 не существует. Отсюда ошибка.
То есть интерпретатор PHP не способен понимать произвольные команды, команды должны делаться по жестко заданным правилам. Люди также делают другую ошибку: когда хотят написать условие "a и b равны 1" они пишут
// неправильно
if ($a && $b == 1)
А надо писать "a равно 1 и b равно 1":
// правильно
if ($a == 1 && $b == 1)
Не обязательно. Но он должен указывать на единственную запись, потому он может ссылаться либо на первичный ключ либо на колонку (или колонки) с уникальными значениями.
>>1954919
Зависит от ситуации. Вообще, принципы нормализации требуют атомарности ячеек, то есть в 1 ячейке хранится одно значение, а не список. Но в реальности иногда удобнее сохранить массив. Можно хранить значения через запятую, некоторые СУБД вроде Постгрес поддерживают хранение массивов, и можно туда засунуть JSON.
Но во многих случаях это будет неправильная идея. Ты не описал какая у тебя ситуация, потому непонятно, как правильнее сделать.
>>1955284
Он подставляет значения не напрямую ("INSERT .. $x"), а через плейсхолдер ("INSERT :x"). Значения автоматически экранируются и заключаются в кавычки и инъекции не будет.
Ты передаешь в mt_rand слишком большие числа. Он на такое не рассчитан.
>>1955689
> разговор за опыт и рабочие кейсы
Часто встречаются люди, которые в X особо не разбираются, но были в проекте, где была X (которую настраивали другие люди), и могут сделать вид, что в X разбираются. Потому в разговор за опыт желательно добавлять проверочные вопросы вроде "как с помощью X можно сделать Y". Тут-то и пойдут отмазки вроде "ну, мне надо почитать мануал, погуглить", из которых ясен реальный уровень знания X. Правда, чтобы задавать такие вопросы, надо самому разбираться в X.
>>1955711
Цифры в скобках - это не ограничение на длину числа (где такое написано?), а рекомендация, сколько места оставлять при выводе таблицы на экран.
>Ты передаешь в mt_rand слишком большие числа
я уже понял
я переделал вообще на авто инримент с длиной 10
Вообще, если использовать библиотеку для работы с формами, то достаточно лишь описать тип и ограничения для каждого инпута, а она сама все проверит. Если же ты по каким-то странным причинам пишешь формы руками, то попробуй хотя бы в функции вынести повторяющийся код.
>>1957265
Ты выполни код var_dump(mt_getrandmax()); у себя. Может, в песочнице 64-битная версия PHP, а у тебя например 32-битная или еще какие-то отличия есть.
>>1957301
Я имею в виду, что они должны быть уникальными, и хорошо если это дополняется уникальным ключом.
>Если же ты по каким-то странным причинам пишешь формы руками,
таким макаром,вообще можно сильно не замарачиваться.как оно работает
$numArr - плохое название. Тогда уж надо писать $numbers, но там ведь не только числа. Лучше назвать $parts, $tokens.
Плохо, что повторяются эти строки много раз:
unset($numArr[$i + 1]);
unset($numArr[$i - 1]);
$numArr = array_values($numArr);
$i = 0;
Лучше бы без копипасты, например, можно сделать функцию выполнитьОперацию(операция, арг1, арг2) и вызвать её (перенести switch в эту функцию, убрав его из цикла).
Хорошо бы сделать код более устойчивым к случаям, когда например идет подряд 2 знака или выражение начинается со знака. Чтобы выдавать сообщение, а не падать с ошибкой.
Сама идея вычисления с приоритетами может и неплохая, но не будет работать при наличии скобок. Если хочется вычислять любое выражение с приоритетами и скобками, то есть 2 подхода:
1) с помощью готового алгоритма преобразовать в обратную польскую нотацию и вычислить её
2) распарсить рекурсивным спуском выражение на AST - Abstract Syntax Tree - дерево узлов (узел - это например: узел числа или узел операции, причем узел операции может содержать в аргументах другие узлы). Затем вычислить значение в дереве. Узлы обычно реализуют с использованием ООП.
Оба этих подхода для начинающего довольно сложны (но интересны). Потому в задаче разрешается игнорировать приоритеты операций.
Если хочется именно заморочиться, то можно написать свою библиотеку для форм. Делаем объект, представляющий один элемент формы, делаем такие элементы вкладываемыми друг в друга (чтобы можно было собрать из них форму). Делаем объекты, представляющие ограничения и условия проверки. Очень полезно для саморазвития, хотя и будет сложно поначалу.
ну я же говорил))
У тебя какой-то пиздец с отступами, ты хоть плагин какой-нибудь поставь, который будет автоматом все расставлять, если самому лень
> Недостаточной длины логин или пароль!
Зачем выдавать ошибки на языке Йоды?
PhpStorm. Не забудь купить подписку, все же JetBrains нехило инвестирует в развитие PHP, оплачивая работу Никичу.
мимо-Рома Пронский
Гугление выдает такие плагины для VS Code:
https://marketplace.visualstudio.com/items?itemName=kokororin.vscode-phpfmt
https://marketplace.visualstudio.com/items?itemName=Sophisticode.php-formatter
Обрати внимание, что им может потребоваться настройка (например: указать путь к PHP в конфиге) и придется немного помучаться и почитать мануалы.
>>1957508
У тебя нет разделения ответственности в коде. То есть, ты даже не вынес валидацию в отдельную функцию, а пишешь весь код сплошной стеной. Надо учиться разбивать его на отдельные функции, каждая из которых занимается своим делом.
Такой подход не масштабируется, то есть при увеличении объема кода он станет нечитаемым и неподдерживаемым.
Также, у тебя в коде есть недостатки:
- неправильно делается экранирование данных. htmlspecialchars надо вызывать при выводе данных в шаблоне, а не там, где ты их вызываешь.
- при ошибке надо показывать форму с введенными в нее данными, а ты это не делаешь и заставляешь человека заново заполнять форму.
- надо использовать mb_strlen, а не strlen. strlen не умеет считать длину текста с русскими буквами.
Могу посоветовать урок про работу с формами: https://github.com/codedokode/pasta/blob/master/forms.md
Нет, обычно ты не создаешь классы на каждое поле, а используешь готовые классы из библиотеки. То есть ты описываешь каждое поле, и какие на него действуют ограничения. Вот, как это могло бы выглядеть в теории:
$form = new Form;
$form->addField('name', [
new TextLength(20),
new Regexp('/^[a-z]+$/')
]);
...
$form->handleRequest($_POST);
if ($form->isValid()) {
echo "Все верно";
} else {
print_r($form->getErrors());
}
то есть мы создаем форму и добавляем в нее поля, описывая ограничения в них.
Вот, как сделано в Симфони (отсюда: https://symfony.com/doc/current/components/form.html ):
$form = $formFactory->createBuilder()
->add('task', TextType::class, [
'constraints' => new NotBlank(),
])
->add('dueDate', DateType::class, [
'constraints' => [
new NotBlank(),
new Type(\DateTime::class),
]
])
->getForm();
Здесь есть классы, обозначающие тип поля (TextType, DateTYpe) и классы, задающие ограничения (NotBlank, Type).
В Симфони много готовых типов полей с разными опциями, и много классов-ограничений, потому тебе часто хватает их возможностей.
Нет, обычно ты не создаешь классы на каждое поле, а используешь готовые классы из библиотеки. То есть ты описываешь каждое поле, и какие на него действуют ограничения. Вот, как это могло бы выглядеть в теории:
$form = new Form;
$form->addField('name', [
new TextLength(20),
new Regexp('/^[a-z]+$/')
]);
...
$form->handleRequest($_POST);
if ($form->isValid()) {
echo "Все верно";
} else {
print_r($form->getErrors());
}
то есть мы создаем форму и добавляем в нее поля, описывая ограничения в них.
Вот, как сделано в Симфони (отсюда: https://symfony.com/doc/current/components/form.html ):
$form = $formFactory->createBuilder()
->add('task', TextType::class, [
'constraints' => new NotBlank(),
])
->add('dueDate', DateType::class, [
'constraints' => [
new NotBlank(),
new Type(\DateTime::class),
]
])
->getForm();
Здесь есть классы, обозначающие тип поля (TextType, DateTYpe) и классы, задающие ограничения (NotBlank, Type).
В Симфони много готовых типов полей с разными опциями, и много классов-ограничений, потому тебе часто хватает их возможностей.
Зачем в return у функции создавать переменную?
Почему нельзя просто написать return strlen($this->$login);
> Но я не понял, как сделать так, чтобы код сумел понять, что это именно русское/английское слово.
Самый простой вариант - можно смотреть по языку первой буквы.
> Потому что, например, регулярка подходящая под английское слово так же подойдет и под русское, а для русских слов надо писать отдельную программу, как и для английских.
Нет, тут достаточно одной программы, которая ищет слова, написанные буквами 2 разных алфавитов. Можно, например, сделать так:
- разбиваем текст на слова
- для каждого слова определяем по первой букве язык
- ищем посторонние буквы в слове
Или так:
- находим слова из смеси алфавитов
- в каждом таком слове определяем язык
- находим посторонние буквы
Регулярку можно было написать проще, в таком стиле:
- граница слова, любые буквы, (русская, затем английская или английская, затем русская), любые буквы, граница слова.
Такая регулярка захватит все слово, в котором встречаются буквы разных алфавитов.
Замену проще сделать без привлечения регулярок, с помощью массива соответствий и функции strtr().
> Но я не понял, как сделать так, чтобы код сумел понять, что это именно русское/английское слово.
Самый простой вариант - можно смотреть по языку первой буквы.
> Потому что, например, регулярка подходящая под английское слово так же подойдет и под русское, а для русских слов надо писать отдельную программу, как и для английских.
Нет, тут достаточно одной программы, которая ищет слова, написанные буквами 2 разных алфавитов. Можно, например, сделать так:
- разбиваем текст на слова
- для каждого слова определяем по первой букве язык
- ищем посторонние буквы в слове
Или так:
- находим слова из смеси алфавитов
- в каждом таком слове определяем язык
- находим посторонние буквы
Регулярку можно было написать проще, в таком стиле:
- граница слова, любые буквы, (русская, затем английская или английская, затем русская), любые буквы, граница слова.
Такая регулярка захватит все слово, в котором встречаются буквы разных алфавитов.
Замену проще сделать без привлечения регулярок, с помощью массива соответствий и функции strtr().
Не вижу никакой опасности. А вот выводить HTML через echo неудобно, лучше использовать шаблон.
>>1952324
Задача про тестхаб приближена к реальным проектам по сложности и там возникают такие же проблемы, как в реальных проектах. Тут надо подумать, что лучше:
- запретить менять тест после появления ответов. Вместо удаления делать soft delete (скрытие из списков, при этом тест остается в базе).
- сделать версионность тестов, чтобы при редактировании создавалась бы новая версия теста (а старая оставалась неизменной). Тогда ответы могут ссылаться на нужную версию теста.
- сделать вопросы неизменными и версионируемыми, соответственно на них можно будет ссылаться из ответов
Тут получилось довольно хитрое решение с использованием внутренних указателей в массивах. Код также полагается на недокументированные особенности, вроде того, как меняется внутренний указатель при выполнении unset().
Можно было поступить еще так:
- сделать массив, где ключи идут по порядку, а значения - это номера девочек (идут вначале от 1 до N)
- завести переменную-указатель, присвоить ей 0
- увеличить переменную на число слогов (с проверкой на выход за границы массива)
- удалить элемент, на который она указывает, с помощью array_splice()
- и так далее.
>>1951786
Главная идея DI в том, что объект не ищет сам зависимости, и не пытается их откуда-то взять, а ему просто передают их через конструктор (или как-то еще) при создании. И поиск зависимостей теперь это не ответственность объекта, а ответственность того, кто его создает.
У тебя присвоение вместо сравнения
Ну и методы какие-то бессмысленные. Либо делай более общими, либо удаляй - тупо лишняя абстракция.
Ну и название check ни о чем не говорит, что она делает, какой тип вернет.
Еще косяк: ты создаешь форму, но не передаешь туда логин, хотя внутри методов проверяется логин этой формы, т.е. он у тебя пустой будет.
Крч перепиши это говно. Проще с нуля сделать, чем тут что-то править.
Не должны. Различие только в том, что fetch возвращает массив полей, а fetchAll() - массив записей, где каждая запись это массив полей.
я сомневаюсь,что смогу это переписать в ООП стиле,тк херово понимаю это вреале,а не на учебных примерах про машины
Это не совсем ООП. В ООП объект - это объединение данных (полей вроде $login) c методами (функциями) для работы с ними. Соответственно, в ООП ты не вызываешь вручную check_length, check_empty и не передаешь туда данные, а ты создаешь объект и вызываешь $form->validate() и он сам все проверяет и возвращает все ошибки (при этом validate может конечно вызвать check_empty, но эту функцию надо сделать private, чтобы снаружи ее вызвать было нельзя). Ты же код, который должен быть внутри объекта, пишешь снаружи его.
Если тебе сложно писать ООП код, начни хотя бы с разбиения на функции. Сделай отдельно функцию для чтения данных из $_POST, а отдельно функцию для валидации данных, отдельно функцию записи данных в БД.
Также, вместо strlen надо использовать mb_strlen. Незачем использовать в наши дни кодировку ASCII вместо UTF-8.
И еще, у нас в шапке есть задача про студентов, к ней идет куча полезных советов по архитектуре. Стоит их почитать.
А ты не хочешь порешать нашу задачу про ООП? У нас в шапке есть ссылка на учебник, там есть глава про ООП и задача про ООО Вектор. Можешь попробовать ее решить.
Также, есть задача про ООП-Гостиницу тут >>1939079
Есть задача про ООП-скидки: https://www.cyberforum.ru/php-oop/thread1459985.html
Попробуй их порешать. Или, если тебе не хочется уходить далеко от форм, попробуй спроектировать набор классов для работы с формами. Начни с краткого перечисления требований (какие возможности будут у твоей библиотеки), затем спроектируй классы, как они связаны и что представляют, и затем можешь писать код. Я выше давал примеры, как можно реализовать проверку форм с помощью ООП. В идеале ты должен получить набор кирпичиков, из которых можно собрать любую форму.
То есть, я предлагаю не делать класс конкретно под твою форму, а сделать более универсальное решение - набор классов, из которых можно собрать любую форму.
>Если тебе сложно писать ООП код, начни хотя бы с разбиения на функции. Сделай отдельно функцию для чтения данных из $_POST, а отдельно функцию для валидации данных, отдельно функцию записи данных в БД.
каждая функ на один файл,а потом в главном файле все это подкл через реквер?
Если вам тут не ответили или вы что-то не успели обсудить - напишите в новом треде, наверняка кто-то ответит. А тут больше писать не надо.
>>1958260
Можно пока что писать в одном файле, если функции небольшие. В отдельные файлы обычно выносится то, что можно подключать из нескольких мест, чтобы не копипастить.
>в ларе можно свои классы писать
А это разве делается не через механизм создания собственных сервис-провайдеров и фасадов?
Прочитай, что такое шаблонизатор blade. Его использует лара. Пишешь в контроллере
return view('index', compact('paginator', 'categoryList'));
и тебе во вью с именем index.blade.php передаются две переменные из контроллера: $paginator и $categoryList. Ну или какие захочешь. А во вью уже вся разметка.
Что касается жабаскрипта, то его пишут в resources/js/xxxxx.js
Подключаешь его в resources/js/app.js и перед выкладкой конпелируешь командой npm run dev (ну или npm run watch, так удобнее). Как это всё работает - читай про auth
Или, если читать не хочешь то земля тебе пухом, выполни предварительно
composer require laravel/ui
php artisan ui:auth
php artisan ui vue --auth
так то нет , хороший мид ми может пилить сносный мид код , по той простой причине что 7 летний опыт похапе внезапно не так и релевантный в том же go пайтон и тд, очевидно что базовые вещи структуры for if навернуть можно быстро , но теже паттеры которые хорошо ложатся на похапе могут быть совершенно не нужны в том же пйтоне
Это копия, сохраненная 9 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.