2009-10-07 8 views
9

मैं इस व्याख्या के तहत हूं कि अगर मुझे किसी विधि को स्थाई रूप से एक्सेस करने की आवश्यकता है, तो मुझे कक्षा सार केवल तभी बनाना चाहिए जब मुझे इसे तत्काल आवश्यकता न हो। क्या यह सच है?, मुझे स्थिर विधियों बनाम अमूर्त कक्षाओं का उपयोग कब करना चाहिए?

उत्तर

3

मुझे प्रश्न का थोड़ा अनिश्चितता है। स्टेटिक विधियां अमूर्त कक्षाओं से काफी अलग हैं। आम तौर पर यदि आप कक्षा को तत्काल नहीं चाहते हैं तो आप एक अमूर्त वर्ग बनायेंगे, लेकिन आप उप-वर्गों को तत्काल होने की उम्मीद करते हैं। अमूर्त वर्गों का उपयोग आंशिक रूप से लागू कक्षा बनाने के लिए बहुत उपयोगी हो सकता है जहां उप-वर्ग कक्षा को पूरी तरह कार्यान्वित करने के लिए शेष विधियों को भर देगा।

एक वर्ग स्थिर तरीकों से भरा सार घोषित किया जा सकता है अगर आप वर्ग के उपयोग को रोकने के लिए चाहते हैं, लेकिन आम तौर पर मैं कहूंगा कि यदि आप एक वर्ग सार चिह्नित करते हैं, आप कक्षाएं उस वर्ग का विस्तार खोजने के लिए सक्षम होना चाहिए। यदि मेरे पास एक वर्ग है जो स्थैतिक तरीकों से भरा है I इसे सार के रूप में लेबल न करें क्योंकि कोई भी इसे उपclass नहीं करेगा, और यह आमतौर पर भ्रम जोड़ता है। मैं इसे एक स्थिर वर्ग कहा जाता हूं, अमूर्त नहीं।

+0

निश्चित रूप से; सार बनाम अमूर्त बनाम एक निजी कन्स्ट्रक्टर होने के अर्थशास्त्र बहुत अलग हैं, और सही का उपयोग करने से कक्षा को पढ़ने के तरीके के बारे में कोड पढ़ने वाले किसी को भी एक मजबूत संकेत मिलता है। – Rob

6

PHP में कक्षाओं पर स्थिर पहचानकर्ता नहीं है, इसलिए किसी को तत्काल होने से रोकने के लिए अन्य विधियों की आवश्यकता है।

आप कक्षा को इसे अमूर्त परिभाषित करके तत्काल होने से रोक सकते हैं, और ऐसा करने का एक सस्ता तरीका है, हालांकि यह एक अमूर्त वर्ग का उद्देश्य नहीं है।

अन्य तरीकों contructor निजी

private function __construct() {} 

को परिभाषित करने या contructor में एक अपवाद फेंक अगर आप के लिए कारण है कि यह instantiated नहीं किया जा सकता है के रूप में एक और अधिक सार्थक संदेश देने के लिए इच्छा शामिल हैं।

function __construct() { throw new Exception('This is a static class'); } 

यदि आप यह भी नहीं चाहते कि कक्षा उप-वर्ग वर्ग को अंतिम घोषित करे।

final class foo { } 

या अजीब मामले में आप इसे उपवर्ग करने में सक्षम होना चाहता हूँ, लेकिन नहीं निर्माता अंतिम घोषित दृष्टांत के लिए यह बच्चों में से किसी अनुमति देते हैं। (दूर की गई स्थिति, लेकिन पूर्णता के लिए)

final private function __construct() {} 
संबंधित मुद्दे