通过使用“ $ this”动态访问对象属性

时间:2018-08-24 16:28:39

标签: php zend-db zend-framework3 php-7.2 tablegateway

我的代码中包含以下几行内容,以获取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 :(得分: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" )