В PHP бэкслеш (
\) перед именем функции или класса указывает, что мы обращаемся к глобальному пространству имён. Это важно, если код находится внутри namespace. Если внутри
namespace есть функция с таким же именем, то PHP будет искать её внутри пространства имён, а не в глобальном пространстве. namespace App;
function strlen($str) {
return "Фейковая длина строки";
}
echo strlen("Hello!"); // Выведет: "Фейковая длина строки"
Пример использования
\ для вызова стандартной функции PHP namespace App;
function strlen($str) {
return "Фейковая длина строки";
}
echo \strlen("Hello!"); // Выведет: 6 (из стандартной библиотеки PHP)
PHP не будет искать функцию внутри
namespace, а сразу возьмёт глобальную версию. Это немного ускоряет выполнение. namespace App;
$t1 = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
time(); // PHP ищет в namespace, потом в глобальном
}
$t2 = microtime(true);
echo "Обычный вызов: " . ($t2 - $t1) . " секунд\n";
$t1 = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
\time(); // PHP сразу берёт глобальную функцию
}
$t2 = microtime(true);
echo "С бэкслешем: " . ($t2 - $t1) . " секунд\n";
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это два метода повышения производительности и пропускной способности баз данных.
Вертикальное масштабирование, также известное как масштабирование "вверх" (scale up), предполагает улучшение производительности базы данных за счет увеличения ресурсов на одном сервере. Это может включать: Добавление большего объема оперативной памяти (RAM), Увеличение мощности процессора (CPU), Увеличение объема хранилища (SSD или HDD), Использование более быстрого сетевого оборудования
Легко выполнить, поскольку не требует изменения архитектуры приложения.
Администрирование базы данных проще, так как все данные находятся на одном сервере.
Есть пределы, до которых можно увеличивать ресурсы на одном сервере.
Если сервер выходит из строя, вся база данных становится недоступной.
Допустим, у вас есть сервер с 16 ГБ оперативной памяти и 4-ядерным процессором. Вертикальное масштабирование может включать замену его на сервер с 64 ГБ оперативной памяти и 16-ядерным процессором.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4💊1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3💊1
Сравнение чисел и строк
var_dump(5 == "5"); // ✅ true (PHP приводит строку "5" к числу 5)
var_dump(5 === "5"); // ❌ false (5 - это int, "5" - это string)
Сравнение
true и falsevar_dump(0 == false); // ✅ true (0 считается как false)
var_dump(0 === false); // ❌ false (0 - это int, а false - это bool)
Сравнение
nullvar_dump(null == false); // ✅ true (PHP считает null как false)
var_dump(null === false); // ❌ false (null != boolean)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
- Гарантирует доставку и порядок.
- Используется для HTTP, FTP, SSH и т.п.
- Медленнее из-за проверок, подтверждений, управления потоком.
- UDP — ненадёжный, без соединения:
- Быстрее, но без гарантии доставки и порядка.
- Используется для видео/аудио-стриминга, игр, DNS, VoIP.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Асинхронное шифрование (или шифрование с открытым ключом, например, RSA, ECC) использует два ключа:
Открытый ключ (Public Key) – для шифрования
Закрытый ключ (Private Key) – для расшифровки
Шифрование и расшифровка занимают больше времени, потому что алгоритмы (например, RSA) используют сложные математические операции (экспоненцирование и факторизацию).
AES (симметричное) в 100–1000 раз быстрее, чем RSA.
Чтобы обеспечить безопасность, RSA требует очень длинных ключей (2048+ бит).
Чем длиннее ключ, тем больше памяти и CPU требуется для вычислений.
Квантовые компьютеры смогут быстро взломать RSA и ECC с помощью алгоритма Шора.
AES-256 останется безопасным, но RSA-2048 можно будет взломать за несколько часов или минут.
Нужно генерировать, хранить и передавать пары ключей.
Закрытый ключ нельзя потерять – иначе данные невозможно расшифровать.
Если злоумышленник завладеет закрытым ключом, он сможет расшифровать всю информацию.
Открытый ключ может быть подменён злоумышленником (атака "человек посередине" – MITM).
Если хакер подменит публичный ключ, он сможет расшифровать данные.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Фасад (Facade) в PHP — это паттерн проектирования, который упрощает доступ к сложной системе классов, предоставляя единый интерфейс.
Фасад скрывает сложные детали реализации и предоставляет удобный интерфейс.
$logger = new Logger();
$db = new DatabaseConnection();
$mailer = new Mailer();
$user = new User($db, $logger, $mailer);
$user->register("example@example.com");
С фасадом (всё инкапсулировано в один класс)
$userFacade = new UserFacade();
$userFacade->register("example@example.com");
Вы можете изменять внутреннюю структуру классов без влияния на клиентский код.
- Если нужно добавить новую функциональность, можно просто изменить фасад, не переписывая весь код.
- Удобно при развитии проекта и подключении новых сервисов.
class PaymentGateway {
public function processPayment($amount) {
echo "Оплата на сумму $amount выполнена.\n";
}
}
class NotificationService {
public function sendNotification($message) {
echo "Отправлено уведомление: $message\n";
}
}
class OrderFacade {
private $payment;
private $notification;
public function __construct() {
$this->payment = new PaymentGateway();
$this->notification = new NotificationService();
}
public function placeOrder($amount) {
$this->payment->processPayment($amount);
$this->notification->sendNotification("Заказ оплачен на сумму $amount.");
}
}
// Использование
$order = new OrderFacade();
$order->placeOrder(1000);Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это популярный шаблон проектирования, который используется для взаимодействия с базой данных. Он сочетает в себе логику бизнес-модели и работу с базой данных в одном объекте. Несмотря на свою популярность и удобство, Active Record нарушает принцип разделения ответственности (Single Responsibility Principle, SRP) из SOLID.
SRP гласит, что класс должен иметь только одну причину для изменения, то есть заниматься только одной задачей.
Класс хранит правила и поведение, связанные с сущностью (например, вычисления, валидации, связи).
Класс отвечает за взаимодействие с базой данных, включая CRUD-операции (создание, чтение, обновление, удаление), построение SQL-запросов и т. д.
Таким образом, Active Record совмещает две разные ответственности: бизнес-логику и взаимодействие с базой данных. Если изменится структура базы данных или логика обработки данных, класс придется менять, что нарушает SRP.
class User extends ActiveRecord {
public function getFullName() {
return $this->first_name . ' ' . $this->last_name;
}
public function saveUser() {
$this->save(); // Метод сохранения в базе данных
}
}Чтобы соблюсти SRP, можно разделить бизнес-логику и работу с базой данных на разные уровни:
Отвечает только за преобразование данных между объектами и базой данных.
Обрабатывают бизнес-логику.
class User {
private $firstName;
private $lastName;
public function __construct($firstName, $lastName) {
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function getFullName() {
return $this->firstName . ' ' . $this->lastName;
}
}
class UserMapper {
public function save(User $user) {
// SQL-запрос для сохранения данных
}
}Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
- В 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