
- Главная
- Каталог
- Интернет технологии
- PHP | Вопросы собесов
Статистика канала
DateTime в PHP предоставляет удобные инструменты для работы с датами и временем. Он заменяет устаревшие функции date(), strtotime() и делает код более читаемым и гибким.
🚩Что умеет `DateTime`?
Создавать даты и время.
Изменять, прибавлять, вычитать дни, месяцы, годы.
Преобразовывать дату в строку (format()).
Работать с часовыми поясами (DateTimeZone).
Сравнивать даты (diff()).
Преобразовывать в Unix Timestamp (getTimestamp()).
🚩Примеры использования `DateTime`
1⃣Создание объекта DateTime
$date = new DateTime(); // Текущая дата и время
echo $date->format('Y-m-d H:i:s'); // 2025-02-24 15:30:00{}
2⃣Создание DateTime с конкретной датой
$date = new DateTime('2023-12-31 23:59:59');
echo $date->format('d.m.Y H:i'); // 31.12.2023 23:59{}
3⃣Прибавить / Вычесть дни, месяцы, годы (modify())
$date = new DateTime('2024-01-01');
$date->modify('+1 month'); // Добавить 1 месяц
echo $date->format('Y-m-d'); // 2024-02-01
$date->modify('-10 days'); // Вычесть 10 дней
echo $date->format('Y-m-d'); // 2024-01-22{}
4⃣Разница между датами (diff())
$date1 = new DateTime('2024-01-01');
$date2 = new DateTime('2025-01-01');
$diff = $date1->diff($date2);
echo $diff->days; // 366 (разница в днях)
echo $diff->y; // 1 (разница в годах){}
5⃣Работа с часовыми поясами (DateTimeZone)
$date = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d H:i:s'); // Время в Нью-Йорке{}
6⃣Преобразование DateTime в Timestamp (getTimestamp())
$date = new DateTime('2024-01-01');
echo $date->getTimestamp(); // 1704067200 (Unix-время){}
7⃣Создание DateTime из Timestamp (setTimestamp())
$date = new DateTime();
$date->setTimestamp(1704067200);
echo $date->format('Y-m-d H:i:s'); // 2024-01-01 00:00:00{}
Ставь 👍 и забирай 📚 Базу знаний
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("Петр");{}
🟠Жёсткое зацепление (Tight Coupling) – Плохо
- Модули сильно связаны, нельзя поменять один без изменения другого.
- Код трудно тестировать и расширять.
- Используется жёсткая привязка классов внутри других классов.
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("Иван");{}
Ставь 👍 и забирай 📚 Базу знанийextends используется для наследования классов. Он позволяет одному классу (дочернему) наследовать свойства и методы другого класса (родительского).
🚩Пример наследования через `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(); // ✅ "Администратор"{}
Ставь 👍 и забирай 📚 Базу знаний
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT; {}
🟠Consistency (Согласованность)
Обеспечивает перевод базы данных из одного согласованного состояния в другое. Транзакции должны оставлять базу данных в корректном состоянии, удовлетворяющем всем правилам и ограничениям.
🟠Isolation (Изолированность)
Обеспечивает изолированность транзакций друг от друга. Это означает, что результаты промежуточных операций одной транзакции невидимы для других транзакций до завершения первой транзакции.
🟠Durability (Долговечность)
Гарантирует, что изменения, внесённые успешно завершённой транзакцией, будут сохранены в базе данных даже в случае сбоя системы.
🚩Использования транзакций
🟠Перевод денег между счетами
Необходимо убедиться, что обе операции (списание и зачисление) выполнены успешно, чтобы избежать ситуации, когда деньги списаны, но не зачислены.
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT; -- Если обе операции прошли успешно
-- ROLLBACK; -- Если произошла ошибка {}
🟠Создание заказа в интернет-магазине
Важно убедиться, что все связанные операции (добавление записи о заказе, обновление статуса товаров, запись данных о платеже) выполнены успешно.
BEGIN TRANSACTION;
INSERT INTO orders (user_id, order_date) VALUES (1, NOW());
UPDATE products SET stock = stock - 1 WHERE product_id = 101;
INSERT INTO payments (order_id, amount) VALUES (LAST_INSERT_ID(), 99.99);
COMMIT; -- Если все операции прошли успешно
-- ROLLBACK; -- Если произошла ошибка{}
Ставь 👍 и забирай 📚 Базу знаний
$data = "Важное сообщение";
$privateKey = openssl_pkey_get_private(file_get_contents("private.pem"));
$publicKey = openssl_pkey_get_public(file_get_contents("public.pem"));
// Создаём подпись
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
// Проверяем подпись
$valid = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);
echo $valid ? "Подпись верна" : "Подпись недействительна";{}
🟠Возможность шифрования без предварительного контакта
- В симметричном шифровании обе стороны должны сначала договориться о ключе.
- В асимметричном шифровании можно просто использовать открытый ключ получателя без предварительного обмена секретами.
🟠Используется в SSL/TLS для безопасного соединения
- Когда вы заходите на сайт с https://, браузер использует асимметричное шифрование для установки защищённого соединения с сервером.
- После этого браузер и сервер могут использовать симметричное шифрование (быстрее), но начальный обмен ключами происходит безопасно.
🚩Как это работает?
1. Браузер запрашивает у сервера его открытый ключ.
2. Шифрует случайный симметричный ключ и отправляет его серверу.
3. Сервер расшифровывает его закрытым ключом и использует для дальнейшей защиты соединения.
Ставь 👍 и забирай 📚 Базу знанийОтзывы канала
Каталог Телеграм-каналов для нативных размещений
PHP | Вопросы собесов — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 2.4K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 5.5, количество отзывов – 0, со средней оценкой 0.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 2517.48 ₽, а за 3 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий