Динамический доступ к свойству объекта с помощью "$this"

У меня есть следующие строки в моем коде, чтобы получить сущность в ZF3:

$entity = $this->userCredentialsTableGateway
               ->getResultSetPrototype()
               ->getArrayObjectPrototype();

Чтобы автоматизировать его для разных таблиц, я создал функцию:

private function getEntityFromGateway( $table )
{
    $context = $table . "TableGateway";
    return $this->$context
                ->getResultSetPrototype()
                ->getArrayObjectPrototype();
}

Когда я пытаюсь получить

$entity = $this->getEntityFromTableGateway( "UserCredentials" )

это дает ошибку:

Undefined property: 
User\DataGateway\UserDataGateway::$UserCredentialsTableGateway

Итак, почему $this->$var действует как $this->$$var, PHP версия 7.2

1 ответ

Решение

Я думаю, что вам нужно внести небольшие изменения в существующий код.

  1. Оберните переменную и строку с помощью фигурных скобок, как это "{$table}TableGateway"
  2. Только первый символ имени таблицы в нижнем регистре, например, если у вас есть все таблицы вначале, используйте вместо этого маленький регистр $context = lcfirst("{$table}TableGateway")

Итак, ваш код будет таким

private function getEntityFromGateway( $table )
{
    $context = lcfirst("{$table}TableGateway");
    return $this->$context
                ->getResultSetPrototype()
                ->getArrayObjectPrototype();
}

и называть это так, как вы уже делаете,

$entity = $this->getEntityFromTableGateway( "UserCredentials" )
Другие вопросы по тегам