2011-08-21 8 views
3

クラスメソッドをグローバル関数としてエイリアスすることはできますか?グローバル関数としてのエイリアスクラスメソッド

私は、PHPのgettext関数のラッパーとして機能するクラスを持っています。私は翻訳を扱う_t()という関数を持っています。

インスタンス化されたオブジェクト($translate::_t())を使用することなく、コード内のどこからでも_t()と呼ぶことができますが、それはかなり扱いにくいようです。

私はオブジェクトにエイリアス与えるために名前空間を使用して考えた:T::_t():これは、より良い改善だが

Use translations\TranslationClass as T 

を。 _t()をやらなければならないのと同じように必要ではありません。

T::_t()のエイリアスは、アプリケーション全体でちょうど_t()となっていますか?

答えて

1

ラッパー関数を作成することも、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

興味深い。私はこれを見て、1日かそこらに戻ってくるでしょう:) – F21

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); 
} 

この例は、静的メソッドでうまくいきます。

+0

これはパフォーマンスがどうですか? eval()を使用して巨大なパフォーマンスヒットがありますか? – F21

関連する問題