我不是那么先进的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];
}
或者这是个坏主意?
最有效的方法是什么?
谢谢!
答案 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)
$ 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")