PHP如何全局访问此数组?

时间:2012-07-31 15:11:38

标签: php arrays global-variables

我不是那么先进的PHP,我正在寻找以下的最佳解决方案:

  • 我有一个PHP数组,其中包含有关我的脚本的重要信息

我需要在我的剧本中经常重复使用它。

$my_settings = array('width'=>'300', 'height'=>'200', ...);
  • 我将其存储在MySQL数据库中。

  • PHP脚本每次运行时都需要从MySQL获取该数组,以便知道如何编写视图。

(数组最终会变得非常大......也许几百行...)

在我的脚本开头只有ONCE来获取和定义这个数组的最佳做法是什么,所以我可以通过其他函数等一直重复使用它......?

是通过全局定义吗?

global $my_settings;
$my_settings = get_my_settings_from_db();

function returnSetting($key='') {
 global $my_settings;
 return $my_settings[$key];

}

或者这是个坏主意?

最有效的方法是什么?

谢谢!

5 个答案:

答案 0 :(得分:4)

而不是使用global(这是一件坏事)你应该注入变量(或者更好地将你需要的部分注入到需要它的函数中):

$my_settings = get_my_settings_from_db();

function returnSetting($settings, $key='') {
     return $settings[$key];
}

returnSetting($my_settings, $key);

或者更好的创建设置类:

class Settings
{
    protected $settings;

    public function __construct($settings)
    {
        $this->settings = $settings;
    }

    public function getSetting($key)
    {
        return $this->settings[$key];
    }
}

// you only create one instance per request, so you would do this in for example your bootstrap file
$settings = new Settings($my_settings);

假设您有一个类,需要进行以下设置:

class Foo
{
    protected $settings;

    public function __construct($settings)
    {
        $this->settings = $settings;
    {

    public function bar()
    {
        // do something which requires a setting
        echo $this->settings->getSetting('dimensions');
    }
}

$settings = new Settings($my_settings);
$foo = new Foo($settings);
$foo->bar();

执行此操作时,您将使代码更易于测试和维护。

请注意,这只是我用一手啤酒写的东西而且未经测试,但你应该明白这一点。 : - )

答案 1 :(得分:0)

你不需要像这样的第一个全球:

$my_settings = get_my_settings_from_db();

function returnSetting($key='') {
 global $my_settings;
 return $my_settings[$key];

}

答案 2 :(得分:0)

全球很好! < - 如果今天是2002年7月,我会说的是

但在2012年全球必须被所有忍者开发者杀死。

尝试使用静态变量:

class DataCollector{
    static $my_settings = array('width'=>'300', 'height'=>'200');
}

//You could use the values at ANY place or function
echo DataCollector::$my_settings['width'];

另请阅读有关OOP基础知识的内容。

答案 3 :(得分:-1)

使用$ GLOBALS [' my_settings']

$ GLOBAL是一个php超级全局变量,可用于代替' global'用于从全局范围访问变量的关键字,即即使在函数或方法中也可以从php脚本中的任何位置访问的变量。

$my_settings = array('width'=>'300', 'height'=>'200', ...);
function blablabla() {
  $b = $GLOBALS['my_settings'] ;
  echo $b ;
}

答案 4 :(得分:-2)

function getSettings($id, $type) {
if(!$id == 0) {
$sql = "SELECT * FROM 'database' WHERE 'id' = '".$id."'";
$result = mysql_query($sql);

if(mysql_num_rows($result) == 0) {
while($row = mysql_fetch_assoc($result)) {
if($type == "setting1") {
        return $row['setting1'];
    } elseif($type == "setting2") {
        return $row['setting2'];
    } elseif($type == "setting3") {
        return $row['setting3'];
    } elseif($type == "setting4") {
        return $row['setting4'];
    } else {
        return "Wrong Input";
        }
} } else { return "Not Initialized";}
else { return "No $id input"; }}}

将登录信息存储在$_SESSION并使用getSetting($_SESSION['id'], "setting1")

进行通话