我應該如何存儲項目設置?
哪個更好 - 使用$settings
陣列用我所有的設置:
$settings['max_photos'] = 30;
//...
,或者創建一個單獨Config
類中的所有設置?
Class Config {
private $max_photos = 30;
//...
}
任何很好的例子?
我應該如何存儲項目設置?
哪個更好 - 使用$settings
陣列用我所有的設置:
$settings['max_photos'] = 30;
//...
,或者創建一個單獨Config
類中的所有設置?
Class Config {
private $max_photos = 30;
//...
}
任何很好的例子?
最好的方法是將您的設置存儲在文件中。 ,並操縱這個文件聲明一個類操作文件
如果項目設置太重,那麼文件(XML更好)是好的,一個專門的設置類也是好的。
如果項目設置很小,那麼陣列是最好的,它的速度非常快,並且不會出現與I/O相關的問題。
即使您可以使用數據庫(較慢和授權問題)。
兩者都可以很好地工作,無論您感覺最舒服。
我認爲最好使用常量進行配置。例如使用類常量:
class Config {
const
max_photos = 30,
something_else = 100,
// ...
;
}
echo Config::max_photos;
如果你有PHP 5.3,你也可以將它們定義爲全局常量:
const MAX_PHOTOS = 30;
echo MAX_PHOTOS;
但我認爲這是遠不如簡潔明瞭。
很明顯,只要你只存儲常量,即標量的非表達式值,它就會起作用。例如,如果你的配置包含數組,這將不再有效。在這種情況下,我會用一個配置類的公共靜態屬性:
class Config {
public static $per_page = 30;
public static $array = array(...);
}
echo Config::$per_page;
後者非常相似$config
陣列的方法,但有益處(或可這是一個缺點?)這個類是訪問從包括函數和類在內的任何地方開始,而只有在全局空間中才能訪問數組,除非使用global $config;
將它導入到函數/類中。
如果你去的陣列的方法,你可以使用數組文本略多可讀的代碼:
$settings = array(
'max_photos' => 30,
'max_width' => 100
//...
)
我的兩分錢:同時使用。大多數應用程序配置設置屬於全局數組變量。配置數據需要從不同的應用程序部分訪問,這是全局變量的用途。把所有東西放在一起是最明智的。陣列可以擴展,例如,一些選項在config.php中設置,其餘選項例如從config.ini中讀取。
但也有一個CONSTANTS的地方。要畫出的細節是,如果某個選項在應用程序運行時期間真的可能會發生變化,或者它是更多的固定/魔術值。如果一旦設置完成,您不應該更改應用程序設置(或渲染可能會失敗),那麼此選項不應該在數組中,而是按照常量固定地修復。 (這是一個解釋性的經驗法則,但對我很有幫助。)
我傾向於將配置值全局訪問到配置數組中,並定義可在任何地方訪問的值。例如:
INC/config.php文件
// only accessed in global scope (see init.php)
$config['error_reporting'] = E_ALL & ~E_NOTICE;
$config['memory_limit'] = '16M';
$config['time_zone'] = 'America/Los_Angeles';
// accessed within functions or class methods (see somefile.php)
define('HTTP', 'http://imac.local/my_site/');
define('HTTPS', 'http://imac.local/my_site/');
define('FILE_ROOT', '/Library/WebServer/Documents/my_site/');
INC /的init.php
require 'inc/config.php';
/* Set some php configurations */
isset($config['error_reporting']) ? error_reporting($config['error_reporting']) : '';
isset($config['time_limit']) ? set_time_limit($config['time_limit']) : '';
isset($config['memory_limit']) ? ini_set('memory_limit', $config['memory_limit']) : '';
isset($config['timezone']) ? date_default_timezone_set($config['timezone']) : date_default_timezone_set('America/Los_Angeles');
somefile.php
require 'inc/init.php';
function site_url($uri, $secure = FALSE)
{
return $secure ? HTTPS . $uri : HTTP . $uri;
}
請記住這個例子剝離下來展示一個想法。
+1常量爲常數值,那麼你可以放心,他們總是設置,不變和持久; fwiw靜態類變量帶有性能優勢,可以在運行時更改。最後,有人建議配置ini或xml文件 - 簡單的回答是,爲什麼浪費時間並添加不需要的額外負載(解析讀取等)。 – nathan 2010-07-17 09:44:28
感謝,是的,我有數組太: $設置[ '語言'] =陣列( '工程'=> '英語', 'RUS'=> 'по-русски', '緯度'= >'Latviski' ); $ settings ['site_title'] = _(「網站標題」); $ settings ['default_lng'] ='eng'; /** *Мин。 количествогололов */ $ settings ['min_votes'] = 3; /** *Кол-воппльзователей,послекоторогорегистрациятолькопоприглашениям。 */ $ settings ['invites'] = 100000; // 25000; /** *請參考我們的隱私政策 */ $ settings ['invite_timeout'] = 86400 * 3; 我想,這個變種更好,謝謝大家的幫助! – ideea 2010-07-17 13:27:09