👍4🔥3🤔2
Как рефакторить метод с необязательными параметрами
Здесь обсуждается проблема, связанную с методами, имеющими необязательные параметры, которые могут вызывать неожиданные побочные эффекты. В качестве примера приводится класс PageRepository с методами find и findOrFail, у которых параметр $prerender имеет разные значения по умолчанию. Это может привести к ненамеренной предварительной отрисовке страницы, что является дорогостоящей операцией.
Пример проблемы:
Класс PageRepository содержит два метода:
find($pageId, $prerender = false), который по умолчанию не выполняет предварительную отрисовку.
findOrFail($pageId, $prerender = true), который по умолчанию выполняет предварительную отрисовку.
Возможные решения:
🟢Установить одинаковые значения по умолчанию для параметра $prerender.
🟢Явно указывать значение параметра.
🟢Разделить метод с флагом параметра на два отдельных метода. Это потребует от разработчика явного выбора функциональности, предотвращая ненамеренные побочные эффекты.
Здесь обсуждается проблема, связанную с методами, имеющими необязательные параметры, которые могут вызывать неожиданные побочные эффекты. В качестве примера приводится класс PageRepository с методами find и findOrFail, у которых параметр $prerender имеет разные значения по умолчанию. Это может привести к ненамеренной предварительной отрисовке страницы, что является дорогостоящей операцией.
Пример проблемы:
Класс PageRepository содержит два метода:
find($pageId, $prerender = false), который по умолчанию не выполняет предварительную отрисовку.
findOrFail($pageId, $prerender = true), который по умолчанию выполняет предварительную отрисовку.
Возможные решения:
🟢Установить одинаковые значения по умолчанию для параметра $prerender.
🟢Явно указывать значение параметра.
🟢Разделить метод с флагом параметра на два отдельных метода. Это потребует от разработчика явного выбора функциональности, предотвращая ненамеренные побочные эффекты.
Lukapeharda
How to Refactor a Method With Optional Params - Luka Peharda - PHP and JS developer
While refactoring and optimising legacy code I've ran into a method signature inconsistency which caused performance issues and was being done without developer intention.
👍2❤1
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Расскажите про сериализатор Symfony
В Symfony, сериализатор — это сервис, который преобразует данные между различными форматами, такими как JSON, XML, YAML или CSV, и PHP-объектами. Компонент сериализации в Symfony — это мощный инструмент, используемый для преобразования объектов в сериализуемый формат и обратно. Он особенно полезен для API, где обмен данными часто требует преобразования в структурированные текстовые форматы и обратно.
Нормализаторы и кодировщики
Нормализаторы: Отвечают за преобразование объектов в массивы и обратно:
✔️ObjectNormalizer: Преобразует объекты в массивы и обратно.
✔️ArrayDenormalizer: Обрабатывает массивы объектов.
✔️DateTimeNormalizer: Обрабатывает объекты DateTime.
Кодировщики: Отвечают за преобразование массивов в определенные форматы и обратно:
✔️JsonEncoder: Обрабатывает кодирование/декодирование JSON.
✔️XmlEncoder: Обрабатывает кодирование/декодирование XML.
✔️YamlEncoder: Обрабатывает кодирование/декодирование YAML.
✔️CsvEncoder: Обрабатывает кодирование/декодирование CSV.
В Symfony, сериализатор — это сервис, который преобразует данные между различными форматами, такими как JSON, XML, YAML или CSV, и PHP-объектами. Компонент сериализации в Symfony — это мощный инструмент, используемый для преобразования объектов в сериализуемый формат и обратно. Он особенно полезен для API, где обмен данными часто требует преобразования в структурированные текстовые форматы и обратно.
Нормализаторы и кодировщики
Нормализаторы: Отвечают за преобразование объектов в массивы и обратно:
✔️ObjectNormalizer: Преобразует объекты в массивы и обратно.
✔️ArrayDenormalizer: Обрабатывает массивы объектов.
✔️DateTimeNormalizer: Обрабатывает объекты DateTime.
Кодировщики: Отвечают за преобразование массивов в определенные форматы и обратно:
✔️JsonEncoder: Обрабатывает кодирование/декодирование JSON.
✔️XmlEncoder: Обрабатывает кодирование/декодирование XML.
✔️YamlEncoder: Обрабатывает кодирование/декодирование YAML.
✔️CsvEncoder: Обрабатывает кодирование/декодирование CSV.
👍13🔥1
Foxy
это плагин Composer для автоматизации проверки, установки, обновления и удаления зависимостей PHP-библиотек (javaScript, таблиц стилей и т.д.), определенных в файле NPM package.json проекта и PHP-библиотек во время выполнения Composer. Он восстанавливает состояние проекта в случае, если Bun или NPM или Yarn или PNpM завершается с ошибкой.
это плагин Composer для автоматизации проверки, установки, обновления и удаления зависимостей PHP-библиотек (javaScript, таблиц стилей и т.д.), определенных в файле NPM package.json проекта и PHP-библиотек во время выполнения Composer. Он восстанавливает состояние проекта в случае, если Bun или NPM или Yarn или PNpM завершается с ошибкой.
GitHub
GitHub - php-forge/foxy: A fast, reliable, and secure BUN/NPM/Yarn/PNpM bridge for Composer.
A fast, reliable, and secure BUN/NPM/Yarn/PNpM bridge for Composer. - php-forge/foxy
👍3
Иногда нам нужно сгенерировать случайное число, например, для отправки пользователю через SMS💬 для авторизации с помощью SMS. Для этого мы можем использовать функцию rand(000000, 999999), которая пришлет пользователю шестизначный код для верификации. Также с помощью функции в Laravel мы можем усложнить задачу и отправить случайные символы с помощью Str::random(). Эта функция по умолчанию отправляет 16 символов, но мы также можем сократить их до 8 с помощью Str::random(8).
❗Однако, важно отметить, что для безопасности передачи данных важно использовать криптографически устойчивые методы генерации случайных чисел и символов, в частности, с помощью функций, которые используют устойчивые алгоритмы шифрования.
❗Однако, важно отметить, что для безопасности передачи данных важно использовать криптографически устойчивые методы генерации случайных чисел и символов, в частности, с помощью функций, которые используют устойчивые алгоритмы шифрования.
😁7👍4👾1
Сколько лет стажа нужно разработчику, чтобы он мог назваться Сеньором?
Anonymous Poll
14%
от 10 лет
43%
Минимум 5-10
30%
3-5 лет
6%
2-3 года
8%
Свой вариант
👍3❤2
Избегание импортов и алиасов в PHP
В PHP важно правильно управлять зависимостями и пространствами имен, чтобы поддерживать чистый и читаемый код. Использование операторов use и псевдонимов может привести к засорению кода и его неоднозначности. Вот несколько стратегий для избегания чрезмерного использования импортов и псевдонимов:
🟢Автозагрузка с PSR-4: Настройка автозагрузки по стандарту PSR-4 позволяет автоматически загружать классы на основе их пространства имен и структуры директорий, уменьшая необходимость ручного импорта.
🟢Полные имена классов (FQCN): Используйте полные имена классов напрямую в коде, чтобы избежать импорта и сделать использование классов явным.
🟢Внедрение зависимостей: Передавайте зависимости через конструкторы классов, что улучшает тестируемость и снижает необходимость импорта.
🟢Паттерн локатор сервисов: Используйте локатор сервисов для управления зависимостями, чтобы централизовать создание и хранение сервисов.
🟢Группировка операторов use: Сгруппируйте несколько классов из одного пространства имен в одном операторе use для уменьшения засорения.
🟢Избегайте псевдонимов, если это не необходимо: Используйте описательные имена классов и избегайте их сокращения, если это не улучшает читаемость кода.
В PHP важно правильно управлять зависимостями и пространствами имен, чтобы поддерживать чистый и читаемый код. Использование операторов use и псевдонимов может привести к засорению кода и его неоднозначности. Вот несколько стратегий для избегания чрезмерного использования импортов и псевдонимов:
🟢Автозагрузка с PSR-4: Настройка автозагрузки по стандарту PSR-4 позволяет автоматически загружать классы на основе их пространства имен и структуры директорий, уменьшая необходимость ручного импорта.
🟢Полные имена классов (FQCN): Используйте полные имена классов напрямую в коде, чтобы избежать импорта и сделать использование классов явным.
🟢Внедрение зависимостей: Передавайте зависимости через конструкторы классов, что улучшает тестируемость и снижает необходимость импорта.
🟢Паттерн локатор сервисов: Используйте локатор сервисов для управления зависимостями, чтобы централизовать создание и хранение сервисов.
🟢Группировка операторов use: Сгруппируйте несколько классов из одного пространства имен в одном операторе use для уменьшения засорения.
🟢Избегайте псевдонимов, если это не необходимо: Используйте описательные имена классов и избегайте их сокращения, если это не улучшает читаемость кода.
😁8🌚8👍7👾2
Forwarded from Proglib.academy | IT-курсы
Программистам без практики никуда. Поэтому время прокачать навыки: решение задач — хороший способ развить навыки разработки.
Вам под силу эти задачи?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Мы наконец-то запустили канал по разработке игр — теперь все самое важное и полезное из мира геймдева можно узнать в одном месте.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👏2
#дайджест новостей по PHP за неделю:
🔎Новая страница исключений по умолчанию с поддержкой темного режима в Laravel 11.9 — На этой неделе команда Laravel выпустила версию 11.9, в которой появилась новая страница исключений по умолчанию, способ предотвратить выполнение деструктивных команд, метод очереди withoutDelay() и многое другое.
🔎Выпущена версия Symfony 7.1.1 — Только что состоялся релиз Symfony 7.1.1. Вот список наиболее важных изменений по сравнению с 7.1.0.
🔎Неделя Symfony #909 (27 мая — 2 июня 2024 года)
🔎Новая страница исключений по умолчанию с поддержкой темного режима в Laravel 11.9 — На этой неделе команда Laravel выпустила версию 11.9, в которой появилась новая страница исключений по умолчанию, способ предотвратить выполнение деструктивных команд, метод очереди withoutDelay() и многое другое.
🔎Выпущена версия Symfony 7.1.1 — Только что состоялся релиз Symfony 7.1.1. Вот список наиболее важных изменений по сравнению с 7.1.0.
🔎Неделя Symfony #909 (27 мая — 2 июня 2024 года)
❤1👍1
Как использовать редактор Quill с Laravel 10 и Livewire v3
Это подробное руководство по интеграции редактора Quill с Laravel 10 и Livewire v3 для создания блог-постов, включая загрузку изображений. Предполагается, что читатель имеет опыт использования этих инструментов.
Это подробное руководство по интеграции редактора Quill с Laravel 10 и Livewire v3 для создания блог-постов, включая загрузку изображений. Предполагается, что читатель имеет опыт использования этих инструментов.
DEV Community
How to use Quill Editor with Laravel 10 and Livewire v3
I wanted to build a content management system for a project I was working on recently and I needed to...
❤1
Вот несколько топовых постов за последнее время:
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Forwarded from Библиотека питониста | Python, Django, Flask
🤖🎙️ S.T.A.R.K. — первый фреймворк для создания голосового ассистента
В новой статье рассказываем о фреймворке S.T.A.R.K. (Speech and Text Algorithmic Recognition Kit), который поможет создать голосового ассистента. У него есть несколько преимуществ:
▪️S.T.A.R.K. работает полностью на устройстве, гарантируя сохранность ваших данных.
▪️С фреймворком можно легко определять контекст и параметры для последующих запросов, а также одновременно выполнять несколько команд.
▪️S.T.A.R.K позволяет использовать ведущие языковые модели.
🔗 Читать статью
🔗 Зеркало
В новой статье рассказываем о фреймворке S.T.A.R.K. (Speech and Text Algorithmic Recognition Kit), который поможет создать голосового ассистента. У него есть несколько преимуществ:
▪️S.T.A.R.K. работает полностью на устройстве, гарантируя сохранность ваших данных.
▪️С фреймворком можно легко определять контекст и параметры для последующих запросов, а также одновременно выполнять несколько команд.
▪️S.T.A.R.K позволяет использовать ведущие языковые модели.
🔗 Читать статью
🔗 Зеркало
❤1👍1
Использование Temporal для эффективного управления жизненным циклом документов
В современном быстро развивающемся и ориентированном на данные мире создание сложных workflow, способных обрабатывать тысячи регистраций, процессов или действий, может быть сложной задачей. Важно иметь решение, которое будет масштабируемым, надежным и простым в использовании. К счастью, на рынке есть различные инструменты и движки, и одним из популярных инструментов является Temporal.io. Temporal предоставляет набор проверенных паттернов, которые были опробованы в крупных продуктах и командах, позволяя разработчикам использовать их легко и эффективно, сосредоточив внимание исключительно на производительности инженерных решений.
Здесь рассматривается, как можно использовать Temporal Workflows для разработки структуры для эффективного управления жизненным циклом документов. Мы сосредоточимся на использовании Temporal для обработки событий workflow, связанных с изменениями документов, не перегружая систему ненужными процессами и ручными шагами.
В современном быстро развивающемся и ориентированном на данные мире создание сложных workflow, способных обрабатывать тысячи регистраций, процессов или действий, может быть сложной задачей. Важно иметь решение, которое будет масштабируемым, надежным и простым в использовании. К счастью, на рынке есть различные инструменты и движки, и одним из популярных инструментов является Temporal.io. Temporal предоставляет набор проверенных паттернов, которые были опробованы в крупных продуктах и командах, позволяя разработчикам использовать их легко и эффективно, сосредоточив внимание исключительно на производительности инженерных решений.
Здесь рассматривается, как можно использовать Temporal Workflows для разработки структуры для эффективного управления жизненным циклом документов. Мы сосредоточимся на использовании Temporal для обработки событий workflow, связанных с изменениями документов, не перегружая систему ненужными процессами и ручными шагами.
Хабр
Использование Temporal для эффективного управления жизненным циклом документов
В современном быстро развивающемся и ориентированном на данные мире создание сложных workflow, способных обрабатывать тысячи регистраций, процессов или действий, может быть сложной задачей. Важно...
👍4🥰2🔥1
Assess
Библиотека для уведомлений о файловой системе Unix для PHP. Можно следить за изменениями в файловой системе без каких-либо зависимостей от JS
Библиотека для уведомлений о файловой системе Unix для PHP. Можно следить за изменениями в файловой системе без каких-либо зависимостей от JS
GitHub
GitHub - azjezz/assess: Unix filesystem notifications library for PHP.
Unix filesystem notifications library for PHP. Contribute to azjezz/assess development by creating an account on GitHub.
👍7
Расскажите о ReactPHP
ReactPHP — это библиотека для асинхронного программирования на языке PHP. Она предоставляет возможность создания высокопроизводительных, масштабируемых и асинхронных приложений, что делает ее полезной для решения задач, таких как обработка большого количества одновременных соединений, ввод-вывод операции, а также для создания веб-серверов и других сетевых приложений.
Вот некоторые ключевые особенности и концепции ReactPHP:
Асинхронность: Основной принцип ReactPHP — это асинхронное выполнение кода. Вместо блокирования выполнения на операциях ввода-вывода, код может переключаться между задачами, ожидая выполнения операций ввода-вывода. Это позволяет эффективно обрабатывать множество соединений одновременно.
Event Loop: ReactPHP использует событийный цикл (event loop), который является центральной частью асинхронной архитектуры. Event loop отслеживает и обрабатывает различные события, такие как завершение операций ввода-вывода или таймеры.
Promise: Обещания (Promise) в ReactPHP представляют собой абстракцию для асинхронных операций. Они позволяют создавать цепочки асинхронных операций, которые будут выполнены после завершения предыдущей операции. Это сделано для более удобного и читаемого управления асинхронным кодом.
Компоненты: ReactPHP предоставляет различные компоненты и библиотеки для обработки конкретных задач. Например, React/Socket обеспечивает низкоуровневый доступ к сокетам, а React/Http предоставляет возможность создания веб-серверов.
Веб-сервер: ReactPHP можно использовать для создания высокопроизводительных веб-серверов. Это особенно полезно для обработки множества одновременных подключений, таких как веб-сокеты или длительные соединения.
#вопросы_с_собеседований
ReactPHP — это библиотека для асинхронного программирования на языке PHP. Она предоставляет возможность создания высокопроизводительных, масштабируемых и асинхронных приложений, что делает ее полезной для решения задач, таких как обработка большого количества одновременных соединений, ввод-вывод операции, а также для создания веб-серверов и других сетевых приложений.
Вот некоторые ключевые особенности и концепции ReactPHP:
Асинхронность: Основной принцип ReactPHP — это асинхронное выполнение кода. Вместо блокирования выполнения на операциях ввода-вывода, код может переключаться между задачами, ожидая выполнения операций ввода-вывода. Это позволяет эффективно обрабатывать множество соединений одновременно.
Event Loop: ReactPHP использует событийный цикл (event loop), который является центральной частью асинхронной архитектуры. Event loop отслеживает и обрабатывает различные события, такие как завершение операций ввода-вывода или таймеры.
Promise: Обещания (Promise) в ReactPHP представляют собой абстракцию для асинхронных операций. Они позволяют создавать цепочки асинхронных операций, которые будут выполнены после завершения предыдущей операции. Это сделано для более удобного и читаемого управления асинхронным кодом.
Компоненты: ReactPHP предоставляет различные компоненты и библиотеки для обработки конкретных задач. Например, React/Socket обеспечивает низкоуровневый доступ к сокетам, а React/Http предоставляет возможность создания веб-серверов.
Веб-сервер: ReactPHP можно использовать для создания высокопроизводительных веб-серверов. Это особенно полезно для обработки множества одновременных подключений, таких как веб-сокеты или длительные соединения.
#вопросы_с_собеседований
👍10❤2
Удаление неиспользуемых родителей с помощью Doctrine
Здесь рассматривается нестандартный случай в управлении базами данных, когда при удалении дочернего объекта (например, вложения) нужно также удалить родительский объект (например, пост или автора). Это отличается от обычной практики, когда при удалении родительского объекта удаляются все связанные дочерние объекты.
Здесь рассматривается нестандартный случай в управлении базами данных, когда при удалении дочернего объекта (например, вложения) нужно также удалить родительский объект (например, пост или автора). Это отличается от обычной практики, когда при удалении родительского объекта удаляются все связанные дочерние объекты.
DEV Community
Removing orphaned Parents with Doctrine
Previously, we considered a common real-life case where, to maintain referential integrity, we might...
👍3