PHP如何全局访问此数组?
我对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
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”。因此,您显然没有给出任何论据,但您正在讨论样式化问题,这一点并不明显