2010-07-17 10 views
8

मुझे परियोजना के लिए सेटिंग्स कैसे स्टोर करनी चाहिए?

$settings['max_photos'] = 30; 
//... 

या इसमें सभी सेटिंग्स के साथ एक सिंगलटन Config वर्ग बनाने: मेरे सभी सेटिंग्स के साथ एक $settings सरणी का उपयोग करने -

कौन सा बेहतर है?

Class Config { 
    private $max_photos = 30; 
    //... 
} 

कोई अच्छा उदाहरण?

उत्तर

1

सबसे अच्छा तरीका फ़ाइल में अपनी सेटिंग को स्टोर करना है। और इस फ़ाइल में हेरफेर करने के लिए एक कक्षा घोषित करें जो

0

पर प्रोजेक्ट सेटिंग्स बहुत भारी है, तो फ़ाइल (xml बेहतर है) अच्छी है और सेटिंग्स के लिए एक समर्पित कक्षा भी अच्छी है।

यदि परियोजना सेटिंग्स छोटी है, तो सरणी सबसे अच्छी है, यह बहुत तेज है और कोई I/O संबंधित समस्या उत्पन्न नहीं होगी।

यहां तक ​​कि आप डेटाबेस (धीमे और औथ मुद्दे) का उपयोग भी कर सकते हैं।

2

या तो अच्छी तरह से काम करेगा, जो भी आप सबसे अधिक आरामदायक महसूस करते हैं।

11

मुझे लगता है कि कॉन्फ़िगरेशन के लिए स्थिरांक का उपयोग करना सबसे अच्छा है। उदाहरण के वर्ग स्थिरांक का उपयोग कर के लिए:

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; का उपयोग करके कार्यों/कक्षाओं में आयात न करें।

+1

स्थिर मूल्यों के लिए +1 स्थिरांक, तो आपको आश्वस्त किया जा सकता है कि वे हमेशा सेट, अपरिवर्तनीय और लगातार होते हैं; fwiw स्थिर वर्ग चर प्रदर्शन प्रदर्शन हिट लेते हैं और रनटाइम पर बदला जा सकता है। अंत में, किसी को भी एक कॉन्फ़िगरेशन ini या xml फ़ाइल का सुझाव देता है - सरल प्रतिक्रिया है, समय बर्बाद क्यों करें और अतिरिक्त लोड में जोड़ें जो आवश्यक नहीं है (पढ़ना पर्सिंग आदि)। – nathan

+0

धन्यवाद, हाँ, मैं सरणियों भी मिला: $ सेटिंग्स [ 'भाषा'] = सरणी ( 'eng' => 'अंग्रेजी में', 'रस' => 'По-русски', 'अक्षांश' = > 'लातविस्की' ); $ सेटिंग्स ['site_title'] = _ ("साइट शीर्षक"); $ सेटिंग्स ['default_lng'] = 'eng'; /** * Мин। количество гололов */ $ सेटिंग्स ['min_votes'] = 3; /** * Кол-во пользователей, после которого регистрация только по приглашениям। */ $ सेटिंग्स ['आमंत्रण'] = 100000; // 25000; /** * Время истечения приглашения */ $ सेटिंग्स ['login_timeout'] = 86400 * 3; मुझे लगता है, यह संस्करण बेहतर है, मदद के लिए सभी को धन्यवाद! – ideea

1

आप सरणी दृष्टिकोण के लिए जाना है, तो आप थोड़ा और अधिक पठनीय कोड के लिए सरणी शाब्दिक इस्तेमाल कर सकते हैं:

$settings = array(
    'max_photos' => 30, 
    'max_width' => 100 
    //... 
) 
1

मेरे दो सेंट: दोनों का प्रयोग करें। अधिकांश एप्लिकेशन कॉन्फ़िगरेशन सेटिंग्स वैश्विक सरणी चर में हैं। कॉन्फ़िगर डेटा को विभिन्न अनुप्रयोग भागों से एक्सेस करने की आवश्यकता है, और यही वैश्विक चर के लिए है। और एक सरणी में सबकुछ एक साथ रखना सबसे समझदार है। एक सरणी बढ़ाया जा सकता है, उदा। कुछ विकल्प config.php में सेट होते हैं और बाकी को config.ini से पढ़ा जाता है उदाहरण के लिए।

लेकिन कॉन्स्टेंट्स के लिए भी एक जगह है। ड्रॉ करने के लिए अच्छी लाइन यह है कि, यदि कोई विकल्प वास्तव में ऐसा कुछ है जो एप्लिकेशन रनटाइम के दौरान बदल सकता है, या यदि यह निश्चित/जादू मान का अधिक है।यदि एक बार सेट अप किया गया है, तो आपको एक एप्लिकेशन सेटिंग नहीं बदलनी चाहिए (या प्रतिपादन विफल हो सकता है), तो यह विकल्प सरणी में नहीं होना चाहिए, लेकिन स्थिर रूप से स्थिर रूप से तय किया जाना चाहिए। (यह अंगूठे का एक व्याख्यात्मक नियम है, लेकिन मुझे अच्छी तरह से सेवा दी।)

0

मैं कॉन्फ़िगरेशन मान डालता हूं जो केवल कॉन्फ़िगरेशन सरणी में वैश्विक रूप से उपयोग किए जाते हैं और कहीं भी एक्सेस किए गए मानों को परिभाषित करते हैं। उदाहरण के लिए:

कांग्रेस/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/'); 

इंक/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; 
} 

ध्यान रखें कि यह उदाहरण के लिए नीचे छीन लिया है एक विचार प्रदर्शित करें।

संबंधित मुद्दे