Динамический доступ к свойству объекта с помощью «$ this» - PullRequest
0 голосов
/ 24 августа 2018

В моем коде есть следующие строки для получения сущности в 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 Ответ

0 голосов
/ 24 августа 2018

Я думаю, вам нужно немного изменить существующий код.

  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" )
...