用define()存储数据库连接细节是好还是不好?用define()存储数据库连接细节是好还是不好?
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', 'xxx');
define('DB_NAME', 'xxx');
或更好的数组下面?
$config['db'] = array(
'driver' => 'mysql',
'host' => 'localhost',
'port' => '3306',
'user' => 'someuser',
'password' => 'SuperSecretPassword',
'name' => 'db_name',
);
我注意到,流行的框架,比如Zend或Symfony的不使用定义此配置。
笨,
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
...
什么利于存放在数组中,而不是define()
的?我注意到Zend出现并不是使用define()
(我可能是错的,因为我是Zend的新手)。 难道存储somme 全球contants然后一般吗?
在我有限的知识,我确实发现存储一些全球contants有用的,例如,我可以存储我的文档根在这下面,然后我可以从任何地方访问它 - 只要使用WEBSITE_DOCROOT
define ('WEBSITE_DOCROOT', str_replace('\\', '/', dirname(__FILE__)).'/');
不像这种方法低于我必须使用dirname(__FILE__)
每次,
// Load config file
$configFile = dirname(__FILE__) . '/../share/config/default.php';
,我可以只使用WEBSITE_DOCROOT . '/../share/config/default.php';
调用文件。这不是更容易和一致吗?
'define'创建一个常量。常量不能改变它们的值。变量可以随时更改其值。通过这个定义,常数的好处在于,你知道它一旦被设置就不会被搞砸 - 它总是最初的。有了变量,你可以随时改变它们。但是,您不能像遍历数组那样迭代常量。当人们不笨并且知道他们在做什么时,他们可以同时使用两者。相互之间没有什么巨大的优势,它归结为你认为更容易和更清洁的工作。 – 2015-04-03 08:26:06
我强烈建议您使用[dotenv](https://github.com/bkeepers/dotenv)这种方式来确保您的凭证得到了相当的保护。 – 2015-04-03 08:27:51