对象属性的PHP动态名称


PHP dynamic name for object property

而不是使用

$object->my_property

我想做一些类似的事情

$object->"my_".$variable

使用花括号,如:

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

这个怎么样:

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

正如您所看到的,这种方法使大括号成为不必要的,并且至少为读者提供了一些组成属性名称的描述。)

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