PHP Backend | YeaHub
224 subscribers
131 photos
7 videos
233 links
Теория, подготовка к интервью и курсы для PHP разработчиков

YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников.

Платформа: https://yeahub.ru

Для связи: @ruslan_kuyanets
Download Telegram
#полезное
🥰 MetaStorm — плагин, расширяющий PHPStorm

Этот плагин позволяет расширить поведение PhpStorm и добавить поддержку ваших собственных фреймворков с помощью нескольких строк в файле конфигурации. Он разблокирует ссылки и автодополнение в обычных местах, таких как method($object,), render() и т. д.
Официальный сайт

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#вакансии
👨‍💻 PHP Laravel-разработчик в 3ATECH

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

🚩Условия

🔵 Middle
🔵 От 2000 $
🔵 Удалённая работа

📩 Изучить вакансию
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как реализовать внедрение зависимостей (Dependency Injection) в PHP?

Внедрение зависимостей (DI) в PHP осуществляется путём передачи зависимостей (например,
объектов) в класс через его конструктор или методы. Это позволяет легко тестировать классы и
управлять их зависимостями, избегая жёсткой привязки. Современные фреймворки, такие как
Laravel и Symfony, используют контейнеры зависимостей для автоматического управления
внедрением.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 phpCacheAdmin v2

Это веб-админка на PHP для Redis, Memcached, APCu, OPCache и Realpath.

Проект предлагает минималистичный и быстрый доступ к данным, очистку кеша и мониторинг работы сервисов.

🟠 Простая установка без базы данных
🟠 Поддержка Docker
🟠 Гибкая конфигурация через config.php или ENV
Гитхаб

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
#полезное
👍 CodeViz

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

К тому же, можно задавать вопросы на естественном языке и получать наглядные диаграммы, связанные напрямую с кодом

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

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#советы
🤓 Быстрый совет

Нужно легко подсчитать уникальные значения столбца в модели Eloquent? Вот удобный способ сделать это.

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

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Какова цель использования интерфейсов в PHP?

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

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 648. Replace Words

В английском языке есть понятие "корень", за которым может следовать какое-то другое слово, чтобы образовать другое более длинное слово - назовем это слово производным. Например, если за корнем "help" следует слово "ful", мы можем образовать производное "helpful". Дайте словарь, состоящий из множества корней, и предложение, состоящее из слов, разделенных пробелами, замените все производные в предложении на образующий их корень. Если производное может быть заменено более чем одним корнем, замените его корнем, имеющим наименьшую длину. Верните предложение после замены.

Пример:
Input: dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery"
Output: "the cat was rat by the bat"


👨‍💻 Алгоритм:

1⃣Преобразуйте словарь корней в набор для быстрого поиска.

2⃣Пройдите по каждому слову в предложении и найдите самый короткий корень, который является префиксом этого слова.

3⃣Замените слово найденным корнем и соберите обновленное предложение.

😎 Решение:
function replaceWords($roots, $sentence) {
$rootSet = array_flip($roots);

$replace = function($word) use ($rootSet) {
for ($i = 1; $i <= strlen($word); $i++) {
if (isset($rootSet[substr($word, 0, $i)])) {
return substr($word, 0, $i);
}
}
return $word;
};

$words = explode(" ", $sentence);
$replacedWords = array_map($replace, $words);

return implode(" ", $replacedWords);
}


👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое трейты в РНР?

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

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
👨‍💻 Интерактивная игрушка SQL Murder Mystery

Это квест, где нужно раскрыть убийство в городе SQL City с помощью SQL-запросов. Начинаешь с обрывков улик и шаг за шагом собираешь доказательства, чтобы вычислить преступника.

Если вы новичок в SQL, не беда — для вас подготовлен специальный пошаговый гид. А для опытных сыщиков сразу доступны данные для расследования.

Короче, если хотите совместить приятное с полезным и прокачать свои SQL-скиллы в увлекательной форме Попробовать

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 PHP 8.4 поставляется с удобным классом для работы с числами с плавающей запятой, который предлагает:

🟠максимальную точность
🟠объектно-ориентированный подход
🟠неизменяемые объекты
🟠удобные цепочные операции

Этот класс является частью расширения BCMath, которое обычно включено по умолчанию

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 TwigStan — статический анализатор для Twig'а

Это статический анализатор для шаблонов Twig, основанный на PHPStan. Он предназначен для выявления ошибок в шаблонах Twig на этапе разработки, что способствует повышению качества и надежности кода. Инструмент компилирует шаблоны Twig в PHP-код, оптимизирует его для лучшего анализа и сообщает об ошибках, указывая исходный шаблон и номер строки, где возникла проблема.
Гитхаб

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как РНР обрабатывает отчёты об ошибках?

PHP обрабатывает ошибки с помощью функции error_reporting() , которая задаёт уровень отчётности, и директивы display_errors , контролирующей вывод ошибок. Для логирования ошибок используется log_errors . Для кастомной обработки ошибок можно использовать функции set_error_handler() и set_exception_handler() . В производственной среде рекомендуется отключать вывод ошибок и включать логирование.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#вакансии
👨‍💻 Junior php-разработчик

Удаленно (Москва)

Motivity 
— это HR-tech сервис с готовой методологией.

Требования
🟠 Ты хорошо понимаешь ООП;
🟠 У тебя есть понимание и практика применения SOLID;
🟠 Хорошее знание PHP 8.1+;
🟠 Хорошее знание Symfony 5.4+ (Forms, Validator, Security, DI, EventDispatcher, Messenger, Console, Serrialization, Cache, Doctrine, Twig).
Подробнее о вакансии

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
😊 Быстрый совет по Laravel: Ограничение скорости выполнения задач

Когда-нибудь приходилось ограничивать частоту выполнения задач?

Будь то защита API от перегрузки или ограничение количества задач для пользователей бесплатного тарифа, Laravel позволяет легко задавать лимиты и использовать их прямо из коробки

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
🥺 Секреты стройности монолита: подходы по снятию нагрузки с БД

Статья описывает, как команда Яндекс Еды оптимизировала свой монолитный PHP-сервис, снизив нагрузку на MySQL

Основные проблемы включали высокую загрузку CPU и памяти, сложность управления изменениями в структуре базы данных и срабатывание механизма Flow Control в Galera Cluster, что приводило к задержкам и сбоям в обслуживании запросов.

Для решения этих проблем команда распределила ответственность за таблицы между командами, анализировала медленные запросы с помощью утилиты pt-query-digest и внедрила различные оптимизации, включая использование кэширования и денормализацию данных

В результате удалось значительно снизить нагрузку на базу данных и улучшить производительность системы
Читать статью

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как описать паттерн Наблюдатель (Observer) ?

Паттерн Наблюдатель - это поведенческий паттерн проектирования, в котором объект (субъект) уведомляет другие объекты (наблюдатели) о изменении своего состояния. Это полезно для реализации систем обработки событий. В РНР паттерн Наблюдатель может быть реализован с помощью интерфейсов SplObserver и SplSubject из стандартной библиотеки.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😊 Общение с умными устройствами силами PHP

Каждый день мы сталкиваемся с более новыми и умными устройствами, управляемыми через интернет или Wi-Fi. Концепция IoT (Internet of Things) объединяет физические устройства в одну сеть для передачи данных и управления ими. И, оказывается, что интернет вещей — никакое не ограничение! Управлять устройствами в сети можно с помощью легковесного протокола MQTT.
Хабр

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 679. 24 Game

Дан массив целых чисел cards длиной 4. У вас есть четыре карты, каждая из которых содержит число в диапазоне от 1 до 9. Вам нужно расположить числа на этих картах в математическом выражении, используя операторы ['+', '-', '*', '/'] и скобки '(' и ')' так, чтобы получить значение 24.

Вы ограничены следующими правилами:

Оператор деления '/' представляет собой реальное деление, а не целочисленное деление.
Например, 4 / (1 - 2 / 3) = 4 / (1 / 3) = 12.
Каждая операция выполняется между двумя числами. В частности, мы не можем использовать '-' как унарный оператор.
Например, если cards = [1, 1, 1, 1], выражение "-1 - 1 - 1 - 1" не допускается.
Вы не можете объединять числа вместе.
Например, если cards = [1, 2, 1, 2], выражение "12 + 12" недопустимо.
Вернуть true, если вы можете получить такое выражение, которое оценивается в 24, и false в противном случае.

Пример:
Input: cards = [4,1,8,7]
Output: true
Explanation: (8-4) * (7-1) = 24


👨‍💻 Алгоритм:

1⃣Создайте функцию generatePossibleResults(a, b), которая возвращает массив результатов всех возможных математических операций над двумя числами.

2⃣ Создайте функцию checkIfResultReached(list), чтобы проверить, можем ли мы достичь результата 24, используя текущий массив list. Сначала проверьте базовые условия: если размер массива равен 1, верните true, если результат равен 24, иначе верните false.

3⃣Если размер массива больше 1, выберите любые два числа из списка, выполните все математические операции над ними, создайте новый список с обновленными элементами и снова вызовите рекурсивную функцию с этим новым списком. Если ни одна комбинация не приводит к результату 24, верните false. Вызовите checkIfResultReached с исходным списком карт.

😎 Решение:
class Solution {
function generatePossibleResults($a, $b) {
$res = [$a + $b, $a - $b, $b - $a, $a * $b];
if ($a != 0) $res[] = $b / $a;
if ($b != 0) $res[] = $a / $b;
return $res;
}

function checkIfResultReached($list) {
if (count($list) == 1) return abs($list[0] - 24) <= 0.1;

for ($i = 0; $i < count($list); $i++) {
for ($j = $i + 1; $j < count($list); $j++) {
$newList = [];
for ($k = 0; $k < count($list); $k++) {
if ($k != $i && $k != $j) $newList[] = $list[$k];
}
foreach ($this->generatePossibleResults($list[$i], $list[$j]) as $res) {
$newList[] = $res;
if ($this->checkIfResultReached($newList)) return true;
array_pop($newList);
}
}
}
return false;
}

function judgePoint24($cards) {
return $this->checkIfResultReached(array_map('floatval', $cards));
}
}


👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Общие табличные выражения (CTE) в MySQL позволяют писать более чистые и удобные для поддержки запросы, создавая временные именованные наборы результатов.

Вместо вложенных подзапросов CTE можно использовать во многих случаях

👉Новости 👉База вопросов
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как реализовать RESTful API в РНР?

RESTful API строится на основе НТТР-методов (GET, POST, PUT, DELETE) и позволяет управлять ресурсами с помощью URI. В PHP обработка запросов осуществляется через маршруты, где каждый маршрут привязан к определенному ресурсу и методу. Для обеспечения безопасности используются токены, а ответы обычно возвращаются в формате JSON.

👉Новости 👉Платформа
Please open Telegram to view this post
VIEW IN TELEGRAM