2010-10-28 14 views
13

मैं factory पैटर्न लागू करने के लिए, उदाहरण के लिए उन्हें का प्रयोग करेंगे:PHP - मैं स्थिर कॉन्स वैरिएबल क्यों घोषित नहीं कर सका?

class Types{ 
    static const car = "CarClass"; 
    static const tree = "TreeClass"; 
    static const cat = "CatClass"; 
    static const deathstar = "DeathStarClass"; 
} 

और मैं उनकी तरह उपयोग करना चाहते हैं:

$x = new Types::car; 

क्या यह संभव है?

और क्या मेरी कक्षा construcor में parametr गया है, वह काम नहीं करता:

$x = new Types::car(123); 
+3

आपका मतलब है, गतिशील स्थिरता के विपरीत स्थिर स्थिर स्थिरता? :) –

+0

संपादित करें plz;) –

+0

@ जॉन मैं अभी भी आपका उदाहरण समझ नहीं पा रहा हूं। आप लगातार चार बार क्यों घोषित करते हैं? अपेक्षित परिणाम क्या होगा? इस तरह के 'const' कीवर्ड को काम करना चाहिए, बस' स्थिर 'को छोड़ दें। यह निरंतर के लिए समझ में नहीं आता है। –

उत्तर

21

आपका कोड होना चाहिए:

class Types{ 
    const car = "CarClass"; 
    const tree = "TreeClass"; 
    const cat = "CatClass"; 
    const deathstar = "DeathStarClass"; 
} 

स्थिरांक वर्ग परिभाषा से जुड़े होते हैं के बाद से ध्यान दें कि, वे परिभाषा के अनुसार स्थिर हैं।

डॉक्स से:

पीएचपी 5.3.0 के रूप में, यह वर्ग एक चर का उपयोग कर संदर्भ करना संभव है। परिवर्तनीय मान कीवर्ड (उदा। स्वयं, अभिभावक और स्थैतिक) नहीं हो सकता है।

http://www.php.net/manual/en/language.oop5.static.php

अधिक जानकारी:

http://php.net/manual/en/language.oop5.constants.php

+0

ओओओ, बेहद! मैं प्राप्त करना चाहता हूं! लेकिन क्या होगा यदि मेरी कक्षा ने कथित तौर पर गठबंधन किया है? मैं ऐसा नहीं कर सकता: '$ x = नए प्रकार :: कार (123);' ...:( –

+3

@ जॉन: पहले एक वैरिएबल को निरंतर मान निर्दिष्ट करके एक परिवर्तनीय वर्ग को तत्काल करें: '$ प्रकार = प्रकार :: कार; $ x = नया $ प्रकार (123);' – BoltClock

+0

केवल एक चीज जो मैं जोड़ूंगा वह नामकरण है स्थिरांक के लिए सम्मेलन सभी कैप्स – Ice76

1

यह एक निरंतर है। आप इसे बदल नहीं सकते इसलिए यह कोई एहसास नहीं है कि आपके पास एक गैर स्थैतिक निरंतर सदस्य होगा। तो आपको उन्हें स्थिर या वर्ग चर के रूप में घोषित करने की आवश्यकता नहीं है।

4

कॉन्स्टेंट इस अर्थ में पहले ही स्थिर हैं कि वे कक्षा के उदाहरण से बंधे नहीं हैं। यहां बताया गया है कि उन्हें कैसे परिभाषित किया जाए और उन्हें वांछित करें:

class Types{ 
    const car = "CarClass"; 
    const tree = "TreeClass"; 
    const cat = "CatClass"; 
    const deathstar = "DeathStarClass"; 
} 

$x = Types::car; 
+0

आपका मतलब है 'प्रकार :: कार'। इसके अलावा, +1 –

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