- Сохранение данных для быстрого повторного доступа, уменьшая время загрузки и нагрузку на сервер.
- Пример: сохранение веб-страницы в браузере.
2. Кодирование:
- Преобразование данных в другой формат для удобства передачи или совместимости.
- Пример: Base64 для передачи бинарных данных через текстовые протоколы.
3. Шифрование:
- Защита данных с использованием ключей, чтобы их мог прочитать только авторизованный получатель.
- Пример: AES или RSA для передачи конфиденциальной информации.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
В PHP есть три основных модификатора видимости для свойств и методов классов:
public, protected и private. Они определяют, какой код имеет доступ к этим свойствам и методам.Свойства и методы, объявленные как public, доступны отовсюду - как изнутри класса, так и извне, а также из наследуемых классов.
class MyClass {
public $publicProperty = 'Public';
public function publicMethod() {
echo 'This is a public method';
}
}
$obj = new MyClass();
echo $obj->publicProperty; // Выведет: Public
$obj->publicMethod(); // Выведет: This is a public methodСвойства и методы, объявленные как
protected, доступны только внутри класса и в классах-наследниках. Они недоступны для внешнего кода.class MyClass {
protected $protectedProperty = 'Protected';
protected function protectedMethod() {
echo 'This is a protected method';
}
}
class ChildClass extends MyClass {
public function accessProtected() {
echo $this->protectedProperty; // Выведет: Protected
$this->protectedMethod(); // Выведет: This is a protected method
}
}
$obj = new ChildClass();
$obj->accessProtected(); Свойства и методы, объявленные как
private, доступны только внутри самого класса. Они недоступны ни для внешнего кода, ни для классов-наследников.class MyClass {
private $privateProperty = 'Private';
private function privateMethod() {
echo 'This is a private method';
}
public function accessPrivate() {
echo $this->privateProperty; // Выведет: Private
$this->privateMethod(); // Выведет: This is a private method
}
}
$obj = new MyClass();
$obj->accessPrivate();Модификаторы видимости помогают скрывать внутреннее состояние и детали реализации объекта, предоставляя только необходимые интерфейсы для взаимодействия.
Они защищают данные от неконтролируемого доступа и изменения, что повышает надежность и безопасность кода.
Позволяют контролировать доступ к методам и свойствам, что упрощает изменение и расширение кода без риска нарушить существующую функциональность.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Simple Factory: один метод создаёт разные объекты.
2. Factory Method: делегирует создание объектов подклассам.
3. Abstract Factory: создаёт семейства связанных объектов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В PHP можно организовать обработку данных порциями разными способами, в зависимости от того, с чем именно мы работаем: с базой данных, файлами или массивами. Основные методы:
SQL-запрос с
LIMIT и OFFSET Чтение файла построчно (
fgets(), SplFileObject) Итерация по массиву с
array_chunk() Использование генераторов (
yield) При работе с базой данных мы можем загружать данные порциями с помощью
LIMIT и OFFSET$limit = 10; // Количество записей на страницу
$offset = 0; // Смещение (номер страницы * $limit)
$sql = "SELECT * FROM users ORDER BY id LIMIT $limit OFFSET $offset";
$result = $pdo->query($sql)->fetchAll();
Альтернативный вариант – постраничная выборка без
OFFSET $last_id = 0;
$sql = "SELECT * FROM users WHERE id > $last_id ORDER BY id LIMIT $limit";
При работе с большими файлами можно читать их построчно, а не загружать в память целиком.
fgets() – чтение построчно $handle = fopen("large_file.txt", "r");
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);SplFileObject – более удобный способ $file = new SplFileObject("large_file.txt");
while (!$file->eof()) {
echo $file->fgets();
}Если у нас массив данных, можно разбить его на части
$data = range(1, 100);
$chunks = array_chunk($data, 10);
foreach ($chunks as $chunk) {
print_r($chunk); // Выведет массивы по 10 элементов
}
Генераторы позволяют возвращать элементы по одному, не загружая всё в память сразу.
function getData() {
for ($i = 1; $i <= 100; $i++) {
yield $i; // Возвращает по одному значению
}
}
foreach (getData() as $num) {
echo $num . "\n";
}Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Типы объединений: INNER JOIN (только совпадающие строки), LEFT JOIN (все строки из левой таблицы), RIGHT JOIN (все строки из правой таблицы), FULL JOIN (объединение всех строк обеих таблиц), CROSS JOIN (декартово произведение), SELF JOIN (объединение таблицы с самой собой).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Цель тестирования всегда заключается в том, чтобы выявить ошибки, дефекты и недостатки в программном обеспечении до того, как оно будет выпущено или внедрено. Тестирование помогает убедиться, что программа работает правильно, соответствует требованиям и ожиданиям пользователей, а также обеспечивает высокое качество и надежность продукта.
Найти и исправить ошибки, которые могли возникнуть в ходе разработки. Это помогает предотвратить сбои в работе программы.
Убедиться, что программное обеспечение соответствует заданным требованиям и спецификациям. Это включает проверку функциональности, производительности, безопасности и других аспектов.
Тестирование помогает улучшить общее качество программного обеспечения, делая его более стабильным, надежным и удобным в использовании.
Убедиться, что конечные пользователи получат продукт, который удовлетворяет их потребности и ожидания, обеспечивая тем самым положительный пользовательский опыт.
Проверка того, что каждый компонент системы работает в соответствии с требованиями.
Проверка аспектов, не связанных напрямую с функциональностью, таких как производительность, безопасность, удобство использования и т.д.
Тестирование отдельных компонентов или модулей кода.
Проверка взаимодействия между различными модулями или компонентами системы.
Полная проверка всей системы в целом.
Проверка системы на соответствие бизнес-требованиям и готовность к использованию конечными пользователями.
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase {
public function testAdd() {
$calc = new Calculator();
$this->assertEquals(4, $calc->add(2, 2));
$this->assertEquals(0, $calc->add(-1, 1));
}
}
class Calculator {
public function add($a, $b) {
return $a + $b;
}
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Model: управляет данными и бизнес-логикой.
2. View: отвечает за отображение данных пользователю.
3. Controller: обрабатывает пользовательский ввод, связывает Model и View.
Это разделение упрощает разработку, тестирование и поддержку приложения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
В 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