Это копия, сохраненная 3 мая в 00:30.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Это тред для начинающих. Слово «классы» у тебя ассоциируется только со школой, а в аттестате тройка по математике? Ты наш человек.
Предыдущий тред был тут: >>2975215 (OP)
Старые треды тут https://2ch.hk/pr/arch/ (М) (искать по слову php), а также на архиваче и в гугле по словам по словам "клуб изучающих PHP".
С чего начать - основы PHP
Наши уроки по PHP собраны по адресу http://codedokode.github.io/phpbook . Это учебник для изучающих с нуля. Там есть задачи, их нужно решать. Но если этот учебник тебе не нравится, можно читать любой другой. Или официальный справочник ( https://www.php.net/manual/ru/langref.php ). Или все сразу.
Если что-то непонятно, запости код и попроси подсказку или поищи задачу в архиве тредов.
Какой редактор использовать
Простые задачки можно решать в онлайн-песочницах вроде https://onlinephp.io/ , https://paiza.io/en/projects/new?language=php , https://www.programiz.com/php/online-compiler/ , но для программ посложнее лучше установить редактор. Есть (дорогая) IDE PhpStorm, есть бесплатный Netbeans и VSCode, условно-бесплатный Sublime Text. Чтобы в последних получить автодополнение для PHP, нужно установить и настроить PHP language server.
Вот инструкции по установке PHP на компьютер: https://github.com/codedokode/pasta/blob/master/soft/php-install.md
Гайд по командной строке: https://github.com/codedokode/pasta/blob/master/soft/cli.md
Что изучать дальше
Зная лишь основы PHP, сайт ты не сделаешь и работу не найдешь. Обычно от начинающего требуют чуть-чуть больше:
PHP, ООП, основы HTTP, HTML/CSS (основы верстки), JS, SQL, PDO, MVC, git, composer, какой-нибудь фреймворк (Laravel или Symfony), основы автоматического тестирования, основы linux, английский.
Вот неофициальный роадмап (карта того, что можно изучать): https://miro.com/app/board/o9J_lbUUBBQ=/
По многим из этих тем у нас есть уроки или задачки:
- для понимания, что такое веб-сервер, прочти урок https://github.com/codedokode/pasta/blob/master/soft/web-server.md
- для понимая MVC, работы с БД и формами, реши задачу про студентов, в ней много полезных советов: 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
- почитать про паттерны можно тут https://designpatternsphp.readthedocs.io/ru/latest/ (если ты не изучил ни одного фреймворка, то это будет рановато). Если хочешь увидеть примеры использования паттернов в реальном коде - ковыряй исходники Симфони, например Symfony Forms. Ну и скажем честно, начинающему без опыта, который не видел сложный код, паттерны понять будет сложно.
- для улучшения английского можно читать news.ycombinator.com - там много статей на тему IT.
Также, у нас есть задачи которые позволят тебе изучить или подтянуть до нормального уровня знания JS/HTML/CSS/SQL. Решай их параллельно с задачами выше.
- задачи на HTML/CSS: https://github.com/codedokode/pasta/blob/master/html/html.md
- хороший учебник по JS: https://learn.javascript.ru/
- задачи на 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/
- задачки на SQL: https://www.sql-ex.ru/ (нужна регистрация), https://sql-academy.org/ru/trainer и немного наших задачек: https://github.com/codedokode/pasta/blob/master/db/databases.md
Что еще почитать
- Мануал по PHP — http://www.php.net/manual/ru/langref.php
- https://phptherightway.com/
- Книга: Профессиональное программирование на PHP Джордж Шлосснейгл
- Книга: Мэтт Зандстра — PHP: Объекты, шаблоны, методики программирования
- Про Git: https://git-scm.com/book/ru/v2
- Задачи на алгоритмы: https://codeforces.com/problemset
Дополнительно
- скачать учебник: зайди на https://github.com/codedokode/phpbook, нажми зеленую кнопку Code -> Download ZIP, распакуй на рабочий стол и открой index.html
- что будут спрашивать на собеседовании, если 0 опыта - будут гонять по теории, по официальному мануалу PHP, давать дурацкие задачки на переворачивание строк, гонять по SQL (транзакции, внешние ключи, напиши запрос), по JS (как сделать анимацию при нажатии кнопки), ну погугли, не ленись
- сколько времени надо изучать все это? - все зависит от тебя, в районе 12-24 месяцев
первый
На сколько я помню там 4 таблицы в первой хранятся данные об инфоблоке (типа информации о таблице), в другом таблица с элементами (собственно записи в таблице), в третьей проперти (тип столбцы в таблице их название, тип и id инфоблока) и четвертая таблица с теми самыми значениями проперти где есть id инфоблока и id проперти из третьей таблицы. Вместо того чтобы создать таблицу с нужными столбцами делается эта хуйня, ты можешь добавить сотню инфоблоков, но все данные будут в 4 таблицах. При 100 000 записей начинает всё адово тормозить.
В итоге чтобы вывести просто список товаров нужно сделать минимум 2 запроса, а самый прикол что в проперти могут быть ссылки на другие инфоблоки и id элемента, но в один запрос ты это не приджойнишь. В итоге приходится делать несколько запросов, а новички бывают делают это в цикле еще и в шаблоне
Если отключить кэш, то будет как нехуй делать несколько сотен sql запросов при загрузке страницы. Про устройство кэша отдельная песня
Сука, как и почему до этого додумались? Почему до сих пор не переделали? Где экоактивисты, это столько электроэнергии улетает вникуда?
Ты в принципе имеешь в виду заменить много запросов вида `where id = ?` на один запрос вида `where id in(?, ?, ?, ...)` ?
>Ты в принципе имеешь в виду заменить много запросов вида `where id = ?` на один запрос вида `where id in(?, ?, ?, ...)` ?
Без принципа, там не всё так просто, попробуй развернуть у себя эту хуйню что уже весело при инсталяции возьми какой-нибудь магазин из примеров, как эта хуйня поставится она создаст пару тестовых инфоблоков и заполнит данными для примера. Собственно на это говно можешь полюбоваться в базе
>пик1 и пик2
Нахуя ты сравниваешь язык и фреймворк? Поставь php и фильтр 200к+ для обоих языков, как я и написал изначально. Что самое смешное, что даже в этом варианте вакансии не гошные, а в связке пхп + го или питон + го и тд.
>пик 3
Это не продакшн сервак, довн. Я на ларе могу также запустить через serve команду. Либо могу запустить продакшн на franken еще меньшим количеством команд, чем на твоем пике.
Ах да:
>bun
Как там с дено дела обстоят?
>доля срынка опять упала. Не 77, а 76.5
Ого, на пол процента за 20 лет? Ну пыхе пизда однозначно
>половина серваков из 80 (76.5) % серваков в мире на апаче и это аргумент, а то, что почти весь интернет на пыхе - не аргумент
Ну ясн)))
>шизофазия, шизофазия, а вот го, го вот это да
Манька, как займёт го место пыхи, тогда и приходи. 10 лет назад, ты говорил, что это сделает нода. Ещё через 10 появится новый яп и он то уж точно всех победит, знаю, слышал
Пыха отличный язык?
> Как там с дено дела обстоят?
Пилит другая команда, работает на расте, ts из коробки и глубоко под капотом v8. Обновления выходят чуть ли не каждый день, по крайней мере у крейта deno_core. А так довольно шустрая штука, правда нет полной обратной совместимости с node.js из стандартной библиотеки всё чуть-чуть разное.
>нет полной обратной совместимости с node.js из стандартной библиотеки всё чуть-чуть разное
хи-хи-хи
>Это не продакшн сервак, довн. Я на ларе могу также запустить через serve команду.
И высрешь 60к RPS? Все ты можешь, но не будешь. Это сразу было ясно когда ты начал всю эту чухню в пример приводить.
Пидор тупой, речь с самого начала шла про то что ждет пхп вкатуна на этом говноязыке. Он будет ебаться с нжинксом, точка. Никаких бинарников, никакого встроенного сервера, никакого сервера на этом ебаном языке у него не будет.
>Манька, как займёт го место пыхи, тогда и приходи
Хуесосина тупорылая, несколько лет назад вакансий на го было НОЛЬ. Зеро блядь. А сегодня на каждом пхп собесе спрашивают знает ли кандидат го.
Ты можешь рваться сколько угодно. Большая часть вакансий на го это сервисы, которые не будут написаны на пхп. А большая часть го программистов это бывшие пхп сеньоры.
Короче положняк по пхп в 2к24 такой:
1) Статистика доли рынка пхп дутая, 90% там это CMS, которые нормальных вакансий на актуальном стеке не создают.
2) Большая часть кода на пхп это легаси говно. А большая часть вакансий это поддержка написанного кем-то пять лет назад кала. Актуальная версия это 18% рынка.
3) Джаваскрипт лезет изо всех щелей. У этих дебилов каждый месяц новый фреймворк. Как только звезды сойдутся и высрутся какие-нибудь новые "рельсы" вся дешевая разработка бекэнда улетит жс макакам.
4) Все действительно сложные и интересные бекэнд задачи утекают в го. Старые сервисы, которые приносят бабки на го переписываются, а новые сразу идут мимо пхп.
Все что остается пхп макакам сегодня - это сидеть на каловом ларавеле и заниматься перекладкой джейсончиков из актив рекорда и обратно. В ожидании когда их место займут еще более тупые джаваскрипт макаки. А ну да, еще остается пердеть что пхп стронг и с ним-то как с руби никогда не будет, твердо и четко.
>можешь рваться сколько угодно
Эти проекции🤭
>булет, точно вам говорю, будет, суки
Поживём, увидим)))
>как с руби буит
Он 80% срынка занимал?)))
>Поживём, увидим)))
>)))
Сразу потянуло одноклассниками и вбыдлятней. Про лужайку еще че-нить перни, дифиченто.
Вордпресс изучай, у него доля рынка большая. А лучше сразу битрикс. Бессмертная тема.
Успокаивайся, выдыхай))) скоро го как разъебет пыху, вот тогда мы пососем, а все деньги и интересные проекты потекут к тебе))) уже потекли, мы поняли))))
Например, у меня есть символы:
A
@
На дваче это, мб, не видно, но у меня на странице визуально видно, что @ занимает больше места, чем буква А.
Как мне посчитать, аноны? Или хотя бы привести оба символа к одному размеру?
А какое отношение пхп имеет к тому как что выглядит на твоей странице? Символы браузер отображает, а не пхп.
Ты бы почитал хоть что такое шрифт вообще.
https://ru.wikipedia.org/wiki/Компьютерный_шрифт#По_ширине_символа
>какое отношение пхп имеет к тому как что выглядит на твоей странице
Я думал, мб есть функция, которая считает.
Я пытался сделать таблицу из говна и палок, высчитывая количество пробелов между словами и у меня постоянно что-то съезжает, я подумал, мб дело в том, что символы занимаются разное количество пикселей и нужно посчитать сколько они занимают и включить это в расчет количества пробелов между словами.
Но вот сейчас подумал и вспомнил, что есть тег в html, связанный с таблицами, попробую, мб получится то, что надо.
Спасибо за ссылку.
> $ref = &$i['CHILD'][$lastIndex];
> $parents[$lvl] = &$ref;
Ааа, опять ссылочки, анон. Плохо, что сейчас я не пойму, как ты решил эту задачу, но спасибо огромное за решение
Доку читают только те, кому уже все понятно, для уточнения деталей.
В ларакастах есть курс по в элоквенте. Дто это паттерн, про него можешь почитать в "Архитектура cложных веб
приложений" Adel F
Честно я кайфую от него. Нравится и эстетически, и практически удобочитаемо. А как же прекрасно на секунду отвлечься от всего чтобы просто написать заветный ламповый символ
Гораздо лучше создать класс со статическими методами для каждой зоны ответственности. По типу класс ProductUtilite, где будут статические методы SumProductsPrice(), GetProductsCount().
Ты имеешь ввиду объявленные переменные в аргументах функции? Одинаковые названия это норма даже если типы разные, главное чтобы понятный смысл отображали.
Есть класс A, от него наследуется B, от него наследуется C. Правильно ли я понимаю, что с точки зрения ООП, я не могу в классе A реализовать метод, который, например, будет выводить все protected свойства класса? Если класс C объявляет новое свойство, класс A по логике не может обращаться к нему, не может его вывести.
https://3v4l.org/RjMCt
То есть, технически в PHP этот код работает, практически - так писать нельзя. Нехуй в классе Dvach ссылаться на свойство, которое не является его частью, или частью одного из классов-родителей.
Верно?
https://3v4l.org/am7LT
И, следовательно, это априори ущербная архитектура, printAllProtectedProperties стоит вынести в трейт, и добавлять его в каждый класс, который должен обладать соответствующей функциональностью.
Верно?
Как тебе уже сказали, с такими вопросами не к серверному PHP, а скорее к клиентскому JS. Этодругое немного, но я года пол назад реализовывал функцию, которая проверяет, поддерживается ли соответствующий emoji в ОС и браузере человека, или нет. С оговорками, решаемо через canvas. Я сейчас слишком заёбан, чтобы искать этот код, так что надеюсь, по подсказке ты сам смекнёшь, что к чему. Если нет, бампани к концу недели, посмотрю конкретнее. По памяти примерно - берёшь canvas, пишешь в нём текст (это делается через JS, гетконтекст2д и филтекст что-то там). В твоём случае - смотришь, какой последний символ по оси X окрасился в цвет. Условно, для 'A' это будет (14, 16). Для '@' (20, 14). 20 больше 14, значит, '@' шире.
А вообще, используй моноширинный шрифт для своей таблицы, а не городи эту хуйню. Элементарно.
Почему? Протектед свойства доступны классам наследникам. Или в чем твой доеб? Читал твой пост жопой, впадлу вчитываться
Мне сказали так. Технически, оно работает. Технически, можно и типизированному свойству изменить значение на значение другого типа через Reflection, потому что PHP позволяет выстрелить себе в ногу миллионом способов. Но с точки зрения ООП, это код говна, всякий класс должен быть инкапсулирован и исходить из того, что он содержит в себе все нужные свойства и методы. В Java, типа, ты так не сделаешь. И если второе с огромной натяжкой терпимо (где get_object_vars), потому что get_object_vars в любом случае получает только те свойства, которые фактически в объекте есть. Но лучше делать это через трейт. То за первое вообще нужно убивать. Вот, пришёл верифицировать эту информацию.
>с точки зрения ООП, я не могу
У ООП нет никакой "точки зрения". Это "подход", способ создавать программы. Ты либо ему следуешь, либо нет.
>Если класс C объявляет новое свойство, класс A по логике не может обращаться к нему, не может его вывести.
Что значит "не может"? По чьей "логике" не может?
Ты ведь сам на себя накладываешь дополнительные ограничения. Сам решаешь что делать, а что не делать.
Если ты в одном классе обращаешься к свойству другого класса значит ты их связал. Удобно это? Ну наверное прямо сейчас удобно. Проблему решает. Какие у этого последствия? При изменения классов придется постоянно следить за этой зависимостью, меняя одно ты теперь обязан всегда менять второе. А если продолжить в такой манере, то выстроятся очень длинные цепочки, может даже петли зависимостей. Меняешь одно - меняешь все. Стоило оно того? Это ведь тебе оценивать стоило или нет. ООП поебать что ты на каждый пердежь по пять классов меняешь.
Да и в целом почему ты считаешь что Refleсtion API и debug_backtrace() это костыль,
а выводить все protected свойства класса это нормальное адекватное действие?
Это точно такое же "мета программирование". Ты добавляешь поверх логики работы с данными логику работы с программой. Вопрос тот же: стоит оно того? Зачем пытаться статическую структуру класса сделать динамической, если она для этого не предназначена?
По поводу трейтов та же история. Ты видишь явные сложности с одиночным наследованием, там буквально в трех соснах можно запутаться. Но почему ты решил что множественное наследование, гораздо более сложный концепт, сделает лучше?
А чтобы подобные перечисления было удобно выводить и использовать и сделали enum в php. До этого все пользовались либами.
Правильный код должен выглядеть так: https://3v4l.org/hQAbU
Я вчера видел сон, как будто пишу очень много кода на PHP, а $ нажимается только через Ctrl+Alt+Shift.
Спасибо за ответ, но я думаю, что это вне моей компетентности (я все-таки еще вкатун с посредственными знаниями, а в JS не ушел дальше Объектов).
Моя задача более простая и менее требовательная, чтобы подходить к ней с таким решением.
Сама эта защита - просто скрытое поле с токеном в форме. Следовательно, она не может быть для каждого поля, а только целиком для формы.
Значит, font-family: monospace в CSS и пойдёт.
>У ООП нет никакой "точки зрения". Это "подход", способ создавать программы. Ты либо ему следуешь, либо нет.
Вот доебался. А ещё у российского права нет точки зрения, потому что оно не субъектно. И даже больше скажу - в отличии от всяких методологий, право как теория нахуй никому не нужно и не имеет смысла, работает лишь там и тогда, когда есть институт принуждения и насилия в лице государства. А теперь введи в гугл "с точки зрения российского права".
> Что значит "не может"? По чьей "логике" не может?
В джаве (использую её как ориентир, менее говнистый ООП-язык) не может технически как я понял, знаю её на уровне базового синтаксиса. По "логике" ООП, насколько мне известно, тоже не может.
> Ты ведь сам на себя накладываешь дополнительные ограничения. Сам решаешь что делать, а что не делать.
И что? Это не отменяет того, что какие-то действия адекватны, а какие-то - долбоебизм. Я и срать снимая свитер могу.
> А чтобы подобные перечисления было удобно выводить и использовать и сделали enum в php
Про enum я знаю и использую их, это вообще не то, что мне нужно в этой задаче.
> ...
Касаемо всего твоего остального поста. Во-первых, меня посетила мысль о том, что метод, который выводит все protected-свойства, это вообще не совсем то, что может рассматриваться с точки зрения ООП. Это уровень не бизнес-логики, а чего-то ниже. Соответственно, в этом методе можно себе позволить сослаться на свойства дочерних классов. Потому что этот метод особенный. Он оперирует не абстрактными сущностями, характерными для данного проекта, а на техническом уровне работает. Во-вторых, в целом, из твоего сообщения сложилось впечатление, что всё не так однозначно. И писать код, который на 100% соответствует принципам ООП, ты ебанёшься. Нужно смотреть по ситуации, по конкретному контексту. Типа, злоупотреблять использованием свойств, которые будут определены в потомке, не стоит, но в некоторых ситуациях это именно то, что нужно, иначе придётся писать сотню классов. И в данной ситуации выбор между трейтом и тем, что описал я, скорее дело вкуса.
Правильно понял тебя?
>У ООП нет никакой "точки зрения". Это "подход", способ создавать программы. Ты либо ему следуешь, либо нет.
Вот доебался. А ещё у российского права нет точки зрения, потому что оно не субъектно. И даже больше скажу - в отличии от всяких методологий, право как теория нахуй никому не нужно и не имеет смысла, работает лишь там и тогда, когда есть институт принуждения и насилия в лице государства. А теперь введи в гугл "с точки зрения российского права".
> Что значит "не может"? По чьей "логике" не может?
В джаве (использую её как ориентир, менее говнистый ООП-язык) не может технически как я понял, знаю её на уровне базового синтаксиса. По "логике" ООП, насколько мне известно, тоже не может.
> Ты ведь сам на себя накладываешь дополнительные ограничения. Сам решаешь что делать, а что не делать.
И что? Это не отменяет того, что какие-то действия адекватны, а какие-то - долбоебизм. Я и срать снимая свитер могу.
> А чтобы подобные перечисления было удобно выводить и использовать и сделали enum в php
Про enum я знаю и использую их, это вообще не то, что мне нужно в этой задаче.
> ...
Касаемо всего твоего остального поста. Во-первых, меня посетила мысль о том, что метод, который выводит все protected-свойства, это вообще не совсем то, что может рассматриваться с точки зрения ООП. Это уровень не бизнес-логики, а чего-то ниже. Соответственно, в этом методе можно себе позволить сослаться на свойства дочерних классов. Потому что этот метод особенный. Он оперирует не абстрактными сущностями, характерными для данного проекта, а на техническом уровне работает. Во-вторых, в целом, из твоего сообщения сложилось впечатление, что всё не так однозначно. И писать код, который на 100% соответствует принципам ООП, ты ебанёшься. Нужно смотреть по ситуации, по конкретному контексту. Типа, злоупотреблять использованием свойств, которые будут определены в потомке, не стоит, но в некоторых ситуациях это именно то, что нужно, иначе придётся писать сотню классов. И в данной ситуации выбор между трейтом и тем, что описал я, скорее дело вкуса.
Правильно понял тебя?
450x360, 0:10
>писать код, который на 100% соответствует принципам ООП, ты ебанёшься
Невероятно сложные принципы. Создавай объекты, наследуй поведение, используй полиморфизм. Заебешься следовать.
Тебе о том и написано что ООП само по себе никаких ограничений на то как ты будешь эти объекты использовать не накладывает. А даже то что писано это не "правила ООП", а скорее описание "как объектно ориентированный подход может выглядеть". И описание это скорее для создателей языков, а не для рядовых программистов.
Джаву зачем-то приплел. Ясен хуй в джаве это не работает, потому что джава язык компилируемый и компилятор не позволяет ссылаться на свойство, которого не существует. А в пхп можно, потому что ошибки возникают только когда код выполняется. Для этого даже не надо никакого ООП https://3v4l.org/7tFaR язык так устроен. Пока ты метод, в который насрал, не вызовешь - ошибки не увидишь https://3v4l.org/0gb3O .
Вообще такое впечатление что у тебя в башке какая-то каша и ты перепутал понятия ООП и какой-нибудь солид. Да при этом еще и определения не прочитал или прочитал да не понял. Ну вот что такое "логика ООП"? Можно ссылку какую-то, почитать просветиться?
>Про enum я знаю и использую их, это вообще не то, что мне нужно в этой задаче.
Ну это платина. Игра в черный ящик, это главное развлечение программача. Я делаю какую-то хуйню, но какую - не скажу. Угадайте что в черном ящике и дайте правильный ответ.
Пчел. Для списков неизвестной длины существуют массивы. Для списков известной длины существуют энумы. Предельная тупость использовать для этого структуру класса.
private ?int $prop = null;
И в сеттере кидать исключение, если prop !== null, а ты пытаешься его переопределить?
Во, такая аналогия посетила. В JS есть рекомендация по-умолчанию писать const вместо let, если ты не уверен на 100%, что значение этой переменной должно меняться. Подумал, что в PHP аналогично: пиши везде readonly, где нет уверенности, что это точно будет меняться. Видимо, стрелочка не поворачивается и в PHP всё не так?
>это создавать себе проблемы?
Какие проблемы? Ты переломишься этот ридонли убрать если вдруг понадобится или че?
Значение ридонли можно задать только в конструкторе - раз. Только в конструкторе того класса, где данное свойство было объявлено - два.
А может это ты тупой? Да, это так охуенно удобно, задавать значения 80% свойств в конструкторе. И лишаться возможности переопределить их в дочернем классе без пердолинга parent::construct() в каждом наследнике. А если вдруг окажется, что этому свойству таки не надо быть readonly, потом ещё и менять его. Ты сюда повыёбываться пришёл, или есть что по делу сказать? Сам используешь readonly для большинства свойств? Как, удобно?
Мудила гороховый. Что тебе мешает убрать ридонли когда появятся наследники? Вы внатуре ебанутые? Или угашенные? Ну стало неудобно - так убери блядь и сделай опять удобно.
Вы, ебанашки, действительно не понимаете сколько бойлерплейта из кода уходит с использованием ридонли и короткого конструктора? Прямо сейчас 99% php кода это присваивание говна в конструкторе и геттеры, которые нихуя не делают.
В нормальных языках уже додумались и вообще всю эту требуху нахуй выкинули. Одной строчкой это все объявляется и создается.
У меня почему то ничего не делает команда justify .Как я понимаю она должна равномерно распределять текст на экране. Уже полтора часа мозги себе трахаю, но не понимаю в чём же дело. Более опытные люди, подскажите, как это исправить?
Спасибо, не заметил
Я неправильно выразился.
Я имел ввиду формы.
Любая форма на сайте должна иметь XSRF-защиту?
Если нет, то для каких надо делать, а для каких нет?
А какая разница? Делаешь один раз сразу для всех и мозги не ебешь.
Когда я сохраняю пароль сгенерированной капчи, то что быстрее будет - сохранять её в БД, или в static ?
Если ты хочешь чтобы пользователю этой формы твоего сайта могли передать ссылку, открыв которую он отправит какие-то данные на твой сайт будто бы от самого себя (на самом деле это ссылка такая хитрая).
То можешь не ставить защиту на эту форму.
Как настроить .htaccess
Что писать в этой ебале?
Я нихуя не понимаю в этих RewriteRule и RewriteCond, да, блять, я читал, что в RewriteRule пишется регулярка для URL, а RewriteCond задает условие для правила.
Но у меня нихуя не получается связать 2 + 2.
Читаю-читаю одно и тоже, а в голове пусто.
RewriteEngine on
RewriteRule .htaccess - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /index.php
Написана сейчас эта хуйня, а мне нужно, чтобы сервер спокойно отдавал стили и изображения, а остальную хуйню только через index.php
Я понимаю, что я долбаеб и тут и так все очевидно, но объясните на пальцах как понимать все эти [F], -f и т.д.
И подскажите уже код, блять.
У меня там будет поле для поиска.
Ну будут от некого пользователя запросы о том, чтобы найти какую-нибудь ебалу и что? Сильно вредно? Я ж не ебу с какими хуйнями придется столкнуться в будущем.
Молодец, держи с полки пирожок
А документацию для кого придумали? Тем более говорят что у симфони заебатая документация
Уже поздно метаться
Это смешно но линивым и безинициативным вкатываться в рисование ещё сложнее чем в программирование.
1. Модификатор readonly не стоит читать просто как "значение этому свойству можно задать один раз" (аналог const из JS), оно обладает дополнительной семантикой. Между обычными свойствами и readonly отличия не только в "значение этому свойству можно задать один раз". И дело тут не в технической реализации, а в том, что использование readonly-свойств подразумевает немного другую архитектуру, если угодно. Нельзя просто взять и добавить/убрать это ключевое слово. Ну, убрать скорее всего можно, а добавить - нет. Это надо учитывать.
2. У меня вообще отношение к конструктору (__construct), было... ну, не то чтобы его надо избегать, но я его редко использовал. Типа, нахуя? Значение по умолчанию я могу определить в классе при объявлении свойства. Переопределить его с помощью сеттера, если надо. А обязывать себя всё это установить на этапе создания объекта... нахуя? При этом, насколько мне известно, в многих других языках программирования, в отличии от PHP, свойства (и их аналоги, у разных языков разный понятийный аппарат) просто тупо задаются в конструкторе. Например, оно так в JS и Python. Из чего у меня рождается предположение о том, что конструктор это база, это хорошо, он должен быть у большинства классов. Это, типа, стандартная практика в многих языках. И то, что PHP заставляет присваивать значения readonly-свойствам в конструкторе, это указание на то, что PHP тоже пытается двигаться в эту сторону.
Я к правильным выводам пришёл, или опять обосрался?
>пытается понять суть readonly-свойств
Все у тебя через очко. Все задом наперед. Ридонли свойства решают конкретную ПРОБЛЕМУ. Семантика, хуянтика это следствие.
ООП это про инкапсуляцию данных и правил работы с этими данными внутри объектов. Если поля публичные, то никакие правила при их изменении снаружи не соблюдаются. Снаружи нихуя не понятно что можно менять, что нельзя и какие значения нужны.
То же самое если собирать объект по частям без конструктора. По сути создается не рабочий объект, а потом нужно каким-то хуем догадаться как его сделать рабочим. Причем снаружи по нему нихуя не видно рабочий он уже или нет.
Делая поля приватными мы запрещаем их менять не по правилам. Но в нагрузку получаем что для чтения этих полей снаружи нужно написать кучу специальных методов. Причем по сути эти методы нихуя больше не делают, бесполезный код, по несколько строчек на каждое свойство.
Так вот умные люди заметили, что проблема не в чтении, а именно в несанкционированном изменении. Читай хоть обчитайся, раз объект всегда в корректном состоянии все нормально. Мы просто получаем бойлерплейт как налог на хорошее проектирование.
Поэтому в нормальных ООП языках добавили дополнительный модификатор: readonly. Чтобы иметь все профиты корректного состояния, но не ебаться с доступом на чтение. Все. Точка блядь. Вот зачем это нужно. Все дальнейшее это следствия. Семантики хуянтики, один раз можно инициализировать, десять, вообще похую.
Ридонли нужно чтобы писать только это https://3v4l.org/dd2fl вместо вот этого https://3v4l.org/Uolm4 . Наследования-хуедования какие-то блядь выдумал. Наследования свои в очко себе засунь, да. Всё, забыли. Не использует никто наследование, не работает оно. Еще в 2004 когда паттерны хайповали все забили на наследование и начали композицией пользоваться.
У меня не может быть в этом методе значения по умолчанию, если присланное значение не является значением из белого списка.
То есть, по сути, readonly это сорт оф асинхронная видимость с дополнительной гарантией того, что и внутри класса мы случайно не изменим значение?
Бля, какая асинхронная. Асимметричная, перепутал слова.
https://www.php.net/manual/en/language.references.return.php
https://3v4l.org/HPlJT#v8.3.2 работает
https://3v4l.org/HPlJT#v5.0.0 нет
https://3v4l.org/qKM5p#v5.0.0 а без скобок да
Чёт как-то через жопу этот ваш 3v4l.org работает, версия PHP в ссылке есть, а он выбирает неправильную.
Ну, короче, возьмите код с первой ссылки, и запустите его на какой-нибудь нормальной версии (последней, например), а потом на древней (5.0.0, например).
Информация не устаревшая, просто в новых версиях пхп убирает скобки во время компиляции, походу считает что они не нужны, раз нихуя не делают. Можешь багу им на багтрекере написать.
А с выражением по ссылке все нормально https://3v4l.org/I4KcF#v8.3.2 как не работало так и не работает.
Ну и не могу не добавить, что возвращать что-то по ссылке, тем более из объекта это полная хуйня и говнокод.
Ты в РНР-треде вообще-то. Тут уровень дискуссий не такой высокий как в джава, го или даже питоне.
Двачую. По факту мы ничем не отличаемся от битриксойдов которых поливаем здесь говном
Я вот жду, что сольют курсы Михаила Каморина и тогда можно будет повысить уровень дискуссий.
Хорошо, я буду ждать...
>>1008826 (OP)
Есть роут, который отвечает за вывод новой модели карточки товара. После этого роута сработает этот метод
ProductPage::get(
$productFieldValue,
request()['field']
);
Вот как выглядит упрощенный вариант контроллера
class ProductPage
{
...
public static function get($productFieldValue, string $getByField): array
{
//Какая-та логика
//...
$arProduct= Product::getMainProduct($productFieldValue, $getByField);
$arProduct = Product::getPreparedProduct($arProduct);
self::setProductInfo($arProduct);
//...
//Какая-та логика
}
...
}
Product это класс сущности.
Он содержит метод getMainProduct, который совершает запрос в базу данных.
getPreparedProduct просто приводит полученные данные в нужный вид.
setProductInfo - это метод ProductPage, который использует related сущности, чтобы получить другую информацию, нужную для вывода карточки товара.
Так же контроллер ProductPage хранит в себе другие методы, которые нужны для других роутов.
Мне нужно сделать так, чтобы роут мог возвращать не только новую модель карточки товара, но и старую модель, вместо новой.
Сперва я хотел сделать метку $isOldModel (которое получает свое значение от параметра в запросе) внутри метода get, и там при определенных условиях использовать либо одни методы getMainProduct и getPreparedProduct, либо другие методы getMainProductForOldModel и getPreparedProductForOldModel.
Потом мне сказали, что эту метку нужно переместить непосредственно в роут, а от ProductPage отнаследоваться и создать OldProductPage. И в зависимости от метки в роуте вызывать метод get либо от ProductPage, либо от OldProductPage.
Я так и сделал, но потом понял, что от ProductPage мне не особо много методов нужно. Один массив констант из трех элементов и один-два метода. Метод get, setProductInfo нужно переопределить.
Так же нужно было добавить два дополнительных параметра в метод get для старой модели, так как старая модель содержит поле отзывов, которому нужны эти параметры. Но проблема заключается в том, что сигнатура метода get в ProductPage содержит два параметра, а не четыре, как это нужно для OldProductPage .
Вот я и хотел спросить, может можно сделать какой-то другой вариант, чтобы поделить логику между старой и новой карточкой товара? Тот же самый вопрос для класса сущности Product. Спасибо
>>1008826 (OP)
Есть роут, который отвечает за вывод новой модели карточки товара. После этого роута сработает этот метод
ProductPage::get(
$productFieldValue,
request()['field']
);
Вот как выглядит упрощенный вариант контроллера
class ProductPage
{
...
public static function get($productFieldValue, string $getByField): array
{
//Какая-та логика
//...
$arProduct= Product::getMainProduct($productFieldValue, $getByField);
$arProduct = Product::getPreparedProduct($arProduct);
self::setProductInfo($arProduct);
//...
//Какая-та логика
}
...
}
Product это класс сущности.
Он содержит метод getMainProduct, который совершает запрос в базу данных.
getPreparedProduct просто приводит полученные данные в нужный вид.
setProductInfo - это метод ProductPage, который использует related сущности, чтобы получить другую информацию, нужную для вывода карточки товара.
Так же контроллер ProductPage хранит в себе другие методы, которые нужны для других роутов.
Мне нужно сделать так, чтобы роут мог возвращать не только новую модель карточки товара, но и старую модель, вместо новой.
Сперва я хотел сделать метку $isOldModel (которое получает свое значение от параметра в запросе) внутри метода get, и там при определенных условиях использовать либо одни методы getMainProduct и getPreparedProduct, либо другие методы getMainProductForOldModel и getPreparedProductForOldModel.
Потом мне сказали, что эту метку нужно переместить непосредственно в роут, а от ProductPage отнаследоваться и создать OldProductPage. И в зависимости от метки в роуте вызывать метод get либо от ProductPage, либо от OldProductPage.
Я так и сделал, но потом понял, что от ProductPage мне не особо много методов нужно. Один массив констант из трех элементов и один-два метода. Метод get, setProductInfo нужно переопределить.
Так же нужно было добавить два дополнительных параметра в метод get для старой модели, так как старая модель содержит поле отзывов, которому нужны эти параметры. Но проблема заключается в том, что сигнатура метода get в ProductPage содержит два параметра, а не четыре, как это нужно для OldProductPage .
Вот я и хотел спросить, может можно сделать какой-то другой вариант, чтобы поделить логику между старой и новой карточкой товара? Тот же самый вопрос для класса сущности Product. Спасибо
ТУт нет битриксойдов? Не знаете ка перевести нижний вариант в D7 для getList ORM ElementTable?
CIBlockElement::GetList(
[$arSortType['TYPE'] => $arSortType['BY']],
$this->arFilter,
false,
[
'nTopCount' => false,
'nPageSize' => $obPagination->size,
'iNumPage' => $obPagination->page,
'checkOutOfRange' => true
],
['*', 'CODE', 'PROPERTY_PAGE_TITLE']
);
Давай для начала изучим правильные названия для штук, которые мы пишем в CSS-файле. Он состоит из множества правил (rule) такого вида:
.justify {
text-align: justify;
}
Этот блок вместе называется правило. Правило состоит из селектора (selector) - в данном примере это ".justify" и набора свойств (properties) - в данном примере свойство одно, text-align: justify. Свойство состоит из названия (text-align) и значения (justify).
Таким образом, justify это не команда, а значение свойства text-align.
Почему текст не растягивается? Потому, что ты написал вместо text-align слово text-aling. И редактор намекает тебе на это зеленым подчеркиванием.
Будь внимательнее к каждой букве. Я вижу, ты вместо lesson пишешь leasson, а вместо index пишешь idex. Так ты постоянно будешь получать непонятные ошибки.
А че ты забздел-то? Заебись же перло.
Хуяришь какие-то статические методы в контроллере, да побольше. Называешь актив рекорд модель "сущностью". Че ты вдруг побежал "логику делить"?
Ну и ебашь наследование, добавишь пару необязательных полей, ну и похуй. Тут все равно говно такое, что только выкинуть нахуй и заново написать.
Пошел нахуй, пидорас, к тебе с нормальным вопросом обратились, а ты хуйню отвечаешь. И кто еще тут тупой? Сидят долбаебы, либо срутся, либо хуйню пишут. Тред говна.
>нормальным вопросом
>метод в TDG по белому листу header внутри TDG присланное значение не является значением
>Тред говна
Потому и тред говна, что собираются сюда дегенераты, которые двух слов связать не могут. Тебе правильно написали: не TDG, а ТГК. Попустись и внятно изъясняйся.
Это же не я писал, что вы так реагируете на код. Я джун, увидел класс карточи товара ProductPage, сделал такой же класс для старой карточки товара. Но вот метод не так называю. Если можно сделать получше, не сильно изменяя код старой карточки товара, почему бы и нет
>внятно изъясняйся
Что там невнятного?
Мне уже похуй на вопрос, потому что я его решил, но там серьезно ничего нет сложного для понимания.
И какое, блять, ТГК?
Table Data Gateway, TDG, не?
>что вы так реагируете на код
Не удивляйся, тут одни озлобленные люди сидят.
Реально нормальных людей тут 1,5 анона.
>Их ебанутые иероглифы
>Наши очевидные аббревиатуры
ТГК хотя бы гуглится, чучело. Если это гейтвей к базе, то откуда нахуй у тебя берутся хедеры какие-то блядь? Какие-то сука вайтлисты. Бред шизофреника, о чем тебе сразу и написали.
Правильно тебе отхуесосили. Пытаться писать какие-то гейтвеи, но не знать что такое исключения - это каким же уебнем надо быть? Ты пхп по тиктокам учишь что-ли, сука? Покажи мне блядь пхп курс где тему исключений скипнули.
>откуда нахуй у тебя берутся хедеры
Так я и думаю, что они в TDG не нужны.
>Какие-то сука вайтлисты
Я читал, что нужно использовать плейсхолдеры для значений, которые вставляются в SQL запрос, но если название столбца тоже лежит в переменной, то ее значение нужно проверять по белому листу (содержит список названий столбцов, с которыми разрешено проводить этот метод). Я не стал делать 10 методов: обновить одмн столбец, обновить второй, я просто сделал один метод, где можно передавать название столбца.
>что такое исключения
И кому нужны эти исключения? Пользователю, который захочет пошалить с моим кодом? Разве сайт не должен выгонять на страницу ошибки, а не сообщать что не так в коде, пользователю?
Нельзя там сделать лучше.
Вот тебе аналогия чтобы было понятно:
Ты приперся в обоссанный обблеванный бомжатник. По разбитым бутылкам и использованным шприцам добрался до забитого в прошлом году толчка попытался посрать, и так и эдак - нихуя.
И ты полез на двач спрашивать совета как лучше спроектировать санузел: раздельно или вместе?
Да похуй как. Чтобы посрать - надо толчек прочистить. А чтобы что-то тут проектировать надо выгнать нахуй бомжей и пол года чистить эти авгиевы конюшни.
>И кому нужны эти исключения? Пользователю
Ты хочешь чтобы я тебе тут высрал курс по проектированию веб приложений на пхп?
Ловятся блядь все исключения специальной функцией, которая и перенаправляет пользователя на страницу ошибки или куда там тебе блядь надо.
>все исключения специальной функцией, которая и перенаправляет пользователя на страницу ошибки
Ну и закончим на этом.
Спасибо, что навел на мысль.
Вот так должны работать "вайтлисты" https://3v4l.org/fugVD .
Спрашивать надо какие колонки есть, а какие нет, у того кто знает список этих колонок.
А вот так работает ловля ошибок https://3v4l.org/KUCBB .
Разумеется никто пользователю содержимое ошибки не показываеn, просто записывают в лог. А пользователя редиректят на 404.
Я не знаю по каким тиктокам ты пытаешься учить язык. Но найди блядь себе нормальный курс. И не еби мозги анонам. Выпытывать у тебя че ты там на самом деле хотел по несколько постов никому нахуй не упало.
Насмешил, проверяй.
Сколько тебе платят как битриксойду?
Откуда? Это типа интервью какого-то?
Допустим, у меня есть RoleEnum, который содержит RoleEnum::admin RoleEnum::moderator RoleEnum::user
В каких-то ситуациях, мне нужно трансформировать роль в string. Типа: "Ваша роль: (RoleEnum::admin > администратор)".
В каких-то ситуациях, мне нужно трансформировать роль в int. Типа, битовая маска для понимания того, достаточно ли у пользователя прав для выполнения того или иного действия.
Мне лучше использовать не типизированный enum и добавить в него методы типа toStringRole toSecurityBitmask?
А типизированные enum это как синтаксический сахар для тех ситуаций, где мы знаем, что данный enum будет трансформироваться в один скалярный тип? Типа, всегда string, и чтобы не нужно было делать лишние методы, мы можем прямо весь enum типизировать как string и нехуй.
Нет, нихуя.
У тебя есть роль. Есть энум со списком возможных ролей. И есть представления этой роли в разных процессах.
А зачем тебе запрос чере d7 если у тебя уже есть выборка через старое апи? И в чем конкретно проблема?
Я нихуя не понял из твоего ответа. Что нихуя-то? Типа, ты к тому, что трансформацию этого enum под разные цели стоит пихать не в сам enum, а в те места, где он используется?
Слушай, так не смешно же...
1280x720, 0:02
>Допустим, у меня есть RoleEnum
>Я делаю им все, а потом еще и жопу им вытираю
>Нет, нихуя.
>У тебя есть
>роль
>энум со списком возможных ролей
>И есть представления этой роли в разных процессах
https://www.php.net/manual/en/language.enumerations.methods.php
Ну а чем это отличается от примеров из документации? Как я должен понять, что трансформация enum-значения в "нариман/мочух/анон" должна производиться в классе, в котором это происходит, а вот в документации
Suit::Hearts, Suit::Diamonds => 'Red'
прямо в методе enum и заебись.
Какие критерии? Нахуя тогда вообще нужны методы в enum, если не для этого?
Тяжело с дебилами, но походу других тут нет.
Давай начнем сначала. Зачем нужен enum? Для чего его используют?
Сорт оф собственный тип переменной. Чтобы можно было не
if ($user->role === 1) {}
else if ($user->role === 2) {}
...
И поди разбери, кто тут 1, а кто тут 2. А гораздо более явно:
if ($user->role === RoleEnum::ADMIN) {}
else if ($user->role === RoleEnum::MODERATOR) {}
...
Ещё и сам $user->role хранит не условное 1 (что это нахуй такое), а RoleEnum::ADMIN (всё сразу понятно).
Возвращаемся в наш пхп детсад для альтернативно одаренных и в сотый раз учимся читать. Открываем пикрелейтед и читаем по слогам.
Что тут непонятно? Enum нужен для выставления ограничений. Нечто должно обязательно быть в списке. Все. Точка. Он нужен не для получения названий, не для трансформирования хуев в пезды, это не сахар и не уксус блядь.
Если тебе нужен фиксированный список чего-то и нужно гарантировать наличие того что у тебя есть в этом списке, то ты используешь энум.
Если тебе нужна информация или свойства чего-то, то ты блядь за этой информацией и свойствами лезешь в это что-то, а не в энум. О чем, между прочим, тебе было уже несколько раз написано блядь.
>типизированный enum
А что есть какой-то другой?
>методы в enum
Ну разумеется чтобы продублировать туда содержимое моделей, наебенить побольше логики, желательно разной и бизнес и отображения и конфига, и вызывать все это через статику в любом месте кода. Нахуя ж еще?
>А что есть какой-то другой?
В русских доках "Backed enumerations" переведены как "Типизированные перечисления". Хорошо, зачем нужны Backed enumerations?
>Ну разумеется чтобы продублировать туда содержимое моделей, наебенить побольше логики, желательно разной и бизнес и отображения и конфига, и вызывать все это через статику в любом месте кода. Нахуя ж еще?
Какой, блядь, логики? Ты что за хуйню несёшь? Я где-то говорил про логику? Нет, я сказал про сопоставление типа
RoleEnum::ADMIN => "администратор"
или
RoleEnum::ADMIN => 1
Всё, блядь. Никакой логики.
Ты на вопрос ответишь? Или они нужны как раз для того, чтобы бака из /pr/ мог повыёбываться?
Не работай под рутом, он тебе так и пишет что не может найти контейнер "all", может у тебя другое имя контейнера?
>А зачем тебе запрос чере d7 если у тебя уже есть выборка через старое апи?
Потому что Рыжиков на конференции сказал что D7 готов и это заебись, а старое использовать не нужно
>За каким хуем тогда нужны методы в enum
>Чтобы можно было засрать enum лишней логикой
>Я где-то говорил про логику? Нет, я сказал про сопоставление типа
>методы в enum
Ну я пока терплю. Издержки общения с дебилами.
>"Backed enumerations"
Продолжаем учиться читать. Открываем пикрелейтед, читаем по слогам.
Что непонятно? Нужны чтобы идентификаторы хранить. Ссылки на содержимое элемента перечисления. Перечисление это не список элементов, с названиями, датами и именами. Это список ВОЗМОЖНЫХ элементов, по сути список идентификаторов элементов.
Ты на вопрос отвечай, а не жопой крути, как тяночка в тиктоке. Если ЕДИНСТВЕННОЕ предназначение backed enumerations - приведение к какому-то типу, который можно сохранить в БД, то нахуя добавлять в enum методы? И нахуя писать в доках, что обычно методы возвращают сопоставление через match?
И ты, получается, это считаешь логикой? Да, охуенная логика. Прям столько параметров и условий, аж 1, если считать значение enum условием.
>приведение к какому-то типу, который можно сохранить в БД
Тупорылое животное блядь. Где я это писал? Что вообще означает "можно сохранить в бд"? Ты там угашенный, сука?
Ну да, ну да - издержки переписки с дебилами.
>И нахуя писать в доках, что обычно методы возвращают сопоставление через match?
>нужно гарантировать наличие того что у тебя есть в этом списке >>042232
Что же блядь делает сопоставление через match? Всем тредом сидим думаем, не можем понять нахуй оно надо. Может быть для того чтобы проверить что что-то находится в этом списке? Ну нет, это слишком смелая догадка.
Ну все, залупа ты понурая, это мой последний тебе ответ. Ты явно в глаза ебешься, повторять свои посты тебе по третьему кругу сомнительное удовольствие.
А тыкать еблом в то что уже было написано по три круга, это мне нахуй не надо. Я не учитель из класса коррекции, у меня нет доброго сердца и терпения возиться с увечными и недоразвитыми. Помогать надо тем, кто может воспользоваться этой помощью. А слепошарых долбоебов, которые два предложения прочитать не могут надо слать нахуй.
>приведение к какому-то типу, который можно сохранить в БД
Открою секрет, под капотом библиотек для работы с БД все типы приводятся к нужным типам для БД, даже обычные примитивы. Те же int в пыхе зависит от архитектуры, работает примерно как isize в расте для x64 будет 64 бита, что для постгреса будет как bigint. А хотя у того же постгреса есть куча других типов, которые имеют разную длину и они под капотом преобразуются туда-сюда. С остальными типами еще веселее, тот же uuid передается байтиками, а не строкой.
Пытался сам затестить, но не получается. Если поставить секунду - да, через секунду отваливается. А вот если, скажем, минуту, то отваливается раньше по другим причинам. Пытался и через гулагнет подключиться к линкедин (рвёт раньше по Recv failure), и без подключение к сети (рвёт раньше по Could not resolve host), и к http://google.com:1234 (рвёт раньше по Failed to connect).
А тебе не приходило в голову что ждать коннекта и приконнектиться получив в ответ ошибку это мальца разные вещи?
А нажать правой кнопкой и посмотреть какие стили там применены тебе автор из видоса запретил?
Да хуй знает, я понимаю, что там миллион вариантов, а я про работу HTTP знаю на уровне нихуя. Какие варианты в голову и пришли, так и попробовал.
Ну хорошо хоть не спросил что за правая кнопка и где она находится. Забыли про кнопку, сложно.
Погугли как посмотреть стили элемента на странице. Подсказка: прямо на твоем скриншоте, в гайде пол окна браузера занимает какая-то хуйня. Что бы это могло быть?
Ну тогда держу в курсе: оно нормально коннектится и таймаут нормально работает.
99% что твой коннект просто нахуй не обосрался тем к кому ты пытешься коннектиться и они шлют тебя нахуй рвя соединение.
А, ты об этом. Я смотрел уже там, все возможные стили отключал и включал поочереди, эффекта нет, точнее он есть, но всё ещё хуже становиться.
Ну все. Заканчиваем вкат. Надули, обманули. Стили не работают, а зачем учить то что не работает.
Пчел.
Ты реально хочешь чтобы я просил у тебя скриншот, потом тыкал тебя еблом в модификатор, который добавляет этот border? Потом ты такой: ой бля, НЕ ЗАМЕТИЛ.
Может ты просто сразу будешь внимательно читать что написано?
Докер не предназначен для запуска как виртуалка с ахулиардом процессов. У тебя будет php-fpm в одном контейнере, а myql другом. Так правильно. Иначе тебе нужно в контейнер пихать систему инициализаци или какой-то демон который следит за дочерними процессами типа supervisord
Тебе надо минимум 3 контейнера, php-fpm, nginx и mysql. Если какие-то привязки к версиям не требуются возьми последние версии.
https://hub.docker.com/_/php
https://hub.docker.com/_/nginx
https://hub.docker.com/_/mysql
И лучше используй docker-compose для этого всего
>99% что твой коннект просто нахуй не обосрался тем к кому ты пытешься коннектиться и они шлют тебя нахуй рвя соединение.
Что-то ты как-то вообще не понял вопроса. Я нормально коннекчусь, куда нужно, просто хотел проверить работоспособность этого таймаута. А как её проверять - хер знает.
Поставлю вопрос иначе. Я правильно понимаю, что CURLOPT_CONNECTTIMEOUT это время, которое даётся на установку соединения, а CURLOPT_TIMEOUT это время ожидания ответа от сервера (запрос послать получилось, ждём ответа)?
https://itecnote.com/tecnote/php-curl-curlopt_connecttimeout-vs-curlopt_timeout/ Я просто нагуглил такую херню, и здесь сказано вообще другое. Однако, провёл тесты, и мои результаты вроде как опровергают написанное там.
CURLOPT_CONNECTTIMEOUT 10 секунд
CURLOPT_TIMEOUT 25 секунд
Сервер отвечает через 20 секунд
И подключение нормально происходит.
Если CURLOPT_CONNECTTIMEOUT это максимальное разрешённое время для соединения с сервером, то ничего не должно работать, сервер отвечает через 20, а ограничение 10. Сайт стрёмный, ясное дело, но, вероятно, это копипаста ответом со стаковерфлоу какого-нибудь, кто-то это где-то изначально написал же.
>CURLOPT_TIMEOUT это время ожидания ответа от сервера
>Что-то ты как-то вообще не понял
Да нет. Это ты нихуя не понял. Открываем документацию и читаем по слогам.
Если хочешь нормально проверить задержку - проверяй её локально, на СВОЕМ сервере, который ты настроишь как надо. Как симулировать медленный коннект гуглится в секунду.
Я не то чтобы хорошо помню, но, по-моему, это нихуя не валидный YAML. Попробуй напиши null после image и добавь пробел перед myadmin.
Хотя, погоди, это чё за хуйня вообще? myadmin как раз на первом уровне вложенности. А куда у тебя image упиздохал? Ты что сказать этим хотел?
Бамп
Дорогой Малыш.
У каждого ахуенного редактора есть специальный баг трекер. Если ты нашел критическую ошибку, то специальные люди на зарплате прочтут твой репорт, воспроизведут баг и исправят его ближайшим недельным релизом.
Вот так выглядит баг трекер шторма https://youtrack.jetbrains.com/issues/WI . Если у тебя хватит сил и терпения долистать до конца первой страницы, то ты увидишь что все это были репорты с 6 (шестого) февраля, то есть за 5 (пять) дней.
Именно поэтому у шторма просто нет альтернатив. Он дорабатывается непрерывно 24/7. И только у его создателей есть наиболее полная информация о разнообразных острых углах, неожиданном поведении и не очевидных проблемах новых версий пхп.
Я уже даже не говорю про фичи редактора. Я говорю только про экспертизу в нюансах языка и работы с ним. Бесплатные альтернативы отстают на несколько лет минимум.
Все эти баги - результат работы создателей шторма, которые добавляют всякую бесполезную херотень, о которой никто не просит.
>никто не просит
Вкатусик, фичи в шторм добавляются как раз по настойчивым просьбам.
https://youtrack.jetbrains.com/issues/WI?q=Type:%20Feature&p=600
Пользователи сами голосуют за то чего хотят больше.
Маленьким вкатуночкам, впервые познающим мир, это не очевидно. Но то что ненужно им - нужно кому-то другому. И наоборот.
А по моему опыту, всё это на самом деле нужно, просто ты об этом не знаешь. Чем выше твой грейд - тем больше тебе надо от шторма, тем больше времени он тебе экономит.
Я после пяти лет в пыхашторме перекатился в вскод. Вимом пользуюсь для админских задач. Вскоде поддерживал большой беттинговый проект, например и не умер...
мимо
Хочу также, заебал этот жыдбейнс, пользуюсь разными ide и с каждой новой версией они пихают все больше говна, то какой-то голландский штурвал code with me, то новый интерфейс, то какую-то нейронку.Теперь этот монстр глючит и тормозит покруче ide написанной на жопаскрипте. Но перелазить тяжело когда ко всему привыкнешь, прям как курить бросаешь
Вот уж действительно, пхп макаки это самые тупорыле существа на земле.
Вместо того чтобы просто снять галочку с плагина ты занимался какой-то хуйней, менял иде, страдал, привыкал. Ебать ты тупой.
Что у тебя там глючило, выблядок? Ставлю сотку что тебе просто показали ошибку, а ты не смог её перевести, растерялся, заметался и начал нажимать все кнопки подряд.
На фоне этих охуительных историй претензии про иконки и скучные обои хотя бы реальными выглядят.
>пхп макаки
Я просто мимо проходил
>Вместо того чтобы просто снять галочку с плагина
Я заебался каждый раз эти ебучие галочки переключать, каждое обновление всякая новая хуня прилетает.
>Ебать ты тупой.
А ты наверное умный, только окружающие этого не понимают, да?
>Ставлю сотку что тебе просто показали ошибку, а ты не смог её перевести, растерялся, заметался и начал нажимать все кнопки подряд.
Очень растерялся и так много нажимал что аж пару репортов отправил.
Зачем ты так трясешься как чихуахуёныш?
Все, иди нахуй, заебанный жизнью.
Дальше я тебе показываю как это делать водин клик, ты пиздишь что уже заебался в один клик, дальше я тебе говорю что можно вообще не кликать, ты лечишь что устал ВОЗИТЬСЯ.
И поэтому уже сто лет как переехал в иде где нет багов, не надо нихуя настраивать и обновлять. Менюхи там из молочной пены, а кнопки из киселя.
Газку оформляй, малой.
Лол, сегодня ночь открытых дверей в психушке? Вон жс треде один изливает душу всю ночь. Ты тут чего-то кукарекнул, за меня тут додумываешь какую-то кисельную малафью. А в растотреде вообще один шиз прописался.
У меня такая ситуация:
В объявлении метода написал, что первый аргумент должен иметь тип array.
100 раз перепроверил функцией gettype, что переменная, которую я передаю первой в метод, имеет тип array.
Все работает, все ахуенно, все отображается как надо.
Но код почему-то настойчиво пишет (в error_log) об ошибке, что первый аргумент вышеназванного метода должен быть массивом.
Ладно, похуй, даже не гадайте.
Надо.
>Тогда надо заучивать стандартные функции РНР?
Ты их никогда не выучишь лол, в пыхе они коварным образом с разной сигнатурой и спасает только подсветка ide. Но основные для работы с массивами, строками и файлами лучше знать
>>046497
Что там, блять, заучивать?
Если ты работаешь с кодом, то все само заучивается.
Если не помнишь сигнатуру метода - гуглишь "как сделать хуйню нейм php" и первым результатом высвечивается мануал.
Если и тут нет удачного конца, то гуглишь "функции работы с хуйня нейм php". Все.
Нахуя что-то запоминать? Ты в школе, блять, чтоли экзамен будешь сдавать?
Какое же школярское отношение к программированию. Не надо ничего зубрить, все само со временем присосется, а если не помнишь, мануал для этого и написан!
На собесе как на экзамене спрашивают и надо рассказать, иначе сделают вывод, что не знаешь РНР и не возьмут на работу. Сейчас даже на Битрикс на собесах дрючат.
Для говнособесов не помешает. Для работы не надо
> Обратите внимание, что любые необязательные аргументы должны быть указаны после любых обязательных аргументов, иначе они не могут быть опущены при вызове. Рассмотрим следующий пример:
А чё, если я использую синтаксис именованных аргументов, ситуация не меняется? Я должен в объявлении метода указать их после обязательных? Типа, чтобы те, кто не именованные используют, могли нормально работать с методом?
https://3v4l.org/NToiL#v8.3.2
Пшел вон, животное.
Попалось на просторах ютюба
Есть класс, допустим TestClass.
Все его методы - статические.
Его неймспейс - App\Test;
Есть скрипт - test.php, который подключает test.html, test.html в свою очередь использует методы TestClass так: <?= TestClass::someMethod() ?>
В самом скрипте test.php прописан use App\Test\TestClass.
И...test.html не знает класс TestClass.
Но потом я убираю ключевое слово static у методов TestClass, создаю объект в глобальном пространстве, указав неймспейс при создании, и все работает.
Что не так? Где я зеваю?
1920x1080, 0:23
Все смешалось. Ты как вообще язык учишь? По какому гайду?
1) Программа на пхп это один большой файл. Все что мы хотим в этой программе использовать: функции, классы; должно быть включено в этот файл.
2) Отдельные файлы в этот общий файл подключаются с помощью спец команд типа include и require.
3) Неймспейс - это просто индивидуальный идентификатор класса в нашем общем файле, чтобы была возможность иметь два класса с одинаковым названием.
4) use это "импорт" в том смысле что мы "импортируем" ИМЯ класса из его неймспейса в наш "текущий" неймспейс. Это просто АДАПТАЦИЯ ИМЕНИ. Он ничего никуда не подключает.
5) Соответственно имея это "адаптированное имя" нам все ещё нужно подключить файл с этим классом. Чтобы не делать это руками для сотен и тысяч классов в пхп есть механизм АВТОЗАГРУЗКИ КЛАССОВ. https://www.php.net/manual/en/language.oop5.autoload.php
6) В современной пхп разработке используется автозагрузка предоставляемая менеджером пакетов composer на основе стандарта psr-4 https://www.php-fig.org/psr/psr-4/ .
Если коротко, то это нужно чтобы нормально автозагружать любые чужие классы из чужих библиотек полученных через менеджер пакетов.
Это основа, ЭТО БАЗА. Если ты собрался писать на пхп, то ты должен уметь пользоваться композером и сетапить свой проект под работу с ним, подключать автозагрузку итд. Если этого в твоем курсе/гайде нет - выкинь его нахуй и найди нормальный.
Посчитать, конечно легко, но не 10 же раз!
Я все это знаю. И автозагрузка классов у меня есть через композер. У меня все работает кроме этого момента.
В TestClass.php:
namespace App\Test;
class TestClass
{
public static function someMethod(): string
...
}
В test.php:
use App\Test\TestClass;
require_once('test.html');
В test.html:
<?= TestClass:: someMethod() ?>
Текст ошибки: test.html не нашел класс TestClass
Но ведь test.php прописал для автозагрузки use в начале своего скрипта и потом уже подключил test.html
>Я все это знаю.
>require_once('test.html');
HTML же не понимает пхп теги. У тебя там даже подсветки в редакторе нет, лол. Как ты код-то этот писал вообще?
Шаблоны тоже должны быть в .php файлах. Вот так бы выглядело то что ты понаписал в пхп файле. Тебе сразу показывается что ты "адаптированное имя" из пункта 4) >>047984 не указал. А для HTML твоё имя класса это просто текст, который преобразуется в пхп код в момент подключения. На втором пике то как должен выглядеть код после фикса.
Я тебя еще раз спрашиваю: по какому гайду ты пытаешься учить пхп? Потому что ты явно занимаешься какой-то непонятной хуйней. На третьем и четвертом пиках то как должна выглядеть работа с шаблонами в приложении. Коль уж ты добрался до этапа построения "приложения" и пытаешься делать движок шаблонизации, а не просто эхо результата функции.
Это не какие-то секретные знания. Это натурально база. Шаг ноль в проектировании приложения. Автозагрузка, работа через Index.php, шаблонизация, роутинг. Это бейби степ. Это все ПЕРЕД началом работы.
Шаг один будет MVC. Потом DI, ORM, PSR-7, Middleware, Event Loop. Только на этом моменте у тебя будет современное php приложение.
Поэтому "Я все это знаю" сомнительное утверждение. Рекомендую перепроверить.
И очень рекомендую убедиться что ты учишься по актуальному материалу, составленному компетентным специалистом.
Окей, спасибо за развернутый ответ.
Я не понимаю когда я должен писать use + неймспейс класса.
Я думал так:
Если файл содержит упоминание класса, трейта или интерфейса из другого неймспейса, то я должен вверху файла прописать use.
А что насчет переменных, в которых хранится экземпляр класса?
т.е. на TestClass::doSomething() html поругается (что класс в html не найден), а на
$testClass->doSomething() уже нет.
>Шаблоны тоже должны быть в .php файлах.
Не знал об этом, если это действительно так, то буду держать в уме.
>пик2
Да, прикольно, мне почему-то не приходила в голову мысль прописывать use в самом html файле.
>мне почему-то не приходила в голову мысль прописывать use в самом html файле
Потому что use это конструкция ПХП. Нет никаких юзов в html, але.
Ты можешь хоть txt файл создать. Хоть .py питоновский. Пхп парсит текстовый файл во время инклуда и если видит свои теги, то пытается выполнить текст, в них обернутый, как код.
Вот и вопрос: нахуя в питоновском файле, в питоновской ide писать код на пхп?
Ответ: за тем же зачем в html файле писать код на пхп - нахуй не надо.
Если ты пишешь пхп код, то делай это в пхп файле чтобы ПОДСВЕТКА СИНТАКСИСА И ОШИБОК блядь была. Самому-то пхп поебать, для него весь код это текст. Это ТЕБЕ надо.
>Я не понимаю когда я должен писать use + неймспейс класса.
>Я думал так
Нет не так.
Ты должен указать имя класса, который ты используешь. Неймспейс - это тоже часть имени. Ты можешь в каждой строчке писать полное имя класса App\Test\TestClass::someMethod(), а можешь один раз сделать импорт и дальше писать TestClass::someMethod().
Тебе уже рассказали >>048525 что твоя ошибка в том что ты не знал что use работает только для текущего файла.
>А что насчет переменных, в которых хранится экземпляр класса?
А что насчет переменных? Раз переменная создалась, то файл с классом уже был успешно автозагружен и объект этого класса создан.
Короче, ты тратишь и мое и свое время.
У тебя в каждом файле должен быть класс, каждый класс должен быть в своем неймспейсе и подгружаться автозагрузкой. Единственный файл-исключение из этого правила Index.php - входная точка твоего приложения. ВСЕ. Все проблемы с импортами и подключением файлов ЗАКРЫТЫ раз и навсегда. Большая часть пхп макак в душе не ебет какой там скоуп у use. И правильно - есть вещи поважнее.
Окей, спасибо за ответ.
Я закончил задачу список студентов.
Не идеально, конечно, но закончил.
Имеет смысл показывать код, чтобы ты сказал, что мне следовало бы сделать лучше?
Если тебе влом смотреть, то ок. Я не против. :^)
Я начал курс по Laravel и собираюсь решать задачу с файлообмеником с помощью Laravel, а не Slim.
Наверное уже пора, учить фреймворк?
Говно какое-то
Допустим есть метод, где мы получаем определенные поля, по типу
...
$arProduct['REVIEWS'] = Review::getProductReviews($arProduct['ID']);
$arProduct['QUESTIONS'] = Question::getProductQuestions($arProduct['ID']);
...
Нужно сделать так, чтобы клиент мог указать какие поля не нужно загружать из бд.
То есть, если $fieldsToLoad = [REVIEWS, QUESTIONS], значит их не нужно передавать клиенту. Как это возможно сделать? Есть такой вариант:
$fieldsToLoad = [
'REVIEWS' => function () use ($arProduct, $reviewsSize) {
$arProduct['REVIEWS] = Review::getProductReviews($arProduct['ID']);
},
'QUESTIONS' => function () use ($arProduct, $questionsSize) {
$arProduct['QUESTIONS'] = Question::getProductQuestions($arProduct['ID']);
}
]
foreach ($fieldsToLoad as $fieldName => $fieldLoader) {
if (!in_array($fieldName, $notLoadFields)) {
$fieldLoader();
}
}
Но проблема в том, что возможно нужно будет добавить общее условие для каких то полей, как пример:
...
if ($block == 60) {
$arProduct['REVIEWS'] = Review::getProductReviews($arProduct['ID']);
$arProduct['QUESTIONS'] = Question::getProductQuestions($arProduct['ID']);
}
...
И тогда получается не очень, так как для каждого элемента массива $fieldsToLoad придется писать отдельное условие. Есть ли более лучшее решение вопроса?
Допустим есть метод, где мы получаем определенные поля, по типу
...
$arProduct['REVIEWS'] = Review::getProductReviews($arProduct['ID']);
$arProduct['QUESTIONS'] = Question::getProductQuestions($arProduct['ID']);
...
Нужно сделать так, чтобы клиент мог указать какие поля не нужно загружать из бд.
То есть, если $fieldsToLoad = [REVIEWS, QUESTIONS], значит их не нужно передавать клиенту. Как это возможно сделать? Есть такой вариант:
$fieldsToLoad = [
'REVIEWS' => function () use ($arProduct, $reviewsSize) {
$arProduct['REVIEWS] = Review::getProductReviews($arProduct['ID']);
},
'QUESTIONS' => function () use ($arProduct, $questionsSize) {
$arProduct['QUESTIONS'] = Question::getProductQuestions($arProduct['ID']);
}
]
foreach ($fieldsToLoad as $fieldName => $fieldLoader) {
if (!in_array($fieldName, $notLoadFields)) {
$fieldLoader();
}
}
Но проблема в том, что возможно нужно будет добавить общее условие для каких то полей, как пример:
...
if ($block == 60) {
$arProduct['REVIEWS'] = Review::getProductReviews($arProduct['ID']);
$arProduct['QUESTIONS'] = Question::getProductQuestions($arProduct['ID']);
}
...
И тогда получается не очень, так как для каждого элемента массива $fieldsToLoad придется писать отдельное условие. Есть ли более лучшее решение вопроса?
Горе луковое.
У тебя же АКТИВ РЕКОРД для этого и есть. С построителем запросов. Фреймворк какой у тебя?
Вот так работа со связями в Yii2 происходит https://www.yiiframework.com/doc/guide/2.0/en/db-active-record#lazy-eager-loading . Ты можешь указать релейшен, который нужно загрузить, с помощью with().
В ларавеле немного по другому, но суть та же. Берется пользовательский запрос и с помощью актив рекордского билдера преобразуется в запрос в базу, а ответ просто преобразуется в json. И все. Никто ничего не собирает руками по массивам как долбаеб.
Ну так пусть битриксовский билдер использует. Он для того и предназначен чтобы динамически данные выбирать.
Какой билдер? Там кусок говна в бд, вываливается таким же куском говна в виде массивов в которых ключи написаны капслоком
Ну тогда сосать не разгибаясь, хули.
>>049844
Я тебе уже писал что на говне сметану не собирают.
Я бы как минимум элокент прикрутил. А так - пиши как пишется, один хуй уебищно будет.
Давать джуну самому придумывать динамическое формирование запросов, да еще и поверх битриксовой уебищной орм. Это надо иметь уровень похуизма ПОЕБАТЬ АБСОЛЮТЛИ. Хоть сгори, хоть взорвись нахуй.
Битриксопроблемы
>Я бы как минимум элокент прикрутил
Хуй у тебя чего получится. Там у битриксов основная проблема что данные не хранятся просто как обычные данные у нормальных людей, а по большей части инфоблоки это типа таблиц в БД но с нюансом есть исключения всякие другие модули, там каждый модуль может по своему колхозить с БД, но в основном используется инфоблок.
Список инфоблоков хранится в одной таблице, элементы инфоблока и часть его полей в другой, список свойств (property) для инфоблоков это аналог поля в таблице хранится в третьей, а значения по propertyId для iblockId хранятся в четвертой, пятой, десятой пятидесятой таблице, они там колхозили решение чтобы не тормозило и размазали проперти по таблицам. А есть еще 1 и 2 версия инфоблоков, там внутри много говнокода костылей чтобы они туда-сюда были совместимы.
В итоге чтобы получить список новостей в разделе "О компании" нужно сделать минимум 4 запроса под капотом. С товарами еще веселее.
Это хуйня тянется из 00х, когда были популярны вебмастера, которые мышкой через админку всю хуйню делали и собственно именно поэтому такая хуйня была придумана. Столько времени прошло, они уже там ML для рекомендаций прикручивают, а как была жопа при работе с данными так и осталась.
Там была какая-то orm, но пока я работал там она была говняная, чего-то как-то генерировалось в рантайме, а документации как оно работает не было нихуя. Как сейчас хз 3 года это говно не трогал, скорее всего ничего не изменилось, а это поделие сделали чтобы дополнить список фич.
Нихуя себе открытие. Оказывается там где можно поднять относительно легких денег возникает конкуренция. И все пиценосцы города мечтают сидеть в теплом офисе и буковки на клавиатуре набирать.
Иди в пятерочку, там щас жуткий дефицит кадров.
Нихуя ты долбоёб. Ещё недавно на пхп конкурс был раз в 10 меньше. Про это речь. Петухонеры поняв что у себя они не устроятся потому что там только гениев с 15 летним стажем берут пришли в пхп
С чего ты взял что это именно питонщики?
Не обязательно.
Ну задача не для джуна конечно, но осиливаемая. Я писал подобное поверх 1с-ной параши, там тоже регистры, реестры, списки свойств. Короче не реляционная дрисня. Современные орм достаточно гибкие чтобы даже с таким работать.
https://www.youtube.com/watch?v=ZPGjJDIZm4Y
Чтобы перекатиться с пыхи на нормальный стек. Очевидно же...
Чтобы повысить уровень дискуссий в пхп-сообществе
Perl забыл. Ажиотаж лютый.
Они не осилили конкуренцию из миллиард гениев на место
Такие отклики следствие неадекватных требований в вакансии (неграмотная хрюша).
Нет опыта - это красная тряпка. Ведь любой вкатун уверен, что этому критерию он соответствует, что люди там очень нужны, его всему обучат, а базу он уже посмотрел в видосах на ютубе.
По факту им нужен джун+, что соответствует 1-3 годам коммерческого опыта в других вакансиях.
Сам знаешь. Не мы такие - жизнь такая. Хочешь сотыги, умей крутиться, умей крутить.
Так и там нужно дохуя знать, вряд ли проститутка осилит эту хуйню до конца, а если каким-то чудом чудом вкатится то через полмесяца сама съебет
Часто кто-то ноет о том, что сейчас кто ни попадя суется в программирование.
Мне кажется, что достаточно иметь опыт самостоятельного обучения программированию, чтобы понять, что программирование это сложно.
Во-первых не у всех есть свободное время; чел, который занимается 1-2 часа после работы (каким-то чудом), быстрее выгорит чем тот, у которого весь день свободный (получается некий дебафф к обучению, с которым шанс к чему-то прийти с такой учебой идет вниз);
Во-вторых, не каждый готов заниматься месяцами;
В-третьих, не каждый готов, видя, что у него много чего не получается, прогресс не идет, продолжать заниматься;
В-четвертых, в обучении программированию постоянно приходится сталкиваться с такими моментами, когда ты весь день будешь исправлять какую-то ошибку или пытаться установить какую-то программу или пытаться что-то сделать в программе, когда у всех все получается, а ты делаешь по гайду и у тебя постоянно лезут ошибки там и тут (когда ты получаешь только негатив от занятий чем-то, а прогресса не видишь, желание продолжать этим заниматься идет вниз).
Короче, проходит тот, у кого больше свободного времени (или хорошее здоровье и развитая сила воли), у кого больше терпения.
Или если у тебя Pussy pass и к тебе толпами бегут анальники на помощь ничего не требуя взамен. Или если ты Ерохин альфач и анальники от страха писаются в штаны и бегут тебе на помощь чтоб угодить своему харизматичному господину
Правда жизни, щито поделать
Ну они и не осиливают, мой посыл что сейчас любая тупая пизда которая даже винду переустановить не может, называет себя фронтендером потому что купил курсы где рассказали что такое хтмл, или закончила шарагу на дизайнера где показали красивые картинки на слайдах. Вот они и создавют все эти отклики.
МЯУ я такой тупой пизд, я шарагу по ИВТ закончил и откликался, хотя нихуя не шарил, и сейчас нихуя не шарю, пытаюсь подготовиться.
Типа того
Ну на битриксе ещё не совсем жопа, но отклики тоже подросли. На стажировке раньше было 60 челов, щяс 100. А на другой стажировке было 15 челов, щяс 40. Такие дела.
Конечно же сам битрикс. Перед откликом хоть куда-то надо обязательно пройти все существующие официальные курсы битрикса. Без этого вообще никак. Иначе будете тормозить люто, а на стажировках темп высокий, не осилите такой объем инфомрации.
Всё это изучаете кароче, делаете тупой пет-проект тупого интернет-магаза с гитом и гитхабчиком. Всё.
У нормального человека это занимает около 2 месяцев. Теперь вы джуниор-битриксоид с великой зряплатой 35 тысяч рублей до вычета налога.
Иногда компании хотят шоб у тебя был серт, шоб получить возможность пройти его надо заплатить 1к рублей.
Ну так что. Шансы есть? Гои везде прогреты, но на битриксе кажется не до конца! Влетаем, гои!!!
Ну что ж. Ждём 5к откликов теперь и на Битрикс.
Просто какой-то глюк вселенной. Людям уже пофигу куда вкатываться, главное чтобы айти. Вместо того чтобы заняться делом прыгают с одного лобка на другой как блоха шлюхи
Уже удалил эту хуйню, точно не помню в каком месте, если авторизоваться под админом, то вверху будет панель где можно включить отладку
Ещё один рудимент для вебмастеров 00х лол
Про это знаю, это другое.
case one = "one";
case two = "two";
case three = "three";
...
Вот нахуя это дублирование? У меня уже есть one two three в непосредственно именах кейсов.
Да, я в прошлом году 2 таких работы стажером удаленно нашел
>Про это знаю, это другое.
Да нет, нихуя не другое. Просто у тебя название и значение СОВПАЛИ. А так бывает почти никогда. https://3v4l.org/XF8aZ#v8.3.3
>Вот нахуя это дублирование?
Лол, так у тебя то же самое дублирование.
>function fromName (string $caseName): static
Ты значение $caseName откуда-то взять должен. И убедиться что оно правильное. Логично что правильные значения хранятся в самом энуме.
А вообще проблема в том что ты не понимаешь зачем энум в принципе нужен. Какие проблемы он решает. Это вообще сложный концепт даже для ооп. Энум это не просто значение, это концепция выбора. Это одновременно и выбранный вариант и список всех вариантов. https://3v4l.org/mFmjF#v8.3.3
>Просто у тебя название и значение СОВПАЛИ. А так бывает почти никогда
Почему? Почему вот ты решил, что hex это каноничное значение? Почему не так? https://3v4l.org/rskpC#v8.3.3
Ну и зачем ты пытаешься превратить enum в обычный class? Энум тебе для твоего конвертора цветов зачем нужен вообще?
Энум это не хранилище значений. Хранилище значений это обычный объект. Энум сам по себе вообще ничего не делает. Это способ заставить клиентский код СОВЕРШИТЬ ВЫБОР. А как этот выбор интерпретировать, энума уже не касается - это та самая БИЗНЕС ЛОГИКА. https://3v4l.org/ibrZL#v8.3.3
А возможность в энуме задавать "значения" нужна для другой ситуации. Когда нужно enum сохранять в хранилище. https://3v4l.org/b028I#v8.3.3
В этой ситуации варианты энума нужно сопоставлять с тем что мы сохраняем. Потому что офк мы сам объект энума сохранить не можем. То есть мы создаем ИДЕНТИФИКАТОРЫ вариантов энума, по которым можем этот энум в нужном нам выборе ВОССТАНОВИТЬ. Метод потому и называется from(). https://dbfiddle.uk/tudenGfk
Соответственно 1, 2 и 3 это никакие не "значения". Энум это по сути способ в пхп коде создать конструкцию REFERENCES colour(id). Правильно это называется CONSTRAINT.
Есть ли какой-то способ проверить одинаковый ли контент в двух файлах excel?
Если бы не метаданные, то можно было бы использовать хэш.
Вопрос не относится к PHP, но планирую сравнивать excel файлы в PHP. поэтому решил задать здесь.
А чего там метаданные потереть нельзя? Привести файлы к общему виду
Ебать за год не смочь пхп осилить. Нервничал и потел поди, когда просили что-то пофиксить?
Потому что ты первую часть поста прочитать не можешь, тупой
А какой у тебя код? Может твой код крудам и нахуй не нужон?
Не то что нельзя, просто со временем это будет выглядеть некрасиво. По идее, вся логика, не зависящая от того как к тебе пришёл запрос, выделяется в сервисы.
В сервисы
Почему по Ларавелю столько всего пишут интересного, а по Симфони кроме доки нифига нет? Даже та единственная книга от автора Симфони и то про что угодно, но не про Симфони.
Нет.
Ничего не нужно.
Приходишь, падаешь на порог и молишь их, чтобы тебя взяли. Они увидят твое отчаяние и возьмут на работу Джуниор php программист за 15 тысяч рублей.
Я этого чела посмотрел, он там берёт интервью у битриксоида
https://www.youtube.com/watch?v=KZ5LbE5G4Jw
Вкратце, работать можно, но Ларавель там не нужен, на нём всё равно не дадут программировать. А реально нужны сертификаты по Битриксу.
Можно к вам? Кажется вкат через пхп имеет больше шансов... Пхп всегда стоял особняком в гордом одиночестве от остальных языков. Возможно в этом есть спасение? Ларавел норм?
Потому что простое всегда побеждает сложное
Наслушался долбоебов теоретиков? Тут по тредам бегает такой го-даун на пхп обиженный.
По сабжу - лара норм, мастхев для пыхи сейчас. По сути как джанго для пиздона, рельсы для руби или спринг для джавы.
Если захочется в микросервисы, то можно спираль посмотреть - лонг ранинг пхп фреймворк, со своим сервером написанном на goвне и со всеми psr стандартами
Нет смысла менять язык. Вкат в пхп легче не будет, а времени ты потратишь больше на изучение нового языка. К тому же будут проблемы с запоминанием, так как будет путаница между двумя языками, и падение мотивации, когда столкнёшься со сложностями в пхп.
Если уверен в знаниях по питону, то просто нарисуй себе год опыта и вкатывайся. В пхп сейчас тоже приходится год опыта рисовать, потому что на собесы не приглашают без него.
Стал жертвой маркетинга что у питона большое сообщество что легко учить что нужны прогеры питонисты (
Есть 1с-битрикс, CMS в которой можно накликивать интернет-магазины мышкой. На ее основе сделали битрикс24 - полноценная CRM со всякой аналитикой и прочей хуетой
В зоопарке например?
>Правильно, пора переходить на нормальный вариант
Студия через которую я вкатывался в итоге перешла на лару, а битрикс только на поддержку доить заказчиков. Я тут с менеджером переписывался перед НГ праздниками, она у меня спрашивала про знакомых ios и гоферов, хотя когда я там работал несколько лет назад были все битрикосиды 10-12 человек, которые красили кнопки, а каким-нибудь второсортным магазином гордились как охуенным проектом. Сейчас уже за такую хуню не берутся, а сидят на крупных контрактах, видать дела в гору пошли как слезли с этой хуйни, а когда я там был зарплаты ниже чем у скуфов на заводе и текучка пиздец.
>>059365
>Вкратце, работать можно, но Ларавель там не нужен, на нём всё равно не дадут программировать. А реально нужны сертификаты по Битриксу.
Лол когда в студии работал так и было, на ларе писали избранные. Остальные искали вкушали говно, самый прикол что я первый месяц проходил ебучие курсы, ни строчки кода не написал, потом пытался сдавать экзамены и оба раза проебался там надо делать как правильно с точки зрения этого говна в какой-то ебучей ide на тормозящем удаленном рабочем столе хотя этот проёб экзаменов не мешал мне ковырять ядро и размотать обфусцированный includes.php чтобы убрать проверку лицензии лол. Но ты там будешь деградировать, хуй тебе дадут нормальную задачу, за полгода что там был ни разу ничего другого не трогал и почти всё были правки верстки по фтп с треканьем каждых 15 минут и еблей мозгов если что-то делаю не так быстро как это оценил кто-то другой.
Та же ссанина на том же ядре, прикрутили к говно цмс говно CRM, смысл примерно один и тот же
Yii наименее популярный из всех, что мы вспомнили и по факту не имеет никаких преимуществ. Забей на него.
Симфони второй по популярности, после лары, но типа самый серьезный из всех, для энтерпрайза такто. По факту он даже более современный чем лара что не значит, что лара не современный. Просто он более сложный и менее популярный и если ты вкатун, то лучше брать лару
С симфони проблема, что материалов очень мало. Пришлось даже смотреть всех сподря на ютубе, но там челики в основном пересказывают мурзилки с документации. Как писать правильный код узнаешь случайно и урывками в отдельных статейках.
И встал вопрос. Как на дваче работает система авторизации пользователя? Понятно что её нет, но сайт запоминает твои посты, созданные тобой треды и так далее. За счёт чего и каким образом это работает. Я так понимаю это идёт через IP? . До этого имел дело только с обычной JWT авторизацией по логину, паролю. Максимум еще взаимодействовал с Google API.
Так посмотри блядь заголовки. Это же открытая инфа. Попробуй куки поудалять, с разных айпи позаходить
>Понятно что её нет, но сайт запоминает твои посты, созданные тобой треды и так далее.
На фронте, гугли local storage
Да, вижу, хранятся в local storage store. Еще тут есть некий gnezdo_uid, который похож на какой-то зашифрованный идентификатор. Не знаешь что по нему?
У Абу спроси
Может ли быть дело в сервере? Использую XAMPP 8.2 на Ubuntu.
А вот так, кстати, работает.
Ты долбоеб? Нахуя косить под долбоеба, если ты не долбоеб, чтоб не подумали, что ты долбоеб? Хотя ты долбоеб, если задаешься такими вопросами
есть еще гитлаб и битбакет
Нет. Это пиздлявый ленивый шиз без кода за клавиатурой.
Работаю фронтендером на Vue, хочу научиться ларавелить.
Так имиджборд сложнее бложика
Объясните, пожалуйста, как тут работают ссылки и для чего нужен
$node = &$tree;
и
$node = &$node[$ancestor['INDEX']]['CHILDREN'];
https://3v4l.org/JgO01
>//Есть массив:
>array(
Кто этот пидарас? И кто те дегенераты, которые с этой хуйней сюда лезут? Эта залупа гуглится уже.
Вы внатуре думаете, что не зная нихуя о языке вы нагуглите правильный ответ как в решебнике и все станет заебись?
Вы вообще не одупляете что вам по сорок часов в неделю в битрикс кале дельфинчиком нырять придется? И там нихуя не будет задачек, ответ на который можно просто разув глаза в документации прочитать.
написал змейку на php и ncurses, теперь планирую написать тетрис. какие подводные камни?
Как решают подобные проблемы множественных запросов? А ведь есть еще и зависимые запросы, по типу второй запрос зависит от результата первого.
Или забивают хуй, мол нет же многопоточности ну и все
А вот это, детектив, ПРАВИЛЬНЫЙ ВОПРОС.
Это происходит постоянно. Таких запросов на страницу могут быть сотни. Товар. Цена товара. Скидка. Характеристики. Значения характеристик. Сопутка. Картинки к этому всему. Доставка. Остатки.
Ответ.
0) Многопоточности/асинхронности нет. Так что это точно не вариант. Был тут адепт сокетов, жопу рвал что пхп асинхронный. Ну собсна вот. Сокеты-хуекеты, давай делай. Спойлер: даже swoole и reactphp тут нихуя не помогут.
1) Можно объединить несколько запросов с помощью LEFT JOIN. Некоторые орм такое умеют. Yii точно, элокент вроде тоже, за доктрину хз. Но нужно быть готовым к тому что результат будет БОЛЬШОЙ. Я имею ввиду в гигабайтах (не шутка). По хорошему нужно сначала сделать пагинацию - выбрать десять или сто, а потом один большой запрос с кучей LEFT JOIN'ов. Перфоманс таких запросов очевидно говно.
2) На самом деле все это "решается" кешированием. Иногда тупо врубают кеширование результатов всех запросов в настройках орм. Иногда кешируют прямо страницу. Но чаще всего собирают сначала все данные для страницы, все результаты запросов, а уже потом кешируют. Вот именно для чего-то такого и нужен паттерн VIewModel.
Есть вопрос.
Короче я юай обезьяна. Со стажем.
Бек знаю на уровне, что такое нормализация, скл триггеры, запросы к апи. Какие нибудь джоины. Многопоточность не знаю, т.к. в яваскрипте она реализована непонятно, как. Да, яваскрипт многоточный
Хочу вкат в бек. Думал между нодой и пыхой. Остановился на втором. Аноны, есть разница между ларавел и симфони? Или это как рякт и вью - одно и тоже
>Думал между нодой и пыхой. Остановился на втором
По мне так долбоёбский выбор. Я наоборот ушёл с пыхи на ноду. Нода более бодрая. И лара и пыха вполне себе норм. Ларавел классный фреймворк, но блять... на нём удобно только монолиты писать. И если появляется модный смузи-стартап, он изначально не выберет пыху и лару для себя. Интересных проектов на пыхе не бывает почти никогда. Обычно это либо какая-то говноцрм, либо говномагазин, либо говногосударственная хуйня, либо супер легаси двухтысячных годов.
Программисты пишут как бог на душу положит, никаких тебе code review, линтеров, phpcs, phpstan, юнит-тестов. Похапэшников никогда не приглашают на релокацию если только в Таджикистан. У них одни из самых низких зарплат по всем стекам. Похапэшник с 10 годами опыта будет получать примерно как гошник с годом опыта. Короче если ты ценишь творчество, высокие зарплаты, новую модную хуйню - то иди в go либо в node.js. Но если тебе похуй, легаси не легаси, лишь бы платили - то сиди дальше на похапэ.
Гошник с годом опыта это и есть пхпшник с десятью. Поэтому на го джуновских вакансий нет вообще. В го не вкатываются с нуля. Самый уебищный совет, который можно дать. Лучше бы просто написал чтобы в жс шел вафлять.
Да и вообще хуйня какая-то написана. Перечисляет кучу технологий квалити ашшуренс, а потом заявляет что ими не пользуются. А узнал ты про них по телевизору? Это как раз в модных смузи стартапах хуярят как попало на скорость безконтрольно.
Короче шиза. Нода блядь "бодрая". Новая модная хуйня и го. Че несет, вообще охуеть.
>Аноны, есть разница между ларавел и симфони?
Лара это типичный MVC фреймворк типа рельс и джанги. Но тут есть проблема на нем много кто из вкатунов пишет и скорее всего тебе достанется проекты уровня говно говна, плюс там конкуренция высокая. Еще есть галеры которые предлагают работу в европейском модельном агенстве, а работаешь шлюхой в турецком борделе зовут на лару, а в итоге пилишь фромочки "мы вам перезвоним" на битриксе и вордпресе с жиквери, тут надо сразу уточнять чем предстоит заниматься. Очень часто требуются фулстеки лара+вью и если ты скажешь что фронт, то у тебя будет много задач по фронту. Большинство вакансий в студиях, бывает и интересные проекты во во всяких продуктовых конторах, но таких вакансий меньше.
Сам фреймворк не сложный, быстро разберешься.
Симфони это такой этакий недоспринг и вообще там всё с привкусом джавы, на нем обычно пилят всякие продуктовые проекты, например skyeng. Фреймворк посложнее лары, там есть много инструментов https://symfony.com/doc/current/index.html сходу тяжелее разобраться, но зато есть много денежных вакансий. Мне не зашел в своё время и я не стал в него вкатываться а зря, но я все же советую попробовать что-то пописать чтобы пощупать что да как. И мне кажется что пыху изучать лучше по нему, чем по всякому говну типа CMS.
Это двачаю, в ларе много говна и годные проекты прямо надо вычерпывать из говняной жижи как упавшее золотое кольцо в деревенском туалете.
Крайне хуевое объяснение. Зашел-не зашел. Пиздец, как леденцы в магазине выбираешь.
Это инструменты и у каждого из них свое назначение.
Ларавель это RAD фреймворк. Нужен для максимально быстрого создания сайта в джва клика. По сути ты берешь код фреймворка и вставляешь посреди своего кода. Вмуровываешь фреймворк в свой проект навсегда. Если у тебя горизонт планирования бюджета на две недели, то это твой выбор. Но поменять фреймворк будет просто невозможно. Захочешь чего-то нового? Придется бороться с текущей архитектурой.
У симфони подход противоположный. Фреймворк совсем не требует от тебя зависеть от его кода. По сути весь симфони это просто набор отдельных библиотек, каждую из которых в любой момент можно выкинуть или заменить. Если ты строишь приложение на много лет и тебе нужно учесть что через пять лет будут новые технологии и подходы и фреймворк нужно будет выкинуть/обновить/поменять, то это твой выбор.
Отсюда и следствие: где же будут больше платить и лучше следить за качеством? В проекте который развивается стихийно без каких-либо планов или в проекте который на рынке пять лет и еще пятнадцать будет?
>Крайне хуевое объяснение. Зашел-не зашел. Пиздец, как леденцы в магазине выбираешь.
Это мои ощущешия не более того
Будто симфони не RAD фреймворк. Ты api platform трогал?
make:entity -> готовый круд api -> api:openapi:export -> openapi.yml -> openapi-generator -> http клиент для реакта, ангуляра, вуежс сготовыми круд методами
А с другой стороны symfony ux c hotwire
Кодогенерация это не RAD. Ты хоть один фреймворк без кодогенерации видел вообще? А если сам напишешь кодогенерацию, то типа превратишь любой фреймворк в RAD? Это типа игра в сифу что-ли?
Фасады, сервис локаторы, глобальное состояние. Использование кода фреймворка вместе и вместо своего. Вот что такое RAD.
Это не кодогенерация в симфони. Кодогенерация тут только на фронте и это не часть симфони. Это часть openapi генератора
Что касается независимости от фреймворка, то ты при написании бизнеслогики в симфони также будешь задумываться как уйти от ORM, писать всякие toDTO. А форм билдер запутывать в бизнелогику... Тоже будешь писать код для отвязки от симфони.
ViewModel нужен чтобы передать во View (в шаблон template) объект, где есть логика обработки данных, чтобы в самом шаблоне вызывать геттеры и получать уже обработанные данные.
Причем здесь кеширование?
Ой я же говорю, задачи изначально такие, что не требуют сильного мастерства. Типа говноадминки на бутстрапе. Каноничный пример https://www.gk-adept.ru/ Пхп чаще всего берут веб-студии, работающие на поток. И клиенты такие же. Попробуй объяснить кабану из строительной фирмы что его сайту нужен си-ай-си-ди. Он мало того что не поймёт, так ещё подумает что ты его наёбываешь. Поэтому многие срезают углы. Тоже самое личный бренд Васи Пупкина. Программист не делает никакого линтинга, тестирования и проч, главное чтобы Вася Пупкин побыстрее отъебался и всё. Тоже самое когда ты говоришь что неплохо было бы сделать инфраструктуру как код, перенести в клауд, настроить ci/cd, разбить на микросервисы, на тебя посмотрят как на мудака, а нахуя мне это нужно? На go такого нет, потому что там уже знающие люди. И меньше вопросов в стиле "а нахуя мне это нужно"?
>задумываться как уйти от ORM
В симфони нет своей орм. А доктрина использует целую кучу хитростей чтобы твоя модель ни от чего не зависела. Ты прямо сейчас можешь использовать в качестве модели класс без зависимостей вообще.
>код для отвязки от симфони
Симфони это просто набор библиотек. Так же как ты будешь писать код "отвязки" от газзла, например, так же ты будешь писать код "отвязки" от симфони. Обычная инверсия контроля с интерфейсами и ACL. Если нужно поменять библиотеку ты просто пишешь под неё класс с имплементацией и прописываешь его в DI. А вот как отвязаться от вездесущих фасадов это загадка от жака фреско.
Не причем. Кеширования нет. Все по 50мс на все сто запросов ждут. И вместо того чтобы закешировать один объект ViewModel бьются ебалом об монитор. А сам ViewModel создают только чтобы геттеры вызывать. Ведь в обычной модели этих геттеров нет. А в VIewModel данные попадают из... да кого вообще ебет откуда и зачем.
В golang'е. О нём обычный человек с улицы вряд ли услышит. Там чаще попадаются нестандартные проекты, типа какого-нибудь gismeteo. Там зарплаты выше, попробуй найди похапэшника с зарплатой до 600 тысяч в месяц. Там меньше шансов что попадётся очередной говномаркетплейс с перепродажей китайского говна с алиэкспресса. Меньше шансов что придёт очередной говностроитель со своей говностроительной фирмой.
>в веб-студии, работающей на поток все хуево
>а вот "там" все заебись
>где?
>...
>В golang'е
Ты под баклофеном?
Ты больше вслух мечтай, тогда обязательно услышит. Вкатунишки такие вкатунишки. Думают они чем то от других отличаются. Наверное мамке своей верят...
Ты блядь какой-то тролль или пишешь как-то непонятно.
Модели описывают бизнес-логику домена, VM описывают логику отображения и передаются во вьюшку как DTO в котором есть методы делающие что-то именно для отображения. Сам же View это верстка и немного логики для отображения, но все что можно - можно вынести во VM, чтобы не засорять верстку.
Если ты вызываешь напрямую во вьюшке методы из модели то ты большинство принципов похерил нахуй.
В PHP вся разработка в ООП ведется по-умолчанию с принципами, паттернами, с Фаулером, с Бобом Мартином, Крейгом Ларманом, со включенной строгой типизацией. Используется атрибуты/рефлексия. ООП в PHP аналогична ООП в Java. И книги из Java подходят для ООП и в пхп, в плане построения конструкций.
Так же код весь под тестами + есть статические анализаторы.
Это обычный проект в пхп на 2024 год.
А смешишь тут только ты, хуесос малолетний
мимо-проходил-заметил-срач-решил-немного-подкинуть
>логику отображения
Эт че такое? Это такой всратый способ сказать "данные для отображения"? Ты же сам называешь её DTO и говоришь что логика во View и шаблонах.
А может ты просто еблан, который начитался баззвордов и теперь пытается с умным ебалом ими жонглировать? Домен за каким-то хуем приплел.
>большинство принципов похерил
Ой вей. Солид здеся. Ну-ка, сектантик, а как мне наверняка проверить что класс сингл респонсибилити? Ну так чисто, чтобы узнать похерил я этот принцип или нет?
>Ну-ка, сектантик, а
Петушок который не пройдет собес и не сможет ответить на мои вопросы с демонстрацией кода и не сможет в алгоритмы с математикой -> отправится работать в веб-студию к вордпресу, или на завод гайки крутить))
Не, а в инете выебывайся, никтож не запрещает, а вот в реальности все мы на своих местах
>Солид здеся
А другие принципы (подсказка: их дохуя) какие похерил, заводчанин?))
А я буду показывать такой код и буду спрашивать что еще и всякие левые - пойдут вон из профессии
>В PHP вся разработка в ООП ведется по-умолчанию с принципами, паттернами, с Фаулером
>Используется атрибуты/рефлексия
>Так же код весь под тестами + есть статические анализаторы.
>Петушок который не пройдет собес и не сможет ответить на мои вопросы
Да любой дауненок откроет википедию и прочитает определение. Вы же все равно нихуя не понимаете что оно означает. Просто с умным ебалом повторяете. Вот я спросил как конкретно измерить что код соответствует SRP, и ты сразу поплыл: пук среньк.
И никаких алгоритмов и математики ты не знаешь, нахуя пиздеть? Вот как Hyperloglog работает, классика веба? Ты ведь даже не знаешь что такое кардинальность, математик епты.
>>065425
>А другие принципы
Вот этот https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)#Information_expert
Тебе, опездалу, в голову не приходило что принципы, придуманные в разные десятилетия разными людьми, исходя из их субъективного опыта, могут друг другу ПРОТИВОРЕЧИТЬ?
>>065426
>и всякие левые - пойдут вон из профессии
Ну еще раз доказал что ты сектант. Все по классике - догмы, гонения, ересь. При этом никакой объективной метрики у тебя нет, только "я так чувствую". Так математично, так по научному.
>>065426
>Домен - это предметная область
И хули? Приплел ты это нахуя?
Для умного ебала. Ну добавил бы еще "на планете земля".
>бизнес-логику домена на планете земля В ГАЛАКТИКЕ МЛЕЧНЫЙ ПУТЬ
Нихуя как ВАЖНО звучит. Теперь то моя шизофазия в десять раз убедительнее стала. Ведь стала, да?
У тебя жопу рвет от того что другие добровольно это изучают, потому-что это ремесло в кайф и апают скилл естественно, а тебе это нахуй не нужно, для тебя это принудиловка, ты тут только за деньгами и агришься от того что я твой конкурент с более лучшими навыками.
Но тебя неизбежно ждет выгорание, потому-что это не твоя профессия, она тебе не по душе. А я буду программировать даже тогда когда за это не платят и когда нет работы и даже если подарят миллиард.
Поэтому твой естественный уровень - это вордпресс, дальше ты попросту не вытянешь, потому-что тебе это неинтересно
А че ты изучил? Определение прочитал? Ебать ты апнулся. Так как SRP померять, ремесленник?
Да-да, все поняли, что ты не левый и реально любишь программирование. Только не рвись, маня. Мышление как у школьника 9-го класса.
У меня такое ощущение, что в программировании есть негласное правило - если ты решил вкат, то ты обязан всему сообществу рассказать о том, как тебе нравится программировать и интересно этим заниматься, ведь иначе подумают, что ты негодяй!
Решает не интерес к программированию, а твоя совесть (совестно будет говнокодить), наличие материала, который ты сможешь освоить с имеющимися знаниями (и тем самым меньше говнокодить) и упорство.
Мы с тобой выше поговорили, ты даже основ не знаешь, а хочешь на голову выше тему. Я тебе не собираюсь разжевывать то что тебе непонятно. Мне похуй на твою жизнь
Обтекай, неуч. Нихуя ты не знаешь.
Поглядите. Человек даже не в курсе про хайлоад блоки. Ну что ж, типичный вкатунец сделал мнение об инструменте на основе поверхностной информации. Ничего нового.
Так это че? Получается битрикс не говно, написанное студентами за еду?
>>064935
Да, Спасибо, ребята.
Я исключил ноду и другие модные технологии по очень простой причине. На них много вкатунов
А связка вью + ларавел достаточно уникальная, если смотреть по курсошлепам, они такое почему-то не берут.
Спринг трогал, мне очень понравился. Но знаете, я понимаю, что он используется в основном в финтехе 99%, а меня туда не возьмут по биографие. Го не стал брать по причине выше. Сисярп, заманчиво, но хз. Думал в веб3 токены клепать, но чет я такой ленивый, это капец.
У меня есть некоторы опыт юай обезьянки поэтому с апи не должно возникнуть проблем. Напишу туду ну и задачи из закрепа. Не знаю сколько времени мне понадобится, там пишут от года до двух лет. Но я опытный орагутанг, поэтому думаю, месяца за 2.5 управлюсь. Основная проблема в синтаксисе, т.к. к яваскрипту очень привык.
Не уверен, что возьму мидла за 2месяца, т.к. сейчас объясню почему:
Пробовал освоить яву и спринг за месяц. Но у меня не вышло. То есть круды я мог писать, но не хватало опыта, практики что ли, постоянно подсматривал в доку и свои заметки. Короче я дошел до oAuth2 и микросервисов и тупо ничего не мог реализовать, т.к. были жесткие затупы, но и срок поджимал. У меня был план заспидранить яву за месяц ну и знакономерно я обосрался.
Если кому интересно, то неделя была на синтаксис + задачи из кодварс. Потом спринг. Машинальная память не вывезла, по времени, каждый день по 6 часов в полном фокусе.
>>065258
Да да я https://tc39.es/ecma262/#sec-agents
Всё что новое пишется слабо отличается от ларавел. Старое конечно переписывать никто не будет на "новый" битрикс д7, так что смотря куда устроишься, с тем и будешь чаще работать.
>заспидранить яву за месяц
>Машинальная память не вывезла
Имаджинирую ебало счастливого работодателя в момент осознания какого Нео-мнемоника ему нарисовали хр.
P.S. братва в догонку
Я думаю, что нужно найти инструмент не тот за который лут 300к сек, а тот который в кайф чисто по душе + ну и чтобы он был живым на рынке труда. Не какой нибудь фортран
Хз попробую с пыхой. Фейсбук писали на нём е маё.
Так то похеру на чем написано, то есть 99.9% что всё равно не взлетит. Поэтому нет разницы на чем ты напишешь свой двач будь то пыха/нода/сярп/явка или ещё что-то. Ну если конечно не пишем паблик апи. А так пользователи смотрят на юай ну и закрытие их конечных потребностей и если ресурс, который вы создали - соответствует, то вроде должно сработать.
Поиграюсь с пыхой, пока чет не отдуплил за дженерики, вроде их нет. Ну лана. И напрягает вот этот прикол с $. Думаю с марта начать. Сейчас мышка сломалась.
Ну вообще мне особо не нравится писать код, т.к. ну не моё это что ли. То есть всё получается кровью и потом, сейчас конечно легче. То есть если я начну изучать новый язык и какой-нибудь вкатунишка, моя кривая обучения будет быстрее раза в 4 - 5. Но столько боли и часов в дебаге было потрачено, что аж больно. Как-то нашёл цитату, что програмирование - это как бег. Типо со временем будет быстрее, но не легче. Приятно конечно, когда всё получается, блин ну для этого нужно так много учесть, что аж голова кругом идёт.
Да, я определенно ленюсь. + я не талант, а самый обычный человек, может быть немного усердный.
Мне не нравится, что люди идут в сферу информационных технологий ради денег, это не самый лучший мотиватор. Т.к. лучше быть каким-нибудь сварщиком или строителем. Да, по деньгам будет меньше, но не надо постоянно изорбретать как-то велик и жить профессией. Да и просто пилить аплик, которым будут пользоваться 1.5 человека.
>Человек даже не в курсе про хайлоад блоки.
Ты знаешь как они устроены под капотом? И какое говно они делают в бд?
>Да да я https://tc39.es/ecma262/#sec-agents
И че ты высрал? Дай угадаю, английский у тебя А0?
>An agent comprises a set of ECMAScript execution contexts, an execution context stack, a running execution context, an Agent Record, and an executing THREAD
Даю подсказку дауненку без английского - в английском языке когда на конце нету S - это единственное число.
Теперь читай дальше:
>Except for the executing thread, the constituents of an agent belong exclusively to that agent.
В гугл транслейт вставить сможешь? Где ты тут многопоточность увидел, даунит?
Ну можешь сам доделать, что тебе не нравится. Битрикс это гибкая система модулей и компонентов, всегда можешь подпилить и будет красиво.
>сам доделать
Просто хочу разобраться.
А сколько с тебя попросят разрабы ларавеля за доделывание их фреймворка?
Перетолстил
Купи и проверь.
Попробуй развернуть демо сайт у себя и погляди
Нужна работа - да. Если нет нужды спешить - нет. Есть желание подняться из говен - да. Нет желания даже знать о говне - нет.
Сначала изучи что то нормальный проект, на фреймворке ларавель или симфони, или хотябы на опенкарт(все лучше битрикса). А вот потом пробуй... Отпиши только результат "пробования")
Содержимое txt.txt (спойлер с минусами в файл не выходит, просто как разделитель использую, чтобы читать удобно было):
--------
Если
переданный
шаблон
регулярного
выражения
не
компилируется
в
допустимое
регулярное
--------
Содержимое PHP-файла:
--------
declare(strict_types = 1);
$asArray = [
"Если",
"переданный",
"шаблон",
"регулярного",
"выражения",
"не",
"компилируется",
"в",
"допустимое",
"регулярное",
];
$contents = file_get_contents("txt.txt");
$contentsAsArray = explode("\n", $contents);
var_dump($contentsAsArray);
var_dump($asArray);
--------
Пикрелейтед - что я вижу.
Это какой-то баг, или что?
Содержимое txt.txt (спойлер с минусами в файл не выходит, просто как разделитель использую, чтобы читать удобно было):
--------
Если
переданный
шаблон
регулярного
выражения
не
компилируется
в
допустимое
регулярное
--------
Содержимое PHP-файла:
--------
declare(strict_types = 1);
$asArray = [
"Если",
"переданный",
"шаблон",
"регулярного",
"выражения",
"не",
"компилируется",
"в",
"допустимое",
"регулярное",
];
$contents = file_get_contents("txt.txt");
$contentsAsArray = explode("\n", $contents);
var_dump($contentsAsArray);
var_dump($asArray);
--------
Пикрелейтед - что я вижу.
Это какой-то баг, или что?
Попробовал всякие версии, ничего не изменилось. На php-7.0.0-nts-Win32-VC14-x64.zip пик случился из-за кодировки. При этом, как видно, кавычки всё ещё пидорасит. Подумал, может, в cmd какой баг. Запустил в PowerShell - результат такой же.
Поставь линупс и не майся
>>066657
А, бля! Я разобрался. У меня в файле txt.txt были не \n, а \r\n, то есть windows-style line ending. Это приводит к такому аномальному поведению. Если выполнить что-то типа:
var_dump($asArray);
echo($asArray[0]);
var_export($asArray[1]);
То будет такая хуита в выводе. При этом, если сделать что-нибудь типа
echo(strlen($asArray[0]));
То результат как бы нормально показывается. Как бы, потому что он будет на 1 больше ожидаемого, ибо \r является частью строки и тоже посчитается. Короче, это не совсем баг, просто когда в начале строки \r её пидорасит.
При этом, да, судя по всему - проблема специфичная для windows. Я бы предположил, что пидорасит её на уровне вывода, где-то там очень глубоко, на слое, который общий и для cmd, и для powershell.
var_dump("\rhello");
На винде выводится хуита кривая, а на линуксе норм.
Микросамофикс: \r в конце строки, а не в начале.
Перекочевал в PHP с React разработчика. До этого полностью работал на JS, по нему знаний много. Есть опыт создания своих локальных проектов на NestJs и React. Ввиду полного отсутствия вакансий на данный стек начал вкатываться сразу в laravel не разбираясь с самим языком, так как счёл его очень похожим на javascript. На Laravel сделал 1 локальный проект, прописал REST API, по сути дефолтный CRUD. Но в предвкушении самого собеседования даже на такую никчёмную позицию задался вопросом. А действительно ли PHP так похож на JS? Смогу ли я пройти собез если я мало знаю тонкостей языка? Что обычно спрашивают начинающих PHP разработчиков?
В самой вакансии указаны требования базового знаний PHP+JS, ООП и шаблонов проектирования. С последними туго, но ООП вроде подтянул. Что посоветуете? Как не обосраться жиденько?
Я только что покушал, кстати.
Советую въебать коньячку и вывозить на софт скилах. Пытаться попиздеть за жизнь.
Полезешь в тему ооп и тебя начнут сразу душить и гнобить. Посмотри на животных выше по треду. Там такие торквемады, чуть не по ихнему сразу тряска начинается.
Годаун, когда работу найдешь?
Да хз, я бы напиздел что-то типа: в основном на сервере работал с нестом, с пыхой поменьше и пр кококо. Типа посмотрите я не лох, прост немношк с другим стеком работал, поэтому могу мальца обосраться, но общую конву понимаю. Авось тебя на нест посадят.
Да и нест же ООП и на тайпскрипте, что ближе пыхе
Разработчик это же ремесленник, а не философ теоретик. Тупо рабочий на заводе. Это тыкаешь сюда, это сюда. Бля, ей богу не понимаю.
Речь о том чтобы знать всякую синтаксическую хуйню: приватные свойства, интерфейсы, как класс отнаследовать и пр. Ясен хуй что паттерны это хуйня для аутистов, но как работать с классами/объектами в языке нужно знать
Ок. Объясняю как тупому зумеру.
Твоя мать когда нибудь наводила "порядок" в твоей комнате? Уходил в шкилу - все валялось "на своих местах". А приходишь обратно - нихуя нет и непонятно что теперь где.
Кодовая база это такая же комната, в которой хозяйничают одновременно множество человек. Действия этих людей надо как-то организовать, чтобы они не противоречили друг другу, могли понять чего хотел другой и не делали одно и тоже разными способами.
Как же это сделать? Нихуя себе! Можно же записать схему действий, всем эту схему прочитать и действовать согласно этой схеме.
Так вот почему в вакансиях пишут: знания ООП и П-А-Т-Т-Е-Р-Н-О-В, а потом соотносят с тем что знают и каким паттернам следуют их сотрудники! Чтобы можно было легко РАЗОБРАТЬСЯ по общеизвестной СХЕМЕ!
Дорогой малыш, сегодня ты узнал много нового.
Завтра у нас будет урок как самому ходить на горшок и как правильно вытирать жопу.
А на сегодня все. До новых встреч!
Никто не использует кроме создателей фреймворков твои намоленные паттерны. Они нужны, чтобы в интернете выёбываться чем ты и занимаешься.
В голосину проигрую, когда смотрю всякие уроке про паттерны от опытных разрабов, которые в гугл лезут, чтобы не обосраться, почему? Потому что они в рот ебали эту нинужную дисциплину созданную только для того, чтобы пилить о ней уроки
>По тексту сразу видно
Этот тред он как заповедник дегенератов. Достояние двача, под охраной санитаров.
Да тыж жертва инфоциган, долбоеб. Найди работу и посмотри как оно на самом деле, теоретик с двача
> Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes)
Не, я понимаю, что это 32 MiB, но чем объясняется? И ещё мои наблюдения показали, что если в качестве длины передавать в fread 1, 2, 4 и т. д, то скорость выполнения скрипта будет расти, вплоть до 64. Потом выходит на плато. Опять же, почему 64? Возникают ассоциации с x64, но это ведь байты, а не биты.
Есть вообще какая-то рекомендация, какой длины чанки мне читать с помощью fread, если нужно прочитать весь файл один хрен?
Норм решение?
1. Накатить полнотекстовый поиск на MySQL.
2. Найти статьи где есть бнв.
3. Запросить из БД список этих статей и скриптом заменить слова -> обновить.
А, там же еще можно like %бнв%
Хуй тебе. Сиди на пхпшторме, говноед
Нахуя тебе полнотекстовый поиск?
>Статей дохуища (400к записей
Это вообще хуйня же, короче все зависит от регистра если тебе нужно менять 'БМВ' на 'BMW' то это можно sql запросом пройтись, за MySQL не скажу, в постгресе есть replace. Если что-то по сложнее с текстом, то рекомендую написать скрипт.
Не пытайся менять все записи, проходи по 500 штук максимум и после всего этого не забудь про vacuum analyze чтобы у тебя индексы нормально работали и бд меньше места занимала
Да, там тоже реплейс есть.
select replace .. where like like %БМВ% - типа этого?
>и после всего этого не забудь про vacuum analyze чтобы у тебя индексы нормально работали и бд меньше места занимала
Это что такое?
> Allowed memory size of 2147483648 bytes exhausted
С английским плохо? Выделенная пхп память кончилась.
>скорость выполнения скрипта будет расти
А если делать на каждый читаемый байт по два цикла скорость вырастет или упадет?
В документации буквально написано что есть внутренняя буферизация. Это значит что читается на самом деле сразу кусок определенного размера, а потом ты его пытаешься получить в несколько заходов разбивая на заданное количество байт.
Очевидно что пик скорости будет в момент когда запрашиваемая тобой порция совпадет со скачиваемой, и на одну подгрузку куска с диска будет всего одна операция получения этого куска.
>>068216
>чтобы у тебя индексы нормально работали и бд меньше места занимала
Это нужно только если изменяемое поле проиндексировано. На текст никто индексы не делает, нахуй оно надо?
В MySql тоже есть REPLACE https://www.w3schools.com/sql/func_mysql_replace.asp
Все что нужно это просто сделать апдейт https://dbfiddle.uk/vIblUb-h
А вот если нужно поменять МНОГО ЧЕГО РАЗНОГО. Тогда нужно городить обработку таблицы через курсор порциями с помощью процедур. Или уже писать пхп скрипт.
Юзаю уже полтора года и нет вирусов никаких.
Короче, прошёл собез на изи. Еще и похвалили в догонку, мол типо нихуя ты осведомлён, лол. В связи с этим вывод. Пхп - язык для даунов. Не нашёл работу будучи ПХП разрабом - лучше суицид как можно быстрее. Уже ничего не поможет
У меня на первой работе вобще собеса не было, работодатель пообщался со мной по переписке, чисто познакомился, потом попросил написать какой-то изичный парсер, который я написал минут за 40 до этого их вобще не писал. Он сказал заебись и го завтра тогда уже работать, там ещё один такой же парсер написать надо. Так я и вкатился. Другое дело, что это все джуновская работа, где от тебя нихуя по сути не требуется, если хочешь получать 200+ могут и поебать нормально
Я лично просто загуглил списочек аля "100 самых популярных вопросов на собеседовании PHP". И вуаля, больше половины вопросов на собезе были из списка. Не считая всяких дебильных абстрактных вопросов по поводу "что такое интернет" и так далее.
Были вопросы по пет проекту немного, от силы 2. И на базу данных пару вопросов, ну еще про гит. И всё. В ПХП как оказалось не так много нужно всего знать. Просто читаешь определения всякой хуйней, пытаешься расписать их своими словами и так же на собесе и отвечаешь. По ООП было несколько вопросов, но про П-А-Т-Т-Е-Р-Н-Ы не спрашивали. Я им кстати сразу объяснил своё отношение к паттернам и они со мной согласились, кек. Ну тащемта всё
Так ты на фулстека вкатился, а это проще чем на чистый бек
Фига сразу гонору добавилось. До сеньора вначале дослужись, 300к начни получать, тогда и говори для даунов язык или нет.
Ну тебе норм тогда, а в моем мухосранске один битрикс
> С английским плохо? Выделенная пхп память кончилась.
Нет. Во-первых, 2GB памяти на этот файл хватило бы при любом раскладе. Во-вторых, прочитай ошибку внимательно, что у него кончилось, ёпта?
> Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes)
>tried to allocate 4096 bytes
4096 не поместились в 2147483648? И откуда 4096 взялось вообще, когда я указывал размер куска 33554433. Указываю 33554432 - всё ок, 33554433 - такой говняк.
> В документации буквально написано что есть внутренняя буферизация. Это значит что читается на самом деле сразу кусок определенного размера, а потом ты его пытаешься получить в несколько заходов разбивая на заданное количество байт.
Где можно подробнее прочитать? Тут https://www.php.net/manual/ru/function.fread.php про это почти ничего нет.
ты проиграл с паттернов, их даже на битриксе используют, если тимлид вменяемый.
На расте, скорее мертвы чем живы, новых проектов почти нет, а вот старых проектов с выразительной синтаксически сахарной кодовой базой много. Но всяко лучше битрикса, можно даже сразу туда пробовать вкатываться
Да, паттерны там охуенные Capslock Array Keys Dilder, String Boolean Shittone, Global Variables Fucker
Речь об оперативной памяти. В начале работы скрипта пхп разрешается взять только определенное количество памяти. Превышение этого лимита и вызывает ошибку.
>Allowed memory size of 2147483648 bytes EXHAUSTED
С английским плохо?
ДОПУСТИМЫЙ РАЗМЕР ПАМЯТИ 256 МЕГАБАЙТ ИСЧЕРПАН
ИСЧЕРПАН СУКА
>И откуда 4096 взялось вообще
А какая разница? Ну читает он по 4096, а потом склеивает в кусок который ты хотел. Проблема-то в том что ты наговнокодил утечку памяти.
Похуй какие они там. Это надо понимать как факт, что такое спрашивают и быть к этому готовым.
пездой четаешь? Я написал "на битриксе", а не "в". В самом ядре битрикса одно говно, но никто не мешает использовать только его апи, а свои модули писать нормально(бизнес его сейчас хавает и кабаны пытаются оседлать эту волну, в джунам деваться некуда, на нормальный стек очередь пару км).
Что не так?
version: "3"
services:
php:
image: php:8.2-apache
container_name: php82
ports:
- 8000:80
volimes:
- ./php:/var/www/html
build:
context: .
dockerfile: Dockerfile
Проверь отступы.
Зачем вобще её пишут, когда рекомендуют не писать?
Та не. Просто тебе это сложно давалось помню
<?php
echo "hello\rworld";
В теории оно должно вывести
>world
Но во всяких онлайн IDE получается
>hello
>world
У меня сейчас доступа к машинам на линуксе нет.
>\r
>Carriage return by itself provided the ability to overprint the line with new text.
https://en.wikipedia.org/wiki/Carriage_return#Computers
Это сама консоль видя \r перезаписывает текущую строку. А браузеру на это поебать, для него эти закорючки - просто текст.
Написанная в /local/ реализация паттерна ради паттерна конечно же охуенна, но большинство кода таки приходится на ковыряние $arParams в result_modifier.php и написание своих компонентов, которые приходится писать в битриксовой "архитектуре" не знакомой не то что с паттернами, а даже с psr.
Есть конечно же проекты с большой бизнес-логикой, где действительно можно дохуя всего написать достаточно хорошо и красиво, а от битрикса нужна только админка и конечно же именно ты с такими проектами работаешь. Вот только большинство пользователей этой хуйни малые кабанычи, которым в красивом слайдере на жиквери нужно показать ассортимент шаурмы либо мухосранские управляйки которым нужно вывести при помощи bitrix:news график отключения горячей воды.
>мухосранские управляйки
Сейчас зашел на их сайт, раз уж вспомнил, где я добавлял этот самый график 3 года назад трекая несколько микрозадач по 15-30 минут, они уже на друпале, лол
Написал на днях. Можешь переделать под себя, сменив постгрес на mysql или просто добавить его в конфигурацию. Как подключить контенер с phpmyadmin, разберешься сам.
https://github.com/bcchicr/docker-php-env
Если есть кто-то разбирающийся, послушал бы, в каких местах есть косяки, и что хорошо бы исправить.
Спасибо. Наконец-то я разобрался.
>>069275
Нет, там всё несколько сложнее. Большинство онлайн PHP-интерпретаторов засовывают результат выполнения кода в textarea. А textarea обрабатывает любую комбинацию, которая может использоваться для переноса строки, как перенос строки. \r это mac-style line ending.
Ещё какая-то часть сайтов засовывает результат в pre. Там \r просто выбрасывается, как будто его и нет.
И всего один я нашёл, у которого как бы настоящая эмуляция консоли с отрисовкой через canvas. Вот там \r обрабатывается как и должно. А должно, как показал анон выше, прыгать на начало строки, да.
Да! Я обязательно должен был разобраться в том, как \r ведёт себя в консоли линукса, и почему тогда большая часть онлайн интерпретаторов воспринимает его как перенос строки.
Посмарел твой DI контейнер. Мне кажется стоило начать со сценариев его использования. Тогда было бы проще понять что он должен уметь и зачем. Например, довольно быстро пришло бы понимания, что регистрировать в нем каждый класс это дело очень заебное. И надо бы какой-то авторезолвинг прикрутить.
По коду отписал тут
https://github.com/bcchicr/student-list/commit/f644ad083dcf54e01a348872556ac5fc2f058eb2#diff-01c0bcde8fbc53292e14349c599a302c50ce6749dabf213648fb2051ca1d73a0R46
Если кратко, то начало бодрое, код нормальный. Но к концу ноги явно заплетаются и начинается путаница. Еще пару классов в эту структуру и все - сам бы хуй разобрал что там куда. Явно надо сначала набивать руку на чем-то более понятном, без когнитивного оверхеда в виде рефлексии и анализа кода.
Благодарю, ценные комментарии.
>Но к концу ноги явно заплетаются и начинается путаница.
Да, так и было. Где-то ночью параллельно с написанием курил PSR-11, смотрел реализации на packagist и читал статьи на тему.
>Мне кажется стоило начать со сценариев его использования.
Я решил приложение в впринципе писать послойно с самых низов. Начал с создания среды в докере. Далее в планах написать свои простенькие ORM, фронт контроллер и остальное, что понадобится.
Но начал не с самых низов, лол.
Где само "приложение"? Где конфиг? Обертка над глобальными массивами PSR 7 и 15?
Я уже заебался постить это видео. https://www.youtube.com/watch?v=pz6VdH4_BSg
Посмотри, чтобы лучше понимать структуру приложения и самое главное, почему она стала именно такой.
Какой же ты умный...
https://onlinephp.io/
html body div#content-container.sandbox div#content-noright form#sandboxform.php-editor-form div#output_sandboxform div.functionresult div.result textarea.autoheight.results-textarea
https://jsfiddle.net/r3mdtvxf/
Ладно, я немного обосрался, если вместо textContent сделать innerHTML, то \r начнёт переносить строки. Хотя мне чё с этого?
Пчел. Я запостил тебе код, который запустил на своем компудахтере в своем браузере. Че ты несешь вообще?
> Где само "приложение"?
Пишется же. Я решил зайти со стороны базы данных и посчитал, что прежде чем читать конфигурацию и открывать соединение, стоит сделать контейнер для его хранения.
За видео спасибо. Не пожалел, что отписался в тред.
Зачем ты влезаешь, если не понимаешь, о чём идёт речь?
Часть онлайн-сервисов посылает результат выполнения скрипта в textarea через value, \r начинает считаться переносом строки. Другая часть посылает результат в pre через textContent, в результате \r просто отбрасывается.
Всё.
>джунам битрикс подсовывают.
Это мне мухосранск подсунули где один битрикс поэтому выбора нет кроме битрикса
ето да
Я уже 6 лет работаю за деньги, начиная с "веб программист на все руки", где работал с разными CMS и шаблонами, чистым пхп, и заканчивая ларавлом и парой других фреймворков (слим и ебучий кодигнифер). Но до сих пор ощущение, что только вчера вкатился и буквально все лучше меня. Отпускает немного только когда читаю чужой код или слушаю ту хуйню, что несут опытные коллеги на совещаниях.
С джуном понятно: взяли тебя работать и спустя 3 месяца не уволили - ну, значит джун.
С мидлом более-менее тоже: это тот же джун, но ему уже можно оставить любую задачу и он будет её решать без постоянного контроля и внимания, потому что набил руку.
Но сеньёр? Кто эта собака сутулая? Нельзя же просто по стажу отделять. Может, у одного человека больше экспы за два года накапало чем у другого за десять? По списку технологий? Тоже хуйня получается. Типа, раз один знает докер и ангуляр, то он сеньёр, а тот, кто нет - мидл? Так это вообще не бекенд технологии, а девопс и фронт. Меряться знанием SQL и PHP? Типа, пока не можешь с похмелья написать запрос на 20 строк кода, то не сеньёр?
Сначала попытайся предоставить исчерпывающие определения всех этих градаций (джун, мидл, хуйун и пр.) и ты обнаружишь, что это термины без определений придуманные какимто долбоебом, поэтому не пытайся как-то определить кого к кому относить.
По сабжу сам также как и ты. Лет 8 пердолюсь с пыхой, каких задач только не решал, но постоянно ощущение, что я джун джунович. А потом мне попадается чужой код и я ловлю фейспалмы. Вспомнил стори: подселили к нам зумерка фронтендера, а я во фронте вобще не шарю, но этот еблан вме мозги мне выебал, пришлось учить его и постманом пользоваться и пост запросы на сервак отправлять. Проработал у нас пол года где-то и ушёл. Через пол года я глянул его аккаунт, а там он о себе написал: senior software developer. С тех самых пор мне всё стало понятно со всеми этими петушиными определениями
В конечном итоге так и происходит, студии которые перерастают во что-то большее отказываются от этого говна, потихоньку избавляясь от тех кого они сделали и кто у них там на поддержке. А вот всякие говнари плотно утопают в этом болоте.
> троллинг тупостью
Как правильно назвать $args? Вот список аргументов - он переменной длины. А как дать понять, что $args - тот самый аргумент, который, на самом деле, может быть любым количеством аргументов?
В JS есть термин "остаточный аргумент". Но по этому словосочетанию находятся только статьи про JS, а если ввести "php остаточный аргумент", то такой лулз. Хотя, по запросу "php rest argument" уже что-то находится, но хз, как будто какого-то официального(тм) названия у таких аргументов нет, и каждый называет их как хочет.
Многоточие в сигнатуре уже показывает, что функция принимает переменное количество аргументов.
Развел сопли на пустом месте. Ты взрослый мужик. Цени свои навыки, будь открытым к тому, чтобы делать что-то иначе и все. Пишешь код и платят? Значит все норм. Видишь что кто-то пишет лучше тебя - сиди разбирайся почему его код лучше, чем твой и как сделать свой код таким же.
Разве так сложно называть вещи своими именами?
Почему в словаре метод "вернуть строку"?
Почему переменная называется ИДЕНТИФИКАТОР СЛОВАРЯ, но внутри МАССИВ? Причем не идентификаторов словарей, а идентификаторов ЭЛЕМЕНТОВ конкретного словаря?
Почему метод называется processPROPERTIES, а результат называется resultITEM? Свойства это итемы или наоборот?
Почему результат поиска по словарю возвращает СЛОВАРЬ?
То что predictedDirectorIES называется с какого-то хуя directoryPredict - это у же так, мелкая доебка на фоне остального пиздеца.
Но самый главный вопрос: какого хуя из названия функции и её параметров невозможно нихуя понять что вообще происходит и нахуй это надо?
Просто блядь список используемых терминов:
process, property, result, item, element, dictionary, id, facet, string, directory, predict
Максимально не опознаваемая дженерик хуета. И всего одно слово дающее хоть какой-то контекст - predict.
Как такое говно читать? Нахуя такое говно писать?
Отписался по новому варианту контейнера.
https://github.com/bcchicr/student-list/commit/6aca6417c7c14910f320091ba76b89f254ccf181#diff-b3061446b6923316c68d46e450315e4a900b1fd223576d2bafa009bbd417f97eR29
Если честно, то стало хуже. Тебе как минимум нужно расписать алгоритм: что происходит при попытке получить зависимость из контейнера. Прям построчно. Рекурсивность работы контейнера явно тебе тяжело дается. И сверху ещё проблемы с ооп.
По тестам комментировать не стал. Там просто ерунда написана.
Начни с того что ты тестируешь СЦЕНАРИИ.
1) Если я запрашиваю несуществующую зависимость, то получаю исключение.
2) Если я задаю зависимость, то могу её получить.
3) Если зависимость задана как синглтон, то она кешируется.
Ну и к тому же ты пока сам контейнер до ума доведешь задолбаешься из переписывать.
Короче, для тестов рано. Тесты надо уметь писать. Иначе ты просто нахуярил x2 кода, который теперь менять в джва раза дольше. А у тебя процесс исследования и проектирования идет.
Спасибо, анон. Я, планировал всему научиться в процессе написания, но даже не надеялся на оценку со стороны. Постараюсь все учесть. В сторону декораторов даже не думал, красивая мысль.
>Там просто ерунда написана.
Да, сам чувствую. Просто пробую делать первые шаги. В htdp каждая отдельная функция покрывалась тестами, и я решил попробовать сделать тут так же.
>А у тебя процесс исследования и проектирования идет.
То есть, стоит покрыть тестами сценарии контейнера и не трогать классы, через которые реализована его работа, пока реализация постоянно меняется? Но реализацию же стоит тестировать на корректную работу, когда она примет устойчивую форму?
ЗАБЕЙ НА ТЕСТЫ. Ты не знаешь что тестировать вообще.
В прошлой итерации у тебя код хавал исключение контейнера при попытке резолва зависимости. То есть сам у себя. А также код вне контейнера кидал исключения по сути самого контейнера.
Что произойдет с тестами этих исключений когда ты нормально все напишешь? Правильно - это мусор, который вылетает в помойку. Отдельный вопрос: зачем вообще тестировать исключения. Тебе три человека пять вариантов высрут что и как надо тестировать.
Лол. Ты не поверишь, но это код компонента, который считается ЭТАЛОНОМ как надо писать в битриксе. Его всегда приводят в пример "чистого" кода. Так что это ты что-то не понимаешь, уж разработчикам кора битрикса виднее.
Конечно поверю.
Пикрелейтед именно я делал, если че. Видел некоторое дерьмо.
Говенная кодовая база это как бы общеизвестный минус битрикса. Буквально любая бесплатная параша написана лучше. Наверное только насчет вордпресса есть сомнения, и то вряд ли - там бюджет на разработку гораздо больше чем у битриксоговна.
Поскольку $this - это базовый контейнер, замыкание не имеет доступ к кэшу. Если замыкание обратится к контейнеру, будут созданы новые экземпляры объектов, которые могли быть уже закэшированы, и это проблема, которую я пока не понимаю, как решить.
Разумно, чтобы базовый контейнер ничего не знал о своих обертках, поэтому вероятно стоит делегировать резолв некоторому объекту DefinitionResolver?
Ну в общем все как я и говорил. Добавилась пара классов и ты запутался окончательно. Надо прям по порядку разбираться что идет после чего и зачем.
В комментарии такое не напишешь, к тому же я могу писать комменты только к коммитам и только к измененному коду. Неудобно пиздец.
Если хочешь прям подробно разобрать, то это надо экран стримить и схемы рисовать. Заходи в дискорд, расскажу покажу. https://discord.gg/YV4CxgGaah Так по комменту сто раз переписывать - ты либо вообще забьешь в итоге, либо месяц потратишь.
Какой смысл добавлять DTO, только потому что конструктор класса принимает 5 параметров от пользователя?
>data transfer object (DTO[1][2]) is an object that carries data between processes
>This pattern is often incorrectly used outside of remote interfaces. This has triggered a response from its author[3] where he reiterates that the whole purpose of DTOs is to shift data in expensive remote calls.
>нафига мне создавать DTO?
Тебе и не надо. Тебе надо создать структуру данных с конфигурацией создаваемого объекта.
Кто ж виноват что в говноязыке только две возможные структуры: объект с кучей лишней хуйни и массив без типизации и контроля содержимого.
Можно ли в DTO использовать значение по умолчанию в конструкторе или где-то еще?
Вообще где-то можно найти адекватный пример простого DTO?
Ох и goвно
Нет, не знаю
Конкретно сейчас втыкаю в пагинацию:
https://symfony.com/doc/6.2/the-fast-track/ru/10-twig.html
Так и не смог понять, что за пагинатор и как им пользоваться, потому что говнюк Фабьен ни черта про него не написал.
Согласен. Про докеры хуекеры написано, про фреймворк этот ебаный написано.
НО.
Раз уж ты написал книгу, то будь добр объясни ЧТО ТАКОЕ КНИГА И КАК ЧИТАТЬ! Так и не смог понять, как этой хуйней пользоваться.
Фабьен, говнюк! Что толку с твоей книги если ты не приложил к ней инструкцию как читать? Вкатуны вкатиться не могут, паскуда.
Я много книг читал по программированию и у него очень плохо всё написано. Он буквально даже не пытается объяснить код, который приводит в книге. Видимо, читатель должен как мартышка его переписать и восхищаться гением Фабьена. Либо читатель уже всё знает, но тогда нафига нужна его книга? Конкретно про пагинацию, выдаёт функцию с каким-то монструозным кверибилдеров. Что там за параметры? Да даже объяснил бы саму концепцию этих таких билдеров. Если бы я до этого не читал книжки по джаве, то вообще наверно бросил изучение симфони. Тут хотя предыдущий опыт позволяет не дропнуть, а поискать в других местах объяснения. И вот другие почему-то объясняют все эти штуки, хотя они не авторы фреймворка, а рядовые программисты.
Какие ещё варианты? Документация? Она тоже ничему не учит, а скорей справочник для тех, кто уже знает, но забыл.
Видосики? Они тоже разного качества и не покрывают всех тем. Да и времени отнимают гораздо больше, чем чтение книги. Также проблема видосиков, что сложно сделать закладки и вернуться к прошлым темам. Некоторые снимают сразу по 1-2 часа, поди потом найди момент, где он объясняет нужную тему.
>проблема видосиков, что сложно сделать закладки и вернуться к прошлым темам
Я пишу себе конспекты.
> Да даже объяснил бы саму концепцию этих таких билдеров.
А еще читателю пока он читает книгу надо периодически жрать.
Автору надо объяснить концепцию того как жрать, иначе как книгу прочитать тогда.
А еще читателю надо срать. Обязательно раз в несколько глав нужно прописывать концепцию сранья, чтобы читатель не обосрался.
>Если бы я до этого не читал книжки по джаве, то вообще наверно бросил изучение симфони
Это пиздец какой-то. Что ты там "изучаешь" вообще? Нет блядь серьезно, что там "изучать"? Тебе нужно сделать пагинацию - ты открываешь доку симфони и читаешь как делается пагинация средствами симфони. Тебе нужно настроить логи - ты открываешь доку и читаешь как настраиваются логи в симфони.
Ты эти книги че как фентези перед сном читаешь блядь? Это справочная литература. Я понимаю что сюда только совсем конченные попадают. Но бля, учебниками то пользоваться учили всех - сейчас обязательное среднее образование.
Охуеть просто, еще расскажи что ты словарь до буквы "ж" дочитал и чет концепцию не понял.
Запоминается что? Концепция квери билдера? Если у тебя деменция, то надо инвалидность получать и мелкую моторику развивать. Лего купи, кубики.
Имаджинирую ебало плотника, который утром купил себе за 100к охуенный фрезер чтобы четкие фаски делать. А на следующий день забыл что это и нахуя это ему.
Массивы через array() создаешь?
Да и стринговые значения нужно в кавычки брать, а у тебя они не в кавычках
Да и вместо mysqli используй pdo
А вот представь инструкцию к фрезеру, если бы её написал Фабьен? Там наверняка бы было описано про то, как валить деревья, сплавлять их по реке, а в конце он был оставил изображение своего изделия, выполненное с помощью фрезера, но про то, как пользоваться фрезеров - ни строчки.
Ты не поверишь.
https://www.fit-instrument.ru/files/instr/80597_instr.pdf
В инструкциях к фрезеру не описывают концепцию фрезерования. Не дают определение что такое "фреза". Не рассказывают что такое "цанга". И что это не тот "патрон" и он не шмальнет.
Да что там. В этой инструкции даже нет встроенной кнопки "поиска", по одному клику на которую можно все найти.
Это сколько же вкатунов в столярку "бросили изучение" когда купили фрезер и попытались прочитать инструкцию. А там СЛОЖНА. Ниче НЕПОНЯТНА. И к тому же, вот это блядь наглость, нет встроенного курса по теории столярного дела и машиностроения.
Как можно описать в OPENAPI swagger два варианта response? То есть роут может принимать флаг, в зависимости от этого флага роут вернут либо одно тело, либо другое.
Не читаешь нихуя
Если в компании нет грейдовой системы, сам предложи ввести ее. У каждой компании свои понимания о том, кто сеньер. Я только в двух компаниях проработал, и в обоих навыки сеньера выходили за рамки "я разработчик - пишу код". На пике плохой пример. У нас были указаны конкретные навыки и опыт работы с определенными продуктами. По каждому пункту требований мы коллективно тесты создали еще.
index.php?action=show&page=2&orderby=ASC
на
/show/2/ASC
Как быть, если некоторые параметры являются необязательными, но после них пойдут другие параметры?
Вообще, имеет ли смысл упарываться и менять их? Может вполне нормально оставить GET'ы?
У нас были проблемы с ботом гугла. Он писал, что у нас по разным ссылкам одиа и та же страница открывается.
Манямирок. Дохуя вакансий для бомжей на 15-30-50к, если ты вкатун, то отработаешь пол года - год и попиздуешь на новую работу, но уже с опытом и нормальной зп
Как работает тегированный кеш в битриксе? Допустим я вынул информацию о товаре из разных таблиц. Цена находится в одной таблице, отзывы в другой. Тегированный кеш будет iblock_id_59.
Допустим кто-то добавил отзыв для этого товара. Кеш сброситься (для всех полей или только для поля отзывы?). А как битрикс определяет, что этот отзыв относится к этому товару и кеш этого товара надо сбросить?
Или что, если изменить цену для одного товара, то обновится кеш для всех товаров инфоблока iblock_id_59?
Хотя все равно не понятно, как он отслеживает конкретне поле
>Дохуя вакансий
Не неси откровенную хуйню плез, вакансии сейчас только на позицию мидла и синьора, все остальное - мидлы под видом джуна.
>вакансий для бомжей на 15-30-50к
Вкатуны бесплатно готовы работать. Какие на хуй 15к, никто не будет платить столько джуну когда он готов делать все бесплатно.
>-30-50к
За 30-50к тебе сочная зумерша после курсов фронтенда будет давать ебать себя в рот, пизду и жопу каждый день. Ещё и унитазы мыть языком
Покормил
Надо учить гошку и крутить опыт на РНР. На собесе всё равно за РНР не спросят, поэтому для успешного вката надо только гошку нормально выучить.
Гошники не знают РНР, поэтому можно крутить опыт РНР и не палится, что не знаешь РНР.
Вой о том, что вкатиться уже нельзя когда-нибудь прекратится?
Всегда, когда речь о программировании, придет хотя бы один человек, который будет заливать одно и тоже. И похуй, истину или ложь он заливает, просто этот ор уже невыносимо читать.
Пчел. Я до крымнаша, на третьем курсе, пошел искать подработку. Написал в резюме: писою, какою, жопу вытираю сам, уверенный пользователь эвм, ЗНАКОМ с пхп, знаю что такое джойн.
У меня за неделю было три оффера: в местный мелкобанк - писать запросики в базу, в библиотеку - тянуть сетку и делать компутеризацию, и в небольшую контору - поддерживать их два сайта и эникеить бухгалтершам.
А какие реалии в 2к24 году в этой федерации? Как только лысая залупа начала давить из недорогих россиян новую нефть - те кто по смекалистей (ну или те из кого давить больше нечего), резко стали думать в каком направлении переместить свою сраку, подальше от давилки.
А как только наметилась новая тенденция, экономическая система ресурсной педерации создала то, что умеет создавать лучше всего. Индустрию, в которой на вход подаются долбоебы с деньгами, а на выходе остаются только долбоебы. Тот факт, что кого-то наебали, кинули, оказали некачественную услугу и прочее бурундучание, решается в лучших традициях ресурсной педерации - админресурсом. То есть абсолютной неприкосновенностью виновных и демонстративно наглым вытиранием хуя об лохов недорогих россиян.
Все эти бесконечные айти курсы производят оболваненных долбоебов по миллиону в год. На выходе наебанному остаются на выбор три путя: попытаться таки "войти", забыть о потраченных бабках или идти на очередной курс. Очевидным образом, сразу или после нескольких оборотов в этой "лохоотжимной центрифуге", очередной тупорогий, изначально профнепригодный для этой профессии долбоеб "лезет".
Вкатопокалипсис в айти уже случился. Пикрелейтед отклики на вакансию "1-2 года опыта". Возможен ли при этом вкат? Фактически да: вся тысяча джуновских вакансий в этом году будет закрыта. А статистически нет: вероятность просто приглашения на собес для вкатуна сегодня меньше процента.
Так что сиди, трясись и жди очередных выборов.
Фактически да: вся тысяча джуновских вакансий в этом году будет закрыта.
Конечно, кул стори, Боб, но все же. Читал в комментариях, что люди приходили на должность джуна по php, а по итогу не могли даже сказать про передачу переменной по ссылке или чем отличается абстрактный класс от интерфейса. Я все-таки считаю, что если нормально подготовиться, не лукавить, основательно вникать в темы, то все же есть шанс вката.
>вероятность просто приглашения на собес для вкатуна сегодня меньше процента
>Я все-таки считаю, что если нормально подготовиться, не лукавить, основательно вникать в темы, то все же есть шанс вката.
Каждый раз.
На одну секунду забудешь какие дегенераты в этом треде сидят, так тебе сразу напоминают.
Ноу щит, шерлок. Шанс того, что ты благодаря квантовым эффектам, в результате коллапса волновой функции телепортируешься с проперженного дивана за окно, тоже не нулевой. Просто он ДОСТАТОЧНО маленький, чтобы человечество этого события никогда не пронаблюдало. А жаль.
Это просто штука которая содержит в себе токены к сервисам в регистр методах или конфигурацию в ооп стиле, в бут методах. Всё это можно хранить в одном провайдере, но, для пущего удобства можно создать несколько провайдеров и разделить всю эту катавасию по смыслу, например: провайдер, который внедряет сервисы для авторизации, провайдер для работы с маршрутами и пр.
Можешь глянуть сей видос, там мужик всё нормально пояснил: https://youtu.be/VYPfncvYW-Y?si=NVNBbriDxNk_3MoL
Спасибо, анонче. Обязательно гляну видео.
Юзай линтер!
Какой фрейворк посоветуете задрачивать? Мне приглянулся symfony, норм? Я пока только базу задрочил, вовоп, мвс, работу с бд и файлами. Решил пора переходить к фрейворку. Как я понял выбор только между ларавел и симфони.
Да, кстати, с битриксом я проебался окончательно. Не осилил. Искал 2 бага половину суток. Один из них был это когда я пытался вытащить айди инфоблока через гетлист, я там указал SITE_ID зачем-то. Ну хуй знает зачем, вот почему-то подумал что так будет красиво и всё. А оказалось, что константа SITE_ID в административном разделе выдаёт локализацию ru/en, а в публичном как раз сам айди сайта. Ну что это за бред. Это же вообще не очевидно изначально, если не знаешь, то вот так и будешь рыться в коде сто лет.
Кароче не успел я сделать задание на этой ебучей стажировке. Сгорел. Не хочу больше никогда заниматься битриксом. Может в других фрейворках так же трудно, но в них я готов жрать говно, потому что это всемирно признанные стандарты. А битрикс это отечественный кал!!!!!!!
Ларавель учить проще, потому что по нему больше учебных материалов. В Симфони придётся выискивать инфу по крупицам. Сам вот сейчас застрял на полиморфным связях в Доктрине и не могу продвинутся уже неделю. Думаю, что зря взялся за Симфони, надо было не выделываться, а учить как все Лару.
Это круто если у них учишься, а если смотришь слитые видосики, то толку ноль, потому что нет практики и задания в видосиках они не разбирают. Надо такой курс, где в одном видео дали задание, а в следующем его разбирают как правильно сделать.
Что не понятно по полиморфным связям?
Только так и надо делать курсы. А теорию можно и самому почитать. Что толку смотреть как тебе рассказывают про синтаксис, это полная чепуха, а не обучение!
ПКМ -> перевести страницу
Уж лучше задротить по 100 часов в неделю в норм фреймворке, чем дельфинчиком жрать говно!!!
Ты - один из немногих нормальных людей, которые тут отписывались.
Без твоих ответов тред совсем болотным выглядит.
Одни токсики сидят.
Поставил последний ларавель с ui - все работает.
А как мне такое фиксить если мне на работе скажут пили проект на ларе старой версии какой нибудь, как я буду ебаться со всеми этими пакетами, подбирать версии что бы все работало ?
создаешь папку Service(s) и ебашишь туда свое говно
опционально создаёшь папку Repository и получаешь копрокопию доктрины
Никак.
Ты проснешься, обоссавшись и обосравшись, в мамкиной квартире на проперженном диване. Никакой "работы" у тебя нет и не будет. Ты просто фантазируешь как ты куда-то там "вкатываешься" чтобы окончательно не поехать кукухой от такой жизни.
>как мне такое фиксить
перекат в симфони бля буду там таких проблем нет ты актуальную версию хотя бы посмотреть в сосотоянии?
А сидишь на стуле. А еще ты сегодня дрочил.
Телепатия - страшная штука. Особенно в руках пхп программиста. Он, как человек к говну близкий, очень остро ощущает животные эманации.
>фантазируешь как ты куда-то там "вкатываешься" чтобы окончательно не поехать кукухой от такой жизни.
Жиза.
Просто изучай и не думай лишнего. Как время придёт - сам по себе вкатишься и не заметишь. И не задавай больше глупых вопросов, для них придумали ChatGPT 4.0!
>никогда не отправлял HTTP-заголовки
Ты когда пост написал - отправил заголовок на сервер двощей с телом сообщения.
services:
web:
image: nginx:latest
ports:
- 443:443
- 80:80
volumes:
- ./html:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
image: php:7.4-fpm
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: example
MYSQL_USER: example
MYSQL_PASSWORD: example
volumes:
- ./db:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
ports:
- "8081:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: example
services:
web:
image: nginx:latest
ports:
- 443:443
- 80:80
volumes:
- ./html:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
image: php:7.4-fpm
volumes:
- ./html:/usr/share/nginx/html
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: example
MYSQL_USER: example
MYSQL_PASSWORD: example
volumes:
- ./db:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
ports:
- "8081:80"
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: example
У тебя на хосте какая-то программа уже заняла 443 порт. Возможно у тебя запущен веб-сервер.
> ports:
> - 443:443
> - 80:80
Проще всего будет пробросить контейнер на другие порты. Или остановить программу, занявшую порт.
Имелось ввиду руками. Самому написать php-код, который отдает заголовки.
function dvach () {
function sosach () {
function mailach () {
}
mailach();
}
sosach();
}
Но это абсолютно бессмысленно и приведёт к тому, что dvach и sosach можно будет вызвать только 1 раз. Причём, вызов dvach включает в себя вызов sosach.
Итого, после вызова dvach, многократно можно будет вызывать mailach. Иными словами, если в функции-родителе происходит декларация именованной функции, её (функцию-родителя) можно будет вызвать лишь единожды, что бессмысленно.
Правильно понял? Если да, то нахуя так можно делать вообще? Прост? Способ выстрелить себе в ногу? Или для сабжа есть какое-то реальное применение?
>Способ выстрелить себе в ногу
А как ты выстрелишь ? тебе компилятор ошибку выдаст что функцию нельзя объявить 2 раза. А так у тебя есть анонимная функция и static.
>Но это абсолютно бессмысленно и приведёт к тому, что dvach и sosach можно будет вызвать только 1 раз
Каво? Ты можешь ОБЪЯВИТЬ функцию только один раз. А вызывать можно сколько угодно. https://3v4l.org/H9XQI
>нахуя так можно делать вообще? Прост?
Пик стронгли релейтед.
Спасибо помогло. Но почему докер композе все равно создает папку html и bd с доступом только для рут пользователя? Я даже создавать и редактировать там ничего не могу если IDE не из под судо запущено
Если внутри контейнера всё выполняются от рута, то он и создаёт файлы с правами рута.
>Closure::fromCallable
Closure фиксирует контекст и гарантирует правильное выполнение функции.
Да, в большинстве случаев нужен Closure и он даёт больший контроль. Но ещё что - аргумент метода всё ещё может иметь тип callable. В чём профиты?
Проблема не в том можно или нет выполнить приватную функцию снаружи. Ну нет и нет, на то она и приватная.
Проблема в том что в зависимости от ситуации ТИП МЕНЯЕТСЯ НАХУЙ https://3v4l.org/O8C70
Это как раз то место когда "динамическая" система типов превращается в "ебанистическую" или даже "шизофреническую". Когда это дерьмо создавалось, считать массив функцией казалось охуительно крутой идеей. А сейчас один аллах знает что на планете наебнется если эту поебень убрать.
Это я тоже читал (RFC, на который ссылаются после кода в моём скриншоте). Но вот, что изменилось?
https://3v4l.org/Pl4ec
Мы всё ещё можем применить ебанистическую шизофрению.
Или ответ звучит так: аргументы типа callable тоже нужно запретить, это шизоебанастика, но если их запретить, сломается обратная совместимость. А типизация свойств была добавлена уже тогда, когда факт уёбищности callable был очевиден. Поэтому решили хотя бы не усугублять и не добавлять его как возможный вариант для типизации свойств.
Правильно понял?
Не дописал и отправил.
В общем, если судить по номерам версий, моё предположение похоже на правду. В 5.0.0 ещё не понимали проблем callable и добавили. А к 7.4.0 уже поняли, и решили запретить.
>>084179
Вот ты приходишь в палату к шизофренику и спрашиваешь: ты что двенадцать лет назад делал? А он тебе говорит: не знаю, у меня тогда в голове ДРУГОЙ гномик жил. Выводы из этого рассказа какие?
Не общайся с шизофрениками блядь, вот какие выводы.
В этом языке говна - лет десять вычерпывать, если прямо сейчас сесть фиксить. Так никто садиться и не собирается. Ты к вкусу привыкай и рвотный рефлекс учись контролировать.
А вот и нихуя. По сути, может, и так, но с датами я серьёзно обосрался. В 5.0.0 появилась типизация аргументов, да. Но типом могло быть только имя класса. И было оно так до 7.0.0, которая релизнулась 03.12.15. Типизация свойств класса появилась в 7.4.0, релиз 28.11.2019.
Так что спрашивать нужно, где вы были 4 года назад.
Из сервиса в контроллер возвращается результат работы сервиса. А Request и Response это часть представления вообще. Response это буквально то что ты возвращаешь пользователю: заголовки, куки, Html или json в body.
Вот вы тут говорите - книги не читай. А на деле без книг не понятно как правильно это всё писать. Я вот из интернета вычитал этот совет, что сервис должен возвращать специальный объект, а контроллер должен состоять из одной строчки типа:
$service->getResponse();
Ещё можно сверху её обернуть какой-нибудь функцией типа сделать жсон и отправить через return.
А Симфони разве не поддерживает PSR-7? Мне казалось, что именно симфонисты и создали эти стандарты, а значит в симфони они уже реализованы.
Бляя... Какой же лютый кал. На моменте когда он рядом с папкой Entity создал папку Model я кофе поперхнулся.
Согласен, автор не имел ввиду Response как ответ на Rerquest. Он просто долбоеб и лепит постфикс Response как обозначение того что функция результат возвращает. IdResponse ебать. Давно так не угарал.
Если это круд на 2 с половиной пука, то можно и логику в колбеках маршрута делать и это не будет являться говном, говном будет являться, если ты на три пука обмазывать абстракциями/паттернами/псарами начнешь. Но это справедливо если ты уверен, что проект не будет расширяться
Вот поэтому книги читать и не надо, а если точнее, то не нужно полагаться на них. Читать нужно, про технические возможности, а как правильно делать приходит онли с опытом
> Я постоянно слышу, что нельзя писать толстые контроллеры.
Нельзя. Но если у тебя получается толстый контроллер, то это не приложение на 2 пука
> Хорошо, где взять этот опыт, если без опыта на работу не берут?
Проблемы гоев
Естественно, у меня серьёзный пет-проект. Я вот и хотел разобраться как надо писать в солидных проектах, но книги вы не разрешаете читать, а годных материалов из интернета не скидываете. Самому весь этот многолетний опыт программирования не придумать.
Если у тебя солидный пет проект на ларе - открываешь доку лары и читаешь куда, как и какие куски логики распихивать. Но если у тебя нет опыта, ты всеравно ничего не поймешь
Тогда сначала придется отмыть рот от говна
Нигде. Книги тебе запретили, в тиктоках лютый кал. Остается только завалить ебало и катиться в сторону дота-треда.
Че ты услышать хочешь? Искать где "не говно", нюхать самому, спрашивать заядлых говноедов. РАБОТАТЬ НАДО блядь. Мозгами шевелить. Профессия такая.
>Че ты услышать хочешь?
Хочу услышать: держи, анончик, ссылочку, там рассказано как надо делать правильно.
Почему $globB === null? Переменная $loc ведь статичная. То есть, после выхода из функции, она не уничтожается. Или традиционное
> Тебе же сказали - привыкай ко вкусу кала
Или там какая-нибудь такая хрень, что она уничтожается, но при следующем вхождении в функцию, её прошлое значение откуда-то берётся?
>Или традиционное
А потом удивляются: разве может язык плодить долбоебов? С ними наверное просто сразу что-то не так было, правда?
Этот язык делает из людей скавенов. Уродливых созданий с таким же уродливым и извращенным мозгом.
Кому вообще в башку могло прийти: засовывать в глобальную переменную ссылку на статическую переменную? Да такой же безумной твари, как та, которая придумала возможность объявлять внутри функции глобальные переменные.
Ты ведь даже не заметил что ты при каждом вызове функции объявляешь переменные заново. Глобально.
Этот язык как мутаген, как кровь Маннороха. Он плавит слабым людям мозги в безумный сплав говна, падали и болотной гнили. В таких мозгах не то что умная мысль - опарыш не заведется.
Сначала ты пытаешься понять возможные последствия безумной мешанины из блевотины, бойлерплейта и знаков доллара, из которых состоит код на этом мерзком языке. Читаешь про какие-то паттерны из далеких вселенных других языков. Тебе кажется что дело в тебе. Ты думаешь что если будешь знать что такое стек, то все станет нормально.
А потом ты проигрываешь. Тонешь в потоке говна, непредсказуемого поведения, багов и "фич". И тебе становится похуй. Как похуй создателям этого говна из говен. Как похуй тем на этом говне пишет.
И тогда рождается "битриксоид". Бездушный демон, в каждой строке его кода сквозит отчаянье и смерть. Его код наполнен безумием, но его лицо абсолютно спокойно. Ему ПОЕБАТЬ. Он скользит по тонкой грани между сумасшествием и троллингом. А моральные уроды, создавшие этот язык, аплодируют ему. Он познал их дзен. Он заставляет это дерьмо работать прямо сейчас любой ценой. Для него завтра не существует. Потому что он сам не существует. Существует только язык, позволяющий не просто выстрелить себе в ногу, а хуйнуть главным калибром одновременно на все триста шестьдесят.
И он хуярит. С блаженной улыбкой на обескровленных губах покойника, он плетет паутину безумия. Глобальные переменные, хаки, классы в классах. Он сравнивает даты запросом в базу и переопределят значения true и false. Он гасит и зажигает солнца. Этот богомерзкий язык дает ему власть над самим мирозданием. Власть сеять хаос в сердцах людей. Власть распространять скверну, поразившую его самого. И темные апостолы - создатели и рабы этого богомерзкого языка. Возносят ему богохульную молитву. Они жаждут чтобы их создание множило энтропию вселенной, пока не наступит вечная холодная тьма, вечное ничто.
>Или традиционное
А потом удивляются: разве может язык плодить долбоебов? С ними наверное просто сразу что-то не так было, правда?
Этот язык делает из людей скавенов. Уродливых созданий с таким же уродливым и извращенным мозгом.
Кому вообще в башку могло прийти: засовывать в глобальную переменную ссылку на статическую переменную? Да такой же безумной твари, как та, которая придумала возможность объявлять внутри функции глобальные переменные.
Ты ведь даже не заметил что ты при каждом вызове функции объявляешь переменные заново. Глобально.
Этот язык как мутаген, как кровь Маннороха. Он плавит слабым людям мозги в безумный сплав говна, падали и болотной гнили. В таких мозгах не то что умная мысль - опарыш не заведется.
Сначала ты пытаешься понять возможные последствия безумной мешанины из блевотины, бойлерплейта и знаков доллара, из которых состоит код на этом мерзком языке. Читаешь про какие-то паттерны из далеких вселенных других языков. Тебе кажется что дело в тебе. Ты думаешь что если будешь знать что такое стек, то все станет нормально.
А потом ты проигрываешь. Тонешь в потоке говна, непредсказуемого поведения, багов и "фич". И тебе становится похуй. Как похуй создателям этого говна из говен. Как похуй тем на этом говне пишет.
И тогда рождается "битриксоид". Бездушный демон, в каждой строке его кода сквозит отчаянье и смерть. Его код наполнен безумием, но его лицо абсолютно спокойно. Ему ПОЕБАТЬ. Он скользит по тонкой грани между сумасшествием и троллингом. А моральные уроды, создавшие этот язык, аплодируют ему. Он познал их дзен. Он заставляет это дерьмо работать прямо сейчас любой ценой. Для него завтра не существует. Потому что он сам не существует. Существует только язык, позволяющий не просто выстрелить себе в ногу, а хуйнуть главным калибром одновременно на все триста шестьдесят.
И он хуярит. С блаженной улыбкой на обескровленных губах покойника, он плетет паутину безумия. Глобальные переменные, хаки, классы в классах. Он сравнивает даты запросом в базу и переопределят значения true и false. Он гасит и зажигает солнца. Этот богомерзкий язык дает ему власть над самим мирозданием. Власть сеять хаос в сердцах людей. Власть распространять скверну, поразившую его самого. И темные апостолы - создатели и рабы этого богомерзкого языка. Возносят ему богохульную молитву. Они жаждут чтобы их создание множило энтропию вселенной, пока не наступит вечная холодная тьма, вечное ничто.
Работу на го уже нашел?
Скажи мне какой ЯП не говно и почему оно не говно. И почему пхп говно, а этот ЯП не говно.
Ты настолько же объебанный, как и автор этой функции? Откуда ты нахуй взял вообще 31 число? И как это транслируется в смену даты? И какого хуя еблан с двачей об этом подумал, а создатель языка нет?
Ладно, хуй с ним с числом.
Почему разница во времени между Europe/Amsterdam и Europe/Moscow один час?
Ты какой-то буйный. DateTimeImmutable в date выводиться полная дата с временем. То что ты указываешь createFromFormat лишь означает какие данные он возьмет из строки. Всю недостающую информацию о дате он возьмет из текущей даты.
>Откуда ты нахуй взял вообще 31
Почему ты не задумываешься откуда он берет "15:45:49.000000" при выводе date?
>Почему разница во времени между Europe/Amsterdam и Europe/Moscow один час
Потому что они переводят время наверное.
Зандстра всё давно расписал. Что-то не устраивает - иди жуй гавно в битрекс.
>когда хочет
У докера нет своей воли, глупыш. Должна быть объективная причина, постарайся ее найти.
Нашел, оказывает порт 8080 и 80 это разные вещи
>Всю недостающую информацию о дате он возьмет из текущей даты.
Вот именно это я и имел ввиду. Изъебанный этим уродливым подобием языка мозг давно превратился в комок гноя и месива из раковых клеток.
И уже не задается вопросом: а какого хуя к ПЕРЕДАННОЙ дате лепится ТЕКУЩАЯ? Она типа от этого более пиздатой датой станет или что? И какого хуя при этом меняется месяц в ПЕРЕДАННОЙ дате? Ну прилепил ты число и время, их и коверкай, сука пробитая.
>наверное.
Язык "наверное", язык "может быть", язык "завтра заработает".
А давай без "наверное"? А давай ты сначала будешь проверять плоды своего скудоумия, а уже потом будешь срать ими в тред? https://3v4l.org/H4TTm
Ну ничего. Побугуртишь-побугуртишь, да и заматереешь. Будешь потом таких же маленьких бугуртышей уму разуму учить. Ты разибрайся главное.
>>085337
>Этот язык делает из людей скавенов. Уродливых созданий с таким же уродливым и извращенным мозгом.
>Этот язык как мутаген, как кровь Маннороха. Он плавит слабым людям мозги в безумный сплав говна, падали и болотной гнили. В таких мозгах не то что умная мысль - опарыш не заведется.
>Ну ничего. Побугуртишь-побугуртишь, да и заматереешь.
>Будешь потом таких же маленьких бугуртышей уму разуму учить.
Этот тред. Эта сточная яма. Поддон под /б и дотатредами, в который стекает самое тупорылое, самое гнилое что есть на харкаче.
А с опарышами как?
Мне кажется он гошник, но вынужден учить пхп. Думает, раз написал пару хеллоуворлдов на го, то по определению умнее любого пхпшника. А на деле же тупее стажёра пхпшника, так как не в языках дело.
server {
listen 8000;
index index.php index.html;
root /var/www/public;
index index.html;
location / {
try_files $uri /index.php?$args;
}
location /docs {
try_files $uri $uri/;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Норм конфиг. Только хуй получишь айпи клиента. Сам ебался с этим, заебался блядь
Мне для локалхост, почему-то не открывает register.html в рабочей папке, а index открывает
Хз, проверил. Нормально докер запускает и пыху и мускуль. Наверное дело не в докере
Ты бы хоть коды ошибок показывал. У тебя контейнер с php и контейнер с базой в одной сети находятся? По какому адресу ты открываешь соединение?
Потому что вы уже 200 постов перекатить не можете. Жри, что дают или перекатывай правильно, сам
Ну вот да. Требуется (вот требуется, хоть хуем по лбу стучи) установить Ларавел 8, например. Ты его ставишь. Потом ставишь все пакеты, указывая точные версии нужных пакетов. Да, всё устаревшее. Да, будут проблемы, типа надо подключить платёжку, а она версии 1.4 минимум, и если поставить 1.3, то сервер платёжки пошлёт нахуй, но 1.4 ставится только на Ларавел 9. Поэтому ты будешь ВЫНУЖДЕН сопрягать это дерьмо, вплоть до ковыряния в потрохах vendor. Ладно, шучу, просто вдумчиво разбираешься в работе этого пакета, находишь отличия версий и пишешь прокладку-переопределялку. В общем, велкам ту геморрой. Впрочем, как правило старые пакеты прекрасно работают и так. Проблемы начинаются, когда приходится работать со сторонними сервисами, написанными хипстерами, у которых каждые полгода радикальные обновления и старые версии не поддерживаются.
>ссыкотно искать вакансии
загугли 100 вопросов, хорошо выучи, пока не сможешь ответить почему нужно не:
try { $hrukayushiyService->hruknutWithDanger(); } (\Throwable $e) {} (\RuntimeException $e) {}
а try { $hrukayushiyService->hruknutWithDanger(); } (\RuntimeException $e) {} (\Throwable $e) {} и иди штурмовать работадателей. Пыхо собесы не очень душные даже в приличные места
мы не джэва, а молодой-перспективный-быстро развивающийся язык, нам нельзя как же хочется дженерики и многопоток, а не синтакисческий сахар...
Что-то аля как пикрил, где все вершки рассматривают, чтобы потом уже за корешки идти тянуть.
Для совсем новичков у ларика есть годный курс на торрентах. Если именно видео-курс по языку, тогда Program with Gio на ютубе. Если учиться кодить нормально, тогда подписка на Хекслете за 4к в месяц, ничего лучше нет
Пропиши в докер-композе
php:
user: ${USER_UID}:${USER_GID}
А эти хуйни задай по 1000 в енв-файле. Тогда он по идее должен будет мапить на твоего пользователя. Но если используешь docker engine то скорее всего будут проблемы с правами на файлы. Я себе из-за этого поставил docker desktop, что не пердолиться лишний раз
Мало того, что зарплата у тебя за месяц как у других за целый год, так ещё и встаёшь когда хочешь, никуда ехать не надо, работаешь мало.
А ведь это всё дващ! До этого работал за 20 тысяч руками, живя в богом забытой деревне на 150 человек. А так надвачевался ваших айти-тредов и попробовал этот ваш пхп.
Под производительностью подразумевается всё: и скорость работы, и количество потребляемой памяти.
тя ебет?
С нормальной шапкой и сохранением нумерации.
>>3128882 (OP)
>>3128882 (OP)
>>3128882 (OP)
Как успехи?
Это копия, сохраненная 3 мая в 00:30.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.