Метод класса псевдонима как глобальная функция


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

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

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

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

Use translations\TranslationClass as T

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

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

Author: F21, 2011-08-22

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');
 2
Author: Doug Kress, 2011-08-21 23:24:00

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

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

 0
Author: ronan, 2011-08-29 15:19:52