Уведомления
Очистить
☰ МЕНЮ

PHP Паттерн “Прокси-объект” (Proxy) Создаёт объект-заместитель, который контролирует доступ к реальному объекту

interface User {
    function getUsername();
}

class AdminUser implements User {
    function getUsername() {
        echo "Admin user";
    }
}

class UserProxy {
    private $_user;

    function __construct($user) {
        $this->_user = $user;
    }

    function _getUser() {
        return $this->_user;
    }

    function fetchUser() {
        try {
            return $this->_getUser();
        } catch (Exception $e) {
           return new User();
        }
     }
}

$adminUser = new AdminUser();
$userProxy = new UserProxy($adminUser);
echo $userProxy->fetchUser()->getUsername();

Паттерн прокси-объект может быть полезен в следующих случаях:

Кеширование данных: Если получение данных из источника занимает много времени или требует больших ресурсов, можно использовать прокси-объект для кэширования данных. При первом обращении к прокси-объекту он запрашивает данные из источника и сохраняет их в кэше. При последующих обращениях он возвращает данные из кэша, не обращаясь к источнику. Управление доступом: Если вы хотите ограничить доступ к некоторым методам или свойствам объекта, вы можете создать прокси-объект, который будет предоставлять ограниченный интерфейс. Это позволяет контролировать доступ к объекту без необходимости изменять его исходный код. Контроль версий: Если у вас есть несколько версий объекта, вы можете использовать прокси-объект для управления версиями. Прокси-объект будет выбирать нужную версию объекта в зависимости от контекста или настроек. Отладка: Прокси-объекты могут быть полезны при отладке. Вы можете создать прокси-объект, который будет выводить отладочную информацию или выполнять дополнительные проверки. Безопасность: Прокси-объекты могут использоваться для обхода ограничений безопасности. Например, если у вас есть объект, который содержит конфиденциальную информацию, вы можете создать прокси-объект, который скрывает эту информацию и предоставляет только разрешенные данные.

Локализация: Если ваш проект имеет многоязычную поддержку, вы можете использовать прокси-объекты для локализации. Каждый прокси-объект будет отвечать за перевод определенного языка.