2012-04-19 11 views
43

पीएचपीPHP में निजी स्थिरांक संभव हैं?

class Foo 
{ 
    private const my_private_const; 

की अनुमति नहीं है लेकिन निश्चित रूप से अनुमति देता है प्रभाव स्थिरांक में

const my_const; 

तो कर रहे हैं वैश्विक क्योंकि मैं कहीं भी Foo::my_const

का उपयोग कर my_const उपयोग कर सकते हैं वहाँ निजी स्थिरांक बनाने के लिए एक रास्ता है ?

+8

यदि यह निरंतर मूल्य है, तो क्या इससे कोई फर्क पड़ता है कि यह निजी है या नहीं? – hjpotter92

+0

आप क्लास स्थिरांक को परिभाषित कर सकते हैं जो कक्षा से संबंधित है http://www.php.net/manual/en/language.oop5.constants.php – Hajo

+0

@ हाजो - कैसे? निजी कॉन्स एक त्रुटि पैदा करता है। –

उत्तर

35

उत्तर एक सरल "नहीं" है। PHP इस अवधारणा का समर्थन नहीं करता है। सबसे अच्छा आप कक्षा में private static परिवर्तनीय कर सकते हैं, जो पाठ्यक्रम के रूप में अच्छा नहीं है क्योंकि यह केवल पढ़ने योग्य नहीं है। लेकिन आपको बस इसके आसपास काम करना है।

संपादित

आपका प्रश्न मुझे सोच मिला - यहाँ कुछ मैं कभी नहीं की कोशिश की है, लेकिन काम हो सकता है। एक और तरीका रखो "यह अनचाहे है"। लेकिन कहते हैं कि तुम एक "निजी निरंतर" FOO कहा जाता है चाहता था:

// "Constant" definitions 
private function __get($constName){ 
    // Null for non-defined "constants" 
    $val = null; 

    switch($constName){ 
     case 'FOO': 
      $val = 'MY CONSTANT UNCHANGEABLE VALUE'; 
      break; 
     case 'BAR': 
      $val = 'MY OTHER CONSTANT VALUE'; 
      break; 
    } 

    return $val; 
} 

बेशक अपने वाक्य रचना थोड़ा अजीब दिखेगा:

// Retrieve the "constant" 
$foo = $this->FOO; 

... लेकिन कम से कम यह काम नहीं होगा:

$this->FOO = 'illegal!'; 

शायद कुछ कोशिश करने लायक है?

चीयर्स

+0

में यह संभव है यह एक शानदार सुझाव है ... मैं निश्चित रूप से इसका उपयोग करूँगा! साझा करने के लिए धन्यवाद। एक और विकल्प सभी चर निजी और संरक्षित बनाने के लिए है, फिर इस तरह के एक फ़ंक्शन को फ़िल्टर करने के लिए फ़िल्टर करें कि कौन से चर बदल सकते हैं और जिन्हें केवल पढ़ने के लिए मजबूर किया जाता है .. इसे देखें मैंने अभी प्रकाशित किया है! http://www.designersgate.com/blogs/?p=187 – raphie

+0

कूल, – Madbreaks

+0

के लिए धन्यवाद दुर्भाग्यवश जादू निजी गेटर काम नहीं करेगा क्योंकि PHP सार्वजनिक दृश्यता के साथ __get चाहता है। – marcosdsanchez

6

@Madbreaks 'वैकल्पिक हल का एक सरलीकृत संस्करण:

private static function MY_CONSTANT() { 
    return "constant string"; 
} 

उपयोग::

public static function DoStuff() { 
    echo self::MY_CONSTANT(); 
} 
21

एक निजी स्थिर समारोह है कि अपने निजी "निरंतर" का मान देता बारे में नोट, कक्षा स्थिरांक के लिए दृश्यता संशोधक PHP 7.1 में जोड़े गए हैं।

आरएफसी: Support Class Constant Visibility

29

लोग! PHP 7.1.0 has been released

अब क्लास स्थिरांक के साथ दृश्यता संशोधक होना संभव है। पीएचपी 7.1 में ऊपर के उदाहरण के

<?php 
class Foo { 
    // As of PHP 7.1.0 
    public const BAR = 'bar'; 
    private const BAZ = 'baz'; 
} 
echo Foo::BAR, PHP_EOL; 
echo Foo::BAZ, PHP_EOL; 
?> 

आउटपुट:

bar 

Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in … 
0

तुम भी उपयोग कर सकते हैं:

private static $foo; 

या

protected static $bar; 

और वर्ग के भीतर आप कॉल कर सकते हैं । या तो:

self::$foo 
$this::$foo 
CLASSNAME::$foo 
+1

चूंकि यह एक पुराना सवाल है, [PHP 7.1] (http://php.net/manual/en/language.oop5.constants.php) कक्षा स्थिरांक के लिए दृश्यता संशोधक के लिए अनुमति देता है। –

+0

मुझे निजी कॉन्स तक पहुंचने वाले कुछ मुद्दों का सामना करना पड़ रहा था। – Deepesh

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