【发布时间】:2015-04-03 08:21:48
【问题描述】:
用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 等流行框架不使用 define 进行此配置。
CodeIgniter,
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
...
将其存储在数组中而不是 define() 有什么好处?我注意到 Zend 似乎 根本没有 使用 define()(我可能是错的,因为我是 Zend 的新手)。 一般情况下存储一些全局内容是不是很糟糕?
在我有限的知识中,我确实发现存储一些全局内容很有用,例如,我可以将我的文档根目录存储在下面,然后我可以从任何地方访问它 - 只需使用 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创建一个常量。常量不能改变它们的值。变量可以随时更改其值。根据这个定义,常量的优点是你知道它一旦设置就不会被搞砸——它总是最初的样子。使用变量,您可以随时更改它们。但是,您不能像遍历数组那样迭代常量。当人们不笨并且知道自己在做什么时,他们可以同时使用两者。没有一个比另一个大的优势,它归结为你认为更容易和更清洁的工作。 -
我强烈建议您使用dotenv 这样您就可以放心地确保您的凭据受到相当的保护。
标签: php codeigniter symfony zend-framework constants