对象属性的PHP动态名称

Gue*_*ser 14 php oop

而不是使用

$object->my_property
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情

$object->"my_".$variable
Run Code Online (Sandbox Code Playgroud)

Mad*_*iha 28

像这样使用大括号:

$object->{'my_' . $variable}
Run Code Online (Sandbox Code Playgroud)


rai*_*7ow 7

这个怎么样:

$object->{"my_$variable"};
Run Code Online (Sandbox Code Playgroud)

我想这部分 PHP文档可能会有所帮助.简而言之,可以在花括号中写出任意表达式; 其结果(字符串)成为要处理的属性的名称.例如:

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

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

...通常将此表达式的结果存储到临时变量中更具可读性(顺便说一下,可以给出一个有意义的名称).像这样:

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

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

如您所见,这种方法使得花括号不是必需的并且给读者至少一些关于构成属性名称的描述.)

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