对象属性的PHP动态名称

对象属性的PHP动态名称,php,oop,Php,Oop,而不是使用 $object->my_property 我想做这样的事情 $object->"my_".$variable 使用花括号,如下所示: $object->{'my_' . $variable} 这个怎么样: $object->{"my_$variable"}; 我想使用PHP文档可能会有所帮助。简而言之,可以在大括号内编写任意表达式;其结果(字符串)成为要寻址的属性的名称。例如: $x = new StdClass(); $x->s1 = 'def

而不是使用

$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
仅用于说明变量名表达式的潜在复杂性;虽然这类代码通常用于认证测试,但在生产中使用这类代码是一个很大的“禁忌”。)

谢谢,如果我能给你两个记号,你也会有一个。要记住的一件事是,虽然你可以使用动态变量,但最好是显式的。对于一个人来说,这使得以后的重构更容易。想象一下搜索一个名为“my_cat”的属性,如果它是动态声明的,您将找不到它。