Saloon
Saloon — это библиотека PHP, которая предоставляет вам инструменты для создания простых интеграций API и SDK. Saloon перемещает ваши запросы API в повторно используемые классы, чтобы вы могли хранить все свои конфигурации API в одном месте. Его можно легко настроить с помощью плагинов, но он поставляется предварительно настроенным для вас, поэтому вы можете сразу же приступить к отправке запросов API. Saloon поставляется со множеством интересных функций, таких как запись запросов в ваших тестах, кеширование, OAuth2 и нумерация страниц.
Saloon — это библиотека PHP, которая предоставляет вам инструменты для создания простых интеграций API и SDK. Saloon перемещает ваши запросы API в повторно используемые классы, чтобы вы могли хранить все свои конфигурации API в одном месте. Его можно легко настроить с помощью плагинов, но он поставляется предварительно настроенным для вас, поэтому вы можете сразу же приступить к отправке запросов API. Saloon поставляется со множеством интересных функций, таких как запись запросов в ваших тестах, кеширование, OAuth2 и нумерация страниц.
GitHub
GitHub - saloonphp/saloon: 🤠 Build beautiful API integrations and SDKs with Saloon
🤠 Build beautiful API integrations and SDKs with Saloon - saloonphp/saloon
👍3
Что такое анонимная функция в PHP и как её использовать?
В PHP анонимные функции, также известные как замыкания (closures), это функции без указанного имени. Они определяются с использованием ключевого слова function, за которым следуют необходимые параметры и тело функции, без указания имени функции. Анонимные функции могут быть назначены переменным, переданы в качестве аргументов другим функциям или использованы как возвращаемые значения из других функций. Они особенно полезны для определения небольших, самодостаточных логических блоков, которые могут использоваться только один раз или в ограниченном контексте.
#вопросы_с_собеседований
В PHP анонимные функции, также известные как замыкания (closures), это функции без указанного имени. Они определяются с использованием ключевого слова function, за которым следуют необходимые параметры и тело функции, без указания имени функции. Анонимные функции могут быть назначены переменным, переданы в качестве аргументов другим функциям или использованы как возвращаемые значения из других функций. Они особенно полезны для определения небольших, самодостаточных логических блоков, которые могут использоваться только один раз или в ограниченном контексте.
#вопросы_с_собеседований
👍9
Нужно динамически настраивать почтовые программы? Метод
Динамическая настройка почтовых ящиков идеально подходит для многопользовательских приложений, пользовательских почтовых провайдеров или любых других сценариев, где почтовые настройки должны быть сконфигурированы во время выполнения.
Mail::build
в Laravel позволяет создавать почтовые программы на лету!Динамическая настройка почтовых ящиков идеально подходит для многопользовательских приложений, пользовательских почтовых провайдеров или любых других сценариев, где почтовые настройки должны быть сконфигурированы во время выполнения.
👍5👏5😢3😁2👾1
📝⚖️ Увольнение по статье: что делать, особенности и нюансы
Разбираемся, за что айтишника могут уволить по статье и что делать, если это произошло с вами.
👉 Читать подробнее
Разбираемся, за что айтишника могут уволить по статье и что делать, если это произошло с вами.
👉 Читать подробнее
Из легаси в конфетку: история трансформации
Разработчики рано или поздно сталкиваются с легаси-кодом — старым, не всегда понятным и порой пугающим набором строк, в которых легко потеряться. Такой код вызывает смешанные чувства: с одной стороны, он отражает результат чьей-то работы и является частью истории компании, с другой — представляет собой постоянный вызов, требующий не только поддержки, но и регулярных улучшений. Превратить его в «конфетку» — задача сложная, но выполнимая.
Один из примеров легаси-кода — проект, переданный в компанию при переходе с аутсорсинга на внутреннюю разработку. Подобные ситуации часто сопровождаются трудностями: код может быть плохо документирован, включать временные решения и не соответствовать корпоративным стандартам. Нередко такие проекты представляют собой результат работы нескольких команд, каждая из которых вносила свои изменения, не задумываясь о долгосрочной поддержке. В итоге получается классический пример легаси — код, который требует глубокого анализа и серьёзной переработки, чтобы превратиться в поддерживаемую и надёжную систему.
Данная статья описывает опыт команды, которая за год работы обновила и модернизировала подобный проект.
Разработчики рано или поздно сталкиваются с легаси-кодом — старым, не всегда понятным и порой пугающим набором строк, в которых легко потеряться. Такой код вызывает смешанные чувства: с одной стороны, он отражает результат чьей-то работы и является частью истории компании, с другой — представляет собой постоянный вызов, требующий не только поддержки, но и регулярных улучшений. Превратить его в «конфетку» — задача сложная, но выполнимая.
Один из примеров легаси-кода — проект, переданный в компанию при переходе с аутсорсинга на внутреннюю разработку. Подобные ситуации часто сопровождаются трудностями: код может быть плохо документирован, включать временные решения и не соответствовать корпоративным стандартам. Нередко такие проекты представляют собой результат работы нескольких команд, каждая из которых вносила свои изменения, не задумываясь о долгосрочной поддержке. В итоге получается классический пример легаси — код, который требует глубокого анализа и серьёзной переработки, чтобы превратиться в поддерживаемую и надёжную систему.
Данная статья описывает опыт команды, которая за год работы обновила и модернизировала подобный проект.
Хабр
Из легаси в конфетку: история трансформации
Каждый разработчик рано или поздно сталкивается с легаси-код — тем самым старым, не всегда понятным и, порой, пугающим набором строк, в которых легко заблудиться. Легаси может вызывать смешанные...
👍1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👏2❤1
Улучшения в PHPStan для анализа типов
Здесь показаны достижения в области улучшения анализа типов в PHPStan, выполненные за последние годы.
Проблема типов mixed
Тип mixed используется, когда информация о типе отсутствует, что может приводить к ошибкам анализа или ложным срабатываниям. Работа автора была сосредоточена на сужении таких типов, чтобы повысить точность анализа.
Узкие типы на основе условий
PHPStan давно использует метод «вычитания» типов. Вместо того чтобы описывать, чем является переменная, анализ строится на исключении того, чем она не является. Например:
Если переменная проверяется на истинность (
Если переменная ложна (
Этот подход расширен на такие операции, как приведение типов в условиях.
Примеры улучшений
🔸Приведение типов: Приведение переменной к числу, строке или булевому типу теперь лучше учитывается при анализе. Например,
🔸Сравнение строк: Улучшена работа с функциями вроде strlen() и substr(). Сравнение длины строки или её части теперь помогает определять, является ли строка пустой, ложной или непустой.
🔸isset() и массивы: Анализ использования
🔸IIFE (immediate-invoked-function-expression): Этот подход, популярный в JavaScript, иногда используется и в PHP. PHPStan научился корректно анализировать изменения типов внутри таких функций.
Новые phpdoc-типы
Для улучшения анализа в PHPStan добавлены новые аннотации:
Эти аннотации помогают разработчикам и инструментам анализировать код быстрее и точнее.
Расширения PHPStan
В PHPStan появилась возможность учитывать контекст вызовов. Например, расширения для анализа
Здесь показаны достижения в области улучшения анализа типов в PHPStan, выполненные за последние годы.
Проблема типов mixed
Тип mixed используется, когда информация о типе отсутствует, что может приводить к ошибкам анализа или ложным срабатываниям. Работа автора была сосредоточена на сужении таких типов, чтобы повысить точность анализа.
Узкие типы на основе условий
PHPStan давно использует метод «вычитания» типов. Вместо того чтобы описывать, чем является переменная, анализ строится на исключении того, чем она не является. Например:
Если переменная проверяется на истинность (
if ($mixed)
), исключаются ложные значения.Если переменная ложна (
if (!$mixed)
), исключаются истинные значения.Этот подход расширен на такие операции, как приведение типов в условиях.
Примеры улучшений
🔸Приведение типов: Приведение переменной к числу, строке или булевому типу теперь лучше учитывается при анализе. Например,
int
, bool
или string
помогают уточнять тип переменной в конкретных контекстах.🔸Сравнение строк: Улучшена работа с функциями вроде strlen() и substr(). Сравнение длины строки или её части теперь помогает определять, является ли строка пустой, ложной или непустой.
🔸isset() и массивы: Анализ использования
isset()
теперь точнее определяет тип ключа массива. Например, isset($array[$mixed])
исключает невозможные значения для $mixed.🔸IIFE (immediate-invoked-function-expression): Этот подход, популярный в JavaScript, иногда используется и в PHP. PHPStan научился корректно анализировать изменения типов внутри таких функций.
Новые phpdoc-типы
Для улучшения анализа в PHPStan добавлены новые аннотации:
non-falsy-string
: строка, которая не является ложным значением.@param-out
: уточняет, как изменяется переданный по ссылке параметр.value-of
и другие.Эти аннотации помогают разработчикам и инструментам анализировать код быстрее и точнее.
Расширения PHPStan
В PHPStan появилась возможность учитывать контекст вызовов. Например, расширения для анализа
preg_match()
теперь используют дерево синтаксиса регулярных выражений. Также разработан инструмент phpstan-dba для анализа запросов к базе данных с учётом схемы данных.👍5❤2
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
😁3
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.
В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования
👉Подписаться👈
В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования
👉Подписаться👈
👏1
PHP-GLFW
Полнофункциональное расширение OpenGL и GLFW для PHP.
Оно позволяет создавать 2D и 3D приложения в реальном времени на PHP. Также предоставляет разработчикам совершенно новый набор инструментов для создания графических приложений, таких как игры, научные симуляции, пользовательские интерфейсы и многое другое.
Полнофункциональное расширение OpenGL и GLFW для PHP.
Оно позволяет создавать 2D и 3D приложения в реальном времени на PHP. Также предоставляет разработчикам совершенно новый набор инструментов для создания графических приложений, таких как игры, научные симуляции, пользовательские интерфейсы и многое другое.
GitHub
GitHub - mario-deluna/php-glfw: 🪐A fully-featured OpenGL and GLFW extension for PHP. 🔋Batteries included (Math Functions, Texture…
🪐A fully-featured OpenGL and GLFW extension for PHP. 🔋Batteries included (Math Functions, Texture Loaders, etc..) - mario-deluna/php-glfw
👍10😁3🤔1
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Какова цель функции «spl_autoload_register» в PHP?
Функция
Когда PHP встречает класс, который еще не был определен, он запускает механизм автозагрузки. Раньше разработчики должны были вручную включать или требовать каждый файл класса, что могло быть неудобным в больших проектах.
Как это работает:
1️⃣Вы определяете одну или несколько функций автозагрузки, которые сопоставляют имена классов с путями к файлам.
2️⃣Регистрируете эти функции автозагрузки с помощью spl_autoload_register.
3️⃣Когда класс создается или ссылается, и его определение еще не загружено, PHP вызывает зарегистрированные функции автозагрузки через spl_autoload_register, чтобы попытаться загрузить определение класса.
4️⃣Этот процесс позволяет более организованной и эффективной загрузке классов в приложениях PHP, уменьшая необходимость вручную включать файлы классов.
Функция
spl_autoload_register
в PHP используется для автоматической загрузки классов гибким и эффективным способом. Она часто используется в объектно-ориентированных приложениях PHP, где классы организованы в соответствии со стандартом PSR-4 или аналогичными соглашениями.Когда PHP встречает класс, который еще не был определен, он запускает механизм автозагрузки. Раньше разработчики должны были вручную включать или требовать каждый файл класса, что могло быть неудобным в больших проектах.
spl_autoload_register
упрощает этот процесс, позволяя разработчикам регистрировать собственные функции автозагрузки.Как это работает:
1️⃣Вы определяете одну или несколько функций автозагрузки, которые сопоставляют имена классов с путями к файлам.
2️⃣Регистрируете эти функции автозагрузки с помощью spl_autoload_register.
3️⃣Когда класс создается или ссылается, и его определение еще не загружено, PHP вызывает зарегистрированные функции автозагрузки через spl_autoload_register, чтобы попытаться загрузить определение класса.
4️⃣Этот процесс позволяет более организованной и эффективной загрузке классов в приложениях PHP, уменьшая необходимость вручную включать файлы классов.
👍3🔥3👏3🤩1🌚1
This media is not supported in your browser
VIEW IN TELEGRAM
🥳Официальный мануал по PHP научился новому трюку: теперь вы можете запускать код прямо в браузере!
🔥94👍9❤7
💬 Сколько часов в день вы тратите на рабочие созвоны?
❤️ — меньше часа
👍 — от часа до двух
👾 — от двух до трёх часов
🌚 — почти весь рабочий день состоит из созвонов
#интерактив
❤️ — меньше часа
👍 — от часа до двух
👾 — от двух до трёх часов
🌚 — почти весь рабочий день состоит из созвонов
#интерактив
❤103👍60👾16🌚9
Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel
#дайджест #PHPdevjob
Вакансии PHP разработчиков уровня Junior
▪️ Junior PHP (Symfony) разработчик
Удалёнка, ТМК
Подробнее
▪️ Junior backend developer (PHP/Laravel) / разработчик PHP
Офис (Санкт-Петербург), Матрикс
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️ PHP-разработчик
Удалёнка / Гибрид (Екатеринбург), TradeDealer
Подробнее
▪️ PHP-разработчик (middle backend php developer)
Офис (Новосибирск), М+1
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️ PHP разработчик
Удалёнка, Петрович-Тех
Подробнее
▪️ PHP/Go developer (Quality Сontrol)
Удалёнка, Lamoda Tech
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии PHP разработчиков уровня Junior
▪️ Junior PHP (Symfony) разработчик
Удалёнка, ТМК
Подробнее
▪️ Junior backend developer (PHP/Laravel) / разработчик PHP
Офис (Санкт-Петербург), Матрикс
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️ PHP-разработчик
Удалёнка / Гибрид (Екатеринбург), TradeDealer
Подробнее
▪️ PHP-разработчик (middle backend php developer)
Офис (Новосибирск), М+1
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️ PHP разработчик
Удалёнка, Петрович-Тех
Подробнее
▪️ PHP/Go developer (Quality Сontrol)
Удалёнка, Lamoda Tech
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
nn.hh.ru
Вакансия Junior PHP (Symfony) разработчик в Нижнем Новгороде, работа в компании ТМК (вакансия в архиве c 8 февраля 2025)
Зарплата: не указана. Нижний Новгород. Требуемый опыт: не требуется. Полная. Дата публикации: 09.01.2025.
🤔4😁3❤1👍1🔥1
Альтернативный способ структурировать проект Symfony
Архитектура MVC + Services давно стала стандартом в проектах Symfony. Она проста, знакома и обычно эффективна, но с ростом сложности проекта начинают проявляться слабые места: бизнес-логика оказывается разрозненной, поведение приложения становится неочевидным, а поддержка кода превращается в проблему. Хотя Symfony не ограничивает вас этой архитектурой, многие разработчики воспринимают её как единственный вариант.
Проблемы MVC + Services в больших проектах
🔸Разрозненная бизнес-логика
По мере роста проекта бизнес-логика распределяется между контроллерами, сервисами, формами, сущностями и другими слоями. Это усложняет работу с кодом, поскольку каждый слой содержит лишь часть общей модели.
🔸Размытые границы между контекстами
Когда архитектура строится вокруг технических слоёв, становится сложно определить чёткие границы между различными областями проекта. Это приводит к сильной связанности кода и затрудняет его поддержку.
🔸Неявное поведение приложения
Структура кода в MVC + Services не даёт ясного понимания, что именно делает приложение. Сложно выявить ключевые действия проекта без анализа множества файлов и зависимостей.
🔸Смешанные жизненные циклы
Бизнес-логика обычно живёт дольше, чем реализации, такие как API, базы данных или фреймворки. Смешение логики с деталями реализации приводит к тому, что даже небольшие изменения требуют переработки большого объёма кода.
Альтернативный подход: архитектура с выделением бизнес-логики
1. Изоляция бизнес-логики
Первый шаг — выделение бизнес-логики в отдельную папку Domain, которая становится ядром проекта. Эта папка содержит чистые PHP-объекты, не зависящие от фреймворков или библиотек. Внутри папки файлы группируются по логическим функциям, а не техническим слоям.
2. Определение «входной двери» проекта
Создайте папку Application, которая явно описывает все действия и возможности приложения. Это поможет новым разработчикам быстро понять, что может проект.
3. Работа с внешними системами
Реализация интеграции с фреймворками, базами данных и другими системами выносится в папку Infrastructure. Она зависит от файлов в папках App и Domain, но не наоборот.
4. Выявление и разделение контекстов
Если понятия, такие как «Продукт», имеют разные значения в разных частях проекта (например, товар на складе и товар в магазине), их нужно разделить на отдельные контексты с независимой бизнес-логикой.
Эволюция архитектуры
🟢Модульность и границы
Если какой-то модуль проекта разрастается, его можно выделить в отдельный деплоймент. Но это стоит делать только при необходимости, например, если команды сталкиваются с трудностями совместной работы.
🟢Систематизация кода
Архитектуры, такие как Hexagonal, Onion, и Clean, помогают изолировать бизнес-логику от деталей реализации. Это делает тестирование проще и код более устойчивым к изменениям.
🟢«Говорящая» структура проекта
Структура файлов должна «кричать» о том, что делает приложение. Организация кода должна быть интуитивно понятной и отражать функциональность проекта.
Архитектура MVC + Services давно стала стандартом в проектах Symfony. Она проста, знакома и обычно эффективна, но с ростом сложности проекта начинают проявляться слабые места: бизнес-логика оказывается разрозненной, поведение приложения становится неочевидным, а поддержка кода превращается в проблему. Хотя Symfony не ограничивает вас этой архитектурой, многие разработчики воспринимают её как единственный вариант.
Проблемы MVC + Services в больших проектах
🔸Разрозненная бизнес-логика
По мере роста проекта бизнес-логика распределяется между контроллерами, сервисами, формами, сущностями и другими слоями. Это усложняет работу с кодом, поскольку каждый слой содержит лишь часть общей модели.
🔸Размытые границы между контекстами
Когда архитектура строится вокруг технических слоёв, становится сложно определить чёткие границы между различными областями проекта. Это приводит к сильной связанности кода и затрудняет его поддержку.
🔸Неявное поведение приложения
Структура кода в MVC + Services не даёт ясного понимания, что именно делает приложение. Сложно выявить ключевые действия проекта без анализа множества файлов и зависимостей.
🔸Смешанные жизненные циклы
Бизнес-логика обычно живёт дольше, чем реализации, такие как API, базы данных или фреймворки. Смешение логики с деталями реализации приводит к тому, что даже небольшие изменения требуют переработки большого объёма кода.
Альтернативный подход: архитектура с выделением бизнес-логики
1. Изоляция бизнес-логики
Первый шаг — выделение бизнес-логики в отдельную папку Domain, которая становится ядром проекта. Эта папка содержит чистые PHP-объекты, не зависящие от фреймворков или библиотек. Внутри папки файлы группируются по логическим функциям, а не техническим слоям.
2. Определение «входной двери» проекта
Создайте папку Application, которая явно описывает все действия и возможности приложения. Это поможет новым разработчикам быстро понять, что может проект.
3. Работа с внешними системами
Реализация интеграции с фреймворками, базами данных и другими системами выносится в папку Infrastructure. Она зависит от файлов в папках App и Domain, но не наоборот.
4. Выявление и разделение контекстов
Если понятия, такие как «Продукт», имеют разные значения в разных частях проекта (например, товар на складе и товар в магазине), их нужно разделить на отдельные контексты с независимой бизнес-логикой.
Эволюция архитектуры
🟢Модульность и границы
Если какой-то модуль проекта разрастается, его можно выделить в отдельный деплоймент. Но это стоит делать только при необходимости, например, если команды сталкиваются с трудностями совместной работы.
🟢Систематизация кода
Архитектуры, такие как Hexagonal, Onion, и Clean, помогают изолировать бизнес-логику от деталей реализации. Это делает тестирование проще и код более устойчивым к изменениям.
🟢«Говорящая» структура проекта
Структура файлов должна «кричать» о том, что делает приложение. Организация кода должна быть интуитивно понятной и отражать функциональность проекта.
👏6👍4❤2🔥2🥱1