是否可以将类方法别名为全局函数?
我有一个类充当PHP中gettext函数的包装器。我有一个名为_t()
的函数来处理翻译。
我希望能够从我的代码中的任何位置将其称为_t()
,而无需通过实例化对象($translate::_t()
)来实现,因为这似乎非常笨拙。
我考虑使用命名空间为对象提供别名:
Use translations\TranslationClass as T
虽然这是一个更好的改进:T::_t()
。它仍然没有必要只需_t()
。
是否仍然在整个应用程序中将T::_t()
别名为_t()
?
答案 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);
}
此示例适用于静态方法。