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

Dynamically access object property by using "$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. 像这样用花括号包裹变量和字符串"{$table}TableGateway"
  2. 小写 table 仅名称的第一个字符,例如,如果您一开始就全部 table,以后请使用小写 $context = lcfirst("{$table}TableGateway")

所以你的代码会像这样

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

并像您已经在做的那样调用它,

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