Метод класса Alias ​​как глобальная функция - PullRequest
4 голосов
/ 22 августа 2011

Возможно ли псевдоним метода класса как глобальной функции?

У меня есть класс, который действует как оболочка для функций gettext в PHP. У меня есть функция с именем _t(), которая занимается переводами.

Я хотел бы иметь возможность вызывать его как _t() из любого места в моем коде, не прибегая к этому через экземпляр объекта ($translate::_t()), поскольку это кажется довольно громоздким.

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

Use translations\TranslationClass as T

Хотя это лучшее улучшение: T::_t(). это все еще не так необходимо, как просто сделать _t().

Есть ли в любом случае псевдоним T::_t() как просто _t() во всем приложении?

Ответы [ 2 ]

2 голосов
/ 22 августа 2011

Вы можете создать функцию-оболочку или использовать 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');
0 голосов
/ 29 августа 2011

Вы можете использовать функцию 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);
}

Этот пример хорошо работает со статическими методами.

...