0

次のコードを検討してください。

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

4 に答える 4

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;
}

于 2013-05-20T18:49:25.667 に答える
2

では、セッターを動的に呼び出したいですか?

$y = new stdClass();
$y->prop1 = "something";

$targetProperty = "prop1";
$y->$targetProperty = "something else";
echo $y->prop1;

//Echos "something else"

それはあなたが探しているものですか?

于 2013-05-20T18:50:16.260 に答える
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;
于 2013-05-20T18:54:58.143 に答える