2015-05-06 3 views
1

Я знаю, что если у меня есть функция в PHP с именем «Foo», я могу назвать это динамически следующим образом:Динамическая ссылка на комбинации объектно-и-метода в PHP

$var = "foo"; 
$var(); 

И если Foo это метод объекта с именем «бар», я могу назвать это динамически следующим образом:

$var = "foo"; 
$bar->$var(); 

Единственная проблема здесь --- Мне нужно dymaically указать не только метод из объекта - но Мне нужно также динамически указать сам объект - и передать комбинацию в библиотеку, которая использует условное обозначение строк для динамических функций. Есть ли способ сделать это?

+0

довольно просто, хотя бы попробовать вещи – sanjeev

ответ

2

очень похожи на то, что вы сделали с именем методы, вы можете указать имя класса и вызывать конструктор по объекту:

$objectVar = 'myObject'; 
$bar = new $objectVar(); 
$objectVar = 'newObject'; 
$newBar = new $objectVar(); 

Это даст вам один объект каждый из myObject и newObject.

1

Или, если вы хотите, чтобы указать объект и не инициализировать один новый, вы можете использовать

$var = "objectName"; 
$func = "functionName"; 
$$var->$func(); 
+0

Да, я должен уточнить, что, спасибо за разъяснение моего поста (и спасибо за upvote, это мой первый публичный комментарий!) – Reisclef

+0

Одна проблема с этим предложением ---- Я не могу передать его библиотеке, которая ожидает, что предоставленный аргумент будет всего лишь одной строкой, представляющей функцию. Для этого мне нужно было бы иметь целую комбинацию объектов и методов, указанную в строке _one, что ваше предложение не предоставляет. Мне нужно сохранить _both_ в строке с именем $ func, которая может быть вызвана как: $ func() --- не как $$ func(), а не как $$ fu -> $ nc() - но как $ func (), Не больше, не меньше. –

+0

@Sophia_ES: Я не знаю, что вы точно имеете в виду, но у вас должно быть полное имя объекта/функции в переменной. – Richard