2011-01-14 18 views
13

मेरे पास कुछ फ़ंक्शन हैं जो कुकीज़ से निपटते हैं। क्या उन्हें एक वर्ग में ले जाकर उन्हें स्थैतिक तरीकों के रूप में इस्तेमाल करने का एक भयानक विचार होगा?कार्य बनाम स्टेटिक तरीके

कार्य:

function cookie_get(){} 
function cookie_set(){} 
function cookie_delete(){} 

स्टेटिक तरीके:

class cookie 
{ 
    static function get(){} 
    static function set(){} 
    static function delete(){} 
} 
+2

बस हमेशा की तरह के बारे में पता होना समस्याएं दी हो सकता है "स्थैतिक कक्षाओं/एकमात्र इकाई परीक्षण के दुश्मन हैं।" –

उत्तर

8

हां, यह एक भयानक विचार होगा क्योंकि static methods are hard to test and mock। क्यों न केवल वास्तविक कुकी वर्ग बनाएं जिसे आप रनटाइम पर नियमित तरीकों के रूप में कॉन्फ़िगर कर सकते हैं।

यदि आप केवल उन कार्यों को एक पैकेज में समूहित करना चाहते हैं, तो आप use Namespaces भी कर सकते हैं।


संपादित: चूंकि आप यह टिप्पणी में पले-बढ़े: हाँ, किसी भी परीक्षण के लिए नियमित रूप से कार्य करता है स्टैटिक्स के रूप में के रूप में untestable हैं। तो आपकी प्रारंभिक स्थिति एक स्थिर वर्ग का उपयोग करने के लिए इसे बदलने के रूप में "भयानक" है। यहां तक ​​कि छद्म नामस्थान भी आपको कोई लाभ नहीं दे रहा है, क्योंकि आपने पहले से ही अपने नियमित कार्यों पर भी आवेदन किया है। cookie_getCookie::get के रूप में अच्छा या बुरा है।

+1

+1। जानकार अच्छा लगा। – karim79

+2

PHP 5.3 तक यह बहुत खराब नामस्थान उपलब्ध नहीं है। –

+0

@Emanuil [PHP 5.2 आधिकारिक तौर पर दिसंबर, 16 वीं 2010 तक समर्थन के अंत तक पहुंच गया है] (http://www.php.net/archive/2010.php#id2010-12-16-1)। [सभी उपयोगकर्ताओं को PHP 5.3 में अपग्रेड करने के लिए प्रोत्साहित किया जाता है।] (Http: //de2.php।नेट/माइग्रेशन 53) – Gordon

10

यह एक बहुत अच्छा विचार है, बशर्ते आप caveats involved पूरी जानकारी हो होगा। यह Utility Pattern के रूप में जाना जाता है:

उपयोगिता वर्गों के लिए अच्छा उम्मीदवारों सुविधा तरीकों कि जा कार्यात्मक एक साथ समूहीकृत कर सकते हैं।

+2

धन्यवाद, यह जानना बहुत अच्छा है। मुझे आश्चर्य है, हालांकि, PHP के मूल कार्य इसका उपयोग क्यों नहीं करते हैं। क्यों 'str_replace()' 'स्ट्र :: नहीं है()'? –

+3

PHP एक प्रक्रियात्मक भाषा है, ओओपी सुविधाओं के बाद एक विचार के रूप में कार्यरत हैं। यह अंतर्निहित कार्यों (अत्यधिक असंगत नामकरण सम्मेलनों के साथ) के रूप में है, जो स्थिर सहायक वर्गों के विरोध में समूह समूह से जुड़े कार्यों के साथ हैं। – karim79

+0

@EmanuilRusev PHP एपीआई कोर सामान्य रूप से खराब रूप से डिज़ाइन किया गया है लेकिन विशेष रूप से जब यह नामस्थानों की बात आती है क्योंकि वे PHP5 की अपेक्षाकृत हालिया रिलीज तक उपलब्ध नहीं थे। फॉर्म str :: replace() को निश्चित रूप से प्राथमिकता दी जाएगी, लेकिन मुझे गंभीरता से संदेह है कि कोई भी निकट भविष्य में किसी भी बिंदु पर उन्हें मूल रूप से कोर में जोड़ देगा। संदर्भ में जोड़ने के लिए –

9

इस तरह के कार्यों को व्यवस्थित करना वास्तव में अच्छा अभ्यास है। एक आधुनिक विकल्प namespace का उपयोग करना होगा।

3

यह आपके कोड को व्यवस्थित करने का एक शानदार तरीका होगा, लेकिन स्थिर कार्यों का उपयोग क्यों करें, केवल आवश्यक कार्यक्षमता के लिए कक्षा बनाएं।

या ऊपर बताए गए नामस्थानों का उपयोग करते हुए, लेकिन मैं उनसे पेशेवरों/विपक्ष से विशेष रूप से परिचित नहीं हूं।

$cookie->get() मेरी राय में cookie_get() से साथ काम करने के अच्छे है

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