Библиотека пхпшника | 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
Основные плагины для пользователей PHPStorm

Это обзор нескольких полезных плагинов для PhpStorm:

1️⃣Nord Theme: Этот плагин предлагает стильную тему оформления для PhpStorm, созданную на основе палитры Nord, которая представляет собой арктические синие оттенки, обеспечивающие чистый и элегантный внешний вид редактора.

2️⃣Laravel Idea: Этот премиум-плагин предоставляет ряд продуктивных функций для разработки Laravel-приложений в PhpStorm, включая автозаполнение маршрутов, поддержку моделей Eloquent, подсказки для правил валидации и генерацию кода.

3️⃣.env Files Support: Плагин обеспечивает поддержку файлов .env, позволяя автозаполнять переменные окружения и легко перемещаться между их использованием в коде и объявлением в файле .env.

4️⃣EditorConfig: Этот плагин помогает обеспечить согласованный стиль кода для разработчиков, работающих над одним проектом, поддерживая конфигурацию кодирования через файл .editorconfig.

5️⃣Collector — A Collection Plugin: Плагин добавляет поддержку коллекций Laravel и предоставляет ряд удобных рефакторингов для улучшения работы с ними.

6️⃣Codeium: AI Autocomplete and Chat: Этот бесплатный плагин предлагает функцию автозаполнения кода с использованием искусственного интеллекта и доступен для различных редакторов, включая PhpStorm.

7️⃣IntelliVue: Данный плагин обеспечивает поддержку Vue.js Single File Components в PhpStorm, добавляя дополнительную функциональность и удобные инструменты для работы с ними.
🥱13👍31
Подмена функций стандартной библиотеки PHP с помощью xepozz/internal-mocker

Здесь описывается проблема подмены функций в PHP, которые уже загружены до момента подгрузки Composer Autoloader или других объявлений функций. Эта проблема встает, когда необходимо подменить функцию, которая уже существует в стандартной библиотеке PHP, но переопределить её нельзя из-за ошибки о том, что функция уже существует.

Для решения этой проблемы автор предлагает использовать библиотеку xepozz/internal-mocker, которая позволяет подменять функции на лету. Библиотека позволяет создать свою собственную функцию, которая будет эмулировать стандартную функцию, например, time(), и при этом сохранять её функциональность. Таким образом, можно подменять функции для тестирования или других целей.
🔥5👾4🥱1
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Создание PHP SDK для Replicate AI

Здесь описывается процесс создания SDK (набора инструментов разработки программного обеспечения) на PHP для работы с API Replicate AI. Автор начинает с объяснения, что такое SDK и зачем оно нужно, а затем переходит к анализу документации API Replicate и определению ресурсов, с которыми нужно работать: Models (модели), Versions (версии) и Predictions (предсказания). Далее автор предлагает структуру SDK и предлагает реализацию основного класса «Client» и ресурса «Model». Он подчеркивает важность использования хорошего опыта разработчика при создании SDK и приводит примеры вызовов методов API через SDK. Кроме того, обсуждаются вопросы аутентификации и обработки ошибок. Автор заключает статью обещанием опубликовать репозиторий SDK на GitHub после его завершения и тестирования.
1
🗺️ Где составить дорожную карту: ТОП-10 сервисов

Сервисы, которые подойдут для составления карьерной карты и не только.

Читать статью

#гайд
🥱32
🧨 Из грязи в князи: вкатился с нуля в IT за границей

Мы ищем тех, кто начинал карьеру в IT за границей без опыта и специальной подготовки. Хотим услышать ваши истории успеха и препятствий, с которыми вы столкнулись.

‼️ Если вы готовы рассказать свою историю — напишите нам на [email protected]
🥱8👍3
Laravel Setting Pro

Пакет Laravel Setting Pro упрощает управление настройками приложения в Laravel и предоставляет эти ключевые функции:

Гибкое хранилище: выберите между файловым хранилищем или БД в соответствии с потребностями вашего приложения.

Гибкая база данных: выберите между MySQL или MongoDB или создайте собственное соединение DB для настройки.

Кэширование: повышение производительности с помощью автоматического кэширования настроек. Вы можете выбрать между файлом или redis или создать собственный драйвер кэша.

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

Триггеры события: ответ на настройку изменений в режиме реального времени, используя события Laravel.

Глобальная вспомогательная функция и фасад: доступ и манипуляция настройками в любом месте вашего приложения Laravel с простой функцией настройки или настройкой фасада (даже в файлах конфигурации).

И многое другое!

Этот пакет предназначен для разработчиков, которые ищут эффективный и интуитивно понятный способ обработки настроек приложения. Он предлагает необходимые инструменты, сохраняя при этом процесс простым и обслуживаемым.
🥱6👍41🌚1
Куда делась 6 версия PHP?

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

11 марта 2010 команда разработчиков приняла решение об отмене выпуска PHP 6 в текущем его виде. В результате транк с PHP 6 был перенесён в бранч, а в транке образовалась новая версия — 5.4, в которую разработчики перенесли все наработки из PHP 6, кроме юникода.

#вопросы_с_собеседований
👍8
🕹️ Композиция против Наследования:

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

🔧 Принцип Одной Ответственности (SRP):

В статье подчеркивается важность SRP в создании меньших, поддерживаемых единиц кода.
Утверждается, что разделение кода не должно зависеть исключительно от композиции, а скорее от соблюдения SRP, что делает код более переиспользуемым и поддерживаемым.

💉 Внедрение Зависимостей:

Вместо использования наследования для переиспользования кода предлагается использовать внедрение зависимостей и композицию.
Используя композицию, разработчики могут сократить влияние изменений и избежать Проблемы Хрупкого Базового Класса.

🌟 Принципы SOLID:

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

👀 Взгляд на Наследование:

Хотя здесь советуют предпочитать композицию перед наследованием по причинам, упомянутым выше, она также признает, что не все наследование плохо.
Разработчики должны учитывать, когда наследование может быть уместным, и предоставляет точку зрения Матиаса Верраса на определение эвристик для его использования.
👍31
Обработка одного миллиарда строк в PHP

Здесь описывается опыт оптимизации обработки большого объема данных в PHP. Автор начинает с наивной реализации, используя функцию fgetcsv(), и постепенно оптимизирует код, улучшая производительность на каждом этапе.

Далее описывается использование инструментов профилирования для выявления узких мест в коде и принимается решение о замене fgetcsv() на более простые функции, такие как fgets() и ручное разделение строк. Далее автор применяет оптимизации, такие как использование ссылок, использование явных типов данных и включение JIT (just-in-time компиляции) через расширение OPCache. Каждая оптимизация приводит к улучшению производительности.

Затем автор рассматривает многопоточное программирование в PHP с использованием расширения parallel. Он разбивает обработку данных на несколько потоков для параллельной обработки, что приводит к дальнейшему значительному улучшению производительности.
👏12👍5🎉21
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
👍2
9 Правил написания лучшего кода

Здесь описаны девять правил, известных как «Calisthenics Object». Эти правила направлены на улучшение качества кода, его читаемости и поддерживаемости, предоставляя рекомендации по написанию более чистого и эффективного кода:

Только один уровень вложенности в методе: Это правило предлагает ограничивать глубину вложенности в методах для улучшения читаемости. Рекомендуется использовать техники, такие как выделение вложенного кода в отдельные методы или фильтрация данных перед циклом.

Не использовать ключевое слово else: Это правило поощряет использование ранних возвратов или инициализации заранее, чтобы избежать вложенных структур кода и улучшить ясность.

Оборачивать все примитивные типы в объекты: Инкапсуляция примитивных типов в объектах полезна для валидации, явного указания типа и инкапсуляции логики обработки. Это правило поощряет создание объектов для примитивных типов.

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

Только один -> в строке (за исключением Fluent interface): Это правило поощряет соблюдение Закона Деметры, ограничивая цепочку методов одним уровнем на строку для улучшения читаемости кода.

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

Сохранять все сущности небольшими: Ограничение размера классов, методов и пространств имен помогает в поддержании чистых и управляемых кодов.

В классах не должно быть более пяти переменных экземпляра: Ограничение числа переменных экземпляра на класс уменьшает зависимости и облегчает тестирование и поддержку классов.

Без геттеров/сеттеров: Предпочтительно инкапсулировать действия вместо прямого доступа к свойствам объекта, поощряя принцип «Говори, не спрашивай».

Эти правила направлены на то, чтобы направить разработчиков на написание более чистого, более поддерживаемого кода, подчеркивая принципы, такие как инкапсуляция, читаемость и уменьшение сложности. Применение этих правил может привести к улучшению кодовых баз, которые легче понимать, тестировать и поддерживать со временем.
👍15🌚3
⚡️Итоги недели в мире ИИ и обзоры новых сервисов

У нас вышла очередная статья на 📰 по мотивам еженедельной рассылки про последние новости и тенденции в мире ИИ.

Ниже — небольшая выдержка из статьи, а целиком читайте здесь 👈

💬Новости

▫️ Создан новый тест для ИИ — WMDP (Weapons of Mass Destruction Proxy), который будет проверять модели на знание:
- способов создания и применения всех видов оружия массового поражения;
- методов взлома систем кибербезопасности.
▫️Глава OpenAI Сэм Альтман обнародовал переписку с Илоном Маском, в которой последний указывает на то, что ожидает от OpenAI прибыли. Это противоречит недавним заявлениям Маска.

🛠 Инструменты

▫️Corgea — находит и автоматически исправляет уязвимости в коде.
▫️GenWebBilder — делает полнофункциональные веб-сайты по скетчам и скриншотам.
▫️Framedrop AI — автоматически конвертирует длинные видео, влоги и стримы в рилсы и короткие клипы для X и TikTok.
▫️Vocalo AI — личный репетитор, который научит свободно говорить по-английски.

👍 Робототехника

Профессор Кен Голдберг из Университета Беркли поделился соображениями по поводу технических, этических и экономических проблем, которые препятствуют широкому внедрению ИИ-роботов на данном этапе.

➡️ Вы можете подписаться на email-рассылку здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏2👾21👍1🌚1
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

#️⃣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-разработчиков

👾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++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
2👍1🔥1🥰1😁1
Retry-механизмы в Laravel

Здесь рассматривается важность и применение механизмов повторных попыток (Retry) в программировании на примере использования Laravel. В повседневной жизни мы применяем метод повторных попыток при столкновении с неудачами, и эта концепция также имеет большое значение в разработке программного обеспечения для создания надежных систем.

Первоначально объясняется понятие «транзитивной неудачи» — это временные сбои, которые могут быть вызваны недоступностью сервиса, сетевыми проблемами, тайм-аутами и т. д. Такие сбои часто можно исправить простым повторным выполнением операции.

Затем приводится пример «постоянной неудачи», которая остается неизменной независимо от количества повторных попыток, и которая связана с ошибками в бизнес-логике, багами в коде и т. д.

Механизмы повторных попыток предоставлены в Laravel в нескольких контекстах:

1️⃣Повтор в транзакциях базы данных: Обсуждается возможность повтора транзакций в Laravel в случае возникновения дедлоков при выполнении операций с базой данных.

2️⃣Повтор при вызове HTTP: Рассматривается использование HTTP-клиента Laravel для автоматического повтора запросов к сторонним API в случае неудачи.

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

4️⃣Повтор выполнения неудачных задач: Рассматривается методика повторного выполнения неудачных задач после их исправления.

5️⃣Повтор в режиме обслуживания: Описывается использование опции повтора при переводе приложения в режим обслуживания.

6️⃣Помощник retry: Приводится пример использования встроенного метода retry Laravel для повтора выполнения произвольного кода.
👍61
Паттерн Aggregate Outside

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

Приведен пример вымышленного кейса, связанного с сервисом обмена валют. В этом кейсе агрегат представляет заявку на обмен валюты (Bid), и для выполнения его бизнес-правил требуются данные, находящиеся вне агрегата. Рассмотрены следующие бизнес-правила:

🟠Пользователь не может обменять более 1000 долларов в сутки.
🟠Если сумма обмена менее 100 долларов, курс берется из банка A, иначе из банка Б.
🟠Лимит и минимальная сумма могут изменяться в зависимости от дня недели.

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

🔴Агрегат имеет несколько внешних зависимостей, что увеличивает его сложность.
🔴Изменения в интерфейсах этих зависимостей могут потребовать изменений внутренней логики агрегата.
🔴Для тестирования агрегата необходимо создавать моки для всех зависимостей и фикстуры для всех данных, которые они возвращают.

Поэтому предлагается альтернативный подход, основанный на понятии «внешнего интерфейса» (outside interface). Вместо внедрения всех зависимостей напрямую в агрегат, они внедряются в отдельный враппер, который предоставляет данные в формате, удобном для агрегата. Это упрощает код агрегата и уменьшает его зависимость от внешних сервисов. Кроме того, разработку можно разделить на этапы: сначала реализуется бизнес-логика, затем подключается агрегат к инфраструктуре через внешний интерфейс, и в конце реализуется инфраструктура.

Такой подход позволяет разделить доменную логику от инфраструктурных аспектов, уменьшить зависимости агрегата и упростить его тестирование.
👍71
При использовании конструкторов в Artisan-командах, каждый раз при вызове любой команды через php artisan, происходит конструирование экземпляра каждой команды, что приводит к автоматическому разрешению зависимостей через сервис-контейнер. Это может быть неожиданным и иметь нежелательные последствия, особенно в крупных проектах с большим количеством команд.

Поэтому здесь предлагается альтернативный подход: использование метода handle() для внедрения зависимостей. Этот метод вызывается только при выполнении самой команды и поддерживает внедрение зависимостей. Хотя это требует возвращения к более традиционному способу объявления свойств и приводит к некоторым утратам, автор считает, что важнее всего поддерживать команды Artisan легкими и быстрыми.
👍8🥱6