2010-03-07 2 views
0

Я пишу фабричный класс, который должен иметь возможность возвращать однотонные экземпляры нескольких разных типов, в зависимости от заданного параметра. Метод будет выглядеть примерно так, но, как я ссылка на статический метод одноэлементного явно неправильно:Как ссылаться на статический метод класса переменных в PHP?

public function getService($singletonClassName) { 
    return $singletonClassName::getInstance(); 
} 

Что бы правильный синтаксис для такого эталонным выглядеть в PHP?

ответ

1

Вы не можете использовать такой синтаксис с PHP < 5.3: это один из Новые возможности PHP 5.3

несколько возможностей, с PHP 5.2, было бы:

  • использовать имя класса, если вы знаете его
  • Или использовать что-то вроде call_user_func


В первом случае, это было бы так просто, как:

ClassName::getInstance() 

И, во-вторых, вы бы использовать что-то вроде:

call_user_func($singletonClassName .'::getInstance'); 

Согласно документации call_user_func, это должно работать с PHP> = 5.2.3

Или вы могли бы просто Применение:

call_user_func(array($singletonClassName, 'getInstance')); 
+0

* кашель * Пять * кашель * минут :) – Gordon

+0

Когда я начал сочинительство мой ответ, твой не был таким полным, как это теперь ^^ * (был только первая часть о f ответ, с названием класса с жестким кодированием), - и мы оба отредактировали пару раз. ^^ * –

+0

На самом деле, я узнал от вас трюк «стрелять-ранний-то-добавить». Заметил, что вы делаете это несколько раз и считаете его очень хитрым :) – Gordon

0

Вы просто использовать имя класса

public function getService($singletonClassName) { 
    return SingletonClassName::getInstance(); 
} 

В качестве альтернативы, если $singleClassName переменных, содержащего использование Classname

public function getService($singletonClassName) { 
    return call_user_func(array($singletonClassName, 'getInstance')); 
} 

По состоянию на 5.2.3 вы можете также сделать

call_user_func($singletonClassName .'::getInstance'); // As of 5.2.3 
Смежные вопросы