16

而不是使用

$object->my_property

我想做这样的事情

$object->"my_".$variable
4

2 回答 2

32

像这样使用大括号:

$object->{'my_' . $variable}
于 2012-08-23T13:10:33.383 回答
9

这个怎么样:

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

我想这部分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;

如您所见,这种方法使大括号不再是必需的,并且至少为读者提供了一些关于属性名称组成的描述。)

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

于 2012-08-23T13:11:50.630 回答