Мог кто-то испытал в PHP, выручают со следующим. Где-нибудь в моем коде, у меня есть вызов к общедоступному статическому методу в неинстанцированном классе:
$result = myClassName::myFunctionName();
Однако я хотел бы иметь много таких классов и определить корректное имя класса на лету согласно языку пользователя. Другими словами, я имею:
$language = 'EN';
... и я должен сделать что-то как:
$result = myClassName_EN::myFunctionName();
Я знаю, что мог передать язык в качестве параметра функции и соглашению с нею внутри всего один общий класс, но по различным причинам, я предпочту другое решение.
Это имеет какой-либо смысл, кого-либо? Спасибо.
Используйте функцию Call_user_func :
http://php.net/manual/en/function.call-user-funcphp
Пример:
call_user_func('myClassName_' . $language . '::myFunctionName');
I Думаю Вы можете сделать:
$classname = 'myClassName_' . $language;
$result = $classname::myFunctionName();
Это называется функции переменной
, хотя я думаю, как вы, это очень плохое представление, я думаю, что у меня может быть решение
$className = 'myClassName_'.$language;
$result = $className::myFunctionName();
Я думаю, что это это то, что вы хотите
Насколько я мог понять ваш вопрос, вам нужно получить имя класса, которое можно сделать с помощью функции get_Class . С другой стороны, класс отражения может помочь вам здесь, что отлично, когда дело доходит до методов, аргументов и т. Д. О.
Я бы заключил бы создание класса, который вам нужен на заводе.
Таким образом, у вас будет единая точка входа, когда вам нужно изменить базовое имя или правила для отображения языка в правый класс.
class YourClassFactory {
private $_language;
private $_basename = 'yourclass';
public YourClassFactory($language) {
$this->_language = $language;
}
public function getYourClass() {
return $this->_basename . '_' . $this->_language;
}
}
А затем, когда вы должны его использовать:
$yourClass = $yourClassFactoryInstance->getYourClass();
$yourClass::myFunctionName();
Такие решения, как:
$yourClass::myFunctionName();
не работают. PHP выдаст ошибку синтаксического анализа.
К сожалению, единственный способ - использовать очень медленный call_user_func ()
.