使用 "$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: 
UserDataGatewayUserDataGateway::$UserCredentialsTableGateway

所以,为什么$this->$var表现得像$this->$$var. PHP 版本 7.2

我认为您需要对现有代码进行轻微修改。

  1. 用大括号包装变量和字符串,如下所示"{$table}TableGateway"
  2. 仅小写表
  3. 名的第一个字符,例如,如果您一开始都有所有表,则使用小写字母,而不是像这样使用它$context = lcfirst("{$table}TableGateway")

所以你的代码将是这样的

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

并像你已经在做的那样这样称呼它,

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

最新更新