- В PHP двойные кавычки позволяют интерполировать переменные, а одинарные – нет.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Cookies (Куки) – это небольшие файлы, которые браузер сохраняет на компьютере пользователя и отправляет серверу при каждом запросе.
Установка Cookie в PHP
setcookie("username", "Alice", time() + 3600, "/");Чтение Cookie в PHP
echo $_COOKIE["username"]; // ✅ Alice
Удаление Cookie
setcookie("username", "", time() - 3600, "/");Авторизация (сохранение логина).
Запоминание настроек (тема, язык).
Корзина товаров (если нет сессий).
Отслеживание пользователей (Google Analytics, реклама).
Максимальный размер – 4KB (поэтому для больших данных лучше использовать
SESSION). Можно изменить в браузере (поэтому не храните пароли в куках!).
Уязвимость XSS → если сайт подвержен XSS-атакам, злоумышленник может украсть куки.
Защита Cookies
setcookie("secure_cookie", "value", time() + 3600, "/", "", true, true);Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Форматы запросов и ответов обеспечивают обмен данными между клиентом и сервером.
Популярные форматы:
- JSON – компактный, удобный для API.
- XML – читаемый, часто используется в SOAP.
- YAML – удобен для конфигураций.
- Protobuf – бинарный, эффективный для высоконагруженных систем.
Форматы обеспечивают унифицированное взаимодействие между различными сервисами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
Это механизм, позволяющий организовать код в логические группы и избежать конфликтов имен, особенно в больших проектах или при использовании сторонних библиотек.
В больших проектах могут быть сотни классов, функций и констант. Пространства имен помогают избежать ситуаций, когда разные части кода используют одинаковые имена.
Они позволяют группировать связанные классы, интерфейсы, функции и константы, что делает код более читаемым и поддерживаемым.
Пространства имен облегчают использование автозагрузчиков, таких как PSR-4, где классы и файлы организованы в соответствии с их пространствами имен.
Для использования пространств имен, нужно объявить их в начале файла с помощью ключевого слова
namespace.<?php
namespace MyProject\Models;
class User {
public function getName() {
return "John Doe";
}
}
?>
Теперь класс User находится в пространстве имен MyProject\Models. Чтобы использовать этот класс в другом файле, нужно указать его полное имя:
<?php
require 'User.php';
$user = new \MyProject\Models\User();
echo $user->getName();
?>
Можно также использовать ключевое слово use для упрощения кода:
<?php
require 'User.php';
use MyProject\Models\User;
$user = new User();
echo $user->getName();
?>
Пространства имен могут содержать не только классы, но и функции и константы:
<?php
namespace MyProject\Utils;
const PI = 3.14;
function calculateCircleArea($radius) {
return PI * $radius * $radius;
}
?>
Использование этих элементов будет аналогичным:
<?php
require 'Utils.php';
echo \MyProject\Utils\calculateCircleArea(5);
echo \MyProject\Utils\PI;
?>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Пример — связанный список (linked list), где каждый узел содержит значение и ссылку на следующий узел.
2. Такие типы обеспечивают удобное добавление и удаление элементов, но имеют медленный доступ по индексу (O(n)).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from easyoffer
Новая фича на easyoffer – Автоотлики
Вы автоматически откликаетесь на подходящие вам вакансии. Попробуйте её бесплатно и начните получать больше предложений о работе.
🚀 Запуск занимаем всего 3 минуты, а экономит очень много времени
🛡 Это безопасно: easyoffer официально одобрен HeadHunter и прошел его модерацию.
🥷🏻 Автоотклик незаметен для рекртера. Автоотклик ничем не отличается от обычного отклика, который вы делаете вручную
Рекрутеры давно используют автоматизацию для поиска кандидатов. Так почему вы должны откликаться вручную?
💡Совет – Добавьте шаблон сопроводительного письма, чтобы откликаться на большее количество вакансий (на некоторые вакансии нельзя откликнуться без сопроводительного)
Попробовать бесплатно → https://easyoffer.ru/autoapply
Вы автоматически откликаетесь на подходящие вам вакансии. Попробуйте её бесплатно и начните получать больше предложений о работе.
🚀 Запуск занимаем всего 3 минуты, а экономит очень много времени
🛡 Это безопасно: easyoffer официально одобрен HeadHunter и прошел его модерацию.
🥷🏻 Автоотклик незаметен для рекртера. Автоотклик ничем не отличается от обычного отклика, который вы делаете вручную
Рекрутеры давно используют автоматизацию для поиска кандидатов. Так почему вы должны откликаться вручную?
💡Совет – Добавьте шаблон сопроводительного письма, чтобы откликаться на большее количество вакансий (на некоторые вакансии нельзя откликнуться без сопроводительного)
Попробовать бесплатно → https://easyoffer.ru/autoapply
SOAP (Simple Object Access Protocol) и REST (Representational State Transfer) – это два подхода для обмена данными между клиентом и сервером (API).
SOAP появился раньше, но REST стал более популярным, потому что он проще, быстрее и гибче.
SOAP использует сложные XML-сообщения с заголовками и схемами, что делает запросы более громоздкими.
REST использует JSON или XML, что делает его быстрее и удобнее.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getUser>
<id>123</id>
</getUser>
</soap:Body>
</soap:Envelope>
Пример запроса в REST (короче и проще)
GET /users/123 HTTP/1.1
Host: api.example.com
SOAP требует больше ресурсов, потому что использует XML + сложные заголовки.
REST работает по HTTP и использует JSON, который легче парсится в браузере и мобильных приложениях.
SOAP требует специальных библиотек (WSDL, WS-Security).
REST использует обычные HTTP-методы:
-
GET – получить данные -
POST – создать -
PUT – обновить -
DELETE – удалить REST легко работает с JavaScript, мобильными приложениями (iOS, Android), браузерами и фронтендом.
SOAP чаще используется в корпоративных системах (банки, госструктуры), но хуже подходит для современных веб-приложений.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Тест на Opening Point проверяет, корректно ли открывается доступ к ресурсу.
Он может включать:
- Авторизацию – доступ пользователя после входа.
- Перенаправления – корректный редирект при попытке входа.
- Доступность URL – проверка HTTP-ответа (например, 200 OK).
- Безопасность – отсутствие утечек при открытии ресурса.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
декремент — это операция, используемые для увеличения или уменьшения значения переменной на единицу соответственно.
Оператор уменьшает значение переменной на единицу. Он представлен двумя минусами (
--). Так же, как и инкремент, декремент бывает двух видов:Сначала уменьшает значение переменной на единицу, затем возвращает новое значение.
Возвращает текущее значение переменной, а затем уменьшает его на единицу.
<?php
$x = 10;
$y = 10;
// Пример префиксного инкремента
echo ++$x; // Выводит 11, x теперь равен 11
// Пример постфиксного инкремента
echo $y++; // Выводит 10, y теперь равен 11
echo $y; // Выводит 11
// Пример префиксного декремента
echo --$x; // Выводит 10, x теперь равен 10
// Пример постфиксного декремента
echo $y--; // Выводит 11, y теперь равен 10
echo $y; // Выводит 10
?>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это архитектурный паттерн, который разделяет операции чтения и записи на разные модели данных. Это улучшает производительность, масштабируемость и упрощает поддержку.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Форматы запросов и ответов в приложении предназначены для стандартизированного обмена данными между клиентом (браузером, мобильным приложением) и сервером (PHP-приложением). Они позволяют:
Обеспечить совместимость между разными системами
Облегчить обработку данных на сервере и клиенте
Структурировать данные в удобном формате
Когда клиент отправляет запрос на сервер, данные могут передаваться разными способами.
Используется для получения информации. Данные передаются в строке запроса.
GET /api/users?id=10
Пример обработки в PHP
$id = $_GET['id']; // Получаем id из URL
Используется для отправки данных (например, формы).
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'];Используются в REST API для изменения или удаления данных.
Сервер отправляет ответ в определённом формате, который клиент сможет распознать.
Используется в API и веб-приложениях.
{
"status": "success",
"message": "Данные получены"
}Пример ответа в PHP
header("Content-Type: application/json");
echo json_encode(["status" => "success", "message" => "Данные получены"]);Пример XML-ответа
<response>
<status>success</status>
<message>Данные получены</message>
</response>
Например, при загрузке сайта.
echo "<h1>Привет, мир!</h1>";
Если нужен простой текст
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 — это неизменяемый шаблон, из которого создаются контейнеры. Образы могут базироваться на других образах и содержат все необходимое для запуска приложения. Например, образ может содержать операционную систему, веб-сервер и само приложение.
Dockerfile — это текстовый файл с инструкциями по созданию Docker-образа. Он содержит последовательность команд, которые Docker выполняет для сборки образа.
# Используем базовый образ
FROM php:8.0-apache
# Копируем локальные файлы в контейнер
COPY src/ /var/www/html/
# Устанавливаем зависимости
RUN docker-php-ext-install mysqli
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 (OP-тест) используется для проверки скорости, с которой игрок или программа находят критически важное первое решение в задаче. Такой тест чаще всего применяется в шахматах, игровых стратегиях, а также в программировании при оценке эвристик.
Например, шахматная позиция, игровая ситуация или входные данные для алгоритма.
В шахматах это может быть лучший ход. В алгоритмах — первое удачное разбиение задачи.
Важно, насколько быстро испытуемый (или программа) нашёл первый ход. Проверяется, соответствует ли он эталону (оптимальному решению).
В шахматах 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
Структуры данных — это способы хранения и организации данных в памяти компьютера. Они помогают эффективно управлять данными и выбирать оптимальные алгоритмы.
Упорядоченная коллекция элементов, доступ к которым осуществляется по индексу. Когда нужно быстро получать элементы по индексу.
Доступ:
O(1) Поиск:
O(n) Вставка/Удаление:
O(n) (из-за необходимости сдвига элементов) $numbers = [10, 20, 30, 40];
echo $numbers[2]; // 30
Элементы (узлы) хранят ссылку на следующий (а иногда и на предыдущий) элемент.
Когда часто вставляете/удаляете элементы (без затрат на сдвиг).
Доступ:
O(n) Вставка/Удаление:
O(1) (если известен указатель) class Node {
public int $data;
public ?Node $next;
public function __construct(int $data) {
$this->data = $data;
$this->next = null;
}
}Структура LIFO (Last In, First Out). Элементы добавляются и удаляются только с одного конца.
Для обратного прохода, отмены операций, рекурсии.
Вставка/Удаление:
O(1) Доступ:
O(n) $stack = new SplStack();
$stack->push(1);
$stack->push(2);
echo $stack->pop(); // 2 (удаляется последний добавленный)
Структура FIFO (First In, First Out). Первым зашёл – первым вышел.
Когда элементы должны обрабатываться по порядку (например, задачи в принтере).
Вставка/Удаление:
O(1) $queue = new SplQueue();
$queue->enqueue(1);
$queue->enqueue(2);
echo $queue->dequeue(); // 1 (удаляется первый добавленный)
Хранит пары ключ → значение, обеспечивает быстрый доступ по ключу.
Когда нужен быстрый поиск и хранение пар ключ-значение.
Доступ/Поиск:
O(1) $hashTable = [
"name" => "Alice",
"age" => 25
];
echo $hashTable["name"]; // Alice
Иерархическая структура, где каждый узел может иметь несколько дочерних.
Когда важны иерархии (например, файловые системы, база данных).
Виды
Двоичное дерево (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;
}
}Набор вершин (узлов) и рёбер (связей между узлами).
Для моделирования сетей, карт, социальных графов.
Типы графов
Ориентированный (направленный) / Неориентированный
Взвешенный / Невзвешенный
Ациклический (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
• Фабрика скрывает детали создания объектов, предоставляя интерфейс для их создания.
• Пример: 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
2. Микросервисы: Laravel может быть избыточен из-за большого количества встроенных компонентов.
3. Проекты с крайне низким бюджетом: из-за сложности поддержки на минимальных конфигурациях серверов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔5
Это переменные, имена которых определяются во время выполнения программы. Это позволяет создавать, модифицировать или обращаться к переменным динамически, основываясь на входных данных или условиях выполнения программы. Такой подход может быть полезен в сценариях, где структура данных неизвестна на момент написания кода или когда нужно генерировать переменные на лету в зависимости от контекста выполнения.
Имена переменных могут быть динамически сформированы с использованием переменных переменных
$name = "variable";
$$name = "Hello, World!";
echo $variable; // Выведет "Hello, World!"
Плюсы и минусы
позволяет создавать более адаптивные и динамические программы, которые могут работать с данными, структура которых заранее неизвестна.
упрощает работу с большим количеством похожих переменных или свойств объекта без необходимости явного объявления каждой переменной.
использование динамических переменных может сделать код менее понятным и труднее для отладки, поскольку не всегда ясно, какие переменные создаются и используются.
динамическое создание большого количества переменных может привести к неэффективному использованию памяти и снижению производительности.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM