请考虑以下代码:
class Project
{
public $ProjectID;
}
class Work
{
public $WorkID;
}
public function insert($pData, $tableName)
{
//generate insert here
$pData->{$tableName . 'ID'} = $result->getId();
}
$p = new Project();
$w = new Work();
insert($w, 'Work');
insert($p, 'Project');
echo $p . ' -- ' . $w;
现在我将如何以动态方式设置变量?我正在构建一个数据层。 $pData->{$tableName . 'ID'}
似乎不起作用......
答案 0 :(得分:2)
这就是你要找的东西:
public function set_to_seven($p_data, $name)
{
$name = $name . 'ID';
$p_data->$name = 7;
}
属性名称可以是变量。就像功能一样:
$p = 'print_r';
$p('StackOverflow');
供将来参考:如果您需要静态,则需要查找变量
public function set_to_seven($p_data, $name)
{
$name = $name . 'ID';
$p_data::$$name = 7;
}
答案 1 :(得分:2)
那么,你想动态调用setter吗?
$y = new stdClass();
$y->prop1 = "something";
$targetProperty = "prop1";
$y->$targetProperty = "something else";
echo $y->prop1;
//Echos "something else"
那你在寻找什么?
答案 2 :(得分:1)
您可以像访问班级中的任何其他定义一样访问公共属性。
$p = new Project();
$p->ProjectID = 5;
echo $p->ProjectID; // prints 5
答案 3 :(得分:0)
这对我有用。
class Project {
public $ProjectID;
}
function setToSeven($pData, $name) {
$pData->{$name . "ID"} = 7;
}
$p = new Project();
setToSeven($p, 'Project');
echo $p->ProjectID;
您只需回显变量或在类上设置toString函数来回显该类。 To String的工作原理如下
class Project {
public $ProjectID;
public function __toString(){
return (string)$this->ProjectID;
}
}
function setToSeven($pData, $name) {
$pData->{$name . "ID"} = 7;
}
$p = new Project();
setToSeven($p, 'Project');
echo $p;