«Я создал одно и то же приложение на всех версиях PHP (1995-2025)»
Здесь автор создает приложение на PHP 2 и постепенно улучшает его, параллельно рассказывая о нововведениях каждой вышедшей версии языка. Интересное видео на вечер
Здесь автор создает приложение на PHP 2 и постепенно улучшает его, параллельно рассказывая о нововведениях каждой вышедшей версии языка. Интересное видео на вечер
👍12🔥2👏1😁1
Использование технологии withoutWrapping для сглаживания ответов API
Ресурсы API Laravel по умолчанию оборачивают ответы в ключ 'data'. Хоть это и полезно для многих сценариев, иногда требуется более плоская структура ответа, и тогда вы можете отключить обертывание ресурсов.
Ресурсы API Laravel по умолчанию оборачивают ответы в ключ 'data'. Хоть это и полезно для многих сценариев, иногда требуется более плоская структура ответа, и тогда вы можете отключить обертывание ресурсов.
👍8❤2👾1
Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel
#дайджест #PHPdevjob
Вакансии PHP разработчиков уровня Junior
▪️ Junior Backend разработчик РНР (Laravel)
Удалёнка, Делаем IT
Подробнее
▪️ PHP-разработчик Junior / Middle
Офис (Санкт-Петербург), Off Group
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️ PHP-разработчик
Офис (Екатеринбург), Goulash.Tech
Подробнее
▪️ Middle Backend Developer (PHP)
Удалёнка / Офис (Москва), Rusprofile
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️ Senior PHP разработчик
Офис (Томск), Совкомбанк Технологии
Подробнее
▪️ PHP-разработчик (Laravel)
Удалёнка, Рососмотр
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии PHP разработчиков уровня Junior
▪️ Junior Backend разработчик РНР (Laravel)
Удалёнка, Делаем IT
Подробнее
▪️ PHP-разработчик Junior / Middle
Офис (Санкт-Петербург), Off Group
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️ PHP-разработчик
Офис (Екатеринбург), Goulash.Tech
Подробнее
▪️ Middle Backend Developer (PHP)
Удалёнка / Офис (Москва), Rusprofile
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️ Senior PHP разработчик
Офис (Томск), Совкомбанк Технологии
Подробнее
▪️ PHP-разработчик (Laravel)
Удалёнка, Рососмотр
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
hh.ru
Вакансия Junior Backend разработчик РНР (Laravel) в Москве, работа в компании Делаем IT (вакансия в архиве c 12 января 2025)
Зарплата: не указана. Москва. Требуемый опыт: 1–3 года. Полная. Дата публикации: 10.01.2025.
😁3👍1
💭 Представьте, что за час вы можете научиться чему угодно. Что вы выберете?👇
👏1
Обновление Symfony 2.8 до версии 7.2 по проторенной дорожке
Обновление проектов на Symfony можно проводить двумя способами. Первый подразумевает использование только UPGRADE.md файлов при каждом релизе, заменяя устаревшие функции новыми. Такой подход позволяет поддерживать проект в актуальном состоянии, но его возможности ограничены. Второй подход более комплексный: он не только учитывает изменения, но и использует все современные функции фреймворка. Это делает код быстрее, проще в понимании и готовым к следующим обновлениям. Второй способ предпочтителен, так как повышает удобство работы с проектом и его дальнейшую поддержку.
Основные этапы обновления Symfony
1. Учет версий PHP и Symfony
Перед обновлением важно проверить совместимость версий Symfony и PHP. Например, Symfony 5.4 — последняя версия, поддерживающая PHP 7.4. Если проект работает на этой версии PHP, необходимо сначала обновить Symfony до 5.4, а затем перейти на PHP 8.0, чтобы продолжить обновление до Symfony 6.
2. Обновления в Symfony 3
🔸Новая структура каталогов. Вместо папок
🔸Инъекция зависимостей через конструктор. Переход от использования глобального контейнера (
🔸Автозагрузка и автоконфигурация сервисов. С помощью
🔸Разделение монорепозитория. Вместо зависимости
3. Нововведения Symfony 4
🟢PSR-4 автозагрузка сервисов. Можно автоматически регистрировать все классы из определенной директории, вместо ручной регистрации каждого сервиса.
🟢Переход с YAML на PHP для конфигураций. PHP-конфиги более удобны для работы с инструментами статического анализа и проверки на устаревшие методы.
4. Symfony 5 и новые атрибуты
От аннотаций к атрибутам. С версии 5.2 поддерживаются PHP-атрибуты, такие как
Новая система аутентификации. Вместо Guard используется более современный механизм, представленный в Symfony 5.3.
5. Symfony 6 и 7
На версиях Symfony 6 и 7 акцент сделан на улучшение синтаксиса и использование новых возможностей PHP 8. Например:
Обновление проектов на Symfony можно проводить двумя способами. Первый подразумевает использование только UPGRADE.md файлов при каждом релизе, заменяя устаревшие функции новыми. Такой подход позволяет поддерживать проект в актуальном состоянии, но его возможности ограничены. Второй подход более комплексный: он не только учитывает изменения, но и использует все современные функции фреймворка. Это делает код быстрее, проще в понимании и готовым к следующим обновлениям. Второй способ предпочтителен, так как повышает удобство работы с проектом и его дальнейшую поддержку.
Основные этапы обновления Symfony
1. Учет версий PHP и Symfony
Перед обновлением важно проверить совместимость версий Symfony и PHP. Например, Symfony 5.4 — последняя версия, поддерживающая PHP 7.4. Если проект работает на этой версии PHP, необходимо сначала обновить Symfony до 5.4, а затем перейти на PHP 8.0, чтобы продолжить обновление до Symfony 6.
2. Обновления в Symfony 3
🔸Новая структура каталогов. Вместо папок
/app
и /Resources
все файлы теперь располагаются в корне проекта.🔸Инъекция зависимостей через конструктор. Переход от использования глобального контейнера (
$this->get('service')
) к внедрению зависимостей в конструкторе. Этот шаг значительно упрощает архитектуру.🔸Автозагрузка и автоконфигурация сервисов. С помощью
_defaults: autowire: true
можно сократить настройки в services.yml
.🔸Разделение монорепозитория. Вместо зависимости
symfony/symfony
рекомендуется добавлять в проект только те пакеты Symfony, которые действительно используются.3. Нововведения Symfony 4
🟢PSR-4 автозагрузка сервисов. Можно автоматически регистрировать все классы из определенной директории, вместо ручной регистрации каждого сервиса.
🟢Переход с YAML на PHP для конфигураций. PHP-конфиги более удобны для работы с инструментами статического анализа и проверки на устаревшие методы.
4. Symfony 5 и новые атрибуты
От аннотаций к атрибутам. С версии 5.2 поддерживаются PHP-атрибуты, такие как
#[Route]
и #[Required]
, что упрощает написание и понимание кода.Новая система аутентификации. Вместо Guard используется более современный механизм, представленный в Symfony 5.3.
5. Symfony 6 и 7
На версиях Symfony 6 и 7 акцент сделан на улучшение синтаксиса и использование новых возможностей PHP 8. Например:
#[TaggedIterator]
позволяет автоматически внедрять набор сервисов.#[Autowire]
упрощает передачу переменных окружения в сервисы.👍3🔥3❤1
🤤 Икра черная, икра красная, а профессия — программирование
Сертификат на обучение от Proglib Academy — это крутой подарок для тех, кто интересуется IT, хочет освоить новую профессиюи жить в шоколаде .
Почему наши курсы — хороший презент:
🔵 Подходит для новичков и профессионалов: можно выбрать обучение под любой уровень знаний.
🔵 Помогает развивать востребованные навыки, которые пригодятся в IT.
🔵 Позволяет выбрать удобный формат обучения: можно учиться в своем темпе, когда удобно.
Сертификат оформляется за пару минут, и даже не нужно ломать голову над упаковкой.
🚀 Подарите возможность начать год с полезных знаний и карьерного роста → подробнее о сертификатах
Сертификат на обучение от Proglib Academy — это крутой подарок для тех, кто интересуется IT, хочет освоить новую профессию
Почему наши курсы — хороший презент:
Сертификат оформляется за пару минут, и даже не нужно ломать голову над упаковкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱7❤1🌚1
Какова цель функции «array_map» в PHP и как её использовать?
Функция
В этом примере функция
#вопросы_с_собеседований
Функция
array_map()
в PHP используется для применения заданной функции к каждому элементу массива. Она создает новый массив, содержащий результаты применения функции к каждому элементу исходного массива. Функция обратного вызова применяется к каждому элементу последовательно, и ключи сохраняются.В этом примере функция
square()
применяется к каждому элементу массива $numbers с использованием array_map()
, что приводит к созданию нового массива $squaredNumbers, где каждый элемент является квадратом соответствующего элемента исходного массива.#вопросы_с_собеседований
❤4🔥4👍2
PHP 8.4 представил значительное обновление DOM-расширения, добавив возможность работы с элементами DOM через новый API CSS-селекторов. Эта функция, схожая с JavaScript-методами
Новый API CSS-селекторов позволяет выбрать элементы DOM с использованием знакомого синтаксиса, делая код более компактным и понятным.
Основные методы:
Преимущества
🔸Простота синтаксиса: Использование CSS-селекторов упрощает код, избавляя от необходимости создавать сложные циклы для обхода DOM.
🔸Гибкость: Можно применять сложные селекторы, включая атрибуты, псевдоклассы и вложенные структуры.
🔸Сходство с JavaScript: Разработчики, знакомые с JavaScript, быстро адаптируются к новым методам PHP.
Ограничения
1.
2. Поддержка сложных псевдоклассов, таких как
querySelector()
и querySelectorAll()
, упрощает выбор и обработку элементов в HTML и XML-документах.Новый API CSS-селекторов позволяет выбрать элементы DOM с использованием знакомого синтаксиса, делая код более компактным и понятным.
Основные методы:
querySelector()
: выбирает первый элемент, соответствующий заданному CSS-селектору.$doc = new DOMDocument();
$doc->loadHTML('<div class="header">Header Content</div>');
$element = $doc->querySelector('.header');
echo $element->textContent; // Вывод: "Header Content"
querySelectorAll()
: возвращает коллекцию всех элементов, подходящих под CSS-селектор.$doc = new DOMDocument();
$doc->loadHTML('<div class="item">Item 1</div><div class="item">Item 2</div>');
$elements = $doc->querySelectorAll('.item');
foreach ($elements as $element) {
echo $element->textContent . "\n";
}
// Вывод:
// Item 1
// Item 2
Преимущества
🔸Простота синтаксиса: Использование CSS-селекторов упрощает код, избавляя от необходимости создавать сложные циклы для обхода DOM.
🔸Гибкость: Можно применять сложные селекторы, включая атрибуты, псевдоклассы и вложенные структуры.
🔸Сходство с JavaScript: Разработчики, знакомые с JavaScript, быстро адаптируются к новым методам PHP.
Ограничения
1.
querySelectorAll()
возвращает статический список узлов, который не обновляется при изменении DOM.2. Поддержка сложных псевдоклассов, таких как
:nth-child()
, может быть ограничен🔥22👍6👏3❤1
Мы запустили свежий канал, где делимся идеями для дизайна интерфейсов. Всё самое стильное, оригинальное и вдохновляющее теперь в одном месте.
📌 Чем полезен канал?
→ Идеи для дизайна интерфейсов.
→ Анимации, которые можно повторить или адаптировать.
→ Лёгкий способ искать вдохновение перед новым проектом.
👉 Подписывайтесь и вдохновляйтесь: UX in GIF
Please open Telegram to view this post
VIEW IN TELEGRAM
Знаете ли вы, что Laravel поставляется с методом «
preventStrayRequests()
», позволяющим избежать реальных запросов во время тестирования? Это удобно не только для сторонних API, но и для локальных API. В то время как ваши тесты могут пройти локально, потому что все окружение работает, они могут провалиться в CI-конвейере. Это происходит потому, что в конвейере CI обычно активен только тот сервис, который вы тестируете, поэтому выполнение фактических запросов к недоступным API приведет к неудаче вашего набора.🎉7👾1
💬 А расскажите, над каким проектом работаете прямо сейчас?
Что это за продукт или, может быть, пэт-проект? За что вы в нём ответственны? Довольны ли вы результатом?
#интерактив
Что это за продукт или, может быть, пэт-проект? За что вы в нём ответственны? Довольны ли вы результатом?
#интерактив
🤖 Познакомьтесь с Willow, современным квантовым чипом от Google
Менее чем за 5 минут он способен выполнить тестовое вычисление, на которое одному из самых быстрых суперкомпьютеров сегодня потребовалось бы 10 септиллионов лет (это больше, чем возраст Вселенной).
👉Подробнее
Менее чем за 5 минут он способен выполнить тестовое вычисление, на которое одному из самых быстрых суперкомпьютеров сегодня потребовалось бы 10 септиллионов лет (это больше, чем возраст Вселенной).
👉Подробнее
🔥9👍2😁1
🦑👨💻 Программист в «Игре в кальмара»: каковы твои шансы выжить?
Каждый день оптимизируешь процессы, автоматизируешь задачи и решаешь сложные проблемы. Но что, если тебе придется применять свои навыки, чтобы выжить?
Окажутся ли твои скрипты, алгоритмы и багфиксы полезными в критической ситуации?
👉 Пройти тест
Каждый день оптимизируешь процессы, автоматизируешь задачи и решаешь сложные проблемы. Но что, если тебе придется применять свои навыки, чтобы выжить?
Окажутся ли твои скрипты, алгоритмы и багфиксы полезными в критической ситуации?
👉 Пройти тест
❤5
💻 Эффективное проектирование программных систем
Правильная архитектура программного обеспечения помогает создавать устойчивые и масштабируемые приложения, которые легко дорабатывать и поддерживать.
Наш интенсив «Архитектуры и шаблоны проектирования» научит вас строить программные системы без боли и стресса. Вы на практике освоите основные паттерны проектирования и прокачайте свои навыки архитектора программного обеспечения.
🎄Начните свой 2025 со скидкой 35% на все курсы. Это лучшее вложении уходящего года – https://proglib.io/w/cc21e069
Правильная архитектура программного обеспечения помогает создавать устойчивые и масштабируемые приложения, которые легко дорабатывать и поддерживать.
Наш интенсив «Архитектуры и шаблоны проектирования» научит вас строить программные системы без боли и стресса. Вы на практике освоите основные паттерны проектирования и прокачайте свои навыки архитектора программного обеспечения.
🎄Начните свой 2025 со скидкой 35% на все курсы. Это лучшее вложении уходящего года – https://proglib.io/w/cc21e069
🥰1🎉1
Front Controller и Page Controller в PHP
Архитектурные паттерны Front Controller и Page Controller помогают структурировать работу веб-приложений, но подходят для разных сценариев.
Front Controller используется для централизованной обработки запросов. Все запросы проходят через единый контроллер, который маршрутизирует их на соответствующие модули. Это упрощает управление глобальной логикой и позволяет повторно использовать общие функции. Этот подход особенно эффективен для сложных приложений с большим количеством маршрутов и общей логики.
Как это работает:
🔸Единая точка входа: Весь входящий трафик перенаправляется на один файл, например,
🔸Маршрутизация: Контроллер анализирует URL и определяет, какой компонент должен обработать запрос. Это может быть реализовано вручную или с использованием библиотек маршрутизации.
🔸Делегирование: На основе маршрута запрос передается соответствующему контроллеру или методу, который выполняет обработку.
🔸Формирование ответа: Контроллер формирует ответ (обычно в формате HTML или JSON) и отправляет его клиенту.
Page Controller фокусируется на создании отдельного контроллера для каждой страницы или группы страниц. Это улучшает изоляцию кода и облегчает модификации, так как изменения в одной странице не затрагивают другие. Такой подход удобен для небольших и средних проектов, где каждая страница требует уникальной обработки.
Каждый контроллер выполняет следующие задачи:
🔹Обработка запроса: анализирует данные, поступающие от клиента.
🔹Логика страницы: проводит проверку данных, взаимодействует с моделями или выполняет вычисления.
🔹Формирование ответа: передаёт обработанные данные в представление для генерации итогового ответа.
Оба паттерна можно комбинировать, адаптируя их под конкретные потребности приложения.
Архитектурные паттерны Front Controller и Page Controller помогают структурировать работу веб-приложений, но подходят для разных сценариев.
Front Controller используется для централизованной обработки запросов. Все запросы проходят через единый контроллер, который маршрутизирует их на соответствующие модули. Это упрощает управление глобальной логикой и позволяет повторно использовать общие функции. Этот подход особенно эффективен для сложных приложений с большим количеством маршрутов и общей логики.
Как это работает:
🔸Единая точка входа: Весь входящий трафик перенаправляется на один файл, например,
index.php
, с помощью настроек веб-сервера (например, .htaccess
для Apache или правил маршрутизации для Nginx).🔸Маршрутизация: Контроллер анализирует URL и определяет, какой компонент должен обработать запрос. Это может быть реализовано вручную или с использованием библиотек маршрутизации.
🔸Делегирование: На основе маршрута запрос передается соответствующему контроллеру или методу, который выполняет обработку.
🔸Формирование ответа: Контроллер формирует ответ (обычно в формате HTML или JSON) и отправляет его клиенту.
Page Controller фокусируется на создании отдельного контроллера для каждой страницы или группы страниц. Это улучшает изоляцию кода и облегчает модификации, так как изменения в одной странице не затрагивают другие. Такой подход удобен для небольших и средних проектов, где каждая страница требует уникальной обработки.
Каждый контроллер выполняет следующие задачи:
🔹Обработка запроса: анализирует данные, поступающие от клиента.
🔹Логика страницы: проводит проверку данных, взаимодействует с моделями или выполняет вычисления.
🔹Формирование ответа: передаёт обработанные данные в представление для генерации итогового ответа.
Оба паттерна можно комбинировать, адаптируя их под конкретные потребности приложения.
🔥5🤔4👍2🌚1
PHP Typed: Маленький Composer пакет, который нарушает PHP правила ради вас
Этот пакет использует немного магии вне Хогвартса, и будет действительно полезен любителям строгой типизации в PHP.
Этот пакет использует немного магии вне Хогвартса, и будет действительно полезен любителям строгой типизации в PHP.
Хабр
PHP Typed: Маленький Composer пакет, который нарушает PHP правила ради вас
Звучит слишком громко? Давайте уточним, чтобы избежать обманутых ожиданий: этот пакет использует немного магии вне Хогвартса, и будет действительно полезен любителям строгой типизации в PHP. Введение...
😢5🔥4
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Для чего используется переменная $_REQUEST?
Переменная $_REQUEST является суперглобальным массивом, который используется для сбора данных из HTML-форм или URL-адресов. Это комбинация массивов $_GET, $_POST и $_COOKIE. Собранные данные могут быть параметрами, переданными через методы HTTP GET или POST.
Вот разбор того, что представляет собой каждый из этих методов:
$_GET: Данные, отправленные через строку запроса URL. Они видны всем и имеют ограничение на объем передаваемых данных.
$_POST: Данные, отправленные через HTTP POST-запрос, обычно из HTML-формы с использованием метода POST. Эти данные не видны в URL-адресе и могут передавать больший объем данных по сравнению с $_GET.
$_COOKIE: Данные, хранящиеся в файлах cookie браузера пользователя.
$_REQUEST позволяет получать доступ к данным независимо от того, как они были отправлены, будь то запрос GET (параметры URL), запрос POST (отправка формы) или cookie. Однако полагаться исключительно на $_REQUEST иногда может привести к проблемам с безопасностью, поскольку он объединяет различные источники пользовательского ввода. Обычно рекомендуется использовать явно $_GET, $_POST или $_COOKIE в зависимости от предполагаемого использования и источника данных, поскольку это обеспечивает большую ясность и безопасность.
Переменная $_REQUEST является суперглобальным массивом, который используется для сбора данных из HTML-форм или URL-адресов. Это комбинация массивов $_GET, $_POST и $_COOKIE. Собранные данные могут быть параметрами, переданными через методы HTTP GET или POST.
Вот разбор того, что представляет собой каждый из этих методов:
$_GET: Данные, отправленные через строку запроса URL. Они видны всем и имеют ограничение на объем передаваемых данных.
$_POST: Данные, отправленные через HTTP POST-запрос, обычно из HTML-формы с использованием метода POST. Эти данные не видны в URL-адресе и могут передавать больший объем данных по сравнению с $_GET.
$_COOKIE: Данные, хранящиеся в файлах cookie браузера пользователя.
$_REQUEST позволяет получать доступ к данным независимо от того, как они были отправлены, будь то запрос GET (параметры URL), запрос POST (отправка формы) или cookie. Однако полагаться исключительно на $_REQUEST иногда может привести к проблемам с безопасностью, поскольку он объединяет различные источники пользовательского ввода. Обычно рекомендуется использовать явно $_GET, $_POST или $_COOKIE в зависимости от предполагаемого использования и источника данных, поскольку это обеспечивает большую ясность и безопасность.
😁10👍2❤1