Библиотека пхпшника | 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
Улучшенная «ленивая» загрузка

Автор делится своими размышлениями о процессе создания 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, может значительно упростить реализацию подобных механизмов в будущем.
🥱54👍1
Добавление Swagger UI в ваше приложение Laravel

Пакет Swagger UI для Laravel упрощает доступ к файлу Swagger (JSON или YAML OpenAPI v3) вашего проекта через интерфейс Swagger UI прямо в вашем приложении Laravel. Всё, что вам нужно сделать, это поместить файл OpenAPI в директорию resources/swagger/openapi.json (это можно настроить) и перейти по пути /swagger в локальной среде проекта.
👍8🥱5
Привет, друзья! 👋

Мы готовим статью о производительности труда программистов и хотим узнать ваше мнение. Поделитесь своими мыслями, ответив на следующие вопросы:

Согласны ли вы с утверждением, что программирование — это на 9/10 мышление и только на 1/10 набор кода? 🤔

- Полностью согласен 💯
- Скорее согласен 👍
- Затрудняюсь ответить 🤷
- Скорее не согласен 👎
- Совершенно не согласен 🚫

Сколько времени в среднем вам потребуется, чтобы восстановить код, написанный за один рабочий день? ⏱️

- Менее 30 минут
- 30-60 минут
- 1-2 часа
- 2-4 часа
- Более 4 часов

Какие факторы, по вашему мнению, наиболее сильно влияют на производительность программиста? (выберите до 3 вариантов) 🚀

- Качество рабочей среды и инструментов 🛠️
- Ясность поставленных задач и требований 📝
- Возможность сосредоточиться без отвлечений 🧘
- Эффективная коммуникация в команде 🗣️
- Постоянное обучение и развитие навыков 📚
- Мотивация и интерес к проекту 💪
- Опыт и экспертиза в конкретной области 🏆
- Другое (укажите в комментариях) 💡

Поделитесь своими мыслями и опытом в комментариях! Как вы оцениваете соотношение «мышления» и «кодинга» в своей работе? Какие методы вы используете для повышения эффективности мыслительного процесса?
💯28👍111🔥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 запрещена на территории РФ
👍2🥱1
«Почему я предпочитаю функции массивов циклам»

Здесь обсуждается преимущество использования функций для работы с массивами в PHP вместо циклов foreach. Автор объясняет, что такие функции, как array_map, array_filter, и array_reduce, выполняют определённые операции для каждого элемента массива и возвращают новое значение.

Основные тезисы:

🔸Четкость намерений:

Использование функций для работы с массивами позволяет ясно понять намерения кода. Например, array_filter означает фильтрацию массива, array_map — преобразование каждого элемента, сохраняя структуру, а array_reduce — преобразование массива в новую структуру.

🔸Всё происходит внутри функции:

В цикле foreach некоторые переменные могут находиться вне самого цикла, что может привести к путанице, особенно после рефакторинга. В функции же всё выполняется внутри неё, что делает код более компактным и понятным.

🔸Меньше шансов на побочные эффекты:

В PHP можно использовать замыкания (closures) с синтаксисом fn($parameters), что снижает вероятность побочных эффектов, так как переменные, изменённые внутри функции, не влияют на те, что находятся вне её.
😁12👍91🌚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 года)
👍2🎉2
Как создать тест кейс в Laravel с помощью Pest

Эта статья объясняет, как написать тесты для Laravel-приложения с использованием тестового фреймворка Pest. В качестве примера рассматривается тестирование создания записи о работодателе (Employer), включая загрузку логотипа.
👍3🥱2
💬Вы можете использовать правило проверки required_if_accepted, которое гарантирует, что проверяемое поле является обязательным, если другое поле принято (значение yes, on, 1 или true).
🔥4👍2😢1
Класс содержит свойство, которое, в свою очередь, является объектом. Что будет содержать это свойство в клонированном объекте: ссылка на тот же дочерний объект или копию дочернего объекта? Что нужно сделать, чтобы это изменить?

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

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

#вопросы_с_собеседований
👍14🥱5
От MySQL к Typesense: молниеносный полнотекстовый поиск в Laravel

Статья рассказывает о том, как реализовать поисковую функцию в приложениях на 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. В других ОС возможны варианты.
👍72👾1
Удаление дублирующихся символов в строках

Если вам нужно удалить дубликаты строк в 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, позволяющий легко интегрировать ее.
👍1
🤔 Как меняется математика в разных индустриях: от мобильных игр к фондовым рынкам

🗓 22 августа в прямом эфире разберем как математика применяется в разных отраслях бизнеса. И какие математические навыки необходимы для успешной работы в каждой из них.

Приглашенный спикер: Павел Запольский – Senior Quantitative Researcher at Exness и Co-founder GrowLytics. Запустивший более 10 проектов по машинному обучению и анализу данных для ведущих компаний.

😮 На вебинаре узнаете:

🔵 Математика в бизнесе: Чем отличаются разные сферы друг от друга. Почему стоит понимать специфику сферы
🔵 ML и продуктовое IT: Чем различается математическая сложность от индустрии к индустрии. Какие к ним необходимы уровни подготовки
🔵 Баевская математика в GameDev. Баевская математика как альтернатива AB тестированию. Как математические методы применяются в разработке игр
🔵 Finance: Что такое количественные финансы и математическое моделирование. Обсудим текущие индустриальные тренды в отрасли
🔵 Backtest: Как знания математики делают ваши активы более надежными
🔵 На практике подробно разберем два математических кейса по GameDev и Backtest.

➡️ Зарегистрироваться: https://proglib.io/w/0020721a
Please open Telegram to view this post
VIEW IN TELEGRAM
Расскажите про функции defined и get_defined_constants

defined():
Функция defined() используется для проверки существования константы с заданным именем. Она возвращает true, если константа существует, и false, если нет.

get_defined_constants():
Функция get_defined_constants() возвращает ассоциативный массив, содержащий все определенные константы в текущем скрипте. Этот массив имеет два уровня: глобальные константы и локальные (если они определены внутри функции).

#вопросы_с_собеседований
🥱14👍2
Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾