Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP如何全局访问此数组?_Php_Arrays_Global Variables - Fatal编程技术网

PHP如何全局访问此数组?

PHP如何全局访问此数组?,php,arrays,global-variables,Php,Arrays,Global Variables,我对PHP不太在行,正在寻找以下方面的最佳解决方案: class Foo { protected $settings; public function __construct($settings) { $this->settings = $settings; { public function bar() { // do something which requires a setting

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

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();
  • 我有一个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];

}
或者这是个坏主意

最有效的方法是什么


谢谢

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

$my_settings = get_my_settings_from_db();

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

}

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

$my_settings = get_my_settings_from_db();

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

}

环球很好 环球很好 不要使用
global
(这是一件不好的事情),您应该将变量(或者更好地将您需要的部分注入到需要它的函数中):

或者最好创建一个设置类:

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();
当这样做时,您将使您的代码更易于测试和维护


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

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

或者最好创建一个设置类:

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();
当这样做时,您将使您的代码更易于测试和维护

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

将登录名存储在
$\u会话中
并使用
getSetting($\u会话['id'],“setting1”)调用

将登录名存储在
$\u会话中
并使用
getSetting($\u会话['id'],“setting1”)

使用$GLOBALS['my\u settings']
$GLOBAL是一个php超级全局变量,可以使用它代替“GLOBAL”关键字来访问全局范围内的变量,即可以从php脚本中的任何位置甚至在函数或方法中访问的变量

$my_settings = array('width'=>'300', 'height'=>'200', ...);
function blablabla() {
  $b = $GLOBALS['my_settings'] ;
  echo $b ;
}
使用$GLOBALS['my_settings']
$GLOBAL是一个php超级全局变量,可以使用它代替“GLOBAL”关键字来访问全局范围内的变量,即可以从php脚本中的任何位置甚至在函数或方法中访问的变量

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


永远不要使用
global
关键字。如果您经常需要它,我会研究缓存。它就是这样做的。。。除非您不需要第一个全局$my_设置;。您只需要在将使用它的函数中使用它。您也不需要第二个
global
或任何
global
。您为什么要使用globals而不是将数组作为参数传递给函数呢?我认为使用
函数返回设置($key,$my_settings)
函数返回设置($key='')之间没有太大区别{global$my_settings;..
,您仍然必须键入并通过使用globals向全局名称空间添加变量,这迫使您记住您已经这样做了,希望您没有覆盖全局名称空间中已经存在的内容。基本上,这是个坏主意。@Jamie-这让我想起用步枪杀死蚊子。为什么要使用来复枪可以完成这样一项琐碎的任务——我无法理解:)永远不要使用
global
关键字。如果你经常需要它,我会研究缓存。缓存就是这么做的……除了你不需要第一个全局$my_设置之外。你只需要在使用它的函数中使用它。你也不需要第二个
global
或任何
global
。为什么要使用globals而不是将数组作为参数传递给函数呢?我认为使用
function returnSettings($key,$my_settings)
function returnSetting($key='')之间没有太大的区别{global$my_settings;..
,您仍然必须键入并通过使用globals向全局名称空间添加变量,这迫使您记住您已经这样做了,希望您没有覆盖全局名称空间中已经存在的内容。基本上,这是个坏主意。@Jamie-这让我想起用步枪杀死蚊子。为什么要使用在这个例子中,
静态
全局
相同。
静态
变量不是面向对象的一部分paradigm@DanielAranda:除了标签前面的
$
-符号外,人们怎么能看不到
$global
global\u class\u名称::$global
实际上是同一类型的变量?看看你写了什么。看看你需要知道什么才能访问该变量:它是全局标签。除了语法上的细微差别之外,两者实际上有什么区别?一点也不。两者在PHP中都是全局可访问的变量。@hakre问题是“PHP如何全局访问此数组?”我用更好的语法回答了这个问题。另外,关于构建设置类的最佳实践,我们可以创建另一个主题,这是我的观点。语法越不干扰,越清晰越好。从这个角度来看,只使用全局变量就可以了。但是,你的答案是没有意义的。首先,你告诉global变量不是当前的模式(这根本不是一个原因),只是为了说明一个外观稍有不同的全局变量“chest la mode”。因此,您显然没有给出任何论据,但您正在讨论样式化问题,这一点并不明显