别名类方法作为全局函数

时间:2011-08-21 23:06:01

标签: php methods alias

是否可以将类方法别名为全局函数?

我有一个类充当PHP中gettext函数的包装器。我有一个名为_t()的函数来处理翻译。

我希望能够从我的代码中的任何位置将其称为_t(),而无需通过实例化对象($translate::_t())来实现,因为这似乎非常笨拙。

我考虑使用命名空间为对象提供别名:

Use translations\TranslationClass as T

虽然这是一个更好的改进:T::_t()。它仍然没有必要只需_t()

是否仍然在整个应用程序中将T::_t()别名为_t()

2 个答案:

答案 0 :(得分:2)

您可以创建包装函数或使用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');

答案 1 :(得分:0)

您可以使用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);
}

此示例适用于静态方法。