PHP | Вопросы собесов
Ir al canal en Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Mostrar más2 326
Suscriptores
-124 horas
+17 días
-1130 días
Archivo de publicaciones
\"); \n// Выведет: <script>alert('Hacked!')</script>\n\nСтавь 👍 и забирай 📚 Базу знаний","datePublished":"2026-09-10T09:05:31Z","dateModified":"2026-09-10T09:05:31Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":283},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":10},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2}]}},{"@type":"ListItem","position":7,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2373","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2373","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2373","headline":"🤔 Зачем нужны паттерны проектирования? Это повторяемые решения типичных задач. Они помогают разработчикам соз…","articleBody":"🤔 Зачем нужны паттерны проектирования?\n\nЭто повторяемые решения типичных задач. Они помогают разработчикам создавать программы, которые легко поддерживать, расширять и модифицировать. Паттерны проектирования упрощают процесс разработки, обеспечивая проверенные способы решения распространенных проблем, что экономит время и силы разработчиков.\n\n🚩Зачем они нужны\n\n🟠Повторяемость и стандартность\nПаттерны обеспечивают повторяемость решений для часто возникающих задач, что снижает вероятность ошибок и улучшает читабельность кода.\n🟠Улучшение коммуникации\nИспользование общепринятых паттернов облегчает коммуникацию между разработчиками. Когда все понимают, что подразумевается под, например, «одиночкой» (singleton), это упрощает обсуждение архитектуры системы.\n🟠Повышение качества кода\nПаттерны проектирования способствуют созданию более структурированного, гибкого и поддерживаемого кода.\n🟠Экономия времени и ресурсов\nПаттерны позволяют не изобретать велосипед, а использовать проверенные решения, что ускоряет процесс разработки.\n\n🚩Как они используются\n\nПаттерны проектирования делятся на несколько категорий, каждая из которых решает определенный тип задач:\n🟠Порождающие паттерны\nЭти паттерны касаются создания объектов. Примеры: Singleton, Factory, Builder.\n🟠Структурные паттерны\nЭти паттерны касаются построения структуры больших объектов. Примеры: Adapter, Composite, Decorator.\n🟠Поведенческие паттерны\nЭти паттерны касаются взаимодействия и распределения обязанностей между объектами. Примеры: Observer, Strategy, Command.\nclass Singleton {\n private static $instance;\n\n private function __construct() {\n // Закрытый конструктор предотвращает создание объекта через new\n }\n\n public static function getInstance() {\n if (self::$instance === null) {\n self::$instance = new self();\n }\n return self::$instance;\n }\n\n public function someBusinessLogic() {\n // Некоторая бизнес-логика\n }\n}\n\n// Использование Singleton\n$singleton = Singleton::getInstance();\n$singleton->someBusinessLogic();\n\nСтавь 👍 и забирай 📚 Базу знаний","datePublished":"2026-09-09T09:05:41Z","dateModified":"2026-09-09T09:05:41Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":278},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":4}]}},{"@type":"ListItem","position":8,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2372","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2372","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2372","headline":"🤔 Что такое Entity? Это объект, представляющий конкретную сущность в системе или домене. Обычно он имеет уник…","articleBody":"🤔 Что такое Entity?\n\nЭто объект, представляющий конкретную сущность в системе или домене. Обычно он имеет уникальный идентификатор и может изменяться в течение своего жизненного цикла.\n\nСтавь 👍 если знал ответ, 🔥 если нет\nЗабирай 📚 Базу знаний","datePublished":"2026-09-08T16:11:26Z","dateModified":"2026-09-08T16:11:26Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":323},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2}]}},{"@type":"ListItem","position":9,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2371","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2371","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2371","headline":"🤔 В чем заключается обработка ошибок и исключений? Обработка ошибок в PHP – это механизм, который помогает на…","articleBody":"🤔 В чем заключается обработка ошибок и исключений?\n\nОбработка ошибок в PHP – это механизм, который помогает находить, интерпретировать и корректно реагировать на ошибки во время выполнения программы. Для этого в PHP используются два подхода: \n\nТрадиционные ошибки (error_reporting, set_error_handler) \n*Исключения (try-catch, throw) \n\n🟠Традиционная обработка ошибок \nPHP изначально использовал механизм ошибок, которые делятся на несколько типов: \nE_ERROR – фатальная ошибка, завершает выполнение скрипта. \nE_WARNING – предупреждение, но скрипт продолжает выполняться. \nE_NOTICE – уведомление о потенциальной проблеме. \necho $undefined_var; // E_NOTICE: Undefined variable\n\n🚩Способы обработки ошибок \n\n🟠error_reporting() – управление уровнем ошибок\nФункция error_reporting() позволяет включать или выключать определённые типы ошибок. \nerror_reporting(E_ALL & ~E_NOTICE); // Показывать все ошибки, кроме E_NOTICE\n\n🟠set_error_handler() – создание пользовательского обработчика ошибок\nМожно задать свою функцию, которая будет реагировать на ошибки. \nfunction myErrorHandler($errno, $errstr, $errfile, $errline) {\n echo \"Ошибка [$errno]: $errstr в файле $errfile на строке $errline\";\n}\nset_error_handler(\"myErrorHandler\");\n\n// Вызовем ошибку\necho 10 / 0; // Division by zero (E_WARNING)\n\n🟠error_log() – запись ошибок в файл\nОшибки можно не выводить на экран, а записывать в файл. \nerror_log(\"Ошибка: что-то пошло не так!\", 3, \"errors.log\");\n\n🚩Исключения (`try-catch`) \n\nС версии PHP 5 появился механизм исключений, который более удобен и структурирован. Исключения позволяют: \nПерехватывать ошибки и управлять их обработкой. \nИспользовать вложенные блоки try-catch для детальной обработки. \nСоздавать собственные классы исключений. \ntry {\n if (!file_exists(\"somefile.txt\")) {\n throw new Exception(\"Файл не найден\");\n }\n} catch (Exception $e) {\n echo \"Ошибка: \" . $e->getMessage();\n}\n\n🟠Классы исключений\nPHP позволяет использовать предопределённый класс Exception, а также создавать свои. \nclass MyException extends Exception {}\n\ntry {\n throw new MyException(\"Это моя ошибка\");\n} catch (MyException $e) {\n echo \"Поймано исключение: \" . $e->getMessage();\n}\n\n🟠Блок `finally`\nИспользуется для выполнения кода в любом случае – независимо от того, было исключение или нет. \ntry {\n echo \"Попытка выполнить код\\n\";\n} catch (Exception $e) {\n echo \"Ошибка поймана\\n\";\n} finally {\n echo \"Этот код выполнится в любом случае\\n\";\n}\n\nСтавь 👍 и забирай 📚 Базу знаний","datePublished":"2026-09-08T09:05:30Z","dateModified":"2026-09-08T09:05:30Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":325},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":5}]}},{"@type":"ListItem","position":10,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2370","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2370","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2370","headline":"Квартиры Петербург Новостройка Рассрочка от застройщика Жилой комплекс \"Квартал Заречье\" Санкт-Петербург. Кол…","articleBody":"Квартиры Петербург Новостройка Рассрочка от застройщика\n\nЖилой комплекс \"Квартал Заречье\" \nСанкт-Петербург. Колпино.\n\n4 девятиэтажных жилых корпуса\n8-этажный крытый гараж на 496 парковочных мест\n\nВ живописном месте у реки Ижора. \nНа первых этажах будут размещены магазины, кофейни, поликлиника и зона коворкинга. \n\nПерейти на сайт\n\nФинансовые услуги оказывает: ПАО «Сбербанк». Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО «СЗ «ЗАГОРОДНАЯ, 71».\n\n#реклама \nквартал-заречье.рф\nО рекламодателе","datePublished":"2026-09-07T22:14:30Z","dateModified":"2026-09-09T20:26:40Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":226}]}},{"@type":"ListItem","position":11,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2369","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2369","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2369","headline":"🤔 Что такое поведение copy-on-write? Это механизм оптимизации памяти, при котором копия объекта создаётся тол…","articleBody":"🤔 Что такое поведение copy-on-write?\n\nЭто механизм оптимизации памяти, при котором копия объекта создаётся только в случае изменения исходного объекта. До изменений объекты разделяют один и тот же адрес в памяти.\n\nСтавь 👍 если знал ответ, 🔥 если нет\nЗабирай 📚 Базу знаний","datePublished":"2026-09-07T16:11:18Z","dateModified":"2026-09-07T16:11:18Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":326},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":4}]}},{"@type":"ListItem","position":12,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2368","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2368","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2368","headline":"🤔 Что такое сервис локатор? Это паттерн проектирования, который используется для абстрагирования процесса пои…","articleBody":"🤔 Что такое сервис локатор? \n\nЭто паттерн проектирования, который используется для абстрагирования процесса поиска и предоставления зависимостей объектам. Вместо того чтобы объекты сами создавали свои зависимости или получали их через конструкторы, они запрашивают их у специального объекта – локатора сервисов.\n\n🚩Зачем нужен \n\n🟠Упрощение управления зависимостями\nВсе зависимости находятся в одном месте, что упрощает их управление и замену.\n🟠Гибкость\nЛегко менять конкретные реализации зависимостей без изменения клиентского кода.\n🟠Централизация\nВсе зависимости зарегистрированы и управляются в одном месте.\n🟠Улучшение тестирования\nЛегко подменять зависимости на моки для проведения тестов.\n\n🚩Как используется \n\nПаттерн Service Locator может быть реализован через создание централизованного реестра, который хранит информацию о различных сервисах и предоставляет их по запросу.\n\n1⃣Создание интерфейсов сервисов\ninterface Logger {\n public function log($message);\n}\n\ninterface PaymentProcessor {\n public function processPayment($amount);\n}\n\n2⃣Реализация сервисов\nclass FileLogger implements Logger {\n public function log($message) {\n echo \"Logging message to a file: $message\";\n }\n}\n\nclass StripePaymentProcessor implements PaymentProcessor {\n public function processPayment($amount) {\n echo \"Processing payment of $amount through Stripe\";\n }\n}\n\n3⃣Реализация Service Locator\nclass ServiceLocator {\n private $services = [];\n\n public function register($serviceName, $service) {\n $this->services[$serviceName] = $service;\n }\n\n public function get($serviceName) {\n if (!isset($this->services[$serviceName])) {\n throw new Exception(\"Service not found: \" . $serviceName);\n }\n return $this->services[$serviceName];\n }\n}\n\n4⃣Регистрация и использование сервисов\n$serviceLocator = new ServiceLocator();\n\n// Регистрация сервисов\n$serviceLocator->register('logger', new FileLogger());\n$serviceLocator->register('paymentProcessor', new StripePaymentProcessor());\n\n// Использование сервисов\n$logger = $serviceLocator->get('logger');\n$logger->log(\"This is a log message.\"); // Вывод: Logging message to a file: This is a log message.\n\n$paymentProcessor = $serviceLocator->get('paymentProcessor');\n$paymentProcessor->processPayment(100); // Вывод: Processing payment of 100 through Stripe\n\n🚩Плюсы и минусы\n\n➕Централизация\nВсе зависимости хранятся и управляются в одном месте.\n➕Гибкость\nЛегко изменять зависимости без изменения кода, который их использует.\n➕Удобство тестирования\nЛегко подменять реальные зависимости на моки для тестирования.\n➖Скрытые зависимости\nЗависимости не видны явно в коде, что может усложнить понимание.\n➖Сложность\nМожет привести к более сложной архитектуре, особенно в больших приложениях.\n\nСтавь 👍 и забирай 📚 Базу знаний","datePublished":"2026-09-07T09:05:39Z","dateModified":"2026-09-07T09:05:39Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":314},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":3}]}},{"@type":"ListItem","position":13,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2367","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2367","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2367","headline":"🤔 Для чего нужна рефлексия? Рефлексия (Reflection) – это механизм анализа классов, методов, свойств и других…","articleBody":"🤔 Для чего нужна рефлексия?\n\nРефлексия (Reflection) – это механизм анализа классов, методов, свойств и других структур во время выполнения. Она позволяет получать информацию о коде и даже изменять его динамически. \n\n🚩Когда полезна рефлексия? \n\n🟠Фреймворки и DI-контейнеры \n- Используется для автоматического внедрения зависимостей (Dependency Injection, DI). \n- Например, Laravel использует рефлексию в Container для автоматического создания объектов. \nclass Database {\n public function connect() {\n return \"Подключение к базе данных\";\n }\n}\n\nclass UserService {\n private $db;\n\n public function __construct(Database $db) {\n $this->db = $db;\n }\n\n public function getUser() {\n return \"Пользователь найден\";\n }\n}\n\nfunction resolve($class) {\n $reflector = new ReflectionClass($class);\n $constructor = $reflector->getConstructor();\n \n if (!$constructor) {\n return new $class;\n }\n\n $params = $constructor->getParameters();\n $dependencies = [];\n\n foreach ($params as $param) {\n $type = $param->getType();\n if ($type) {\n $dependencies[] = resolve($type->getName());\n }\n }\n\n return $reflector->newInstanceArgs($dependencies);\n}\n\n$service = resolve(UserService::class);\necho $service->getUser(); // \"Пользователь найден\"\n\n🟠Декораторы, аннотации и атрибуты \n- В PHP 8 появились атрибуты (аннотации), и рефлексия помогает их читать. \n- Используется в Symfony, Doctrine для работы с ORM. \n#[Attribute]\nclass Route {\n public function __construct(public string $path) {}\n}\n\nclass Controller {\n #[Route('/home')]\n public function home() {\n return \"Домашняя страница\";\n }\n}\n\n$reflection = new ReflectionMethod(Controller::class, 'home');\n$attributes = $reflection->getAttributes(Route::class);\n$route = $attributes[0]->newInstance();\n\necho $route->path; // \"/home\"\n\n🟠Автоматическая генерация документации \n- Реально использовать для автоматического создания Swagger/OpenAPI. \n- Можно извлекать PHPDoc-комментарии и на их основе генерировать документацию. \nclass Example {\n /**\n * Возвращает приветствие\n * @return string\n */\n public function sayHello() {\n return \"Привет!\";\n }\n}\n\n$reflection = new ReflectionMethod(Example::class, 'sayHello');\necho $reflection->getDocComment();\n\nСтавь 👍 и забирай 📚 Базу знаний","datePublished":"2026-09-06T09:05:41Z","dateModified":"2026-09-06T09:05:41Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":267},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":3}]}},{"@type":"ListItem","position":14,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2366","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2366","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2366","headline":"Из разработчика в тимлиды: как говорить с людьми Стать тимлидом — значит научиться говорить с людьми о сложно…","articleBody":"Из разработчика в тимлиды: как говорить с людьми\n\nСтать тимлидом — значит научиться говорить с людьми о сложном. Но как сказать разработчику, что код — \"не очень\", не обидев? \n\n📅 16 сентября в 20:00 Александр Пряхин разберет техники обратной связи без эскалации. Узнаете, как формулировать по фактам, снижать защитную реакцию и завершать разговор договоренностями. Для разработчиков, готовящихся к лидерству. \n\nУзнать больше\n\n#реклама 16+\notus.ru\nО рекламодателе","datePublished":"2026-09-05T22:15:45Z","dateModified":"2026-09-07T20:18:47Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"image":["https://n1.tlmtr.cc/p/_GWTzhF-HKvHdFIUywS19-SYwwTMEN8Pjpl-PHXq_XaE?ty=l"],"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":204}]}},{"@type":"ListItem","position":15,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2365","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2365","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2365","headline":"🤔 В чем преимущества асинхронного шифрования? 1. Безопасность: открытый ключ можно свободно распространять, з…","articleBody":"🤔 В чем преимущества асинхронного шифрования?\n\n1. Безопасность: открытый ключ можно свободно распространять, закрытый ключ остаётся приватным.\n2. Удобство обмена: не требуется передавать секретный ключ для шифрования.\n3. Поддержка цифровой подписи: позволяет проверять подлинность отправителя.\n\nСтавь 👍 если знал ответ, 🔥 если нет\nЗабирай 📚 Базу знаний","datePublished":"2026-09-05T16:11:36Z","dateModified":"2026-09-05T16:11:36Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":279},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":3}]}},{"@type":"ListItem","position":16,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2364","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2364","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2364","headline":"🤔 Для чего используется индексация и что это такое? Индексация — это механизм в базах данных, который ускоряе…","articleBody":"🤔 Для чего используется индексация и что это такое?\n\nИндексация — это механизм в базах данных, который ускоряет поиск данных в таблицах. Индекс работает как оглавление книги: вместо того чтобы просматривать всю таблицу, база находит нужные данные по индексу. \n\n🚩Зачем нужна индексация? \n\nУскоряет поиск (SELECT) – база данных быстрее находит нужные строки. \nУскоряет сортировку (ORDER BY) – индексы помогают быстрее упорядочивать данные. \nОптимизирует соединения таблиц (JOIN). \n\nЗамедляют операции INSERT, UPDATE, DELETE (так как индекс тоже нужно обновлять). \nИндексы занимают дополнительное место в памяти. \n\n🚩Пример индекса в SQL \n\n1⃣Создание индекса\nCREATE INDEX idx_users_name ON users(name);\n\nТеперь поиск по name будет быстрее \nSELECT * FROM users WHERE name = 'Alice';\n\n🚩Типы индексов \n\n🟠Обычный (B-Tree) индекс \nОсновной вид индекса, который ускоряет поиск по WHERE. \nCREATE INDEX idx_name ON users(name);\n\n🟠UNIQUE-индекс \nГарантирует, что значения в колонке не будут повторяться. \nCREATE UNIQUE INDEX idx_email ON users(email);\n\n🟠FULLTEXT-индекс \nИспользуется для быстрого поиска по тексту. \nCREATE FULLTEXT INDEX idx_text ON articles(content);\n\n🟠Composite (Составной) индекс \nИндекс сразу на несколько колонок (например, name + age). \nCREATE INDEX idx_name_age ON users(name, age);\n\nСтавь 👍 и забирай 📚 Базу знаний","datePublished":"2026-09-05T09:05:41Z","dateModified":"2026-09-05T09:05:41Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":312},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":3}]}},{"@type":"ListItem","position":17,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2363","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2363","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2363","headline":"Розыгрыш Яндекс Станции уже в боте Любимые блогеры, розыгрыши, новости и анонсы в одном боте! Узнать больше #…","articleBody":"Розыгрыш Яндекс Станции уже в боте\n\nЛюбимые блогеры, розыгрыши, новости и анонсы в одном боте! \n\nУзнать больше\n\n#реклама 16+\nrefer.id\nО рекламодателе","datePublished":"2026-09-04T21:39:32Z","dateModified":"2026-09-06T20:08:09Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"image":["https://n3.tlmtr.cc/p/_XuidB1NoVkE05bind93NGCjlZnpJkoDlzXXTjXMcKWs?ty=l"],"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":191},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":1}]}},{"@type":"ListItem","position":18,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2362","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2362","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2362","headline":"🤔 Что содержит инкапсуляция кроме сокрытия данных? Инкапсуляция — это не только скрытие данных, но и ограниче…","articleBody":"🤔 Что содержит инкапсуляция кроме сокрытия данных?\n\nИнкапсуляция — это не только скрытие данных, но и ограничение доступа к внутренним деталям объекта + защита логики от внешнего вмешательства. \n\n🚩Основные аспекты инкапсуляции\n \nСокрытие данных (private, protected). \nКонтроль доступа через геттеры и сеттеры. \nЗащита объекта от некорректных данных. \nЧёткое API для работы с объектом. \nРазделение ответственности внутри класса. \n\n🟠Сокрытие данных (`private`, `protected`) \nСкрываем внутренние переменные, чтобы их нельзя было изменить напрямую. \nclass User {\n private string $password; // Прямой доступ запрещён\n\n public function __construct(string $password) {\n $this->password = $password;\n }\n}\n\n$user = new User(\"123456\");\n// echo $user->password; // ❌ Ошибка! Доступ запрещён\n\n🟠Контроль доступа через геттеры и сеттеры \nПредоставляем доступ к данным через методы (контролируем поведение).\nclass User {\n private string $password;\n\n public function __construct(string $password) {\n $this->setPassword($password);\n }\n\n public function getPassword(): string {\n return \"Секретный пароль скрыт\"; // Никогда не выдаём оригинал\n }\n\n public function setPassword(string $password) {\n if (strlen($password) < 6) {\n throw new Exception(\"Пароль слишком короткий!\");\n }\n $this->password = password_hash($password, PASSWORD_DEFAULT);\n }\n}\n\n$user = new User(\"securePass\");\n// echo $user->password; // ❌ Ошибка! Доступ запрещён\necho $user->getPassword(); // ✅ \"Секретный пароль скрыт\"\n\n🟠Защита объекта от некорректных данных \nИнкапсуляция позволяет проверять данные перед их сохранением.\nclass Product {\n private float $price;\n\n public function setPrice(float $price) {\n if ($price < 0) {\n throw new Exception(\"Цена не может быть отрицательной!\");\n }\n $this->price = $price;\n }\n}\n\n🟠Чёткое API для работы с объектом \nИнкапсуляция создаёт удобный интерфейс для работы с классом. \nclass Order {\n private array $items = [];\n\n public function addItem(string $item) {\n $this->items[] = $item;\n }\n\n public function getItems(): array {\n return $this->items;\n }\n}\n\n$order = new Order();\n$order->addItem(\"Телефон\");\nprint_r($order->getItems()); // ✅ [\"Телефон\"]\n\n🟠Разделение ответственности внутри класса \nИнкапсуляция помогает отделить внутреннюю логику от интерфейса.\nclass BankAccount {\n private float $balance = 0;\n\n private function logTransaction(float $amount) {\n echo \"Транзакция: $amount\\n\";\n }\n\n public function deposit(float $amount) {\n $this->balance += $amount;\n $this->logTransaction($amount);\n }\n\n public function getBalance(): float {\n return $this->balance;\n }\n}\n\n$account = new BankAccount();\n$account->deposit(100);\necho $account->getBalance(); // ✅ 100\n\nСтавь 👍 и забирай 📚 Базу знаний","datePublished":"2026-09-04T09:05:47Z","dateModified":"2026-09-04T09:05:47Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":275},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":3}]}},{"@type":"ListItem","position":19,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2361","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2361","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2361","headline":"🤔 Что содержит инкапсуляция кроме сокрытия данных? 1. Контроль доступа: использование модификаторов public, p…","articleBody":"🤔 Что содержит инкапсуляция кроме сокрытия данных?\n\n1. Контроль доступа: использование модификаторов public, protected, private для ограничения доступа.\n2. Инкапсуляция логики: методы класса предоставляют контролируемый интерфейс для работы с данными.\n3. Сохранение целостности: защита данных от некорректных изменений извне.\n\nСтавь 👍 если знал ответ, 🔥 если нет\nЗабирай 📚 Базу знаний","datePublished":"2026-09-03T16:11:27Z","dateModified":"2026-09-03T16:11:27Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":292},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2}]}},{"@type":"ListItem","position":20,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2360","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2360","mainEntityOfPage":"https://telemetr.io/es/channels/1905887817-easy_php_ru/posts/2360","headline":"Яндекс Музыка до 360 дней бесплатно Яндекс Музыка для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже…","articleBody":"Яндекс Музыка до 360 дней бесплатно\n\nЯндекс Музыка для вас и 3-х ваших близких.\nКинопоиск и Яндекс Книги тоже в мультиподписке Плюс.\nПопробуйте бесплатно❤️ \n\nСлушать\n\n#реклама 18+\nmusic.yandex.ru\nО рекламодателе","datePublished":"2026-09-03T13:16:53Z","dateModified":"2026-09-05T11:27:09Z","author":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"publisher":{"@type":"Organization","name":"PHP | Вопросы собесов","url":"https://telemetr.io/es/channels/1905887817-easy_php_ru","image":"https://img.tlmtr.io/c/24YUu5/5224322902764150052?ty=x"},"image":["https://n1.tlmtr.cc/p/_TPJWoNmdaRc7tbEXzo-m-ep8QjQsb1evGuzFxLxB22g?ty=l"],"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":202}]}}]}
+5




🤔 Где можно столкнуться с динамической типизацией?
Динамическая типизация характерна для языков, таких как Python, JavaScript, PHP. Например, переменная может быть сначала числом, а затем строкой.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Регистрируйтесь на Yandex Scale 2026
Главная конференция Yandex Cloud.
Узнайте о сервисах, которые меняют ваш бизнес.
4 офлайн-трека (AI, Infra + DevTools, Data, Security), онлайн-трек Deep Tech, воркшопы по ИИ и интерактивы. Подробнее о программе читайте в карточках🗒
📅24 сентября
🚗Москва + 💻онлайн
Участие бесплатное!
Зарегистрироваться
#реклама 16+
scale.yandex.cloud
О рекламодателе
🤔 Что такое Cookies в PHP?
Cookies (Куки) – это небольшие файлы, которые браузер сохраняет на компьютере пользователя и отправляет серверу при каждом запросе.
🚩Как работают Cookies?
Установка Cookie в PHP
setcookie("username", "Alice", time() + 3600, "/");
Чтение Cookie в PHP
echo $_COOKIE["username"]; // ✅ Alice
Удаление Cookie
setcookie("username", "", time() - 3600, "/");
🚩Где используются Cookies?
Авторизация (сохранение логина).
Запоминание настроек (тема, язык).
Корзина товаров (если нет сессий).
Отслеживание пользователей (Google Analytics, реклама).
🚩Ограничения и безопасность Cookies
Максимальный размер – 4KB (поэтому для больших данных лучше использовать SESSION).
Можно изменить в браузере (поэтому не храните пароли в куках!).
Уязвимость XSS → если сайт подвержен XSS-атакам, злоумышленник может украсть куки.
Защита Cookies
setcookie("secure_cookie", "value", time() + 3600, "/", "", true, true);
Ставь 👍 и забирай 📚 Базу знанийХочешь карьеру в ИТ? Начни с программы «Мини-СЕО»
⚡Попади в команду топ-менеджера Т-Банка и работай над стратегическими проектами компании.
В зависимости от трека ты сможешь:
— разрабатывать эффективные методологии для оценки влияния продукта на экосистему с Владимиром Любимовым;
— исследовать экосистемы и находить наиболее перспективные точки роста с Максимом Безруковым;
— развивать сегмент автолюбителей и заниматься региональной экспансией Т-Банка с Жорой Сукасяном;
— вести стратегический план развития 3P, развивать AI-продукты и искать, где AI может упростить работу команды, c Денисом Коротовым;
— участвовать в создании B2B-маркетплейса c Владимиром Абазовым.
Программа подойдет студентам и джуниор-специалистам, которые сильны в математике, аналитике и программировании. Успей подать заявку до 25 сентября!
Зарегистрироваться
#реклама 16+
t-miniceo.ru
О рекламодателе
🤔 Как устроен Git?
Это распределенная система контроля версий, работающая на основе графа коммитов и хранения изменений через хеши (SHA-1).
1. Объектная модель:
- Commit – снимок состояния проекта.
- Tree – каталог файлов в коммите.
- Blob – сами файлы (содержимое).
2. Система ссылок (HEAD, branches, tags).
3. Механизм staging (индексация изменений) перед коммитом.
4. Быстрая работа за счет хранения только изменений (deltas) и поддержки локального репозитория.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Где мы делаем фильтрацию данных?
Фильтрацию данных в PHP можно делать в нескольких местах в зависимости от контекста. Основные области фильтрации:
🚩Фильтрация входных данных
Когда мы получаем данные от пользователя (
$_GET, $_POST, $_REQUEST), важно очищать их от нежелательных значений.
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
Фильтрация массива $_POST через filter_var_array()
$filters = [
'name' => FILTER_SANITIZE_STRING,
'email' => FILTER_VALIDATE_EMAIL,
'age' => FILTER_VALIDATE_INT
];
$filteredData = filter_var_array($_POST, $filters);
🚩Фильтрация перед сохранением в базу данных
Перед вставкой в SQL важно удалять потенциально опасные символы, чтобы избежать SQL-инъекций.
$db = new PDO("mysql:host=localhost;dbname=test", "root", "password");
$stmt = $db->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute([
':name' => htmlspecialchars($_POST['name']),
':email' => $_POST['email']
]);
🚩Фильтрация данных внутри кода
Если данные поступают из разных источников, мы можем использовать фильтрующие функции PHP:
Очистка строки от HTML
$cleanText = strip_tags("<h1>Hello</h1>"); // "Hello"
Удаление пробелов
$trimmed = trim(" example "); // "example"
Приведение к числу
$number = filter_var("42abc", FILTER_SANITIZE_NUMBER_INT); // 42
🚩Фильтрация перед выводом (защита от XSS)
Перед выводом в браузер очищаем данные от HTML/JS-кода, чтобы злоумышленник не внедрил скрипты.
echo htmlspecialchars("<script>alert('Hacked!')</script>");
// Выведет: <script>alert('Hacked!')</script>
Ставь 👍 и забирай 📚 Базу знаний🤔 Зачем нужны паттерны проектирования?
Это повторяемые решения типичных задач. Они помогают разработчикам создавать программы, которые легко поддерживать, расширять и модифицировать. Паттерны проектирования упрощают процесс разработки, обеспечивая проверенные способы решения распространенных проблем, что экономит время и силы разработчиков.
🚩Зачем они нужны
🟠Повторяемость и стандартность
Паттерны обеспечивают повторяемость решений для часто возникающих задач, что снижает вероятность ошибок и улучшает читабельность кода.
🟠Улучшение коммуникации
Использование общепринятых паттернов облегчает коммуникацию между разработчиками. Когда все понимают, что подразумевается под, например, «одиночкой» (singleton), это упрощает обсуждение архитектуры системы.
🟠Повышение качества кода
Паттерны проектирования способствуют созданию более структурированного, гибкого и поддерживаемого кода.
🟠Экономия времени и ресурсов
Паттерны позволяют не изобретать велосипед, а использовать проверенные решения, что ускоряет процесс разработки.
🚩Как они используются
Паттерны проектирования делятся на несколько категорий, каждая из которых решает определенный тип задач:
🟠Порождающие паттерны
Эти паттерны касаются создания объектов. Примеры: Singleton, Factory, Builder.
🟠Структурные паттерны
Эти паттерны касаются построения структуры больших объектов. Примеры: Adapter, Composite, Decorator.
🟠Поведенческие паттерны
Эти паттерны касаются взаимодействия и распределения обязанностей между объектами. Примеры: Observer, Strategy, Command.
class Singleton {
private static $instance;
private function __construct() {
// Закрытый конструктор предотвращает создание объекта через new
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function someBusinessLogic() {
// Некоторая бизнес-логика
}
}
// Использование Singleton
$singleton = Singleton::getInstance();
$singleton->someBusinessLogic();
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое Entity?
Это объект, представляющий конкретную сущность в системе или домене. Обычно он имеет уникальный идентификатор и может изменяться в течение своего жизненного цикла.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем заключается обработка ошибок и исключений?
Обработка ошибок в PHP – это механизм, который помогает находить, интерпретировать и корректно реагировать на ошибки во время выполнения программы. Для этого в PHP используются два подхода:
Традиционные ошибки (
error_reporting, set_error_handler)
*Исключения (try-catch, throw)
🟠Традиционная обработка ошибок
PHP изначально использовал механизм ошибок, которые делятся на несколько типов:
E_ERROR – фатальная ошибка, завершает выполнение скрипта.
E_WARNING – предупреждение, но скрипт продолжает выполняться.
E_NOTICE – уведомление о потенциальной проблеме.
echo $undefined_var; // E_NOTICE: Undefined variable
🚩Способы обработки ошибок
🟠error_reporting() – управление уровнем ошибок
Функция error_reporting() позволяет включать или выключать определённые типы ошибок.
error_reporting(E_ALL & ~E_NOTICE); // Показывать все ошибки, кроме E_NOTICE
🟠set_error_handler() – создание пользовательского обработчика ошибок
Можно задать свою функцию, которая будет реагировать на ошибки.
function myErrorHandler($errno, $errstr, $errfile, $errline) {
echo "Ошибка [$errno]: $errstr в файле $errfile на строке $errline";
}
set_error_handler("myErrorHandler");
// Вызовем ошибку
echo 10 / 0; // Division by zero (E_WARNING)
🟠error_log() – запись ошибок в файл
Ошибки можно не выводить на экран, а записывать в файл.
error_log("Ошибка: что-то пошло не так!", 3, "errors.log");
🚩Исключения (`try-catch`)
С версии PHP 5 появился механизм исключений, который более удобен и структурирован. Исключения позволяют:
Перехватывать ошибки и управлять их обработкой.
Использовать вложенные блоки try-catch для детальной обработки.
Создавать собственные классы исключений.
try {
if (!file_exists("somefile.txt")) {
throw new Exception("Файл не найден");
}
} catch (Exception $e) {
echo "Ошибка: " . $e->getMessage();
}
🟠Классы исключений
PHP позволяет использовать предопределённый класс Exception, а также создавать свои.
class MyException extends Exception {}
try {
throw new MyException("Это моя ошибка");
} catch (MyException $e) {
echo "Поймано исключение: " . $e->getMessage();
}
🟠Блок `finally`
Используется для выполнения кода в любом случае – независимо от того, было исключение или нет.
try {
echo "Попытка выполнить код\n";
} catch (Exception $e) {
echo "Ошибка поймана\n";
} finally {
echo "Этот код выполнится в любом случае\n";
}
Ставь 👍 и забирай 📚 Базу знанийКвартиры Петербург Новостройка Рассрочка от застройщика
Жилой комплекс "Квартал Заречье"
Санкт-Петербург. Колпино.
4 девятиэтажных жилых корпуса
8-этажный крытый гараж на 496 парковочных мест
В живописном месте у реки Ижора.
На первых этажах будут размещены магазины, кофейни, поликлиника и зона коворкинга.
Перейти на сайт
Финансовые услуги оказывает: ПАО «Сбербанк». Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО «СЗ «ЗАГОРОДНАЯ, 71».
#реклама
квартал-заречье.рф
О рекламодателе
🤔 Что такое поведение copy-on-write?
Это механизм оптимизации памяти, при котором копия объекта создаётся только в случае изменения исходного объекта. До изменений объекты разделяют один и тот же адрес в памяти.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое сервис локатор?
Это паттерн проектирования, который используется для абстрагирования процесса поиска и предоставления зависимостей объектам. Вместо того чтобы объекты сами создавали свои зависимости или получали их через конструкторы, они запрашивают их у специального объекта – локатора сервисов.
🚩Зачем нужен
🟠Упрощение управления зависимостями
Все зависимости находятся в одном месте, что упрощает их управление и замену.
🟠Гибкость
Легко менять конкретные реализации зависимостей без изменения клиентского кода.
🟠Централизация
Все зависимости зарегистрированы и управляются в одном месте.
🟠Улучшение тестирования
Легко подменять зависимости на моки для проведения тестов.
🚩Как используется
Паттерн Service Locator может быть реализован через создание централизованного реестра, который хранит информацию о различных сервисах и предоставляет их по запросу.
1⃣Создание интерфейсов сервисов
interface Logger {
public function log($message);
}
interface PaymentProcessor {
public function processPayment($amount);
}
2⃣Реализация сервисов
class FileLogger implements Logger {
public function log($message) {
echo "Logging message to a file: $message";
}
}
class StripePaymentProcessor implements PaymentProcessor {
public function processPayment($amount) {
echo "Processing payment of $amount through Stripe";
}
}
3⃣Реализация Service Locator
class ServiceLocator {
private $services = [];
public function register($serviceName, $service) {
$this->services[$serviceName] = $service;
}
public function get($serviceName) {
if (!isset($this->services[$serviceName])) {
throw new Exception("Service not found: " . $serviceName);
}
return $this->services[$serviceName];
}
}
4⃣Регистрация и использование сервисов
$serviceLocator = new ServiceLocator();
// Регистрация сервисов
$serviceLocator->register('logger', new FileLogger());
$serviceLocator->register('paymentProcessor', new StripePaymentProcessor());
// Использование сервисов
$logger = $serviceLocator->get('logger');
$logger->log("This is a log message."); // Вывод: Logging message to a file: This is a log message.
$paymentProcessor = $serviceLocator->get('paymentProcessor');
$paymentProcessor->processPayment(100); // Вывод: Processing payment of 100 through Stripe
🚩Плюсы и минусы
➕Централизация
Все зависимости хранятся и управляются в одном месте.
➕Гибкость
Легко изменять зависимости без изменения кода, который их использует.
➕Удобство тестирования
Легко подменять реальные зависимости на моки для тестирования.
➖Скрытые зависимости
Зависимости не видны явно в коде, что может усложнить понимание.
➖Сложность
Может привести к более сложной архитектуре, особенно в больших приложениях.
Ставь 👍 и забирай 📚 Базу знаний🤔 Для чего нужна рефлексия?
Рефлексия (Reflection) – это механизм анализа классов, методов, свойств и других структур во время выполнения. Она позволяет получать информацию о коде и даже изменять его динамически.
🚩Когда полезна рефлексия?
🟠Фреймворки и DI-контейнеры
- Используется для автоматического внедрения зависимостей (Dependency Injection, DI).
- Например, Laravel использует рефлексию в
Container для автоматического создания объектов.
class Database {
public function connect() {
return "Подключение к базе данных";
}
}
class UserService {
private $db;
public function __construct(Database $db) {
$this->db = $db;
}
public function getUser() {
return "Пользователь найден";
}
}
function resolve($class) {
$reflector = new ReflectionClass($class);
$constructor = $reflector->getConstructor();
if (!$constructor) {
return new $class;
}
$params = $constructor->getParameters();
$dependencies = [];
foreach ($params as $param) {
$type = $param->getType();
if ($type) {
$dependencies[] = resolve($type->getName());
}
}
return $reflector->newInstanceArgs($dependencies);
}
$service = resolve(UserService::class);
echo $service->getUser(); // "Пользователь найден"
🟠Декораторы, аннотации и атрибуты
- В PHP 8 появились атрибуты (аннотации), и рефлексия помогает их читать.
- Используется в Symfony, Doctrine для работы с ORM.
#[Attribute]
class Route {
public function __construct(public string $path) {}
}
class Controller {
#[Route('/home')]
public function home() {
return "Домашняя страница";
}
}
$reflection = new ReflectionMethod(Controller::class, 'home');
$attributes = $reflection->getAttributes(Route::class);
$route = $attributes[0]->newInstance();
echo $route->path; // "/home"
🟠Автоматическая генерация документации
- Реально использовать для автоматического создания Swagger/OpenAPI.
- Можно извлекать PHPDoc-комментарии и на их основе генерировать документацию.
class Example {
/**
* Возвращает приветствие
* @return string
*/
public function sayHello() {
return "Привет!";
}
}
$reflection = new ReflectionMethod(Example::class, 'sayHello');
echo $reflection->getDocComment();
Ставь 👍 и забирай 📚 Базу знанийИз разработчика в тимлиды: как говорить с людьми
Стать тимлидом — значит научиться говорить с людьми о сложном. Но как сказать разработчику, что код — "не очень", не обидев?
📅 16 сентября в 20:00 Александр Пряхин разберет техники обратной связи без эскалации. Узнаете, как формулировать по фактам, снижать защитную реакцию и завершать разговор договоренностями. Для разработчиков, готовящихся к лидерству.
Узнать больше
#реклама 16+
otus.ru
О рекламодателе
🤔 В чем преимущества асинхронного шифрования?
1. Безопасность: открытый ключ можно свободно распространять, закрытый ключ остаётся приватным.
2. Удобство обмена: не требуется передавать секретный ключ для шифрования.
3. Поддержка цифровой подписи: позволяет проверять подлинность отправителя.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Для чего используется индексация и что это такое?
Индексация — это механизм в базах данных, который ускоряет поиск данных в таблицах. Индекс работает как оглавление книги: вместо того чтобы просматривать всю таблицу, база находит нужные данные по индексу.
🚩Зачем нужна индексация?
Ускоряет поиск (
SELECT) – база данных быстрее находит нужные строки.
Ускоряет сортировку (ORDER BY) – индексы помогают быстрее упорядочивать данные.
Оптимизирует соединения таблиц (JOIN).
Замедляют операции INSERT, UPDATE, DELETE (так как индекс тоже нужно обновлять).
Индексы занимают дополнительное место в памяти.
🚩Пример индекса в SQL
1⃣Создание индекса
CREATE INDEX idx_users_name ON users(name);
Теперь поиск по name будет быстрее
SELECT * FROM users WHERE name = 'Alice';
🚩Типы индексов
🟠Обычный (B-Tree) индекс
Основной вид индекса, который ускоряет поиск по WHERE.
CREATE INDEX idx_name ON users(name);
🟠UNIQUE-индекс
Гарантирует, что значения в колонке не будут повторяться.
CREATE UNIQUE INDEX idx_email ON users(email);
🟠FULLTEXT-индекс
Используется для быстрого поиска по тексту.
CREATE FULLTEXT INDEX idx_text ON articles(content);
🟠Composite (Составной) индекс
Индекс сразу на несколько колонок (например, name + age).
CREATE INDEX idx_name_age ON users(name, age);
Ставь 👍 и забирай 📚 Базу знанийРозыгрыш Яндекс Станции уже в боте
Любимые блогеры, розыгрыши, новости и анонсы в одном боте!
Узнать больше
#реклама 16+
refer.id
О рекламодателе
🤔 Что содержит инкапсуляция кроме сокрытия данных?
Инкапсуляция — это не только скрытие данных, но и ограничение доступа к внутренним деталям объекта + защита логики от внешнего вмешательства.
🚩Основные аспекты инкапсуляции
Сокрытие данных (
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
Ставь 👍 и забирай 📚 Базу знаний🤔 Что содержит инкапсуляция кроме сокрытия данных?
1. Контроль доступа: использование модификаторов public, protected, private для ограничения доступа.
2. Инкапсуляция логики: методы класса предоставляют контролируемый интерфейс для работы с данными.
3. Сохранение целостности: защита данных от некорректных изменений извне.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Яндекс Музыка до 360 дней бесплатно
Яндекс Музыка для вас и 3-х ваших близких.
Кинопоиск и Яндекс Книги тоже в мультиподписке Плюс.
Попробуйте бесплатно❤️
Слушать
#реклама 18+
music.yandex.ru
О рекламодателе
