TGViewer
Channel Public Channel
PHP Backend | YeaHub

PHP Backend | YeaHub

@yeahub_php_backend

Теория, подготовка к интервью и курсы для PHP разработчиков

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

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

Для связи: @ruslan_kuyanets
Subscribers
376
Photos
296
Videos
10
Links
604

Showing posts older than #17 · Back to latest

Older Posts 14 shown
Post #16 57
#ЧеКак
🤔 Зачем придумали анонимные классы?

Анонимные классы (anonymous classes) были введены и предназначены для создания одноразовых объектов без необходимости явно именовать класс. Они обеспечивают более удобный и компактный способ определения классов, которые используются один или несколько раз.

🚩Основные плюсы

➕Упрощение кода и повышение читаемости
Позволяют создавать и использовать классы на месте, что уменьшает количество кода и делает его более читаемым, особенно в случае одноразового использования.
      $obj = new class {
public function sayHello() {
return "Hello, World!";
}
};

echo $obj->sayHello(); // Выведет "Hello, World!"


➕Инкапсуляция и локализация кода
Помогают инкапсулировать функциональность в пределах небольших участков кода, что делает их более локализованными и уменьшает риск конфликтов имен.
      function getLogger() {
return new class {
public function log($msg) {
echo $msg;
}
};
}

$logger = getLogger();
$logger->log("Logging message"); // Выведет "Logging message"


➕Быстрое создание прокси-объектов и заглушек
Могут использоваться для создания временных объектов, таких как прокси, заглушки для тестирования или объекты, реализующие интерфейсы для конкретного случая.
      interface Logger {
public function log($msg);
}

function getCustomLogger() {
return new class implements Logger {
public function log($msg) {
echo $msg;
}
};
}

$logger = getCustomLogger();
$logger->log("Custom log message"); // Выведет "Custom log message"


➕Облегчение тестирования
Упрощают создание тестовых экземпляров, особенно когда требуется создать объект для одного теста.
      $testObject = new class {
public function testMethod() {
return true;
}
};

// Использование testObject в тесте
assert($testObject->testMethod() === true);


🚩Практические примеры

🟠Замена одноразовых классов
Когда вам нужен класс, который используется только в одном месте, использование анонимного класса может быть более целесообразным, чем объявление именованного класса.
      $processor = new class {
public function process($data) {
return array_map('strtoupper', $data);
}
};

$data = ['apple', 'banana', 'cherry'];
$processedData = $processor->process($data);
print_r($processedData); // Выведет ['APPLE', 'BANANA', 'CHERRY']


🟠Создание адаптеров и декораторов на лету
Анонимные классы удобны для создания адаптеров и декораторов, которые изменяют или расширяют поведение объектов на месте.
      class SomeService {
public function execute() {
return "Executing service";
}
}

$service = new SomeService();

$decoratedService = new class($service) {
private $service;

public function __construct($service) {
$this->service = $service;
}

public function execute() {
return $this->service->execute() . " with added functionality";
}
};

echo $decoratedService->execute(); // Выведет "Executing service with added functionality"


👉Новости 👉Платформа
Post #15 57
#ЛитКод
🤔 Задача: 605. Can Place Flowers

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

Дан целочисленный массив flowerbed, содержащий 0 и 1, где 0 означает пустой участок, а 1 — занятый участок, и целое число n. Верните true, если n новых цветов можно посадить на клумбе, не нарушая правила о соседних цветах, и false в противном случае.

Пример:
Input: flowerbed = [1,0,0,0,1], n = 1
Output: true


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

1⃣Решение очень простое. Мы можем определить максимальное количество дополнительных цветов, count, которые можно посадить для данного расположения клумбы. Для этого мы проходим по всем элементам массива flowerbed и находим те элементы, которые равны 0 (означает пустую позицию).

2⃣Для каждого такого элемента проверяем, пусты ли обе его соседние позиции. Если да, мы можем посадить цветок в текущей позиции, не нарушая правило соседних цветов. Для первого и последнего элементов не нужно проверять предыдущие и следующие соседние позиции соответственно.

3⃣Если полученное количество count больше или равно n, требуемому количеству цветов для посадки, мы можем посадить n цветов на пустые места, иначе - нет.

😊 Решение:
class Solution {
function canPlaceFlowers($flowerbed, $n) {
$count = 0;
for ($i = 0; $i < count($flowerbed); $i++) {
if ($flowerbed[$i] == 0) {
$emptyLeft = $i == 0 || $flowerbed[$i - 1] == 0;
$emptyRight = $i == count($flowerbed) - 1 || $flowerbed[$i + 1] == 0;
if ($emptyLeft && $emptyRight) {
$flowerbed[$i] = 1;
$count++;
}
}
}
return $count >= $n;
}
}


👉Новости 👉Платформа
Post #13 78
#ЧеКак
🤔 Что такое инкремент и декремент?

Инкремент — это увеличение значения переменной на единицу, а декремент — уменьшение на единицу. В программировании они часто реализуются с помощью операторов ++ и --. Эти операции упрощают работу с циклами и счетчиками.

👉Новости 👉Платформа
Post #11 68
#Вакансии
👨‍💻 Middle/senior symfony developer (PHP)

Компании Интелико Системс, разрабатывающей интернет-ориентированное программное обеспечение, требуется PHP разработчик

Что и как?

▪️ Middle / Senior
▪️ От 2000 $ net
▪️ Офис (Минск)

📩 Изучить вакансию
hh.ru Вакансия Middle/senior symfony developer (PHP) в Минске, работа в компании Интелико Системс (вакансия в архиве c 23 января 2025) Зарплата: от 2000 $ за месяц. Минск. Требуемый опыт: 3–6 лет. Полная. Дата публикации: 24.12.2024.
Post #10 53
#ЧеКак
🤓 Разница между pull и fetch?

git pull выполняет fetch (загружает изменения из удалённого репозитория) и автоматически сливает их с локальной веткой. git fetch только загружает изменения, не изменяя локальные файлы, что позволяет вручную контролировать слияние.

👉Новости 👉Платформа
Post #9 65
#ЧеКак
🤔 Что такое рекурсия?

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

🚩Основные аспекты рекурсии

🟠Базовый случай (условие выхода)
Каждый рекурсивный алгоритм должен иметь базовый случай, который останавливает рекурсивные вызовы. Это условие, при котором дальнейшие рекурсивные вызовы не нужны.

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

def factorial(n):
if n == 0:
return 1 # Базовый случай
else:
return n * factorial(n-1) # Рекурсивный случай

print(factorial(5)) # Выведет 120


🚩Плюсы

➕Простота и ясность
Рекурсивные решения могут быть проще и понятнее, чем их итеративные аналоги, особенно для задач, которые естественно определяются рекурсивно (например, обход деревьев, вычисление факториалов, задачи, связанные с последовательностями).➕Элегантность
Код может быть более элегантным и легко читаемым.

🚩Минусы

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

🚩Оптимизация рекурсии

🟠Мемоизация
Это техника оптимизации, при которой результаты дорогостоящих вызовов функций запоминаются и повторно используются при последующих вызовах с теми же аргументами. Пример:
def fibonacci(n, memo={}):
if n in memo:
return memo[n]
if n <= 1:
return n
memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)
return memo[n]

print(fibonacci(10)) # Выведет 55


🟠Хвостовая рекурсия
Это особый вид рекурсии, при котором рекурсивный вызов является последней операцией в функции. Многие компиляторы и интерпретаторы могут оптимизировать хвостовую рекурсию, избегая увеличения стека вызовов. Пример:
def factorial_tail_recursive(n, accumulator=1):
if n == 0:
return accumulator
else:
return factorial_tail_recursive(n-1, n * accumulator)

print(factorial_tail_recursive(5)) # Выведет 120


👉Новости 👉Платформа
Post #8 60
#ЧеКак
🤔 Что такое инкапсуляция?

Это принцип ООП, при котором детали реализации скрыты от внешнего мира, предоставляя доступ к данным через методы. В PHP это реализуется с помощью модификаторов доступа (private, protected, public). Она обеспечивает безопасность данных и облегчает поддержку кода.

👉 Новости 👉 Платформа
Post #6 70
#ЧеКак
🤔 Какой командой можно отменить kmid?

Команда kmid (Kinematic Motion In-Dispenser) не является общепринятой командой или термином в большинстве систем. В зависимости от контекста, возможно, речь идёт о специфической команде или понятии, используемом в рамках определённой системы или программного обеспечения.
Если у вас есть более точное определение или контекст, связанный с kmid, это поможет дать более точный ответ.


🚩Прерывание команд в Unix-подобных системах

🟠Прерывание текущего процесса
Ctrl + C: Останавливает выполнение текущей команды в терминале.

🟠Управление процессами
kill: Завершает процесс по его идентификатору (PID).
kill <PID>        


killall: Завершает все процессы с указанным именем.
killall <process_name>        


🟠Отмена последней команды
В оболочке bash сочетание клавиш Ctrl + Z приостанавливает текущий процесс и переводит его в фоновый режим. Если потребуется, можно использовать команду kill для завершения этого процесса.

🚩Пример использования команд в Unix-подобных системах

Чтобы узнать PID процесса, можно использовать команду ps или pgrep
pgrep process_name
ps aux | grep process_name


После нахождения PID процесса, его можно завершить
kill 1234    


Чтобы завершить все процессы с именем example_process
killall example_process


👉Новости 👉Платформа
Post #5 79
#вакансии
👨🏻‍💻 Senior PHP developer (Telecom)

REDSMS — компания, разрабатывающая сервис отправки сообщений через разные каналы, приглашает PHP разработчика

Что и как?

▪️ От 450 000 ₽
▪️ График 5/2
▪️ Опыт от 3 до 6 лет
▪️ Удалёнка (РФ) / Гибрид (Москва)

📩 Изучить вакансию
hh.ru Вакансия Senior PHP developer (Telecom) в Москве, работа в компании РЕДСМС Зарплата: от 450000 ₽ за месяц. Москва. Требуемый опыт: 3–6 лет. Полная. Дата публикации: 02.02.2025.
Post #4
PHP Backend | YeaHub pinned «🤝 Добро пожаловать в экосистему YeaHub! YeaHub — это платформа для IT-специалистов, объединяющая обучение, карьерный рост, развитие и сообщество единомышленников. Подпишитесь на наши каналы, чтобы не пропустить: 👩‍💻 C# 🤖 ML Engineer 👩‍💻…»
Post #3 107
🤝 Добро пожаловать в экосистему YeaHub!

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

👩‍💻 C# 🤖 ML Engineer

👩‍💻 C/C++ 🖥 Data Science

👩‍💻 Java 👩‍💻 Python

🖥 PHP 👩‍💻 Frontend

👣 Rust 👣 Golang

🖥 Ruby 👩‍💻 Node.js

👩‍💻 QA 👩‍💻 Android

👩‍💻 iOS 👩‍💻 Game Dev

💻 DevOps 🖥 Общее IT

📆 Митапы 👨‍💻 Вакансии

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

💬 YeaHub Community: Общение, обмен опытом и поддержка единомышленников

В наших каналах вы найдете:
🔹 Вакансии и карьерные рекомендации
🔹 Мероприятия и митапы
🔹 Вопросы и задачи с собеседований
🔹 Практику, теорию, курсы и полезные советы

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


👍 Обучайтесь, общайтесь, растите вместе с https://yeahub.ru
  • ❤ 1
Post #1
Channel created
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →