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

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

رفتن به کانال در Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

نمایش بیشتر
2 341
مشترکین
-124 ساعت
-47 روز
-2430 روز
آرشیو پست ها
🤔 Какие виды взаимодействия между микросервисами возможны ? Взаимодействие между микросервисами может осуществляться различными способами, в зависимости от архитектурных требований и особенностей приложения. Рассмотрим основные виды взаимодействия между микросервисами. 🚩Синхронное взаимодействие 🟠HTTP/REST: Могут взаимодействовать друг с другом через HTTP/REST API. Это наиболее распространенный способ взаимодействия, который предоставляет стандартизированный и широко поддерживаемый метод общения.
$response = file_get_contents('http://service-a/api/resource');
$data = json_decode($response, true);
🟠gRPC: Это фреймворк для удаленного вызова процедур, который использует HTTP/2 и Protocol Buffers для сериализации данных. Он обеспечивает высокую производительность и поддержку различных языков программирования.
$client = new Grpc\Channel('localhost:50051', [
    'credentials' => Grpc\ChannelCredentials::createInsecure()
]);

// Использование клиента для вызова методов gRPC
🚩Асинхронное взаимодействие 🟠Очереди сообщений (Message Queues): Могут взаимодействовать через очереди сообщений, используя брокеры сообщений, такие как RabbitMQ, Apache Kafka или AWS SQS. Асинхронное взаимодействие позволяет микросервисам работать независимо и обрабатывать сообщения в своем темпе.
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('task_queue', false, true, false, false);

$msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);
$channel->basic_publish($msg, '', 'task_queue');
🟠Публикация/подписка (Publish/Subscribe): Могут использовать паттерн публикации/подписки, чтобы отправлять и получать сообщения. Примеры таких систем включают Apache Kafka, Google Pub/Sub и Redis Pub/Sub.
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// Подписка на канал
$redis->subscribe(['channel'], function ($redis, $chan, $msg) {
    echo $msg;
});
🚩Базы данных 🟠Общие базы данных: Иногда микросервисы могут взаимодействовать через общую базу данных, особенно если это необходимо для чтения данных. Однако этот подход может нарушить принцип изоляции данных между микросервисами.
// Микросервис A записывает данные
$mysqli->query("INSERT INTO table (column) VALUES ('value')");

// Микросервис B читает данные
$result = $mysqli->query("SELECT column FROM table");
🟠Событийные хранилища (Event Stores): Микросервисы могут использовать событийные хранилища для обмена событиями и состояния. Это позволяет обеспечить согласованность данных и восстановление состояния системы.
// Микросервис A записывает событие
$eventStore->appendToStream('stream_name', $event);

// Микросервис B читает события
$events = $eventStore->readStreamEventsForward('stream_name');
🚩Фреймворки и библиотеки для взаимодействия Использование фреймворков и библиотек, таких как Spring Cloud для Java или Dapr для полиглотных микросервисов, может значительно упростить взаимодействие между микросервисами. Взаимодействие между микросервисами может быть синхронным (HTTP/REST, gRPC) и асинхронным (очереди сообщений, публикация/подписка). Асинхронные методы обычно обеспечивают большую гибкость и независимость микросервисов. Выбор метода взаимодействия зависит от требований к производительности, масштабируемости и согласованности данных. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какое ключевое слово используется для создания константы класса в PHP?
Anonymous voting

HolyJS — конференция о JavaScript для фронтенда, бэкенда JS — это не только фронтенд. Геймдев, беспилотные автомобили, бэкенд
HolyJS — конференция о JavaScript для фронтенда, бэкенда JS — это не только фронтенд. Геймдев, беспилотные автомобили, бэкенд, архитектура, метавселенные и Web3 — эти и другие темы мы обсудим на конференции для опытных JavaScript-разработчиков. Вас ждут 40 докладов, воркшопы по разработке игры для TON и оптимизации web perf, обсуждения с экспертами и особая атмосфера JS-сообщества. Подробности о конференции и билеты — уже на сайте Узнать больше #реклама holyjs.ru О рекламодателе

🤔 Какое отличие primary key от unique key ? PRIMARY KEY и UNIQUE KEY (уникальный ключ) используются для обеспечения уникальности значений в столбцах таблицы, но они имеют различия в функциональности и применении. 🚩PRIMARY KEY (Первичный ключ) 🟠Уникальность: Значения в столбце (или комбинации столбцов), на который наложен первичный ключ, должны быть уникальными. Это гарантирует, что в таблице не будет дублирующихся строк по этому ключу. 🟠Не может быть NULL: Столбец, на который наложен первичный ключ, не может содержать NULL-значений. 🟠Индексирование: Автоматически создает уникальный индекс для столбца(ов) с первичным ключом. 🟠Ограничение: В каждой таблице может быть только один первичный ключ.
CREATE TABLE users (
    user_id INT AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    PRIMARY KEY (user_id)
);
🚩UNIQUE KEY (Уникальный ключ) 🟠Уникальность: Значения в столбце (или комбинации столбцов), на который наложен уникальный ключ, также должны быть уникальными. 🟠Может быть NULL: В отличие от первичного ключа, столбец с уникальным ключом может содержать NULL-значения. Однако несколько строк могут содержать NULL в одном столбце, так как NULL считается неопределенным значением. 🟠Индексирование: Автоматически создает уникальный индекс для столбца(ов) с уникальным ключом. 🟠Ограничение: В таблице может быть несколько уникальных ключей.
CREATE TABLE users (
    user_id INT AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    PRIMARY KEY (user_id),
    UNIQUE (email)
);
🚩Основные различия Количество в таблице: 🟠PRIMARY KEY: Только один на таблицу. 🟠UNIQUE KEY: Может быть несколько на таблицу. NULL-значения: 🟠PRIMARY KEY: NULL-значения не допускаются. 🟠UNIQUE KEY: Допускаются NULL-значения. Цель использования: 🟠PRIMARY KEY: Основной идентификатор строки в таблице. Используется для уникальной идентификации каждой записи. 🟠UNIQUE KEY: Гарантирует уникальность значений в столбце или комбинации столбцов, но не обязательно используется как основной идентификатор. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какой метод класса ReflectionMethod возвращает имя метода?
Anonymous voting

🤔 Что известно про микросервисы ? Микросервисы — это архитектурный стиль разработки ПО, при котором приложение состоит из множества мелких, независимых сервисов, каждый из которых выполняет определенную бизнес-функцию и взаимодействует с другими сервисами через четко определенные интерфейсы. Этот подход противопоставляется монолитной архитектуре, где приложение строится как единое целое. 🚩Основные характеристики 🟠Малый размер и фокус на одну задачу: Каждый микросервис выполняет одну конкретную функцию или группу связанных функций. 🟠Автономность: Микросервисы независимы друг от друга и могут быть развернуты, обновлены и масштабированы независимо. 🟠Связь через API: Микросервисы взаимодействуют друг с другом через четко определенные API, обычно через HTTP/REST, gRPC или сообщения в очередях. 🟠Независимость технологий: Разработчики могут использовать разные языки программирования, фреймворки и базы данных для каждого микросервиса. 🟠Децентрализованное управление данными: Каждый микросервис может иметь собственную базу данных, что уменьшает взаимозависимость между сервисами и упрощает управление данными. Преимущества 🟠Масштабируемость: Легче масштабировать отдельные части приложения, которые испытывают высокую нагрузку, без необходимости масштабировать все приложение. 🟠Гибкость разработки: Команды могут работать независимо над разными микросервисами, что ускоряет разработку и развертывание новых функций. 🟠Устойчивость к сбоям: Сбой одного микросервиса не приводит к краху всего приложения. Остальные сервисы могут продолжать работать. 🟠Технологическая независимость: Возможность использовать разные технологии и языки программирования для различных сервисов. 🟠Упрощенное тестирование и развёртывание: Легче тестировать и развёртывать небольшие микросервисы по отдельности. Недостатки 🟠Сложность управления: Требуется сложная инфраструктура для управления большим количеством сервисов, их развертывания, мониторинга и логирования. 🟠Сетевая латентность и надежность: Взаимодействие между микросервисами через сеть может привести к задержкам и проблемам с надежностью. 🟠Распределенные транзакции: Обеспечение согласованности данных между микросервисами становится сложнее, особенно при работе с распределенными транзакциями. 🟠Безопасность: Повышенные требования к безопасности из-за необходимости защиты взаимодействия между сервисами. 🟠Разработка и тестирование: Требует дополнительных усилий для разработки и тестирования, чтобы обеспечить совместимость и взаимодействие между сервисами. 🚩Примеры 🟠E-commerce платформы: Каждый микросервис отвечает за отдельные функции, такие как управление пользователями, обработка заказов, управление товарами и оплатой. 🟠Медиа-сервисы: Разделение функций на микросервисы для стриминга, хранения медиафайлов, управления пользователями и рекомендаций контента. 🟠Финансовые приложения: Сервисы для управления счетами, транзакциями, аналитикой и отчетностью. 🚩Инструменты и технологии 🟠Контейнеризация: Docker и Kubernetes для упаковки, развертывания и управления микросервисами. 🟠API шлюзы: Kong, NGINX, API Gateway от AWS для управления запросами к микросервисам. 🟠Системы оркестрации: Kubernetes для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. 🟠Брокеры сообщений: RabbitMQ, Apache Kafka для асинхронного взаимодействия между микросервисами. 🟠Мониторинг и логирование: Prometheus, Grafana, ELK Stack для мониторинга и логирования микросервисов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Чему равен результат выполнения выражения (3 + 4) * 2 - 7 в PHP?
Anonymous voting

🤔 Как вы реализуете паттерн проектирования 'Стратегия' ? Паттерн проектирования "Стратегия" (Strategy) позволяет определить семейство алгоритмов, инкапсулировать каждый из них и сделать их взаимозаменяемыми. Этот паттерн позволяет клиенту выбрать алгоритм поведения во время выполнения программы, не изменяя при этом саму программу. 🚩Реализация паттерна "Стратегия" Рассмотрим пример, в котором мы будем использовать паттерн "Стратегия" для выполнения различных способов расчета стоимости доставки. Сначала создадим интерфейс, который будет определять метод для расчета стоимости доставки.
<?php
interface ShippingStrategy {
    public function calculateCost(int $weight, int $distance): float;
}
?>
Далее создадим несколько классов, реализующих этот интерфейс. Каждый класс будет представлять конкретную стратегию расчета стоимости доставки.
<?php
class RegularShipping implements ShippingStrategy {
    public function calculateCost(int $weight, int $distance): float {
        return $weight * 0.5 + $distance * 1.2;
    }
}

class ExpressShipping implements ShippingStrategy {
    public function calculateCost(int $weight, int $distance): float {
        return $weight * 0.7 + $distance * 1.5;
    }
}

class InternationalShipping implements ShippingStrategy {
    public function calculateCost(int $weight, int $distance): float {
        return $weight * 1.0 + $distance * 2.5;
    }
}
?>
Создадим класс ShippingCostCalculator, который будет использовать одну из стратегий для расчета стоимости доставки.
<?php
class ShippingCostCalculator {
    private ShippingStrategy $strategy;

    public function __construct(ShippingStrategy $strategy) {
        $this->strategy = $strategy;
    }

    public function setStrategy(ShippingStrategy $strategy) {
        $this->strategy = $strategy;
    }

    public function calculate(int $weight, int $distance): float {
        return $this->strategy->calculateCost($weight, $distance);
    }
}
?>
Теперь можем использовать наш класс ShippingCostCalculator с различными стратегиями.
<?php
$calculator = new ShippingCostCalculator(new RegularShipping());
echo "Regular Shipping: " . $calculator->calculate(10, 100) . "\n";

$calculator->setStrategy(new ExpressShipping());
echo "Express Shipping: " . $calculator->calculate(10, 100) . "\n";

$calculator->setStrategy(new InternationalShipping());
echo "International Shipping: " . $calculator->calculate(10, 100) . "\n";
?>
🚩Зачем это нужно? 🟠Гибкость: Легко менять алгоритмы во время выполнения программы без изменения кода клиентов. 🟠Расширяемость: Легко добавлять новые стратегии, не изменяя существующий код. 🟠Поддерживаемость: Логика выбора алгоритма вынесена в отдельные классы, что упрощает поддержку и тестирование. 🚩Как это используется? 🟠ПО с изменяемыми алгоритмами: Игры (различные стратегии поведения NPC), приложения с разными методами сортировки, приложения для работы с графикой (разные алгоритмы отрисовки). 🟠Бизнес-логика: Различные алгоритмы ценообразования, разные стратегии расчета налогов, различные методы доставки. Ставь 👍 и забирай 📚 Базу знаний

😒 На одном кодинге уже давно не вывезешь, перспектива 2024 года - Информационная Безопасность Ловите два канала на тему ИБ и
😒 На одном кодинге уже давно не вывезешь, перспектива 2024 года - Информационная Безопасность Ловите два канала на тему ИБ и хакинга ZeroDay - Уроки по кибербезопасности и хакингу с нуля. Вирусы, взломы, OSINT, криптография и свежие новости Белый Хакер - программное обеспечение, утилиты, OSINT, инструменты, полезная литература и много другое. Совершенно новый формат непохожий на другие каналы.

🤔 Какое ключевое слово в PHP используется для объявления анонимной функции?
Anonymous voting

😮 Добавлена новая база слитых курсов на 800ГБ: Python: https://t.me/+QPSH2IcGu4w5ODky Frontend и Web: https://t.me/+MiJVQSyUlDNjODky Программирование: https://t.me/+opj2LZT23ddiZDli Графика и дизайн: https://t.me/+vrZ8dhdUEXM3YmQy

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

Что известно об ООП ? Спросят с вероятностью 13% Объектно-ориентированное программирование (ООП) — это парадигма, основанная на концепции "объектов", которые могут содержать данные и код для работы с этими данными. Фокусируется на представлении реальных сущностей в виде объектов, которые взаимодействуют между собой. Основные концепции 1️⃣Классы и объекты: ✅Класс: Шаблон или чертеж для создания объектов. Класс определяет свойства (данные) и методы (функции), которые объект будет иметь. ✅Объект: Конкретный экземпляр класса, содержащий данные и методы, описанные в классе. 2️⃣Инкапсуляция: ✅Процесс скрытия внутренних деталей объекта и предоставление доступа к ним только через публичные методы. Это помогает защитить данные от случайных или преднамеренных изменений.
          class Person {
         private $name;

         public function setName($name) {
             $this->name = $name;
         }

         public function getName() {
             return $this->name;
         }
     }

     $person = new Person();
     $person->setName("John");
     echo $person->getName(); // Выведет "John"
     
3️⃣Наследование: ✅Механизм, позволяющий создавать новые классы на основе существующих. Новый класс (наследник) наследует свойства и методы базового класса (родителя), а также может добавлять новые или переопределять существующие.
          class Animal {
         protected $name;

         public function __construct($name) {
             $this->name = $name;
         }

         public function speak() {
             return "Some sound";
         }
     }

     class Dog extends Animal {
         public function speak() {
             return "Woof! Woof!";
         }
     }

     $dog = new Dog("Buddy");
     echo $dog->speak(); // Выведет "Woof! Woof!"
     
4️⃣Полиморфизм: ✅Способность объектов разных классов обрабатывать данные через одинаковый интерфейс. Это достигается за счет переопределения методов в классах-наследниках.
          class Bird extends Animal {
         public function speak() {
             return "Chirp! Chirp!";
         }
     }

     function makeAnimalSpeak(Animal $animal) {
         echo $animal->speak();
     }

     $dog = new Dog("Buddy");
     $bird = new Bird("Tweety");

     makeAnimalSpeak($dog);  // Выведет "Woof! Woof!"
     makeAnimalSpeak($bird); // Выведет "Chirp! Chirp!"
     
5️⃣Абстракция: ✅Процесс выделения общих характеристик объектов и создание абстрактных классов и методов, которые должны быть реализованы в производных классах. Абстрактные классы не могут быть инстанцированы.
          abstract class Vehicle {
         protected $speed;

         abstract public function move();
     }

     class Car extends Vehicle {
         public function move() {
             return "Driving at " . $this->speed . " km/h";
         }
     }

     $car = new Car();
     $car->speed = 100;
     echo $car->move(); // Выведет "Driving at 100 km/h"
     
Преимущества 1️⃣Переиспользование кода: Благодаря наследованию и полиморфизму, код может быть использован повторно в разных частях приложения. 2️⃣Упрощение моделирования сложных систем: Позволяет представлять сложные системы в виде взаимодействующих объектов. 3️⃣Инкапсуляция: Скрытие внутренних деталей реализации объектов улучшает безопасность и уменьшает зависимость кода. 4️⃣Легкость поддержки и расширения: Код легче поддерживать и расширять благодаря четкому разделению ответственности между объектами. ООП — это парадигма, основанная на концепции объектов, которые инкапсулируют данные и методы. Основные концепции включают классы и объекты, инкапсуляцию, наследование, полиморфизм и абстракцию. Упрощает моделирование сложных систем, улучшает переиспользование кода и облегчает поддержку и расширение приложений. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

👩‍💻 Программирование теперь в Telegram! Вот 10 обучающих каналов по самым востребованным направлениям в IT. Выбирай своё на
👩‍💻 Программирование теперь в Telegram! Вот 10 обучающих каналов по самым востребованным направлениям в IT. Выбирай своё направление: 👩‍💻 Python: @python_ready 👩‍💻 Java: @java_ready 📖 Общее IT: @roadmap_ready 👩‍💻 Frontend: @code_ready 👩‍💻 Backend: @backend_ready 🖥 Базы Данных & SQL: @sql_ready 👩‍💻 C#: @csharp_ready 👩‍💻 C/C++: @cpp_ready 📋 IT Архив: @archive_ready 🖥 Design: @time_design 📌 Ресурсы, гайды, шпаргалки, книги и задачи для каждого языка программирования.

🤔 Какая функция в PHP используется для удаления начальных и конечных пробелов из строки?
Anonymous voting

Что такое репликация ? Спросят с вероятностью 13% Репликация баз данных — это процесс копирования и поддержания данных в нескольких местах для обеспечения избыточности и доступности данных. Это позволяет системам работать устойчиво и эффективно, даже в случае сбоев или высокого уровня нагрузки. Основные виды: 1️⃣Синхронная репликация: Данные копируются в реальном времени. Каждое изменение данных в основной базе данных сразу же отражается в реплицированной базе данных. Это обеспечивает высокую согласованность данных, но может замедлять работу из-за ожидания подтверждения от всех реплик. 2️⃣Асинхронная репликация: Данные копируются с задержкой. Основная база данных сразу подтверждает выполнение операции, а копирование изменений в реплицированные базы данных происходит позже. Это обеспечивает лучшую производительность, но может привести к временной несогласованности данных. Репликация в MySQL Часто используется мастер-слейв (master-slave) репликация, где одна база данных (мастер) отвечает за запись данных, а другие базы данных (слейвы) получают копии данных для чтения. Пример настройки мастер-слейв репликации в MySQL: 1️⃣Настройка мастера:
[mysqld]
log-bin=mysql-bin
server-id=1
2️⃣Создание пользователя для репликации:
CREATE USER 'replica'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;
3️⃣Получение позиции бинарного лога:
SHOW MASTER STATUS;
4️⃣Настройка слейва:
[mysqld]
server-id=2
5️⃣Настройка параметров слейва для подключения к мастеру:
CHANGE MASTER TO MASTER_HOST='master_host', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;
START SLAVE;
Репликация в MongoDB Используется механизм репликации, основанный на репликационных наборах (replica sets). Это группы mongod-процессов, поддерживающих одинаковые данные. Пример: 1️⃣Инициализация репликационного набора:
rs.initiate(
  {
    _id: "rs0",
    members: [
      { _id: 0, host: "mongodb0.example.net:27017" },
      { _id: 1, host: "mongodb1.example.net:27017" },
      { _id: 2, host: "mongodb2.example.net:27017" }
    ]
  }
)
2️⃣Проверка статуса репликационного набора:
rs.status();
Зачем это нужно? Устойчивость к сбоям: В случае выхода из строя одной базы данных, система продолжает работать, используя реплицированные данные. ✅Балансировка нагрузки: Чтение данных может быть распределено между несколькими копиями базы данных, улучшая производительность. ✅Резервное копирование: Репликация может служить способом создания резервных копий данных. Как это используется?Обеспечение высокой доступности: Репликация позволяет системам оставаться доступными даже при сбоях отдельных компонентов. ✅Повышение производительности: Чтение данных может быть распределено по нескольким серверам, уменьшая нагрузку на основной сервер. ✅Резервное копирование и восстановление данных: Репликация позволяет создать несколько копий данных для защиты от потерь. Репликация — это процесс копирования данных между несколькими серверами для обеспечения доступности, надежности и производительности системы. Она бывает синхронной и асинхронной и используется для устойчивости к сбоям и балансировки нагрузки. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

🤔 Какой встроенный интерфейс PHP используется для создания класса, работающего как массив?
Anonymous voting

Может ли абстрактный класс содержать в себе частный метод и почему ? Спросят с вероятностью 13% Абстрактный класс может содержать частный метод (private method). В ООП, включая PHP, абстрактные классы служат для определения базовой функциональности, которая должна быть реализована в подклассах. Абстрактный класс может содержать абстрактные методы, которые должны быть реализованы в наследниках, а также обычные методы и свойства (включая частные). Почему абстрактный класс может содержать частные методы 1️⃣Инкапсуляция: Частные методы в абстрактном классе могут использоваться для реализации внутренних механизмов, которые не должны быть доступны или изменяемы в наследуемых классах. Это помогает скрыть детали реализации и поддерживать инкапсуляцию. 2️⃣Обеспечение общих функций: Частные методы могут содержать логику, которая общая для всех наследуемых классов, но не должна быть доступна напрямую. Наследуемые классы могут использовать публичные или защищенные методы, которые, в свою очередь, вызывают частные методы. Пример:
<?php
abstract class AbstractClass {
    // Абстрактный метод, который должен быть реализован в подклассах
    abstract protected function getValue();

    // Публичный метод, который использует частный метод
    public function printValue() {
        echo $this->formatValue($this->getValue());
    }

    // Частный метод для форматирования значения
    private function formatValue($value) {
        return "Value: " . $value;
    }
}

class ConcreteClass extends AbstractClass {
    protected function getValue() {
        return 42;
    }
}

$obj = new ConcreteClass();
$obj->printValue(); // Выведет "Value: 42"
?>
Абстрактные классы могут содержать частные методы для реализации внутренних механизмов и обеспечения инкапсуляции. Эти методы помогают скрыть детали реализации, обеспечивая общий функционал, который не должен быть изменен или доступен извне. Это способствует созданию более безопасного и структурированного кода. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых

🤔 Какое значение будет у переменной $result после выполнения операции $result = 5 % 3?
Anonymous voting

Что такое модификатор видимости ? Спросят с вероятностью 13% Модификаторы видимости определяют доступность свойств и методов классов. Они обеспечивают контроль над тем, какие части кода могут использовать или изменять эти свойства и методы. В PHP есть три основных модификатора видимости: public, protected и private. Модификаторы видимости 1️⃣Public (публичный): Свойства и методы, объявленные как public, доступны отовсюду - как внутри класса, так и вне его. 2️⃣Protected (защищённый): Свойства и методы, объявленные как protected, доступны только внутри класса и в классах-наследниках. 3️⃣Private (приватный): Свойства и методы, объявленные как private, доступны только внутри класса, в котором они объявлены. Пример:
<?php
class MyClass {
    public $publicProperty = "Public";
    protected $protectedProperty = "Protected";
    private $privateProperty = "Private";

    public function publicMethod() {
        return "Public Method";
    }

    protected function protectedMethod() {
        return "Protected Method";
    }

    private function privateMethod() {
        return "Private Method";
    }

    public function testVisibility() {
        echo $this->publicProperty; // Доступно
        echo $this->protectedProperty; // Доступно
        echo $this->privateProperty; // Доступно

        echo $this->publicMethod(); // Доступно
        echo $this->protectedMethod(); // Доступно
        echo $this->privateMethod(); // Доступно
    }
}

class ChildClass extends MyClass {
    public function testChildVisibility() {
        echo $this->publicProperty; // Доступно
        echo $this->protectedProperty; // Доступно
        // echo $this->privateProperty; // Недоступно

        echo $this->publicMethod(); // Доступно
        echo $this->protectedMethod(); // Доступно
        // echo $this->privateMethod(); // Недоступно
    }
}

$instance = new MyClass();
echo $instance->publicProperty; // Доступно
// echo $instance->protectedProperty; // Недоступно
// echo $instance->privateProperty; // Недоступно

echo $instance->publicMethod(); // Доступно
// echo $instance->protectedMethod(); // Недоступно
// echo $instance->privateMethod(); // Недоступно
?>
Зачем это нужно? Инкапсуляция: Позволяет скрывать внутренние детали реализации класса и защищать его состояние. ✅Безопасность: Ограничивает доступ к чувствительным данным и методам, предотвращая их нежелательное изменение. ✅Контроль доступа: Обеспечивает контроль над тем, какие методы и свойства могут быть доступны извне и изнутри класса. Как это используется?Публичные методы и свойства используются для интерфейса класса, к которому должны иметь доступ внешние пользователи. ✅Защищённые методы и свойства используются для общего функционала между классами-наследниками. ✅Приватные методы и свойства используются для внутренних нужд класса и не должны быть доступны извне. Модификаторы видимости (public, protected, private) контролируют доступ к свойствам и методам класса, обеспечивая инкапсуляцию и безопасность данных. 👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти к списку 385 вопросов на PHP разработчика. Ставь 👍 если нравится контент 🔐 База собесов | 🔐 База тестовых