2012-08-23 40 views
8

而不是使用PHP动态域名

$object->my_property 

我想要做这样的事情

$object->"my_".$variable 
+0

要记住的一件事是,虽然你可以使用动态变量,但通常最好是明确的。它使得重构更容易。想象一下,搜索名为“my_cat”的属性,如果它是动态声明的,则不会发现该属性。 – Revent

回答

23

使用大括号就像这样:

$object->{'my_' . $variable} 
6

如何:

$object->{"my_$variable"}; 

我认为this section的PHP文档可能会有所帮助。总之,可以在大括号内编写任意表达式;其结果(一个字符串)成为要处理的财产的名称。例如:

$x = new StdClass(); 
$x->s1 = 'def'; 

echo $x->{'s' . print("abc\n")}; 
// prints 
// abc 
// def 

...然而通常是更加可读此表达式的结果存储到一个临时变量(其,顺便说一句,可以给出一个有意义的名称)。就像这样:

$x = new StdClass(); 
$x->s1 = 'def'; 

$someWeirdPropertyName = 's' . print("abc\n"); // becomes 's1'. 
echo $x->$someWeirdPropertyName; 

正如你看到的,这种方法使得大括号没有必要,给读者至少一些什么组成的属性名称描述。 )

P.S. print仅用于说明变量名称表达的潜在复杂性;虽然这种代码通常用于认证测试,但在生产中使用这种东西是一个很大的“禁忌”。 )

+0

谢谢,如果我能给两个蜱,你也会有一个蜱。 – user1209203