Logo
TGCATALOG
Каталог Подборки Блог
PHP | Вопросы собесов

PHP | Вопросы собесов

Вопросы собеседований по PHP с ответами.

Нет оценок
28
08.09.2026
28
08.09.2026
Нет оценок
28
08.09.2026
Безопасный переход через бот
О канале

Вопросы собеседований по PHP с ответами.

Подписчиков 2,329
Тематика Технологии
Язык Русский
Ссылка t.me/easy_php_ru

Также рекомендуем

Kekaton AI | Озвучка и клон голоса
Kekaton AI | Озвучка и клон голоса
Бот

AI бот для озвучки текста и клонирования голоса в Telegram. Создавай аудио с помощью нейросети быстро и просто.

Описание

Типичные вопросы по PHP: фреймворки, базы данных, безопасность. Разбор с кодом для подготовки.

Последние посты

PHP | Вопросы собесов
PHP | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что содержит инкапсуляция кроме сокрытия данных? Инкапсуляция — это не только скрытие данных, но и ограничение доступа к внутренним деталям объекта + защита логики от внешнего вмешательства. 🚩Основные аспекты инкапсуляции Сокрытие данных (private, protected). Контроль доступа через геттеры и сеттеры. Защита объекта от некорректных данных. Чёткое API для работы с объектом. Разделение ответственности внутри класса. 🟠Сокрытие данных (`private`, `protected`) Скрываем внутренние переменные, чтобы их нельзя было изменить напрямую. class User { private string $password; // Прямой доступ запрещён public function __construct(string $password) { $this->password = $password; } } $user = new User("123456"); // echo $user->password; // ❌ Ошибка! Доступ запрещён 🟠Контроль доступа через геттеры и сеттеры Предоставляем доступ к данным через методы (контролируем поведение). class User { private string $password; public function __construct(string $password) { $this->setPassword($password); } public function getPassword(): string { return "Секретный пароль скрыт"; // Никогда не выдаём оригинал } public function setPassword(string $password) { if (strlen($password) < 6) { throw new Exception("Пароль слишком короткий!"); } $this->password = password_hash($password, PASSWORD_DEFAULT); } } $user = new User("securePass"); // echo $user->password; // ❌ Ошибка! Доступ запрещён echo $user->getPassword(); // ✅ "Секретный пароль скрыт" 🟠Защита объекта от некорректных данных Инкапсуляция позволяет проверять данные перед их сохранением. class Product { private float $price; public function setPrice(float $price) { if ($price < 0) { throw new Exception("Цена не может быть отрицательной!"); } $this->price = $price; } } 🟠Чёткое API для работы с объектом Инкапсуляция создаёт удобный интерфейс для работы с классом. class Order { private array $items = []; public function addItem(string $item) { $this->items[] = $item; } public function getItems(): array { return $this->items; } } $order = new Order(); $order->addItem("Телефон"); print_r($order->getItems()); // ✅ ["Телефон"] 🟠Разделение ответственности внутри класса Инкапсуляция помогает отделить внутреннюю логику от интерфейса. class BankAccount { private float $balance = 0; private function logTransaction(float $amount) { echo "Транзакция: $amount\n"; } public function deposit(float $amount) { $this->balance += $amount; $this->logTransaction($amount); } public function getBalance(): float { return $this->balance; } } $account = new BankAccount(); $account->deposit(100); echo $account->getBalance(); // ✅ 100 Ставь 👍 и забирай 📚 Базу знаний
PHP | Вопросы собесов
PHP | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что содержит инкапсуляция кроме сокрытия данных? 1. Контроль доступа: использование модификаторов public, protected, private для ограничения доступа. 2. Инкапсуляция логики: методы класса предоставляют контролируемый интерфейс для работы с данными. 3. Сохранение целостности: защита данных от некорректных изменений извне. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
PHP | Вопросы собесов
PHP | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Как сделать так, чтобы сессии не хранились в файле? Для хранения сессий не в файлах в PHP, можно использовать другие механизмы хранения, такие как базы данных, кэш-сервисы (например, Redis или Memcached) или специализированные хранилища. 🚩Хранение сессий в базе данных 1⃣Создайте таблицу для хранения сессий: CREATE TABLE sessions ( id VARCHAR(255) PRIMARY KEY, data TEXT, last_access TIMESTAMP ); 2⃣Создайте обработчики сессий: Создайте класс для обработки сессий, реализующий интерфейс SessionHandlerInterface. class DBSessionHandler implements SessionHandlerInterface { private $pdo; public function __construct(PDO $pdo) { $this->pdo = $pdo; } public function open($savePath, $sessionName) { return true; } public function close() { return true; } public function read($id) { $stmt = $this->pdo->prepare("SELECT data FROM sessions WHERE id = :id"); $stmt->bindParam(':id', $id); $stmt->execute(); $session = $stmt->fetch(PDO::FETCH_ASSOC); return $session ? $session['data'] : ''; } public function write($id, $data) { $stmt = $this->pdo->prepare("REPLACE INTO sessions (id, data, last_access) VALUES (:id, :data, NOW())"); $stmt->bindParam(':id', $id); $stmt->bindParam(':data', $data); return $stmt->execute(); } public function destroy($id) { $stmt = $this->pdo->prepare("DELETE FROM sessions WHERE id = :id"); $stmt->bindParam(':id', $id); return $stmt->execute(); } public function gc($maxlifetime) { $stmt = $this->pdo->prepare("DELETE FROM sessions WHERE last_access < NOW() - INTERVAL :maxlifetime SECOND"); $stmt->bindParam(':maxlifetime', $maxlifetime, PDO::PARAM_INT); return $stmt->execute(); } } 3⃣Инициализация сессий: $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'username', 'password'); $handler = new DBSessionHandler($pdo); session_set_save_handler($handler, true); session_start(); 🚩Хранение сессий в Redis 1⃣Установите расширение `phpredis`Для Ubuntu: sudo apt-get install php-redis 2⃣Используйте Redis для хранения сессий: Настройте PHP для использования Redis в качестве хранилища сессий, добавив настройки в файл php.ini или в коде. session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379" Ставь 👍 и забирай 📚 Базу знаний
PHP | Вопросы собесов
PHP | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Имеет ли значение регистр заголовка? Нет, не имеет. В HTTP заголовки регистронезависимы. Например, Content-Type, content-type, CONTENT-TYPE — это одно и то же. Но значения заголовков могут быть чувствительны к регистру — зависит от конкретного поля. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
PHP | Вопросы собесов
PHP | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Чем отличаются функции unset от unlink? Функции unset() и unlink() в PHP выполняют совершенно разные задачи, несмотря на похожие названия. 🟠`unset()` – удаление переменной unset() удаляет переменную из области видимости, но не освобождает память сразу. $a = "Привет, мир!"; unset($a); echo $a; // Ошибка: переменная не существует 🟠`unlink()` – удаление файла unlink() удаляет файл с диска. $file = "example.txt"; if (file_exists($file)) { unlink($file); // Удаляет файл echo "Файл удалён"; } else { echo "Файл не найден"; } Ставь 👍 и забирай 📚 Базу знаний
PHP | Вопросы собесов
PHP | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Какие виды уязвимости знаешь? В веб-разработке существует множество уязвимостей, но самые распространенные SQL-инъекции (SQL Injection) Межсайтовый скриптинг (XSS – Cross-Site Scripting) Межсайтовая подделка запросов (CSRF – Cross-Site Request Forgery) Ошибки аутентификации и управления сессиями Необработанные пользовательские данные Доступ к файлам и директориям (LFI/RFI – Local/Remote File Inclusion) Ошибки конфигурации сервера и утечки данных 🟠SQL-инъекции (SQL Injection) Атака, при которой злоумышленник вставляет вредоносный SQL-код в запрос, получая доступ к БД. Чтение / изменение данных Удаление таблиц Получение паролей пользователей Используем подготовленные запросы (Prepared Statements) $db = new PDO("mysql:host=localhost;dbname=test", "root", "password"); $stmt = $db->prepare("SELECT * FROM users WHERE email = :email"); $stmt->execute([':email' => $_POST['email']]); $user = $stmt->fetch(); 🟠Межсайтовый скриптинг (XSS – Cross-Site Scripting) Атака, при которой злоумышленник вставляет вредоносный JavaScript в веб-страницу. Кража cookies и сеансов Изменение содержимого страницы Фишинг Очистка данных перед выводом echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); 🟠Межсайтовая подделка запросов (CSRF – Cross-Site Request Forgery) Злоумышленник заставляет пользователя выполнить нежелательный запрос от его имени (например, перевести деньги). Изменение данных без ведома пользователя Подмена учетных записей Используем CSRF-токены $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); При отправке формы проверяем if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { die("CSRF атака!"); } 🟠Ошибки аутентификации и управления сессиями Если пароли хранятся неправильно или сессии уязвимы, злоумышленник может перехватить учетную запись пользователя. Кража пароля Перехват сессии Храним пароли с password_hash(), а не в открытом виде: $hash = password_hash("mypassword", PASSWORD_BCRYPT); 🟠Необработанные пользовательские данные Приложение принимает и использует входные данные без проверки. Возможность загрузки вредоносных файлов Выполнение вредоносного кода Проверяем загружаемые файлы (MIME-тип, расширение) Используем валидацию данных: $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); 🟠Доступ к файлам и директориям (LFI/RFI) Злоумышленник может загружать и выполнять опасные файлы через параметры в URL. Выполнение кода на сервере Чтение конфиденциальных файлов Запрещаем прямую загрузку файлов: $whitelist = ['jpg', 'png', 'gif']; $ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); if (!in_array($ext, $whitelist)) { die("Недопустимый файл!"); } 🟠Ошибки конфигурации сервера и утечки данных Если сервер настроен неправильно, можно случайно раскрыть важные данные. Вывод ошибок PHP в браузере Доступ к файлам .env, config.php Отключаем display_errors в php.ini: display_errors = Off Защищаем файлы .env через .htaccess Order allow,deny Deny from all Ставь 👍 и забирай 📚 Базу знаний
PHP | Вопросы собесов
PHP | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Слово "global" для чего используется? Ключевое слово global используется в PHP для доступа к глобальным переменным внутри функций. 🚩Как работает `global`? Доступ к глобальной переменной внутри функции $counter = 10; // Глобальная переменная function increment() { global $counter; // Доступ к глобальной переменной $counter++; } increment(); echo $counter; // ✅ 11 Использование нескольких глобальных переменных $a = 5; $b = 10; function sum() { global $a, $b; $b = $a + $b; // Меняем глобальную переменную $b } sum(); echo $b; // ✅ 15 🟠Альтернативный способ – `$GLOBALS` Можно использовать суперглобальный массив $GLOBALS, который хранит все глобальные переменные. $x = 3; $y = 7; function multiply() { $GLOBALS['y'] = $GLOBALS['x'] * $GLOBALS['y']; } multiply(); echo $y; // ✅ 21 🚩Когда `global` – плохая идея? Глобальные переменные усложняют отладку (их можно случайно изменить). Функции становятся зависимыми от внешних данных (плохо для тестирования). Лучше передавать переменные через аргументы функции. Альтернативный способ (без global) function increment($counter) { return $counter + 1; } $counter = 10; $counter = increment($counter); echo $counter; // ✅ 11 Ставь 👍 и забирай 📚 Базу знаний
PHP | Вопросы собесов
PHP | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Что такое acid? Это акроним, описывающий четыре ключевых свойства транзакций в системах управления базами данных (СУБД), обеспечивающие надежное выполнение транзакций даже в условиях ошибок, сбоев и множественного доступа. Эти свойства важны для обеспечения правильности и устойчивости данных. Он состоит из следующих компонентов: 🟠Атомарность (Atomicity) Гарантирует, что все операции в рамках одной транзакции либо выполняются полностью, либо не выполняются вообще. Если какая-либо часть транзакции не может быть завершена, система откатит все уже выполненные операции, возвращая базу данных в состояние, которое существовало до начала транзакции. Это "всё или ничего". 🟠Согласованность (Consistency) Означает, что каждая транзакция переводит базу данных из одного согласованного состояния в другое. Согласованность обеспечивает соблюдение всех правил и ограничений базы данных, таких как ключи, ограничения целостности и триггеры, после завершения транзакции. 🟠Изолированность (Isolation) Определяет способ одновременного выполнения множества транзакций без оказания влияния друг на друга. Это свойство предотвращает проблемы, связанные с одновременным доступом, такие как "грязное чтение", "неповторяющееся чтение" и "фантомное чтение". СУБД обычно предлагают различные уровни изоляции, которые могут быть настроены в зависимости от нужд приложения. 🟠Долговечность (Durability) Гарантирует, что как только транзакция была подтверждена, все изменения, сделанные транзакцией, сохраняются и остаются в базе данных даже в случае сбоя, например, при потере питания. Это означает, что система должна сохранять все записи в надежное, неизменяемое хранилище. Ставь 👍 и забирай 📚 Базу знаний
PHP | Вопросы собесов
PHP | Вопросы собесов
🔒Открыть пост
и посмотреть медиа
🤔 Какую проблему решают фабрика и фабричный метод? Фабрика и фабричный метод решают проблему создания объектов в программе, отделяя процесс их создания от бизнес-логики. Это помогает сделать код более гибким, давая возможность изменять способ создания объектов без изменения основного кода. Эти паттерны используются для улучшения тестируемости, расширяемости и поддерживаемости программы. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
PHP | Вопросы собесов
Динамика подписчиков
+-0.1% за 30 дней
Текущие
2,329
Месяц назад
2,331
Средний рост
+0 / день
Обновлено
6 часов назад

Отзывы о канале PHP | Вопросы собесов

Авторизуйтесь, чтобы оставить отзыв

Только зарегистрированные пользователи могут делиться своим мнением.

Пока нет отзывов

Станьте первым, кто поделится своим впечатлением об этом ресурсе!

Похожие ресурсы

28

Ежедневные акции и скидки на технологии и гаджеты.

Канал

Удалёнка для QA и тестировщиков.

Канал
Junior CPO - записки CPO

Junior CPO - записки CPO

Технологии
29

Записки junior CPO: путь в product management.

Канал
Переход на светлую тему
Главная Каталог Подборки Блог Вход