访问属性,其名称位于另一个属性中

时间:2014-09-20 19:48:03

标签: php

我有一个动态包装所有数据库表的类:

class Table
{
  public $pk;
  ...
}

$Table=new Table();

$Table->pk='username'; //here I set what is PK column in my table

$Table->$pk='sbrbot'; //here I dynamically define variable and set $Table->username='sbrbot'

问题是当我想要从类I中检索这个值时,必须分两步执行它;

class Table
{
  ...
  $pk=$this->pk;
  $value=$this->$pk;
}

为什么:

$value=${$this->pk}

不起作用?

3 个答案:

答案 0 :(得分:2)

应该是:

$value = $this->{$this->pk};

您无法使用常规变量语法访问类属性,它必须始终使用->::(取决于它们是按对象还是静态属性)

答案 1 :(得分:1)

PHP需要隐式$this->,而在Java中,可以使用其变量名访问类属性。

这意味着,${$this->pk}等于$username仍然需要$this->,您应该使用:$this->{$this->pk}来实现您的目标。

但我强烈建议您更改类结构,以便在运行时不需要动态(公共)变量。

答案 2 :(得分:-1)

也许应该这样。您的Table类中没有成员$ username。您对$ Table的分配存在错误。

class Table
{
public $username;
...
}

$Table=new Table();

$pk='username'; //here I set what is PK column in my table

$Table->$pk='sbrbot'; //here I dynamically define variable and set $Table->username='sbrbot'

第二个问题:

 $value=${$this->pk}

这不起作用,因为您确实将其分配给$ this-> username。