1

晚上好,

在我目前正在开发的应用程序中,我有一个处理多语言的类。它通过外部加载关联数组来实现,其中翻译源将被定义如下:

'Source input' => 'Zdroj vstupního'

目前,通过以下方式寻址和使用类,这可以完美地工作:

$lang = new Lang('Czech');
print $lang->_('Source input'); // output: "zdroj vstupního"

但是,我想在一个不依赖于“Lang”类实例的快捷函数中使用它。我已经尝试过使用静态方法,但到目前为止我运气不佳。

我想要实现的伪代码。

 $lang = new Lang('Czech');
 $lang->setCurrent('contact_us'); // loads the language file for contact_us
 <p>
   <?php print _('Source input'); ?> // output: "zdroj vstupního"
 </p>

在正确的方向上的一点会很棒。谢谢!

4

1 回答 1

4

如果使用语句,则可以从函数中访问全局$lang变量:_global $lang

<?php
    class Lang
    {
        function _($str)
        {
            return 'Zdroj vstupního';
        }
    }

    function _($str)
    {
        global $lang;
        return $lang->_($str);
    }

    $lang = new Lang('Czech');
    print _('Source input');
?>

或者,您可以在类中使用static变量Lang而不是创建类的实例。由于您不必$lang在全局命名空间中创建变量,因此这种方式更简洁一些。

<?php
    class Lang
    {
        static $lang;

        function setCurrent($lang)
        {
            self::$lang = $lang;
        }
    }

    function _($str)
    {
        if (Lang::$lang == 'Czech')
        {
            return 'Zdroj vstupního';
        }
    }

    Lang::setCurrent('Czech');
    print _('Source input');
?>
于 2009-07-10T00:56:05.017 回答