如何动态设置类变量?

时间:2013-05-20 18:36:49

标签: php

请考虑以下代码:

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'}似乎不起作用......

4 个答案:

答案 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

http://php.net/manual/en/language.oop5.visibility.php

答案 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;