@sevnet
Системный аналитик, бизнес-консультант

Как обратиться к константе(методу) класса PHP через переменную?

Пришлось написать такой код, т.к. что я только не пробовал у меня не получилось обратиться к нужной константе класса(
$needleRight = null;
    $rightsManager = Driver::getInstance()->getRightsManager();
    if ($rightType === "READ") {
        $needleRight = $rightsManager::TASK_READ;
    }elseif ($rightType === "ADD") {
        $needleRight = $rightsManager::TASK_ADD;
    }elseif ($rightType === "EDIT") {
        $needleRight = $rightsManager::TASK_EDIT;
    }elseif ($rightType === "FULL") {
        $needleRight = $rightsManager::TASK_FULL;
    }elseif ($rightType === "SHARING") {
        $needleRight = $rightsManager::TASK_SHARING;
    }
    $accessTaskId = $rightsManager->getTaskIdByName($needleRight);

Подскажите, пожалуйста, как я могу "собрать" обращение к константе класса, из строки и переменной?
  • Вопрос задан
  • 176 просмотров
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$needleRight = constant("{$rightsManager}::TASK_{$rightType}");
https://www.php.net/manual/en/function.constant
Ответ написан
В PHP 8.3 завезли динамическое обращение к константам
https://www.php.net/releases/8.3/ru.php#dynamic_cl...
Ответ написан
Комментировать
@iljaGolubev
если без этого никак, то вот...
$rightsManager = Driver::getInstance()->getRightsManager();
$ref = new ReflectionClass( get_class($rightsManager) );
$needleRight = $ref->getConstant('TYPE_'.$rightType);
$accessTaskId = $rightsManager->getTaskIdByName($needleRight);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы