我目前正在用PHP编写程序。我想让我的脚本用户更改一些设置,如数据库位置和用户。 这些变量放在脚本的第一行。
现在我想从类和函数中的任何地方访问这些变量。
我使用了全局变量。但是一位同事告诉我不要使用全局变量。
那么在php中存储和访问设置的常用方法是什么?
答案 0 :(得分:6)
您可以使用默认为全局的常量:
define('APPLICATION_SETTING', true);
否则,您可以使用Registry Singleton类,在该类中加载设置并将它们存储在类私有变量中。 经典注册表类结构:
class Registry {
private $instance = NULL;
private $vars = array();
private __construct() {/**/}
public static function getInstance() {/**/}
public function get($key) {/**/}
public function set($key, $value) {/**/}
}
不,我建议你不要使用注射和填充模式。只需使用Singleton。使用Injection,你会变得更糟,更复杂。
答案 1 :(得分:3)
通过更改脚本中的变量来配置脚本是一个坏主意。
存储配置设置的最简单方法是使用.ini文件并使用parse_ini_file函数解析它。 http://php.net/manual/en/function.parse-ini-file.php
样本ini:
[db]
host = "foo.org"
user = "dbguy"
[session]
timeout = 600
如果你的脚本是面向对象的,你应该将配置设置包装在一个类中......并将它作为构造函数参数传递给你的主类。
否则您可以使用全局数组,但请不要在函数中使用'global'关键字!您的函数应接受函数中的设置作为参数。
$config = parse_ini_file("protectedFolder/config.ini", true);
//wrong, do not do it this way
function connect(){
global $config;
$connection = dostuff($config['db']['user'],$config['db']['host'];
//do stuff
}
connect();
//right
function connect2($user, $host){
$connection = dostuff($user, $host);
//do stuff
}
connect2($config['db']['user'], $config['db']['host']);
这是一个非常简单的概念,有更好的方法可以做到这一点,但它应该让你开始,它将为简单的应用程序做好工作。
如果你需要更复杂的东西,你应该谷歌“依赖注入”
编辑:编辑过的评论 EDIT2:修复缺失的引号
答案 2 :(得分:1)
有几种方法。以下是一些选项:
这实际上取决于您正在开发的应用程序和个人偏好。但是,从长远来看,全局变量往往会使用它们变得笨拙。
答案 3 :(得分:0)
您可以在服务器中安装一个简单的sqlite数据库,以便放置只能由您的php程序访问的配置设置。通过将sqlite的查询封装到一个简单的类中,您不必使用全局变量。
答案 4 :(得分:-1)
在这种情况下你的同事是错的。 Globals是存储需要随处可用的设置的最便捷方式。这就是全球 的东西,可以随处获得。 PHP已经充满了全局变量,例如$_REQUEST
。将您的设置放在一个名为$SETTINGS
的全局数组中是我的建议。