PHP: 动态对象名称

7
这是我的原始代码:

可能是重复的问题:
通过字符串获取PHP类属性

以下是我的原始代码:

function generateQuery($type, $language, $options)
{
    // Base type
    $query = $this->Queryparts->print['filter'];

    // Language modifiers
    // Additional options

    return $query;
}

"print"是一个以对象形式定义的数组/哈希表(通过"(object)"转换)。我希望能够像下面这样实现:
    $query = $this->Queryparts->$type['filter'];

使用$type变量作为对象名称。这是否可能?

1
你尝试过了还是在请我们其中之一尝试? - eisberg
@eisberg 我尝试了,但没有得到任何返回值。 - Jonas Ballestad
@Jonas Ballestad 这听起来像是你的错误报告设置不正确或者级别太低了。 - eisberg
4个回答

13

你可以使用一个中间变量:

$name = 'something';
$object->$name;

或者您可以使用大括号:

$a = array('foo' => 'bar');
$object->{$a['foo']}; //equivalent to $object->bar

(顺便说一句,如果你经常发现自己做这件事情,那可能存在设计问题。)


好的。我可能表达不够清楚($type = 'print')。但这个解决方案对我很有帮助:“$query = $this->Queryparts->{$type}['filter'];”。我不确定你的第一个例子在我的情况下如何使用。 - Jonas Ballestad
@JonasBallestad 啊,我的错。我误解了问题。我以为你试图使用$type['filter']作为键。而不是访问Queryparts->{$type},然后访问从那里返回的filter键。但是,使用{}的想法仍然是一样的。 - Corbin

13
$query = $this->Queryparts->{$type}['filter'];

2
当然可以,这里有一个简单的例子:

确定,你可以这样做,这是一个简单的例子:

$obj = new stdClass();
$obj->Test = new stdClass();
$obj->Test->testing['arr'] = 'test';

$type = 'testing';
print_r($obj);
print_r($obj->Test->{$type});

0

您还可以通过输入$$来使用变量变量名:

$a = array('car', 'plane');
$varname = 'a';
var_dump($$varname);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接