2010-12-22 15 views
39

क्या मैं यह मानने में सही हूं कि कॉन्स गुण स्वचालित रूप से सार्वजनिक होते हैं? क्या उन्हें निजी या संरक्षित करने का कोई तरीका है?PHP कक्षा Constants - सार्वजनिक, निजी या संरक्षित?

अग्रिम धन्यवाद।

+6

उन्हें छिपा बनाने के लिए क्या कारण है कि निम्न उदाहरण पर एक नज़र है? भले ही वे सार्वजनिक हैं - वे केवल पढ़े जाते हैं। – zerkms

+2

कॉन्स्टेंट सार्वजनिक होने के लिए हैं, क्योंकि वे कक्षा के बारे में अपरिवर्तनीय तथ्यों का वर्णन करना चाहते हैं, राज्य या नहीं। तो उन्हें छिपाने में कोई मूल्य नहीं है। – StasM

+0

उन्हें '__getStatic' के साथ भविष्य के संस्करणों में नकली बना सकता है। आम तौर पर यह संदिग्ध है यदि आपको स्क्रिप्टिंग भाषाओं में एक्सेस मॉडिफायर की आवश्यकता है। (जावास्क्रिप्ट/पायथन जिस तरह से अधिक ऑब्जेक्ट उन्मुख हैं उन्हें उनकी आवश्यकता नहीं है।) – mario

उत्तर

33

हां, वे वैश्विक रूप से तब तक पहुंच योग्य हैं जब तक कक्षा स्वयं लोड हो जाती है। जहां तक ​​मुझे पता है कि आप PHP में कक्षा स्थिरांक की पहुंच को संशोधित नहीं कर सकते हैं।

+1

आप सही हैं। आप प्रतिबिंब के माध्यम से कॉन्स्ट के साथ एक एक्सेस विनिर्देशक का उपयोग नहीं कर सकते हैं और न ही संशोधित कर सकते हैं। PHP bashing के लिए – webbiedave

19

कक्षा स्थिरांक में निजी/संरक्षित होने का विकल्प होना चाहिए क्योंकि सार्वजनिक रूप से कक्षा के आंतरिक विवरण का खुलासा किया जाता है कि अन्य वर्ग/कोड गलत तरीके से सोचने का उपयोग कर सकते हैं क्योंकि वे सार्वजनिक हैं क्योंकि वे सार्वजनिक हैं।

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

वापस जब तुम वस्तु डिजाइन & विश्लेषण सीखने गया के लिए याद रखें ... आप वर्ग तरीकों देने के लिए और संभव सबसे प्रतिबंधित पहुँच जिम्मेदार बताते हैं, और बाद में जरूरत के रूप में (बहुत कठिन वापस दूसरे रास्ते से जाने के लिए उन्हें आराम क्योंकि अन्य वर्गों/कोड उनको उपयोग करना शुरू करें जो तब दूसरे कोड को तोड़ देंगे)।

कारगर युक्तियाँ

बेस्ट शर्त सिर्फ एक निजी या संरक्षित चर और अपर केस यह एक निरंतर दिखाने के लिए तैयार करना है। आप हमेशा निरंतर ($ value_to_be_constant) नामक एक वर्ग बना सकते हैं जो इसे बदलने से रोकने के लिए सही जादू विधियों/स्प्ल इंटरफेस लागू करता है।

+4

हाँ। +1 –

+0

प्लस वन, यदि PHP ओओपी के साथ "गंभीर" प्रोग्रामिंग भाषा बनना चाहता है, तो आपको सुझाए गए अनुसार इसे बदलने की जरूरत है। – Srneczek

+1

सर्वश्रेष्ठ शर्त केवल एक निजी या संरक्षित ** 'स्थिर '** चर बनाने के लिए है ... – Pang

5

मुझे पता है इस सवाल के 6 वर्ष

Php 7.1 (वर्तमान में RC1) वर्ग स्थिरांक पर दृश्यता निर्दिष्ट करने के लिए अनुमति देता है कर रहा हूँ।

class Token { 
     // Constants default to public 
     const PUBLIC_CONST = 0; 

     // Constants then also can have a defined visibility 
     private const PRIVATE_CONST = 0; 
     protected const PROTECTED_CONST = 0; 
     public const PUBLIC_CONST_TWO = 0; 

     //Constants can only have one visibility declaration list 
     private const FOO = 1, BAR = 2; 
} 

अतिरिक्त जानकारी

2

php7.1 के रूप में, आप पहुँच संशोधक (public, private या के साथ अपने वर्ग स्थिरांक परिभाषित कर सकते हैं protected)।

<?php 
class superheroes{ 
    public const kal_el = 'Superman'; 
    protected const bruce_wayne = 'Batman'; # works php7.1 onwards 
    private const anthony_stark = 'Iron Man'; # works php7.1 onwards 

    public static function show_remaining(){ 
     echo self::bruce_wayne, '<br />'; 
     echo self::anthony_stark, '<br />'; 
    } 
} 
echo superheroes::kal_el, '<br />'; 
superheroes::show_remaining(); 

क्रेडिट:: http://dwellupper.io/post/48/defining-class-constants-in-php

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