Для динамического доступа к свойству или методу на основе его имени вы просто используете на один знак $
больше, чем обычно.
Например, если у нас есть этот объект:
class Foo {
public $someproperty = 'Hello!';
public function somefunction() {
return 'Hello World';
}
}
$someobject = new Foo;
Тогда мы можем получить доступ к свойству обычно:
echo $someobject->someproperty;
Или динамически по имени:
$var = 'someproperty';
echo $someobject->$var;
Аналогично, мы можем получить доступ к методу обычно:
echo $someobject->somefunction();
Или динамически по имени:
$var = 'somefunction';
$result = $someobject->$var();
Обратите внимание, что ваш пример немного сбивает с толку, потому что вы говорите о «доступе к функции, где одна часть является переменной», но все, что вы на самом деле пытаетесь сделать это динамический доступ к свойству , и вы случайно вызываете метод для объекта, хранящегося в этом свойстве. Поэтому часть, которую вы назвали somefunction
, на самом деле является именем свойства.
Вот пример, который немного похож на ваш, но с измененными именами:
class A {
public $foo;
}
class B {
public function value() {
return 'Hello World';
}
}
$a = new A;
$a->foo = new B;
$propertyname = 'foo';
echo $a->$propertyname->value();