我有一个动态包装所有数据库表的类:
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}
不起作用?
答案 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。