В PHP
extends используется для наследования классов. Он позволяет одному классу (дочернему) наследовать свойства и методы другого класса (родительского). Базовый пример (
extends)class Animal {
public function makeSound() {
return "Какой-то звук";
}
}
class Dog extends Animal {
public function makeSound() {
return "Гав-гав!";
}
}
$dog = new Dog();
echo $dog->makeSound(); // ✅ "Гав-гав!"Использование
parent:: для вызова родительского метода class Animal {
public function makeSound() {
return "Какой-то звук";
}
}
class Cat extends Animal {
public function makeSound() {
return parent::makeSound() . " Мяу-мяу!";
}
}
$cat = new Cat();
echo $cat->makeSound(); // ✅ "Какой-то звук Мяу-мяу!"Наследование свойств
class User {
protected string $role = "Гость";
public function getRole() {
return $this->role;
}
}
class Admin extends User {
protected string $role = "Администратор";
}
$admin = new Admin();
echo $admin->getRole(); // ✅ "Администратор"Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
ELT (Extract, Load, Transform) – это процесс обработки данных, используемый в аналитике:
- Extract (Извлечение) – загрузка данных из источников (БД, API).
- Load (Загрузка) – сохранение данных в хранилище (например, в Data Warehouse).
- Transform (Преобразование) – очистка, фильтрация, агрегация данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Зацепление (coupling) — это степень зависимости одного модуля от другого. В PHP (и вообще в разработке) мы стремимся уменьшить зацепление, чтобы код был гибким, удобным для тестирования и сопровождения.
- Модули мало зависят друг от друга.
- Можно заменять части системы без изменений в других частях.
- Используется интерфейсы, DI (Dependency Injection), события.
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
echo "Запись в файл: $message\n";
}
}
class DatabaseLogger implements Logger {
public function log($message) {
echo "Запись в базу: $message\n";
}
}
class User {
private $logger;
public function __construct(Logger $logger) {
$this->logger = $logger;
}
public function register($name) {
echo "Регистрация пользователя: $name\n";
$this->logger->log("Пользователь $name зарегистрирован.");
}
}
// Можно легко менять логгер без изменения класса User
$user = new User(new FileLogger());
$user->register("Иван");
$user = new User(new DatabaseLogger());
$user->register("Петр");- Модули сильно связаны, нельзя поменять один без изменения другого.
- Код трудно тестировать и расширять.
- Используется жёсткая привязка классов внутри других классов.
class FileLogger {
public function log($message) {
echo "Запись в файл: $message\n";
}
}
class User {
private $logger;
public function __construct() {
$this->logger = new FileLogger(); // Жесткая зависимость!
}
public function register($name) {
echo "Регистрация пользователя: $name\n";
$this->logger->log("Пользователь $name зарегистрирован.");
}
}
// User всегда использует FileLogger, его нельзя легко заменить
$user = new User();
$user->register("Иван");Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Кэширование – это временное хранение данных, чтобы избежать повторных вычислений или загрузок.
Пример кэширования (PHP + Redis)
$cacheKey = "user_123";
$cachedData = $redis->get($cacheKey);
if ($cachedData === false) {
$user = getUserFromDatabase(123);
$redis->set($cacheKey, json_encode($user), 3600); // Кэшируем на 1 час
} else {
$user = json_decode($cachedData, true);
}
Кодирование (Encoding) – это преобразование данных в другой формат, чтобы их можно было передавать или хранить.
Пример кодирования в Base64 (PHP)
$original = "Hello, World!";
$encoded = base64_encode($original);
echo $encoded; // ✅ "SGVsbG8sIFdvcmxkIQ=="
$decoded = base64_decode($encoded);
echo $decoded; // ✅ "Hello, World!"
Шифрование (Encryption) – это преобразование данных в секретный формат с помощью ключа, чтобы их нельзя было прочитать без расшифровки.
Пример шифрования AES-256 (PHP + OpenSSL)
$key = "supersecretkey123456"; // Должен быть длинным!
$data = "Пароль123";
$encrypted = openssl_encrypt($data, "AES-256-CBC", $key, 0, "1234567812345678");
echo $encrypted; // 🔐 Зашифрованный текст
$decrypted = openssl_decrypt($encrypted, "AES-256-CBC", $key, 0, "1234567812345678");
echo $decrypted; // ✅ "Пароль123"
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊3
1. Идентификации пользователя и управления сессиями.
2. Сохранения предпочтений пользователя.
3. Отслеживания активности пользователя на сайте.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это гибкая структура данных, которая может использоваться для хранения набора значений.
Это массивы, в которых элементы индексируются числовыми индексами. Индексы начинаются с 0.
$fruits = ["apple", "banana", "cherry"];
echo $fruits[0]; // apple
В ассоциативных массивах индексы (или ключи) являются строками. Они позволяют хранить данные в формате "ключ => значение".
$user = [
"name" => "Alice",
"age" => 25,
"email" => "alice@example.com"
];
echo $user["name"]; // Alice
Это массивы, которые содержат другие массивы в качестве элементов. Они могут быть как индексными, так и ассоциативными.
$matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
echo $matrix[1][2]; // 6
Пример (ассоциативный многомерный массив)
$users = [
[
"name" => "Alice",
"email" => "alice@example.com"
],
[
"name" => "Bob",
"email" => "bob@example.com"
]
];
echo $users[0]["email"]; // alice@example.com
Это массивы, которые содержат одновременно числовые индексы и строковые ключи.
$mixedArray = [
0 => "apple",
"color" => "red",
1 => "banana",
"size" => "large"
];
echo $mixedArray[1]; // banana
echo $mixedArray["color"]; // red
В PHP массивы реализованы как хэш-таблицы, поэтому они поддерживают как числовые, так и строковые индексы.
Вы можете работать с массивами с помощью множества встроенных функций, например:
count() — возвращает количество элементов в массиве.array_keys() — возвращает все ключи массива.array_values() — возвращает все значения массива.$colors = ["red", "green", "blue"];
echo count($colors); // 3
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1💊1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
SSH (Secure Shell) — это сетевой протокол, который используется для безопасного доступа к удаленным компьютерам и управления ими. Он обеспечивает шифрование данных, аутентификацию и целостность передаваемой информации, что делает его предпочтительным средством для удаленного администрирования и передачи файлов.
SSH использует криптографические методы для шифрования данных, что защищает передаваемую информацию от перехвата и анализа.
Протокол поддерживает различные методы аутентификации, включая использование паролей и публичных/приватных ключей.
Парольная аутентификация: Пользователь вводит свой логин и пароль для доступа к удаленной системе.
Аутентификация с помощью ключей: Вместо пароля используется пара ключей (публичный и приватный). Публичный ключ размещается на удаленном сервере, а приватный ключ остается на клиентской машине.
Шифрует все передаваемые данные, включая пароли, команды и файлы, что предотвращает их перехват и несанкционированный доступ.
Обеспечивает контроль целостности передаваемых данных, используя алгоритмы хеширования, которые обнаруживают любые изменения данных в процессе передачи.
Позволяет создавать зашифрованные туннели для передачи данных других протоколов (например, HTTP, FTP), обеспечивая их безопасность.
Установленное на локальном компьютере, которое используется для установления соединения с удаленным сервером.
Работающее на удаленной машине, которое принимает и обрабатывает соединения от SSH-клиентов.
Для подключения к удаленному серверу используется команда
ssh в терминале.ssh username@remote_host
Для копирования файлов с локального компьютера на удаленный сервер или наоборот используется команда
scp.scp localfile.txt username@remote_host:/remote/directory/
Копирование файлов с удаленного сервера на локальный компьютер
scp username@remote_host:/remote/file.txt /local/directory/
Генерация пары ключей (публичного и приватного)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Копирование публичного ключа на удаленный сервер
ssh-copy-id username@remote_host
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это распределенная система контроля версий, работающая на основе графа коммитов и хранения изменений через хеши (SHA-1).
1. Объектная модель:
- Commit – снимок состояния проекта.
- Tree – каталог файлов в коммите.
- Blob – сами файлы (содержимое).
2. Система ссылок (HEAD, branches, tags).
3. Механизм staging (индексация изменений) перед коммитом.
4. Быстрая работа за счет хранения только изменений (deltas) и поддержки локального репозитория.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В контексте веб-разработки и работы с API, "виды запросов" обычно относятся к HTTP-методам. HTTP-методы — это стандартизированные типы запросов, которые определяют действие, требуемое от веб-сервера. Каждый метод указывает на определённый тип операции над ресурсами. Вот основные методы (виды запросов), используемые в веб-разработке:
Назначение: Запрос содержимого указанного ресурса. GET-запросы должны быть идемпотентными, что означает, что их многократное выполнение приводит к одному и тому же результату и не изменяет состояние сервера.
Пример использования: Запрос веб-страницы или изображения.
Назначение: Отправка данных на сервер для создания нового ресурса. Данные отправляются в теле запроса. POST-запросы не идемпотентны, то есть многократное выполнение может приводить к разным результатам.
Пример использования: Отправка формы на веб-сайте.
Назначение: Обновление существующего ресурса или создание нового ресурса по указанному URI. В отличие от POST, PUT идемпотентен.
Пример использования: Обновление деталей пользователя.
Назначение: Удаление указанного ресурса.
Пример использования: Удаление записи из базы данных.
Назначение: Частичное обновление существующего ресурса. PATCH может быть не идемпотентным, в зависимости от того, как он реализован на сервере.
Пример использования: Обновление части данных пользователя, например, смена пароля.
Назначение: Аналогичен GET, но сервер возвращает только заголовки ответа без тела. Используется для извлечения метаданных.
Пример использования: Проверка существования ресурса или его последнего обновления.
Назначение: Определение возможностей веб-сервера или параметров подключения для конкретного ресурса.
Пример использования: Определение поддерживаемых методов HTTP для URL.
Назначение: Эхо-запрос. Возвращает в теле ответа полученный запрос. Это может использоваться для диагностики. Из-за соображений безопасности его поддержка на серверах часто отключена.
Пример использования: Отладка веб-запросов.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Это интеграционная архитектура, которая связывает разные сервисы и системы, обеспечивая обмен данными между ними.
Ключевые аспекты:
- Централизованное управление обменом сообщениями.
- Упрощение интеграции систем с разными форматами данных.
- Гибкость – можно легко добавлять и удалять сервисы.
- Масштабируемость – упрощает распределение нагрузки между сервисами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
CQRS (Command Query Responsibility Segregation) – это архитектурный паттерн, который разделяет операции чтения (Query) и записи (Command) в приложении. Вместо одной модели данных используется две:
Модель для чтения – оптимизирована для запросов.
Модель для записи – отвечает за изменение данных.
запросы можно кэшировать, а запись может происходить в другой базе.
можно использовать разные структуры данных для чтения и записи.
можно масштабировать чтение и запись отдельно.
можно ограничить доступ к записи.
В классическом приложении чтение и запись используют одну модель данных
class User {
public $id;
public $name;
public $email;
public function updateEmail($newEmail) {
$this->email = $newEmail;
}
}Команда (Command) – запись
class UpdateUserEmailCommand {
public int $userId;
public string $newEmail;
public function __construct($userId, $newEmail) {
$this->userId = $userId;
$this->newEmail = $newEmail;
}
}
class UserCommandHandler {
public function handle(UpdateUserEmailCommand $command) {
// Логика обновления в БД
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("UPDATE users SET email = :email WHERE id = :id");
$stmt->execute([
':email' => $command->newEmail,
':id' => $command->userId
]);
}
}Запрос (Query) – чтение
class UserQueryHandler {
public function getUserById($userId) {
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("SELECT id, name, email FROM users WHERE id = :id");
$stmt->execute([':id' => $userId]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}Часто CQRS используется вместе с Event Sourcing – вместо изменения данных мы создаем события.
class UserEmailUpdatedEvent {
public int $userId;
public string $newEmail;
public function __construct($userId, $newEmail) {
$this->userId = $userId;
$this->newEmail = $newEmail;
}
}Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
1. Динамическая типизация: PHP автоматически определяет тип переменной на основе её значения.
2. Явная типизация: начиная с PHP 7, можно указывать типы аргументов и возвращаемых значений функций (int, string, array и т.д.).
3. Слабая типизация: PHP преобразует типы данных автоматически при необходимости.
4. Строгая типизация: включает строгую проверку типов через директиву declare.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
REST расшифровывается как REpresentational State Transfer (Представленческая передача состояния). Это архитектурный стиль для создания сетевых приложений, который определяет набор ограничений и принципов для проектирования и взаимодействия с веб-службами.
Клиент и сервер разделены. Клиенты запрашивают ресурсы, а серверы предоставляют их. Это разделение позволяет независимое развитие клиента и сервера.
Каждое взаимодействие между клиентом и сервером не зависит от предыдущих взаимодействий. Вся необходимая информация для выполнения запроса должна быть включена в сам запрос.
Ответы могут быть кешируемыми. Это улучшает производительность, снижая необходимость повторных обращений к серверу для получения одних и тех же данных.
Определяет единообразный способ взаимодействия с ресурсами, независимо от конкретного клиента или сервера. Включает четыре подпринципа:
Идентификация ресурсов: Каждый ресурс имеет уникальный идентификатор (обычно URL).
Манипуляция ресурсами через представления: Клиенты взаимодействуют с ресурсами, используя их представления (например, JSON, XML).
Самоописываемые сообщения: Сообщения содержат всю необходимую информацию для обработки запроса или ответа.
Гипермедиа как движок приложения (HATEOAS): Клиенты получают информацию о доступных действиях через гиперссылки в ответах сервера.
Архитектура может быть многослойной, где каждый слой имеет свои обязанности и скрывает сложность соседних слоев.
Сервер может передавать исполняемый код клиенту для выполнения. Например, JavaScript для выполнения на стороне клиента.
GET: Получить ресурс.
POST: Создать новый ресурс.
PUT: Обновить существующий ресурс.
DELETE: Удалить ресурс.
GET /users
Ответ
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]
GET /users/1
Ответ
{"id": 1, "name": "Alice"}
3️⃣Создать нового пользователя
POST /users
Тело запроса
{"name": "Charlie"}Ответ
{"id": 3, "name": "Charlie"}PUT /users/1
Тело запроса
{"name": "Alice Smith"}DELETE /users/1
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это количественные показатели, используемые для оценки, мониторинга и улучшения различных аспектов работы систем, процессов и проектов. Они предоставляют объективные данные, которые помогают принимать обоснованные решения и улучшать эффективность и качество работы.
Метрики позволяют оценивать, насколько эффективно работают системы или процессы. Например, метрики производительности могут показать, сколько запросов обрабатывается сервером в секунду или как быстро выполняются алгоритмы.
Постоянный мониторинг метрик помогает выявлять проблемы на ранних стадиях. Например, мониторинг времени отклика сервера позволяет обнаружить ухудшение производительности до того, как это повлияет на пользователей.
Объективные данные, предоставляемые метриками, помогают принимать обоснованные решения по улучшению процессов, распределению ресурсов и планированию. Например, данные о загрузке серверов могут помочь определить, когда нужно добавить новые ресурсы.
Метрики качества позволяют оценивать, насколько хорошо продукт или процесс соответствует установленным стандартам и требованиям. Например, метрики кода, такие как количество ошибок или покрытие тестами, помогают улучшать качество программного обеспечения.
В проектном управлении метрики помогают следить за прогрессом, оценивать риски и управлять ресурсами. Например, метрики времени и затрат помогают следить за выполнением проекта в рамках бюджета и сроков.
Время отклика (Response Time): Время, за которое система обрабатывает запрос.
Пропускная способность (Throughput): Количество запросов, обработанных системой за единицу времени.
Время простоя (Downtime): Время, в течение которого система недоступна.
Покрытие тестами (Test Coverage): Процент кода, покрытого автоматизированными тестами.
Количество ошибок (Bug Count): Количество ошибок, обнаруженных в программном обеспечении.
Плотность дефектов (Defect Density): Количество ошибок на единицу кода (например, на 1000 строк кода).
Завершение задач (Task Completion): Процент выполненных задач от общего количества задач в проекте.
Отклонение от плана (Schedule Variance): Разница между планируемым и фактическим временем выполнения задач.
Затраты (Cost): Фактические затраты по сравнению с запланированными затратами.
CI/CD: Метрики сборок и развертываний помогают отслеживать стабильность и скорость релизов.
Анализ кода: Метрики сложности кода, дублирования и покрытия тестами помогают улучшать качество и поддерживаемость кода.
KPI (Key Performance Indicators): Ключевые показатели эффективности помогают оценивать успехи бизнеса или отдельных процессов.
OKR (Objectives and Key Results): Цели и ключевые результаты помогают ставить и достигать стратегические цели.
Мониторинг серверов: Метрики использования CPU, памяти, дискового пространства помогают поддерживать высокую производительность и доступность серверов.
Безопасность: Метрики инцидентов безопасности, обнаружения уязвимостей и реагирования на угрозы помогают обеспечивать защиту данных и систем.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
2. Объект — это экземпляр класса, созданный с использованием его структуры.
3. Класс определяет, что объект может делать, а объект выполняет это поведение.
4. Класс — это абстракция, объект — конкретное воплощение.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Ссылочная целостность (Referential Integrity) – это правило, которое гарантирует, что связи между таблицами остаются корректными.
Допустим, у нас есть 2 таблицы:
users (Пользователи) orders (Заказы) Связь: каждый заказ (
orders) должен ссылаться на существующего пользователя (users) через user_id. CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
amount DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
Запрещает вставку "несуществующих" ссылок
INSERT INTO orders (id, user_id, amount) VALUES (1, 999, 100.00);
-- ❌ Ошибка! Пользователя с id = 999 нет в users
Запрещает удаление родительской записи, если есть зависимые
DELETE FROM users WHERE id = 1;
-- ❌ Ошибка! Есть заказы, которые ссылаются на пользователя id = 1
Автоматическое удаление связанных данных (
ON DELETE CASCADE) DELETE FROM users WHERE id = 1;
-- ✅ Все заказы с user_id = 1 тоже удалятся
ON DELETE CASCADE → при удалении пользователя удаляются все его заказы. ON DELETE SET NULL → при удалении пользователя поле user_id в заказах становится NULL. ON DELETE RESTRICT → запрещает удалять пользователя, если у него есть заказы. FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Пространства имен используются для группировки функций, классов и переменных, чтобы избежать конфликтов имен в больших проектах. Это позволяет нескольким разработчикам работать над проектом, не беспокоясь о пересечении имен.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
HTTP/1.1 и HTTP/2 — это две версии протокола передачи гипертекста (HTTP), которые имеют ряд ключевых отличий. Каждая версия протокола внесла значительные улучшения в эффективность, производительность и возможности веб-коммуникации.
По умолчанию соединения остаются открытыми после завершения запроса, что позволяет отправлять несколько запросов по одному соединению и уменьшает нагрузку на сеть и серверы.
Введены более сложные механизмы кэширования с использованием заголовков
ETag, If-Modified-Since, что улучшает управление кэшем и эффективность передачи данных.Добавлены новые коды состояния для более точного представления различных сценариев веб-взаимодействия.
Поддержка передачи данных в частях (chunks), что позволяет динамически генерировать содержимое и отправлять его по мере готовности.
Поддержка заголовка
Host, позволяющего размещать несколько доменов на одном IP-адресе.В отличие от текстового HTTP/1.1, HTTP/2 использует бинарный формат, который упрощает и ускоряет его разбор.
Одно соединение теперь может одновременно передавать несколько потоков данных, что устраняет проблему "заголовочного блока" и значительно повышает производительность.
HTTP/2 позволяет приоритизировать запросы, что улучшает загрузку ресурсов на странице.
В HTTP/2 используется сжатие заголовков HPACK для уменьшения накладных расходов, связанных с метаданными HTTP.
Серверы могут активно отправлять ресурсы клиенту до того, как клиент явно запросит их, что улучшает время загрузки страниц.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM