用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