Улучшенная «ленивая» загрузка
Автор делится своими размышлениями о процессе создания ORM для своего фреймворка Tempest, над которым он работает уже два года. Он объясняет, что его подход к проектированию ORM сосредоточен на создании удобного и интуитивного интерфейса для пользователей, уделяя особое внимание статическому анализу кода и минимизации ручной конфигурации.
В Tempest используются типизированные свойства, чтобы упростить работу с отношениями между моделями. Например, тип свойства Author сам по себе указывает на отношение «принадлежит», а аннотация /** @var Chapter[] $chapters */ обозначает отношение «имеет много». Модели в этом фреймворке не связаны напрямую с базой данных, что позволяет сохранять их в различных форматах, таких как JSON, Redis или XML.
Важной частью проекта стал механизм отложенной загрузки данных (lazy loading). По умолчанию ORM не загружает отношения при извлечении данных, чтобы избежать проблем с производительностью, таких как проблема n+1 запросов. Если попытаться обратиться к незагруженному отношению, система выдаст ошибку вместо того, чтобы автоматически выполнять дополнительные запросы, как это делает Laravel.
Рассказ о реализации отложенной загрузки в PHP переходит к магическому методу __get(), который, однако, не вызывается при доступе к неинициализированным типизированным свойствам. Для решения этой задачи был использован трюк: неинициализированные свойства удаляются с помощью unset, что заставляет PHP вызвать __get() при первом обращении к свойству.
Завершая, разработчик размышляет о том, как новая функциональность, предложенная в Lazy Objects для PHP 8.4, может значительно упростить реализацию подобных механизмов в будущем.
Автор делится своими размышлениями о процессе создания ORM для своего фреймворка Tempest, над которым он работает уже два года. Он объясняет, что его подход к проектированию ORM сосредоточен на создании удобного и интуитивного интерфейса для пользователей, уделяя особое внимание статическому анализу кода и минимизации ручной конфигурации.
В Tempest используются типизированные свойства, чтобы упростить работу с отношениями между моделями. Например, тип свойства Author сам по себе указывает на отношение «принадлежит», а аннотация /** @var Chapter[] $chapters */ обозначает отношение «имеет много». Модели в этом фреймворке не связаны напрямую с базой данных, что позволяет сохранять их в различных форматах, таких как JSON, Redis или XML.
Важной частью проекта стал механизм отложенной загрузки данных (lazy loading). По умолчанию ORM не загружает отношения при извлечении данных, чтобы избежать проблем с производительностью, таких как проблема n+1 запросов. Если попытаться обратиться к незагруженному отношению, система выдаст ошибку вместо того, чтобы автоматически выполнять дополнительные запросы, как это делает Laravel.
Рассказ о реализации отложенной загрузки в PHP переходит к магическому методу __get(), который, однако, не вызывается при доступе к неинициализированным типизированным свойствам. Для решения этой задачи был использован трюк: неинициализированные свойства удаляются с помощью unset, что заставляет PHP вызвать __get() при первом обращении к свойству.
Завершая, разработчик размышляет о том, как новая функциональность, предложенная в Lazy Objects для PHP 8.4, может значительно упростить реализацию подобных механизмов в будущем.
🥱5❤4👍1
Добавление Swagger UI в ваше приложение Laravel
Пакет Swagger UI для Laravel упрощает доступ к файлу Swagger (JSON или YAML OpenAPI v3) вашего проекта через интерфейс Swagger UI прямо в вашем приложении Laravel. Всё, что вам нужно сделать, это поместить файл OpenAPI в директорию resources/swagger/openapi.json (это можно настроить) и перейти по пути /swagger в локальной среде проекта.
Пакет Swagger UI для Laravel упрощает доступ к файлу Swagger (JSON или YAML OpenAPI v3) вашего проекта через интерфейс Swagger UI прямо в вашем приложении Laravel. Всё, что вам нужно сделать, это поместить файл OpenAPI в директорию resources/swagger/openapi.json (это можно настроить) и перейти по пути /swagger в локальной среде проекта.
Хабр
Добавление Swagger UI в ваше приложение Laravel
Здравствуйте! В этой статье мы расскажем, как интегрировать Swagger UI в ваше приложение Laravel, чтобы вы могли легко просматривать и взаимодействовать с вашим Swagger (OpenAPI v3) файлом прямо в...
👍8🥱5
Привет, друзья! 👋
Мы готовим статью о производительности труда программистов и хотим узнать ваше мнение. Поделитесь своими мыслями, ответив на следующие вопросы:
Согласны ли вы с утверждением, что программирование — это на 9/10 мышление и только на 1/10 набор кода? 🤔
- Полностью согласен 💯
- Скорее согласен 👍
- Затрудняюсь ответить 🤷
- Скорее не согласен 👎
- Совершенно не согласен 🚫
Сколько времени в среднем вам потребуется, чтобы восстановить код, написанный за один рабочий день? ⏱️
- Менее 30 минут
- 30-60 минут
- 1-2 часа
- 2-4 часа
- Более 4 часов
Какие факторы, по вашему мнению, наиболее сильно влияют на производительность программиста? (выберите до 3 вариантов) 🚀
- Качество рабочей среды и инструментов 🛠️
- Ясность поставленных задач и требований 📝
- Возможность сосредоточиться без отвлечений 🧘
- Эффективная коммуникация в команде 🗣️
- Постоянное обучение и развитие навыков 📚
- Мотивация и интерес к проекту 💪
- Опыт и экспертиза в конкретной области 🏆
- Другое (укажите в комментариях) 💡
Поделитесь своими мыслями и опытом в комментариях! Как вы оцениваете соотношение «мышления» и «кодинга» в своей работе? Какие методы вы используете для повышения эффективности мыслительного процесса?
Мы готовим статью о производительности труда программистов и хотим узнать ваше мнение. Поделитесь своими мыслями, ответив на следующие вопросы:
Согласны ли вы с утверждением, что программирование — это на 9/10 мышление и только на 1/10 набор кода? 🤔
- Полностью согласен 💯
- Скорее согласен 👍
- Затрудняюсь ответить 🤷
- Скорее не согласен 👎
- Совершенно не согласен 🚫
Сколько времени в среднем вам потребуется, чтобы восстановить код, написанный за один рабочий день? ⏱️
- Менее 30 минут
- 30-60 минут
- 1-2 часа
- 2-4 часа
- Более 4 часов
Какие факторы, по вашему мнению, наиболее сильно влияют на производительность программиста? (выберите до 3 вариантов) 🚀
- Качество рабочей среды и инструментов 🛠️
- Ясность поставленных задач и требований 📝
- Возможность сосредоточиться без отвлечений 🧘
- Эффективная коммуникация в команде 🗣️
- Постоянное обучение и развитие навыков 📚
- Мотивация и интерес к проекту 💪
- Опыт и экспертиза в конкретной области 🏆
- Другое (укажите в комментариях) 💡
Поделитесь своими мыслями и опытом в комментариях! Как вы оцениваете соотношение «мышления» и «кодинга» в своей работе? Какие методы вы используете для повышения эффективности мыслительного процесса?
💯28👍11❤1🔥1🌚1
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
👍2🥱1
«Почему я предпочитаю функции массивов циклам»
Здесь обсуждается преимущество использования функций для работы с массивами в PHP вместо циклов foreach. Автор объясняет, что такие функции, как array_map, array_filter, и array_reduce, выполняют определённые операции для каждого элемента массива и возвращают новое значение.
Основные тезисы:
🔸Четкость намерений:
Использование функций для работы с массивами позволяет ясно понять намерения кода. Например, array_filter означает фильтрацию массива, array_map — преобразование каждого элемента, сохраняя структуру, а array_reduce — преобразование массива в новую структуру.
🔸Всё происходит внутри функции:
В цикле foreach некоторые переменные могут находиться вне самого цикла, что может привести к путанице, особенно после рефакторинга. В функции же всё выполняется внутри неё, что делает код более компактным и понятным.
🔸Меньше шансов на побочные эффекты:
В PHP можно использовать замыкания (closures) с синтаксисом fn($parameters), что снижает вероятность побочных эффектов, так как переменные, изменённые внутри функции, не влияют на те, что находятся вне её.
Здесь обсуждается преимущество использования функций для работы с массивами в PHP вместо циклов foreach. Автор объясняет, что такие функции, как array_map, array_filter, и array_reduce, выполняют определённые операции для каждого элемента массива и возвращают новое значение.
Основные тезисы:
🔸Четкость намерений:
Использование функций для работы с массивами позволяет ясно понять намерения кода. Например, array_filter означает фильтрацию массива, array_map — преобразование каждого элемента, сохраняя структуру, а array_reduce — преобразование массива в новую структуру.
🔸Всё происходит внутри функции:
В цикле foreach некоторые переменные могут находиться вне самого цикла, что может привести к путанице, особенно после рефакторинга. В функции же всё выполняется внутри неё, что делает код более компактным и понятным.
🔸Меньше шансов на побочные эффекты:
В PHP можно использовать замыкания (closures) с синтаксисом fn($parameters), что снижает вероятность побочных эффектов, так как переменные, изменённые внутри функции, не влияют на те, что находятся вне её.
BackEndTea
Why I prefer array functions over loops | BackEndTea
Improve readability and reduce bugs by using array functions over loops
😁12👍9❤1🌚1
#дайджест новостей по PHP за неделю:
🔎Выпущен CakePHP 5.0.1-RC2 — Улучшения включают: Базовые классы CakePHP теперь совместимы с PHPUnit 11. Заменено внутреннее использование md5 на xxh128. Это повлияло на хэши, используемые для групповых префиксов в Cache + многое другое!
🔎Поддержка лог-файлов Laravel в PhpStorm
🔎Новый помощник для работы со строками, утверждение Enums в AssertableJson и многое другое в Laravel 11.20 — На этой неделе команда Laravel выпустила версию 11.20, в которую вошли новый метод коллекционирования, метод дедупликации строк, возможность использования Enums в AssertableJson и многое другое.
🔎PHP 8.4.0 Alpha 4 доступен для тестирования — Команда PHP рада сообщить о выходе второго тестового релиза PHP 8.4.0, Alpha 4. Это продолжение цикла выпуска PHP 8.4, примерный план которого указан в PHP Wiki.
🔎Неделя Symfony #919 (5-11 августа 2024 года)
🔎Выпущен CakePHP 5.0.1-RC2 — Улучшения включают: Базовые классы CakePHP теперь совместимы с PHPUnit 11. Заменено внутреннее использование md5 на xxh128. Это повлияло на хэши, используемые для групповых префиксов в Cache + многое другое!
🔎Поддержка лог-файлов Laravel в PhpStorm
🔎Новый помощник для работы со строками, утверждение Enums в AssertableJson и многое другое в Laravel 11.20 — На этой неделе команда Laravel выпустила версию 11.20, в которую вошли новый метод коллекционирования, метод дедупликации строк, возможность использования Enums в AssertableJson и многое другое.
🔎PHP 8.4.0 Alpha 4 доступен для тестирования — Команда PHP рада сообщить о выходе второго тестового релиза PHP 8.4.0, Alpha 4. Это продолжение цикла выпуска PHP 8.4, примерный план которого указан в PHP Wiki.
🔎Неделя Symfony #919 (5-11 августа 2024 года)
👍2🎉2
Как создать тест кейс в Laravel с помощью Pest
Эта статья объясняет, как написать тесты для Laravel-приложения с использованием тестового фреймворка Pest. В качестве примера рассматривается тестирование создания записи о работодателе (Employer), включая загрузку логотипа.
Эта статья объясняет, как написать тесты для Laravel-приложения с использованием тестового фреймворка Pest. В качестве примера рассматривается тестирование создания записи о работодателе (Employer), включая загрузку логотипа.
DEV Community
How to Create a Test Case in Laravel Using Pest
Testing your Laravel application is crucial to ensure that your code works as expected. Pest is a...
👍3🥱2
Класс содержит свойство, которое, в свою очередь, является объектом. Что будет содержать это свойство в клонированном объекте: ссылка на тот же дочерний объект или копию дочернего объекта? Что нужно сделать, чтобы это изменить?
При клонировании объекта, свойство, которое является объектом, будет содержать ссылку на тот же дочерний объект, а не его копию.
Чтобы изменить это поведение и создать копию дочернего объекта в клонированном объекте, необходимо определить метод __clone() для класса. В этом методе можно явно создать копию дочернего объекта и присвоить ее свойству клонируемого объекта.
Пример реализации на фото
#вопросы_с_собеседований
При клонировании объекта, свойство, которое является объектом, будет содержать ссылку на тот же дочерний объект, а не его копию.
Чтобы изменить это поведение и создать копию дочернего объекта в клонированном объекте, необходимо определить метод __clone() для класса. В этом методе можно явно создать копию дочернего объекта и присвоить ее свойству клонируемого объекта.
Пример реализации на фото
#вопросы_с_собеседований
👍14🥱5
От MySQL к Typesense: молниеносный полнотекстовый поиск в Laravel
Статья рассказывает о том, как реализовать поисковую функцию в приложениях на Laravel. Она начинается с основного подхода — использования операторов MySQL LIKE для поиска, и постепенно переходит к более сложным и эффективным методам, таким как полнотекстовый поиск и использование стороннего поискового движка Typesense.
Основные этапы:
Настройка проекта и заполнение базы данных: Создается базовая структура приложения Laravel, моделируется база данных с клиентами, и затем в неё заносятся два миллиона записей для тестирования производительности поиска.
Первый вариант поиска: использование LIKE-запросов: Рассматривается простой способ поиска с использованием оператора LIKE в MySQL. Этот метод эффективен для простых случаев, но имеет низкую производительность при большом объеме данных.
Оптимизация поиска: использование полнотекстовых индексов MySQL: Объясняется, как использовать полнотекстовый поиск для повышения производительности и точности поиска. Полнотекстовые индексы значительно ускоряют процесс поиска и позволяют находить более релевантные результаты.
Создание Livewire-компонента для поиска: Рассматривается создание пользовательского интерфейса для поиска с помощью Livewire — инструмента для создания интерактивных интерфейсов в Laravel. Компонент обновляет результаты поиска в режиме реального времени по мере ввода пользователем.
Ограничения полнотекстового поиска в MySQL: Обсуждаются ограничения полнотекстового поиска, такие как отсутствие поддержки опечаток и невозможность поиска по суффиксам и инфиксам.
Typesense: Мощный и быстрый поисковый движок с открытым исходным кодом: В качестве решения для сложных случаев поиска предлагается использование Typesense, который обеспечивает быстрый и точный поиск, а также решает проблемы, присущие MySQL.
Статья рассказывает о том, как реализовать поисковую функцию в приложениях на Laravel. Она начинается с основного подхода — использования операторов MySQL LIKE для поиска, и постепенно переходит к более сложным и эффективным методам, таким как полнотекстовый поиск и использование стороннего поискового движка Typesense.
Основные этапы:
Настройка проекта и заполнение базы данных: Создается базовая структура приложения Laravel, моделируется база данных с клиентами, и затем в неё заносятся два миллиона записей для тестирования производительности поиска.
Первый вариант поиска: использование LIKE-запросов: Рассматривается простой способ поиска с использованием оператора LIKE в MySQL. Этот метод эффективен для простых случаев, но имеет низкую производительность при большом объеме данных.
Оптимизация поиска: использование полнотекстовых индексов MySQL: Объясняется, как использовать полнотекстовый поиск для повышения производительности и точности поиска. Полнотекстовые индексы значительно ускоряют процесс поиска и позволяют находить более релевантные результаты.
Создание Livewire-компонента для поиска: Рассматривается создание пользовательского интерфейса для поиска с помощью Livewire — инструмента для создания интерактивных интерфейсов в Laravel. Компонент обновляет результаты поиска в режиме реального времени по мере ввода пользователем.
Ограничения полнотекстового поиска в MySQL: Обсуждаются ограничения полнотекстового поиска, такие как отсутствие поддержки опечаток и невозможность поиска по суффиксам и инфиксам.
Typesense: Мощный и быстрый поисковый движок с открытым исходным кодом: В качестве решения для сложных случаев поиска предлагается использование Typesense, который обеспечивает быстрый и точный поиск, а также решает проблемы, присущие MySQL.
👍6
Отладка PHP сценариев в Docker-контейнере с помощью PhpStorm и Xdebug. Глубокое погружение
Одним из ключевых аспектов успешной разработки является эффективная отладка кода.
Статья посвящена настройке и использованию PhpStorm, Xdebug и Docker для отладки PHP-скриптов в Docker-контейнере. Она предлагает актуальную информацию (на момент написания) и оформлена в виде подробнейшего пошагового туториала. Информация действительна для ОС Windows. В других ОС возможны варианты.
Одним из ключевых аспектов успешной разработки является эффективная отладка кода.
Статья посвящена настройке и использованию PhpStorm, Xdebug и Docker для отладки PHP-скриптов в Docker-контейнере. Она предлагает актуальную информацию (на момент написания) и оформлена в виде подробнейшего пошагового туториала. Информация действительна для ОС Windows. В других ОС возможны варианты.
Хабр
Отладка PHP сценариев в Docker-контейнере с помощью PhpStorm и Xdebug. Глубокое погружение
Содержание Вместо введения Что, опять? Как это работает? Создаём проект в PHPStorm Создаём контейнер Docker Добавляем расширение Xdebug Настраиваем Xdebug Что там в логах Xdebug? Настраиваем PhpStorm...
👍7❤2👾1
Удаление дублирующихся символов в строках
Если вам нужно удалить дубликаты строк в Laravel и PHP-приложениях, в Laravel v11.20 добавлен новый метод deduplicate в String helpers, который позволяет быстро и легко удалять дубликаты символов.
По умолчанию символом замены в методе deduplicate() является пробел, что также может быть использовано для помощника squish(), представленного в Laravel v9.7.0:
Обратите внимание на лишние пробелы ' ' в начале и в конце при использовании deduplicate(), это сделано специально. Deduplicate используется для замены последовательных экземпляров данного символа на один символ в данной строке. Squish также удаляет другие пробельные символы, такие как новые строки и табуляции:
Если вам нужно удалить дубликаты строк в Laravel и PHP-приложениях, в Laravel v11.20 добавлен новый метод deduplicate в String helpers, который позволяет быстро и легко удалять дубликаты символов.
use Illuminate\Support\{Str,Stringable};
$string = '/usr/local////path/to///desktop';
Str::deduplicate($string, '/');
// «/usr/local/path/to/desktop»
(new Stringable($string))->deduplicate('/')->toString();
// «/usr/local/path/to/desktop»
По умолчанию символом замены в методе deduplicate() является пробел, что также может быть использовано для помощника squish(), представленного в Laravel v9.7.0:
Str::deduplicate(' John Smith Jr. '); // « John Smith Jr. »
Str::squish(' John Smith Jr. '); // «John Smith Jr.»
Обратите внимание на лишние пробелы ' ' в начале и в конце при использовании deduplicate(), это сделано специально. Deduplicate используется для замены последовательных экземпляров данного символа на один символ в данной строке. Squish также удаляет другие пробельные символы, такие как новые строки и табуляции:
// Каждый пример возвращает `laravel php framework`:
Str::squish(' laravel php framework '));
Str::squish(«laravel\t\tphp\n\nframework»);
Str::squish('
laravel
php
framework
');
👍5👾1
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
BillaBear
Это отдельная система управления подписками и биллингом, интегрирующаяся со Stripe. Она предоставляет REST API, позволяющий легко интегрировать ее.
Это отдельная система управления подписками и биллингом, интегрирующаяся со Stripe. Она предоставляет REST API, позволяющий легко интегрировать ее.
GitHub
GitHub - billabear/billabear: Subscription Management and Billing System
Subscription Management and Billing System. Contribute to billabear/billabear development by creating an account on GitHub.
👍1
Приглашенный спикер: Павел Запольский – Senior Quantitative Researcher at Exness и Co-founder GrowLytics. Запустивший более 10 проектов по машинному обучению и анализу данных для ведущих компаний.
Please open Telegram to view this post
VIEW IN TELEGRAM
Расскажите про функции defined и get_defined_constants
defined():
Функция defined() используется для проверки существования константы с заданным именем. Она возвращает true, если константа существует, и false, если нет.
get_defined_constants():
Функция get_defined_constants() возвращает ассоциативный массив, содержащий все определенные константы в текущем скрипте. Этот массив имеет два уровня: глобальные константы и локальные (если они определены внутри функции).
#вопросы_с_собеседований
defined():
Функция defined() используется для проверки существования константы с заданным именем. Она возвращает true, если константа существует, и false, если нет.
get_defined_constants():
Функция get_defined_constants() возвращает ассоциативный массив, содержащий все определенные константы в текущем скрипте. Этот массив имеет два уровня: глобальные константы и локальные (если они определены внутри функции).
#вопросы_с_собеседований
🥱14👍2
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
ad.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты