Метод класса псевдонима как глобальная функция
Можно ли использовать псевдоним метода класса в качестве глобальной функции?
У меня есть класс, который действует как оболочка вокруг функций gettext в PHP. У меня есть функция _t()
, которая занимается переводами.
Я хотел бы иметь возможность вызывать его как _t()
из любого места в моем коде без необходимости делать это через созданный объект ($translate::_t()
), поскольку это кажется довольно громоздким.
Я подумал об использовании пространств имен для присвоения объекту псевдонима:
Use translations\TranslationClass as T
Хотя это лучшее улучшение: T::_t()
. это все еще не так необходимо, как просто делать _t()
.
Есть ли в любом случае псевдоним T::_t()
как просто _t()
во всем приложении?
2 answers
Вы можете либо создать функцию-оболочку, либо использовать функцию create_function().
function _t() {
call_user_func_array(array('TranslationClass', '_t'), func_get_arts());
}
Или вы можете создать функцию на лету:
$t = create_function('$string', 'return TranslationClass::_t($string);');
// Which would be used as:
print $t('Hello, World');
Вы можете использовать функцию eval() для преобразования методов в глобальные функции.
function to_procedural($classname, $method, $alias)
{
if (! function_exists($alias))
{
$com = $command = "function ".$alias."() { ";
$com .= "\$args = func_get_args(); ";
$com .= "return call_user_func_array(array(\"".$classname."\", \"".$method."\"), \$args); }";
@eval($command);
}
return function_exists($alias);
}
Этот пример хорошо работает со статическими методами.