• В какое направление смотерть в PHP разработке?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Тестовые для джуниора:
    Какие тестовые проекты стоит написать

    Фреймворки:


    На CMS смотреть не стоит, разве только если CMS интернет-магазинов (кроме Битрикса — это тупиковые знания, замкнутые сами на себя, и сомнительного качества)
    Ответ написан
    1 комментарий
  • Какие есть сайты для проверки своих знаний PHP?

    @AlexPlusPlus
    Сайты не дадут реальной картины (Вам, ведь, именно это требуется, так?).

    Не существует абсолютно точного глобального определения уровня программиста и его знаний. У каждой конторы свои требования к начинающим и опытным разработчикам, а также своя градация (где-то есть jun, mid, senior, а где-то просто программист и старший программист, и всё). Где-то используют, к примеру, Laravel, а где-то процедурный код на PHP 4+ (и в этих двух конторах уровень того же сениора будет совсем разный).

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

    Ну а на основе статистики, проверьте по пунктам, есть ли у Вас знания по тому или иному пункту )

    PS: помимо знаний самого PHP и фреймворков, большенству программистов требуется знания unix'а, SQL, баз данных (обычно  mysql/postgresql). Не забываем о тестах, x-debug, умением работать с composer, умением работать со сторонними API, базовые знания html, css, js (+ хотя бы немного jquery). Джуниор должен знать вышеописанные вещи хотя бы поверхностно (ладно, xdebug, и фреймворки можно упустить), а сениор знать и уметь свободно пользоваться. Исходя из этого, в большинстве контор стать сениором за год чисто физически не реально.
    Ответ написан
    Комментировать
  • Где взять практику программисту?

    @cicatrix
    было бы большой ошибкой думать
    Велосипеды.
    Есть редактор Notepad++ - начинался как велосипед (замена обычному блокноту) - теперь мощный и классный инструмент.
    Вот есть граф. редактор Paint.Net. Начинался как велосипед (то ли курсовая, то ли дипломная работа чья-то) по замене MS Paint. Сейчас - вполне успешный и даже, наверное, прибыльный проект.
    Вот есть операционная система Linux, начиналась... ну вы поняли :)
    Ответ написан
    Комментировать
  • Где взять практику программисту?

    Griboks
    @Griboks
    Взять сто самых интересных велосипедов и изобрести их)
    Ответ написан
    2 комментария
  • Какие есть курсы для php разработчика среднего уровня?

    mashletov
    @mashletov
    Math.random()
    Забудь о курсах. Курсы — это оскорбление. На курсы ходят гуманитарии и 40-летние мужики с завода в веб, решившие податься.
    Всё, что тебе нужно это опыт, документация, github, habr, toster и профильные статьи.
    Ответ написан
    3 комментария
  • Регистрация в Amazon web services?

    @bur
    Знаю что опоздал с ответом, он оставлю свежий комментарий для тех кто находит этот пост.

    Необходимо:
    1) Дождаться звонка от робота-оператора (говорить «алло» не обязательно).
    2) Послушать некоторое время её треп.
    3) Перевести телефон в тональный режим (у меня на Symbian это софтовая кнопка «Набор номера» прямо во время звонка) и ввести пин (4 цифры) без решетки в конце.

    Однако вышло это с 8-го раза. Причем после каждого третьего фейла у них 12-часовая задержка на следующий звонок. Итого регился больше суток.
    Ответ написан
    Комментировать
  • Правила хорошего тона protected или private?

    Насчёт protected в случаях, когда сомневаешься, это ты зря) Ты же по сути продумываешь свою программу, знаешь примерно, что в ней используешь, а protected на ветер не бросаются. Что же насчёт private, так храни там только переменные, чтобы они были под защитой класса от внешних изменений, методы же хранят обычно под public-ом, так можно вызывать их извне класса

    Итого в итоге - переменные в private
    Protected же только для наследований
    Методы же в public , тем самым ты дефаешь переменные, но и имеешь к ним доступ в класс.
    Ответ написан
    Комментировать
  • Правила хорошего тона protected или private?

    А почему вы по умолчанию public не ставите, если выбираете между public и private? Наверное потому что вам инкапсуляция нужна?

    Ситуация с дочерними классами ничем не отличается. Не стоит делать метод protected по умолчанию по той же причине, по которой его не стоит делать public по умолчанию.
    Ответ написан
    Комментировать
  • Постоянные ошибки, это нормально?

    AgentProvocateur
    @AgentProvocateur
    А представь, каково было тем, кто постигал все эти темы 10/15/20 лет назад?

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

    Когда в принципе рунет был в зачаточном состоянии (не было даже проф. форумов), информацию приходилось дёргать по крупицам в забугорном сегменте, но делать это было крайне сложно по причине того, что карточка на 150 минут dialup-интернета (50 кбит/с) обходилась в треть стипендии.

    Когда в учебных заведениях не преподавали даже паскаль, а об обилии всяких курсов, в том числе онлайн, можно было только мечтать. Когда основным источником информации на русском языке был журнал "Хакер", мать его))

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

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

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

    Если же препятствия воспринимаешь как должное, то хорош рефлексировать, просто преодолевай и лови кайф от преодолений. Без них никак, если ошибок и сложностей нет - значит ты просто их не видишь (т.е. допускаешь двойную ошибку), и они никогда не кончатся:)
    Ответ написан
    4 комментария
  • Как писать собственные функцит на PHP?

    Decadal
    @Decadal
    1. написать функцию
    2. она делает то что хотите? если да, профит. Если нет - назад к п.1

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

    Далее - как понять что использовать? для начала нужно понять, что вы хотите.
    Выясняете <что я хочу>. Выясняете, <где это должно быть>. Гуглите как сделать <то что я хочу> в <где это должно быть>.
    Ответ написан
    Комментировать
  • Что выбрать: ДБ как сервис или бэкенд как сервис?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Чтобы не тратить время на изучение тонкостей настройки пришла идея не настраивать свою БД на сервере, а взять готовую услугу с саппортом, мониторингом и другими плюшками.
    Что бы не тратить время на изучение тонкостей настройки БД - гораздо практичнее было бы нанять фрилансера, при руках из нужного места, соотв. квалификации и специализации, за час - он целый кластер настроил бы.

    Но возможно есть совсем BaaS-решение которое будет ещё проще в работе и по максимуму снимет с нас сейчас задачи по настройке и поддержке.
    По моему, примерно/почти у всех "облачных" сервисов есть услуги формата SaaS/"BaaS", например, вариация от гугла, от амазона, майкрософта (снизу есть ссылки на другие БД) и так далее...

    Но, я всё равно решительно не понимаю, какие задачи Вы хотите снять с себя? Задачи уровня apt install mysql-server ? Или задачи правки конфига? Если эти задачи - разовой услуги на час, думаю будет более чем достаточно (писал выше).

    Задачи "сервер с БД упал / случился дисконнект" - решается на уровне выбора хорошего хостера VPS/Dedic (либо хорошего канала связи, собственного сервера и личного/удаленного/аутсорсного/наёмного/etc сис. админа). А "облака" в теории - вообще не "падают".

    Задачи уровня "мы не умеем проектировать БД и нормальной с ней работать, по этому всё тормозит и падает" - тоже довольно легко решаются привлечением в команду опытного тимлида укомплектованного набором нагаек и пряников.
    Ответ написан
    2 комментария
  • Почему User (sf3) всегда возвращает лишь одну роль?

    Minifets
    @Minifets
    Hello world!!!
    На вскидку могу предположить, что проблема в сущности Role, у тебя в $user стоит аннотация Id. Это значит, что у тебя для каждой записи должен быть уникальный user_id. Так что даже не могу предположить, как ты 2 роли для 1 пользователя умудрился назначить, если тебе это база не должна повалять.
    Ответ написан
    1 комментарий
  • Каким сайтам нужен APCu?

    Vamp
    @Vamp
    В статье рассматривается производительность какой-то абстрактной "обычной CMS" на дешманском VPS хостинге и влияние трех разных видов кеша на общую производительность сайта.

    В разделе "SERVER CACHE TYPES EXPLAINED", в принципе, довольно точно и доходчиво расписано про рассматриваемые типы кеширования.

    OpCache кеширует результат парсинга php скриптов интерпретатором. Возможно вы не знали, но php скрипты не исполняются интерпретатором напрямую - они сначала проходят через этап парсинга исходного скрипта и его преобразования в так называемые опкоды, которые уже исполняются php интерпретатором. Полученные на этапе прасинга опкоды можно закешировать, так как они не меняются от вызова к вызову (разумеется, если сам скрипт не меняется). Эта операция одинаковая для всех скриптов, поэтому OpCache должен быть включен всегда и везде.

    APCu позволяет закешировать произвольную информацию. Например, результат SQL запроса, чтобы в следующий раз не делать запрос к базе и достать результат сразу из кеша. Необходимость APCu для сайта очень сильно зависит от самого сайта. Обычно об этом написано в документации к движку, на котором написан сайт. Так же возможна ситуация, когда сайт затачивался под другой кеширующий модуль, например, memcache, xcache или даже кеширует свои данные в простые файлы - в этом случае наличие/отсутствие APCu ни на что влиять не будет.

    There is one peculiarity regarding APCu caching, when it is used alone without OpCache enabled. APCu will internally reduce number of MySQL queries between PHP and MySQL, however, to really shine and show it’s full potential, OpCache must be enabled.

    Вот этот замечательный абзац вообще полный бред. APCu не сможет магическим образом уменьшить количество запросов к mysql. Об этом должен позаботиться программист явно - положить результат запроса в кеш и проверить в кеше его наличие перед отправкой запроса. И APCu не станет сиять, если включить OpCache. Эти два модуля никак друг на друга не влияют. Вообще. Совсем.

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

    На таблицу результатов можно не смотреть. Эти цифры не имеют никакого смысла, если не представлен сайт, который был протестирован, так как влияние APCu и static HTML cache очень сильно от этого зависит. Результаты могут быть диаметрально противоположны для тех же самых условий, но для другого сайта.

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

    Отвечая на ваш вопрос - ставить APCu нужно только для сайтов, которые явно его поддерживают. OpCache нужно ставить всегда.
    Ответ написан
    Комментировать
  • Как защитить API сервиса платного контента?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Шифруйте отдаваемый контент через RSA между сервером и приложением. (SSL/не SSL - это мы сейчас не рассматриваем!)

    1. Формируйте УНИКАЛЬНЫЙ! контент/трафик для каждого пользователя и расшифровывайте доставленный контент исключительно в памяти приложения, непосредственно перед моментом отображения на экране!

    2. Используйте платёжные данные при шифровании данных на сервере.
    3. Меняйте ключ при каждом запросе на основе номера пакета текущей сессии, времени, случайного числа и т.д.
    4. Отдавайте контент порциями с разным шифрованием - prefetch/segmentation.
    5. Обновляйте протокол внутреннего шифрования хотя бы раз в 1-2 месяца.

    Нет 100%-ой защиты на клиенте, которая не позволила бы сохранять контент.
    За то - можно это усложнить до нереальных трудозатрат.
    Ответ написан
    Комментировать
  • Как совместить фабрику и закон Деметры?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Заюзал в очередной раз абстрактную фабрику, и неожиданно вспомнил, что метод класса не должен обращаться к объектам, которые вернул какой-либо метод.

    Фабрика возвращает интерфейс объекта, который был специально введён, чтобы предоставить обобщённый доступ к разным типам объектов создаваемых фабрикой. Пользователи фабрики взаимодействуют только с этими интерфейсами, не с самими объектами. Т.о. пользователи фабрики не зависят от модулей реализующих конкретные объекты. Закон Деметры как раз и нужен для того, чтобы уменьшить зацепление между модулями. Следуйте духу закона, а не букве.
    Ответ написан
    Комментировать
  • Как заставить symfony validation не проверять поле если оно null?

    Austin_Powers
    @Austin_Powers
    Web developer (Symfony, Go, Vue.js)
    Попробуйте в форме выставить атрибут "required" = false
    Ответ написан
    1 комментарий
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

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

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

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

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

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

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев