PHP | Вопросы собесов – Telegram
PHP | Вопросы собесов
2.44K subscribers
30 photos
1.08K links
Download Telegram
🤔 Что такое CQRS?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🤔 Для чего предназначены форматы запросов и ответов приложения?

Форматы запросов и ответов в приложении предназначены для стандартизированного обмена данными между клиентом (браузером, мобильным приложением) и сервером (PHP-приложением). Они позволяют:

Обеспечить совместимость между разными системами
Облегчить обработку данных на сервере и клиенте
Структурировать данные в удобном формате

🚩Форматы запросов (Request Formats)

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

🟠GET – передача данных через URL
Используется для получения информации. Данные передаются в строке запроса.
GET /api/users?id=10


Пример обработки в PHP
$id = $_GET['id']; // Получаем id из URL


🟠POST – передача данных в теле запроса
Используется для отправки данных (например, формы).
POST /api/users
Content-Type: application/json

{
"name": "Иван",
"email": "ivan@example.com"
}


Пример обработки в PHP
$data = json_decode(file_get_contents("php://input"), true);
echo "Имя: " . $data['name'];


🟠PUT, PATCH, DELETE – для обновления и удаления данных
Используются в REST API для изменения или удаления данных.

🚩Форматы ответов (Response Formats)

Сервер отправляет ответ в определённом формате, который клиент сможет распознать.

🟠JSON – самый популярный формат
Используется в API и веб-приложениях.
{
"status": "success",
"message": "Данные получены"
}


Пример ответа в PHP
header("Content-Type: application/json");
echo json_encode(["status" => "success", "message" => "Данные получены"]);


🟠XML – используется в старых системах
Пример XML-ответа
<response>
<status>success</status>
<message>Данные получены</message>
</response>


🟠HTML – если сервер возвращает веб-страницу
Например, при загрузке сайта.
echo "<h1>Привет, мир!</h1>";


🟠Текстовый формат (Plain Text)
Если нужен простой текст
header("Content-Type: text/plain");
echo "Привет, это просто текст!";


🚩Как сервер определяет формат ответа?
Сервер анализирует заголовок Accept в запросе:
Accept: application/json


PHP может обработать это так:
$accept = $_SERVER['HTTP_ACCEPT'];
if (strpos($accept, "application/json") !== false) {
header("Content-Type: application/json");
echo json_encode(["message" => "Привет, JSON!"]);
} else {
echo "Привет, обычный текст!";
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какие структуры данных в программировании существуют?

Основные структуры:
- Линейные: массивы, списки, очереди, стеки.
- Нелинейные: деревья, графы.
- Ассоциативные: хеш-таблицы, словари.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое Docker?

Это платформа для разработки, доставки и запуска приложений в изолированных контейнерах. Она позволяет упаковывать приложения и все их зависимости в контейнеры, которые могут работать на любой системе, поддерживающей Docker, что делает приложения более переносимыми и независимыми от окружения.

🚩Основные концепции

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

🟠Образы (Images)
Образ Docker — это неизменяемый шаблон, из которого создаются контейнеры. Образы могут базироваться на других образах и содержат все необходимое для запуска приложения. Например, образ может содержать операционную систему, веб-сервер и само приложение.

🟠Dockerfile
Dockerfile — это текстовый файл с инструкциями по созданию Docker-образа. Он содержит последовательность команд, которые Docker выполняет для сборки образа.
          # Используем базовый образ
FROM php:8.0-apache

# Копируем локальные файлы в контейнер
COPY src/ /var/www/html/

# Устанавливаем зависимости
RUN docker-php-ext-install mysqli


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

🚩Плюсы

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

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

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

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Принципы ООП

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как устроен типичный тест на opening point?

Тест на Opening Point (OP-тест) используется для проверки скорости, с которой игрок или программа находят критически важное первое решение в задаче. Такой тест чаще всего применяется в шахматах, игровых стратегиях, а также в программировании при оценке эвристик.

🚩Как устроен тест на Opening Point?

🟠Задаётся начальная позиция или состояние
Например, шахматная позиция, игровая ситуация или входные данные для алгоритма.

🟠Требуется найти оптимальный (или хороший) первый шаг
В шахматах это может быть лучший ход. В алгоритмах — первое удачное разбиение задачи.

🟠Замеряется время и корректность ответа
Важно, насколько быстро испытуемый (или программа) нашёл первый ход. Проверяется, соответствует ли он эталону (оптимальному решению).

🚩Пример из шахмат

В шахматах Opening Point тест оценивает, насколько быстро игрок или движок могут найти правильный ход в дебюте. Например:
> Позиция:
> 1. e4 e5
> 2. Nf3 Nc6
> 3. Bb5 a6
> 4. ?
Ожидаемый ход: Ba4 (Испанская партия).
Программа должна как можно быстрее выбрать этот ход, а тест фиксирует время поиска.

🚩Пример из программирования

Допустим, у нас есть массив чисел, и нужно быстро найти первый элемент, который удовлетворяет определённому условию.
function findOpeningPoint($arr, $condition) {
foreach ($arr as $item) {
if ($condition($item)) {
return $item;
}
}
return null; // Если не найдено
}

$array = [1, 3, 7, 10, 15];
$condition = fn($x) => $x > 5;

echo findOpeningPoint($array, $condition); // Выведет 7


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В чем заключается обработка ошибок и исключений?

Это механизм выявления и реагирования на непредвиденные ситуации в коде.
- Ошибки (Errors) – критические сбои (OutOfMemoryError, StackOverflowError).
- Исключения (Exceptions) – проблемы в логике (NullPointerException, IOException).
Обрабатываются с помощью try-catch-finally, throw, throws, а также глобальных обработчиков (onError, fallback strategies).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Структуры данных в программировании какие знаешь?

Структуры данных — это способы хранения и организации данных в памяти компьютера. Они помогают эффективно управлять данными и выбирать оптимальные алгоритмы.

🚩Основные структуры данных

🟠Массив (Array)
Упорядоченная коллекция элементов, доступ к которым осуществляется по индексу. Когда нужно быстро получать элементы по индексу.
Доступ: O(1)
Поиск: O(n)
Вставка/Удаление: O(n) (из-за необходимости сдвига элементов)
$numbers = [10, 20, 30, 40]; 
echo $numbers[2]; // 30


🟠Связанный список (Linked List)
Элементы (узлы) хранят ссылку на следующий (а иногда и на предыдущий) элемент.
Когда часто вставляете/удаляете элементы (без затрат на сдвиг).
Доступ: O(n)
Вставка/Удаление: O(1) (если известен указатель)
class Node {
public int $data;
public ?Node $next;

public function __construct(int $data) {
$this->data = $data;
$this->next = null;
}
}


🟠Стек (Stack)
Структура LIFO (Last In, First Out). Элементы добавляются и удаляются только с одного конца.
Для обратного прохода, отмены операций, рекурсии.
Вставка/Удаление: O(1)
Доступ: O(n)
$stack = new SplStack();
$stack->push(1);
$stack->push(2);
echo $stack->pop(); // 2 (удаляется последний добавленный)


🟠Очередь (Queue)
Структура FIFO (First In, First Out). Первым зашёл – первым вышел.
Когда элементы должны обрабатываться по порядку (например, задачи в принтере).
Вставка/Удаление: O(1)
$queue = new SplQueue();
$queue->enqueue(1);
$queue->enqueue(2);
echo $queue->dequeue(); // 1 (удаляется первый добавленный)


🟠Хэш-таблица (Hash Table) / Ассоциативный массив
Хранит пары ключ → значение, обеспечивает быстрый доступ по ключу.
Когда нужен быстрый поиск и хранение пар ключ-значение.
Доступ/Поиск: O(1)
$hashTable = [
"name" => "Alice",
"age" => 25
];

echo $hashTable["name"]; // Alice


🟠Дерево (Tree)
Иерархическая структура, где каждый узел может иметь несколько дочерних.
Когда важны иерархии (например, файловые системы, база данных).
Виды
Двоичное дерево (Binary Tree) – у каждого узла до 2 детей.
Двоичное дерево поиска (BST) – левый потомок меньше, правый больше.
B-дерево – используется в базах данных.
Trie (Префиксное дерево) – для хранения строк, часто в поисковых движках.
class TreeNode {
public int $value;
public ?TreeNode $left = null;
public ?TreeNode $right = null;

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


🟠Граф (Graph)
Набор вершин (узлов) и рёбер (связей между узлами).
Для моделирования сетей, карт, социальных графов.
Типы графов
Ориентированный (направленный) / Неориентированный
Взвешенный / Невзвешенный
Ациклический (DAG)
$graph = [
"A" => ["B", "C"],
"B" => ["A", "D", "E"],
"C" => ["A", "F"],
"D" => ["B"],
"E" => ["B", "F"],
"F" => ["C", "E"]
];


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое Factory?

Это паттерн проектирования, который предоставляет способ создания объектов без указания точного класса.
• Фабрика скрывает детали создания объектов, предоставляя интерфейс для их создания.
• Пример: ShapeFactory может возвращать объекты разных классов (Circle, Square) на основе входных параметров.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое внешний ключ?

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

🚩Зачем нужен внешний ключ?

🟠Обеспечение целостности данных:
Внешние ключи помогают гарантировать, что значения в столбце внешнего ключа всегда соответствуют значениям в первичном ключе другой таблицы. Это предотвращает создание "висячих" ссылок, когда запись в одной таблице ссылается на несуществующую запись в другой таблице.

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

🚩Как используется внешний ключ?

Внешний ключ создаётся при помощи SQL-запросов. Рассмотрим пример двух таблиц: orders (заказы) и customers (клиенты). Каждому заказу в таблице orders соответствует клиент в таблице customers.
-- Создание таблицы клиентов
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(100)
);

-- Создание таблицы заказов с внешним ключом
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);


customer_id в таблице orders является внешним ключом, который ссылается на customer_id в таблице customers. Это гарантирует, что каждое значение customer_id в таблице orders соответствует существующему customer_id в таблице customers.

🚩Каскадные действия

Существует возможность настроить каскадные действия для внешних ключей. Например:
-- Создание таблицы заказов с каскадным удалением
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
ON DELETE CASCADE
);


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В каких местах нельзя использовать Laravel как фреймворк?

1. Реалтайм-приложения: Laravel не идеален для высоконагруженных приложений с минимальной задержкой, например, игр.
2. Микросервисы: Laravel может быть избыточен из-за большого количества встроенных компонентов.
3. Проекты с крайне низким бюджетом: из-за сложности поддержки на минимальных конфигурациях серверов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔5
🤔 Что такое динамические переменные?

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

🚩PHP

Имена переменных могут быть динамически сформированы с использованием переменных переменных
$name = "variable";
$$name = "Hello, World!";

echo $variable; // Выведет "Hello, World!"


Плюсы и минусы
Гибкость
позволяет создавать более адаптивные и динамические программы, которые могут работать с данными, структура которых заранее неизвестна.
Удобство
упрощает работу с большим количеством похожих переменных или свойств объекта без необходимости явного объявления каждой переменной.
Читаемость кода
использование динамических переменных может сделать код менее понятным и труднее для отладки, поскольку не всегда ясно, какие переменные создаются и используются.
Управление памятью
динамическое создание большого количества переменных может привести к неэффективному использованию памяти и снижению производительности.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как происходит процесс раскатки (разворачивания) деплоя?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Что такое нормализация, денормализация?

Это два подхода к проектированию структуры баз данных. Они используются для оптимизации хранения данных и повышения производительности запросов.

🚩Нормализация

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

🚩Цели нормализации

🟠Устранение дублирования данных
Это помогает экономить место и поддерживать согласованность данных.
🟠Повышение целостности данных
Например, если данные изменяются в одном месте, то изменения не нужно делать в других местах.

🚩Этапы нормализации

1⃣Первая нормальная форма (1NF)
Удаление повторяющихся групп и дублирующихся данных.
2⃣Вторая нормальная форма (2NF)
Устранение частичной зависимости данных от составного ключа.
3⃣Третья нормальная форма (3NF)
Устранение транзитивной зависимости (когда данные зависят не от первичного ключа напрямую, а через другие поля).
4⃣Далее
BCNF (нормальная форма Бойса-Кодда) и другие более сложные формы.

🚩Денормализация

Это процесс намеренного добавления избыточности данных для повышения производительности запросов.

🚩Цели денормализации

🟠Ускорение чтения данных
Объединение таблиц или добавление дублированных данных уменьшает количество соединений (JOIN) между таблицами.

SELECT o.OrderID, c.CustomerName, p.ProductName, p.ProductPrice
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
JOIN Products p ON o.ProductID = p.ProductID;


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое медленный запрос?

Это запрос, выполнение которого занимает больше времени, чем заданный порог.
1. Причины: отсутствие индексов, сложные объединения, большой объём данных.
2. Оптимизация: использование индексов, анализ плана выполнения (EXPLAIN) и уменьшение объёма данных.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое middleware?

Это ПО, которое располагается между веб-сервером и приложением. Оно обрабатывает входящие запросы до того, как они достигнут вашего приложения, или обрабатывает исходящие ответы после того, как приложение их сгенерировало.

🚩Зачем нужен Middleware

🟠Управление запросами
Может изменять или проверять запросы перед передачей их в приложение. Например, оно может проверять наличие валидных токенов доступа для аутентификации или осуществлять проверку прав доступа.

🟠Перехват ответов
Также может изменять ответы перед тем, как они будут отправлены пользователю, например, добавлять нужные заголовки HTTP или сжимать данные.

🟠Логирование и мониторинг
Оно может записывать информацию о запросах и ответах для анализа трафика или обнаружения ошибок.

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

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class CheckAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return redirect('/login');
}

return $next($request);
}
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое подготовка запросов?

Это запросы, которые компилируются сервером перед выполнением.
1. Они защищают от SQL-инъекций, так как параметры передаются отдельно от запроса.
2. Улучшают производительность, так как один запрос можно выполнить несколько раз с разными данными.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какие уровни ошибок есть в PHP?

В PHP существуют различные уровни ошибок, которые помогают разработчикам выявлять и исправлять проблемы в коде. Эти уровни ошибок задаются с помощью констант и управляются функцией error_reporting(). Рассмотрим основные уровни ошибок:

🚩Основные уровни ошибок в PHP

🟠E_ERROR (фатальная ошибка, код: 1)
Критическая ошибка, которая приводит к завершению работы скрипта.
Например, вызов несуществующей функции
someUndefinedFunction(); // Вызовет E_ERROR


🟠E_WARNING (предупреждение, код: 2)
Не фатальная ошибка, скрипт продолжит выполнение.
Например, деление на ноль или использование include() для несуществующего файла:
echo 10 / 0; // Вызовет E_WARNING


🟠E_PARSE (ошибка парсинга, код: 4)
Ошибка синтаксиса в коде, обнаруживаемая на этапе компиляции.
Например, забытая точка с запятой:
echo "Hello" // Отсутствует ;


🟠E_NOTICE (замечание, код: 8)
Сообщает о некритичных ошибках, например, об использовании неинициализированной переменной:
echo $undefinedVariable; // Вызовет E_NOTICE


🟠E_CORE_ERROR (фатальная ошибка ядра, код: 16)
Аналогична E_ERROR, но возникает на этапе загрузки PHP.

🟠E_CORE_WARNING (предупреждение ядра, код: 32)
Аналогична E_WARNING, но на этапе загрузки PHP.

🟠E_COMPILE_ERROR (ошибка компиляции, код: 64)
Ошибки, связанные с компиляцией скрипта, например, при ошибке в require.

🟠E_COMPILE_WARNING (предупреждение компиляции, код: 128)
Предупреждения компилятора.

🟠E_USER_ERROR (пользовательская фатальная ошибка, код: 256)
Вызывается вручную с помощью trigger_error():
trigger_error("Критическая ошибка!", E_USER_ERROR);


🟠E_USER_WARNING (пользовательское предупреждение, код: 512)
Аналогично E_WARNING, но создаётся пользователем.

🟠E_USER_NOTICE (пользовательское замечание, код: 1024)
Аналогично E_NOTICE, но вызывается вручную.

🟠E_STRICT (строгие предупреждения, код: 2048)
Сообщает о потенциальных проблемах совместимости.

🟠E_RECOVERABLE_ERROR (обрабатываемая фатальная ошибка, код: 4096)
Фатальная ошибка, которую можно обработать через set_error_handler().

🟠E_DEPRECATED (предупреждение об устаревших функциях, код: 8192)
Указывает, что используется устаревшая функция.

🟠E_USER_DEPRECATED (пользовательское предупреждение об устаревании, код: 16384)
Вызывается пользователем через trigger_error().

🚩Как управлять уровнями ошибок?

PHP позволяет включать или выключать определённые ошибки с помощью error_reporting()
error_reporting(E_ALL); // Включить все ошибки
error_reporting(0); // Отключить вывод ошибок
error_reporting(E_ERROR | E_WARNING); // Только критические ошибки и предупреждения


Также можно использовать display_errors для отображения ошибок в браузере
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Чем HTTP первой версии отличается от второй?

HTTP/1.1 требует для каждого запроса нового соединения, что создает дополнительную нагрузку. HTTP/2 поддерживает мультиплексирование, позволяя передавать несколько запросов и ответов одновременно по одному соединению, что улучшает производительность.?

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое типизация?

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

🚩Виды типизации

🟠Статическая типизация:
Типы переменных известны и проверяются на этапе компиляции. Примеры языков: Java, C++, TypeScript.
🟠Динамическая типизация:
Типы переменных определяются и проверяются во время выполнения программы. Примеры языков: Python, JavaScript, PHP.
🟠Сильная типизация:
Язык строго следит за типами, не позволяя неявные преобразования между ними. Примеры языков: Haskell, Java.
🟠Слабая типизация:
Язык допускает неявные преобразования между типами. Примеры языков: PHP, JavaScript.

PHP — язык с динамической и слабой типизацией, но с версией 7.0 и выше появилась возможность использовать строгую типизацию.
$number = 10;
$number = "ten"; // PHP позволяет это, так как тип переменной может изменяться


С PHP 7.0 можно использовать строгую типизацию для функций и методов. Это позволяет явно указывать, какого типа аргументы и возвращаемое значение должны быть.
declare(strict_types=1); // Включает строгую типизацию

function add(int $a, int $b): int {
return $a + $b;
}

echo add(2, 3); // Работает
// echo add(2, "3"); // Ошибка, так как второй аргумент не является целым числом


🚩Плюсы

Предотвращение ошибок:
Типизация помогает обнаруживать ошибки на ранних этапах разработки, таких как попытка выполнения некорректных операций с данными.
Улучшение читаемости и поддержки кода:
Явное указание типов делает код более понятным и предсказуемым, что облегчает его поддержку и развитие.
Оптимизация выполнения:
Статически типизированные языки позволяют компиляторам оптимизировать выполнение кода, так как типы известны на этапе компиляции.
Документирование кода:
Типизация служит дополнительной документацией, помогая разработчикам понять, какие данные ожидаются и возвращаются функциями и методами.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое абстрактный класс?

Абстрактный класс — это класс, который не может быть создан как объект и служит для того, чтобы задавать общие свойства и методы для классов-наследников. Он может содержать как абстрактные, так и конкретные методы с реализацией. Наследники обязаны реализовать все абстрактные методы родительского класса. Абстрактные классы полезны, когда требуется частичная реализация с обязательной реализацией некоторых методов в дочерних классах.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM