如何在没有局部变量的情况下重新设计此PHP代码?

| 我有这样的功能:
function get_title($keyword) {

    $titles = array(
        \'p1\'   => \'Title 1\',
        \'p2\'   => \'Title 2\',
        // ... other data
        \'pm\'   => \'Some other title\',
        \'pn\'   => \'One more title\'
    );

    return $titles[$keyword];
}
将这样的数组保留在局部变量中是一种好习惯吗?例如,它具有大约50个标题。因此,每次我调用此函数时-脚本会加载50个标题? 我正在考虑使用ѭ1,但是全局不是不好的做法吗? 我是PHP的新手,早期我是用JS编写的。在JS中,我可以使用闭包来做到这一点:
var get_title = function() {

    var titles = {
        \'p1\': \'Title 1\',
        \'p2\': \'Title 2\',
        // ... other data
        \'pm\': \'Some other title\',
        \'pn\': \'One more title\'
    }

    return function(keyword) {
        return titles[keyword];
    }
}();
在这里,title-array不是全局的,并且每次调用该函数时都不会加载。 但是如何在PHP中做到这一点?     
已邀请:
要么:
$titles = array(
    \'p1\'   => \'Title 1\',
    \'p2\'   => \'Title 2\',
     // ... other data
    \'pm\'   => \'Some other title\',
    \'pn\'   => \'One more title\'
);

function get_title($keyword) {
    global $titles;
    return $titles[$keyword];
}
get_title(\'p1\');
要么
class Something {
    private static $titles = array(
        \'p1\'   => \'Title 1\',
        \'p2\'   => \'Title 2\',
         // ... other data
        \'pm\'   => \'Some other title\',
        \'pn\'   => \'One more title\'
    );

    public static function get_title($keyword) {
        return self::$titles[$keyword];
    }
}
Something::get_title(\'p1\');
在这里使用静态类有点像Java语言中的闭包。 除非内存有问题,否则不要担心。     
在这里听起来像是全局的。 尽量不要注意那些说“某某东西总是\'evil \'\”的人。正如您现在发现的那样,这种概括很危险。     
$titles
来自数据库吗?如果不是,那真的是微优化,我几乎可以说实例化该变量永远不会成为优化的瓶颈。 但是,如果您确实需要,有两种简单的解决方案。第一个确实是保留全局变量。一个问题是,任何人都可以修改您的全局数组。除此之外,这还算不错。 另一种解决方案是使用ѭ5作为静态静态成员来创建一个静态类。然后,只需创建一个调用此数组的公共方法即可。 这些解决方案只会实例化您的阵列一次。 编辑:啊,弗里茨演示了我的意思。     
我没有理由为此创建一个函数,除非您需要从其他函数中访问
$title
数据,在这种情况下,最好将
$title
作为参数传递给其他函数。     
您可以使用
static
变量轻松地执行所需的操作:
function get_title($keyword) {

    static $titles = null;

    if($titles === null) {
        $titles = array(
            \'p1\'   => \'Title 1\',
            \'p2\'   => \'Title 2\',
            // ... other data
            \'pm\'   => \'Some other title\',
            \'pn\'   => \'One more title\'
        );
    }

    return $titles[$keyword];
}
使用“初始化为
null
/检查/设置值”技巧(而不是直接设置setting5ѭ的值),可以使用任何您喜欢的代码来初始化变量(包括非常数表达式)。 我当然更喜欢ѭ1,因为它可以更好地隐藏ѭ5的生产细节。类的static属性是完成此操作的另一种方法。两者之间的选择是恕我直言的风格问题。     
在php函数变量中,它们是局部变量,它们像javascript中一样对外界不可见。如果要使php var像javascript var一样工作,则需要在变量之前添加global,如下所示-> global $ var; 现在,由于您不想在每次运行函数时都设置$ titles,因此可以将其声明为静态,像这样
function get_title($keyword) {

static $titles = array(
    \'p1\'   => \'Title 1\',
    \'p2\'   => \'Title 2\',
    // ... other data
    \'pm\'   => \'Some other title\',
    \'pn\'   => \'One more title\'
);

return $titles[$keyword];
}     

要回复问题请先登录注册