Динамическое имя PHP для свойства объекта

вместо

$object->my_property

Я хочу сделать что-то подобное

$object->"my_".$variable

2 ответов


используйте фигурные скобки:

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

как вы смотрите, такой подход делает фигурные скобки ненужными и дает читателю хотя бы некоторое описание того, что составляет имя свойства. )

П. С. print используется только для иллюстрации потенциальной сложности выражения имени переменной; в то время как этот вид кода обычно используется в сертификационных тестах, это большой "нет-нет", чтобы использовать такие вещи в производстве. )