替代全局化函数内的数组

时间:2013-09-23 14:20:41

标签: php

我有很多数组,我不得不在这样的函数中创建全局

$siteSettings=/*some SQL work to make this array*/

function menuNav() {
    global $siteSettings;
    echo "Your site name is ".$siteSettings['name'];
}
menuNav();

我知道我需要像这样停止使用“全球”。所以我想出了这个替代解决方案,这对我来说更容易使用,但是使用了我认为不是最好的$ GLOBALS。

function siteSettings($key) {
    //if the globals siteSettings array doesn't exist, make it
    if (!$GLOBALS['siteSettings']) /*some SQL work to make this array*/
    //return the value of this key
    return $GLOBALS['siteSettings'][$key];
}

function menuNav() {
    echo "Your site name is ".siteSettings('name');
}
menuNav();

你能推荐 - 并显示代码 - 在函数内外使用相同的数组或对象的更好方法吗?

另外......请不要建议将数组传递给函数,如menuNav($ siteSettings)。我设置的实际功能非常复杂,并且使用了许多不同的数组。每次调用函数时,我都不想要通过十几个不同的数组。

1 个答案:

答案 0 :(得分:2)

我会为此使用静态公共变量:

class Site
{
    public static $settings;
}
Site::$settings = /* SQL work */;

然后您可以像访问它一样访问它:

function menuNav() {
    echo "Your site name is ".Site::$settings['name'];
}