Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.34K photos
20 videos
26 files
4.03K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Класс содержит свойство, которое, в свою очередь, является объектом. Что будет содержать это свойство в клонированном объекте: ссылка на тот же дочерний объект или копию дочернего объекта? Что нужно сделать, чтобы это изменить?

При клонировании объекта, свойство, которое является объектом, будет содержать ссылку на тот же дочерний объект, а не его копию.

Чтобы изменить это поведение и создать копию дочернего объекта в клонированном объекте, необходимо определить метод __clone() для класса. В этом методе можно явно создать копию дочернего объекта и присвоить ее свойству клонируемого объекта.

Пример реализации на фото

#вопросы_с_собеседований
👍11🥱63
Как гарантировать, что все маршруты в приложении Symfony имеют контроль доступа

Статья представляет собой руководство по автоматизированной проверке контроля доступа ко всем маршрутам в проекте Symfony. Она объясняет важность эффективного контроля доступа в Symfony, описывает, как настроить Symfony Firewall, предоставляет способы реализации контроля доступа для каждого маршрута и предоставляет два метода автоматизации проверки: использование инструмента ACCENT для проектов, использующих API Platform, и написание собственного скрипта для проектов без API Platform.

Текст также рассказывает о том, как использовать Symfony Security для контроля доступа к маршрутам, как написать скрипт для автоматической проверки наличия контроля доступа к каждому маршруту и как обеспечить безопасность новых маршрутов, добавляемых в проект. Он также подчеркивает важность внедрения проверки контроля доступа в процесс непрерывной интеграции для обеспечения высокого уровня безопасности в проекте Symfony.
👍31
Практика маршрутизации поддомена в локальной среде с помощью laravel

Статья рассказывает о том, как настроить локальное окружение для тестирования поддоменных маршрутов в Laravel.

Настройка DNS
Сначала необходимо настроить DNS так, чтобы каждый поддомен указывал на один и тот же хост. Для этого требуется добавить записи в файл hosts операционной системы. В Windows это файл C:\Windows\System32\drivers\etc\hosts, в Linux — /etc/hosts, в MacOS — /private/etc/hosts.

Настройка маршрута
В Laravel достаточно добавить доменный маршрут для захвата поддоменов.

Важно помнить (согласно официальной документации Laravel): чтобы гарантировать доступность маршрутов поддоменов, следует регистрировать маршруты поддоменов перед регистрацией маршрутов корневого домена. Это предотвратит перезапись маршрутов корневого домена маршрутами поддоменов с одинаковым URI-путем.🚀
1👍1
Десять проверенных методов оптимизации производительности Laravel

🔎Здесь рассматриваются 10 методов оптимизации производительности в Laravel веб-приложениях:

1️⃣Route Caching: Метод кеширования маршрутов, который сокращает время регистрации всех маршрутов приложения, ускоряя обработку запросов.

2️⃣Оптимизация Запросов в Базе Данных: Использование Eloquent ORM с методом ->select() для уменьшения объема данных, которые передаются из базы данных.

3️⃣Eager Loading: Этот метод загрузки связанных данных в одном запросе, что сокращает количество запросов к базе данных и улучшает производительность.

4️⃣Lazy Collections: Интродуцированные в Laravel 6.0, ленивые коллекции позволяют работать с большими объемами данных, минимизируя использование памяти.

5️⃣Планирование Задач и Фоновая Обработка: Использование API для планирования задач и работы с очередями, позволяющее выполнять тяжелые задачи в фоновом режиме.

6️⃣Laravel Mix: Использование Laravel Mix для оптимизации статических ресурсов, таких как изображения, CSS и JavaScript, с автоматической настройкой webpack.

7️⃣Event Broadcasting: Использование Laravel's event broadcasting для обновления клиентской части в реальном времени через веб-сокеты.

8️⃣Пользовательские Правила Валидации: Создание собственных правил валидации для улучшения читаемости кода и надежности приложения.

9️⃣Artisan Commands: Создание собственных Artisan команд для автоматизации рутинных задач и их запуск в фоновом режиме.

🔟Laravel Dusk для Тестирования в Браузере: Использование Laravel Dusk для тестирования взаимодействия с приложением в реальном браузере, что помогает выявить проблемы производительности и улучшить пользовательский опыт.

👨‍💻Все подробности и необходимые ресурсы здесь.
👍61👾1
#дайджест #phpdevjob

Вакансии недели для Москвы 👨🏻‍🏫

Full stack Developer в Карбокс
Москва. Мультипродуктовая IT-компания.
Подробнее

Senior PHP Developer в Karma8
Москва. Облачный сервис хранения данных.
Подробнее

Senior PHP разработчик в Ит-Финанс
Москва. Разработка ПО.
Подробнее

Программист PHP в OOMI
Москва. Комплексный маркетинг и WEB разработка.
Подробнее

PHP - разработчик в Семена Тут
Москва. Профессиональный интернет-магазин.
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
🤔65🌚2👍1
Хорошая структура команды switch

Эта статья обсуждает важные практики и советы по оптимизации и улучшению читаемости конструкции switch. Основные аспекты, поднимаемые в ней:

✔️Пропущенный default: Конструкция switch должна всегда включать default, чтобы предусмотреть обработку случаев, когда ни один из case не совпадает с проверяемым значением.

✔️Дублирование case: Необходимо проверить конструкцию switch на наличие дублирующихся case, которые могут привести к игнорированию некоторых ветвей кода.

✔️Дублирование блоков кода: Повторяющиеся блоки кода в различных ветвях case следует устранить для избежания избыточности и улучшения поддерживаемости кода.

✔️Использование перечислений: В PHP существует поддержка перечислений, которые представляют собой ограниченный набор опций. Их использование может помочь гарантировать, что switch охватывает все возможные ситуации.
2👍2
Что такое traits?

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

Также traits позволяют разделить функционал, что упрощает структуру кода и делает его более логичным и понятным.

Альтернативным решением для использования функционала traits может быть использование интерфейсов. Однако интерфейсы требуют реализации всех методов, которые определены в интерфейсе, в классе, в то время как трейты могут предоставлять реализацию функционала по умолчанию.

Оба варианта имеют свои преимущества, но трейты в PHP предоставляют большую гибкость при повторном использовании кода в разных классах.

#вопросы_с_собеседований
👍12🥱32
Видео: Использование фейковых объектов вместо моков в автоматизированных тестах

Видео о том, как правильно создать искусственные объекты и использовать их в тестах
🔥2
Какой пакет/библиотеку вы хотели бы использовать, но не можете найти?🔽🔽🔽
😁2
Антипаттерны модульного тестирования

🧪 Тестирование Приватных/Защищенных Методов:


Приватные методы не следует тестировать напрямую. Тестирование должно проходить косвенно через публичные методы, вызывающие приватные методы.
Сложности при тестировании приватного метода могут указывать на отсутствие абстракции или мертвый код.

🛡️ Нарушение Инкапсуляции в Целях Упрощенных Тестов:

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

🔍 Разглашение Реализации в Тестах:

Тесты не должны знать о деталях реализации. Они должны фокусироваться на ожидаемых результатах, а не на конкретных алгоритмах или внутренней логике.
Параметризованные тесты могут использоваться для охвата различных сценариев, не раскрывая детали реализации.

🚯 Загрязнение Кода:

Добавление неиспользуемого кода или флагов исключительно для целей тестирования является формой загрязнения кода.
Интерфейсы могут быть выделены и использованы для мокирования вместо добавления лишнего кода только для тестирования.

Статья подчеркивает, что всегда важно учитывать практические решения и в некоторых случаях нарушение правил может быть оправданным. Тем не менее, важно иметь веские причины для таких решений и поддерживать баланс между написанием тестируемого кода и соблюдением хороших программистских практик.
🔥5👍21
#дайджест новостей по PHP за неделю:

🔎 PHP 8.1.25 выпущен! — Это релиз с исправлением ошибок.

🔎PHP Annotated — октябрь 2023 г.

🔎 Вышел CakePHP 5.0.2 TranslateBehavior теперь позволяет использовать стиль именования _translations.{locale}.field_name для локали по умолчанию. LoggedQuery::getContext() теперь включает созданный запрос +more.

🔎 PhpStorm 2023.3 EAP #5 — В этой сборке вы можете обнаружить несколько улучшений в различных подсистемах.

🔎Выпущена версия Laravel 10.29 — На этой неделе команда Laravel выпустила версию 10.29 с возможностью просмотра всего промежуточного программного обеспечения в маршруте: список, обновления вывода дампа CLI и многое другое.

🔎Выпущена Symfony 7.0.0-BETA2 — Список наиболее важных изменений с версии 7.0.0-BETA1.

🔎Неделя Symfony #878 (23–29 октября 2023 г.)
👍7
SOAP-клиент общего назначения для PHP.

Если вам когда-нибудь понадобится иметь дело с SOAP, не используйте неподдерживаемые расширения PHP. Вместо этого попробуйте этот универсальный SOAP-клиент для PHP.
👍5👾1
Изучение утечек памяти Redis из-за тегов кэша Laravel

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

🕵️ Анализ причины

✔️Неправильное использование тегирования ключей в Laravel Cache.
✔️Создание наборов в Redis для отслеживания ключей по тегам.
✔️Утечки памяти из-за ссылок на ключи в наборах, даже после истечения срока действия (TTL).

🔧 Решение проблемы

✔️Изучение кода библиотеки и замена компонента кэша.
✔️Осознание отсутствия автоматического истечения срока действия для элементов набора в Redis.
✔️Замена стандартного компонента на другой, не использующий тегирование ключей.
👍9
Попробуйте MongoDB в Laravel в один клик через GitHub Codespaces

Эта статья рассказывает о том, как облачные среды разработки, такие как GitHub Codespaces, могут облегчить процесс вступления новых участников в проект и ускорить процесс внесения ими вклада в код при минимальном времени настройки. Она подчеркивает проблемы, связанные с различиями в конфигурациях разработческих окружений, которые могут привести к трате времени на устранение проблем. Рассматривается преимущество использования контейнеризированных окружений разработки, особенно в облачных средах, что делает процесс разработки более удобным и безпрепятственным.

Здесь также приводится пример использования GitHub Codespaces для публикации учебного пособия по интеграции MongoDB в приложение Laravel. Авторы показывают, как можно избежать начальных настроек, позволяя читателям развернуть приложение одним нажатием кнопки и сразу начать работать над кодом. В статье также описывается конфигурация Codespaces, включая использование Docker контейнеров, файлы конфигурации и запуск служб внутри контейнеров.
👍3🤔2
Опишите поведение при использовании traits с одинаковыми именами полей и / или методов?

При использовании traits с одинаковыми именами полей и/или методов, возникает конфликт имен, который не позволяет PHP однозначно определить, какое поле или метод должны использоваться.

Если в классе используется несколько traits, и в этих traits есть поля или методы с одинаковыми именами, возникает ошибка компиляции «trait method has not been applied», или «trait field has not been applied». По сути, PHP не знает, из какого trait следует взять поле или метод.

Для разрешения этого конфликта имен трейт может быть использован с использованием псевдонима. Например, можно использовать ключевое слово insteadof, чтобы указать, какой метод или поле должно использоваться
Также в PHP 7.2 была добавлена возможность адаптировать методы или конфликтующие поля с помощью оператора as.
С помощью таких алиасов можно явным образом указать, какой метод или поле следует использовать из каждого трейта.

#вопросы_с_собеседований
👍18🥱31
Saloon

Saloon — это библиотека PHP, которая предоставляет вам инструменты для создания простых интеграций API и SDK. Saloon перемещает ваши запросы API в повторно используемые классы, чтобы вы могли хранить все свои конфигурации API в одном месте. Его можно легко настроить с помощью плагинов, но он поставляется предварительно настроенным для вас, поэтому вы можете сразу же приступить к отправке запросов API. Saloon поставляется со множеством интересных функций, таких как запись запросов в ваших тестах, кеширование, OAuth2 и нумерация страниц.
👍5🥱5