PHP如何全局访问此数组


PHP How to access this array GLOBALLY?

我对PHP不太熟悉,正在寻找以下方面的最佳解决方案:

  • 我有一个PHP数组,它保存了关于我的脚本的重要信息

我需要在我的脚本中经常重复使用这一点。

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

  • PHP脚本每次运行时都需要从MySQL中获取一次该数组,以便了解如何组成视图。

(阵列最终会变得相当大…也许几百行…)

最好的做法是在脚本开始时只获取和定义一次这个数组,这样我就可以一直通过其他函数重用它。。。?

是通过在全球范围内定义它吗?

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

或者这是个坏主意?

最有效的方法是什么?

谢谢!

与其使用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();

在这样做的时候,您将使代码更易于测试和维护。

请注意,这只是我用一只手拿着啤酒写的东西,它还没有经过测试,但你应该明白这个想法。:-)

您不需要像这样的第一个全局:

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

全局很好<-如果今天是2002年7月,我会这么说

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

尝试为此使用静态var:

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基础知识。

使用$GLOBALS['my_settings']

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

$my_settings = array('width'=>'300', 'height'=>'200', ...);
function blablabla() {
  $b = $GLOBALS['my_settings'] ;
  echo $b ;
}
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") 进行调用