2010-08-02 12 views
27

मुझे निम्नलिखित काम करने की उम्मीद है लेकिन ऐसा प्रतीत नहीं होता है।क्या आप PHP में स्थिर स्थिरांक का उपयोग कर सकते हैं?

<?php 

class Patterns 
{ 
    public static const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix"; 
    public static const INT = "/^\d+$/"; 
    public static const USERNAME = "/^\w+$/"; 
} 

मैं syntax error, unexpected T_CONST, expecting T_VARIABLE

उत्तर

66

आप इस तरह कक्षा में स्थिरांक का उपयोग कर सकते हैं:

class Patterns { 
    const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix"; 
    const INT = "/^\d+$/"; 
    const USERNAME = "/^\w+$/"; 
} 

और इस तरह USERNAME स्थिरांक पहुँच सकते हैं:

Patterns::USERNAME 
+1

जब इसकी एक कॉन्स होती है, तो इसे PHP कंपाइलर द्वारा आंतरिक रूप से स्थिर रूप से संभाला जाना चाहिए, मेरा मानना ​​है कि इसके मूल्य को बदला नहीं जा सकता है। –

+1

लेकिन 'स्थैतिक चर' के मानों को 'स्थिर' की तरह संभाला जा सकता है, क्योंकि उन्हें स्पष्ट रूप से बदला नहीं जा सकता है, लेकिन यदि यह वैश्विक चर पर निर्भर करता है और 'ग्लोबल वैरिएबल' परिवर्तन ' 'वर्ग' का उदाहरण ' –

6

नहीं वर्ग स्थिरांक स्थिर लेबल नहीं किया जा सकता है और न ही दृश्यता सौंपा मिलता है।

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

+0

आपकी राय में सबसे अच्छा विकल्प क्या है। यदि आपको उदाहरण वर्ग को PHP में स्वीकार्य तरीके से लिखना है - तो आप इसे कैसे करेंगे? धन्यवाद! –

+0

@Emanuil: तो वह "सार्वजनिक" और "स्थैतिक" कीवर्ड हटा देगा ;-) – zerkms

+0

@ सर्फ्राज़: मैं एक कक्षा चाहता हूं जिसमें आमतौर पर उपयोग किए जाने वाले नियमित अभिव्यक्तियों का संग्रह होता है जो मेरे सभी ऐप्स उपयोग कर सकते हैं। –

0

कैसे आप स्थिरांक का उपयोग करने की कोशिश कर रहे हैं?

मेरा मानना ​​है कि यह काम करेगा:

echo Patterns::$EMAIL; //shows "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-...." 

आप इसे के रूप में स्थिर घोषित हैं।

+3

यह आपके नमूने में स्थिर नहीं है, लेकिन एक स्थिर चर है। – zerkms

+0

@zerkms यही कारण है कि मैंने कहा कि अगर आप इसे स्थिर @ मट्टबास्ता के रूप में घोषित करते हैं तो वह वह नहीं चाहता था? – Chris

+0

आप देख सकते हैं कि वह चेक किए गए उत्तर पर क्या चाहता था। – zerkms

7

वे नहीं स्थिर स्थिरांक हों, तो बस

class Patterns 
{ 
    const EMAIL = "/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix"; 
    const INT = "/^\d+$/"; 
    const USERNAME = "/^\w+$/"; 
} 

echo Patterns::EMAIL; 
2

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

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

26

PHP में , स्थिर और स्थिर दो अलग-अलग चीजें हैं।

कॉन्स एक वर्ग निरंतर दर्शाता है। वे सामान्य चर से अलग हैं क्योंकि उनके पास '$' नहीं है, और उनके सामने कोई दृश्यता संशोधक (सार्वजनिक, संरक्षित, निजी) नहीं हो सकता है। उनका वाक्यविन्यास:

class Test 
{ 
    const INT = "/^\d+$/"; 
} 

क्योंकि वे स्थिर हैं, वे अपरिवर्तनीय हैं।

स्टेटिक उसी वर्ग की वस्तुओं के बीच साझा डेटा को इंगित करता है। यह डेटा संशोधित किया जा सकता है। एक उदाहरण एक वर्ग होगा जो ट्रैक करता है कि किसी भी समय कितने उदाहरण खेल रहे हैं:

class HowMany 
{ 
    private static $count = 0; 

    public function __construct() 
    { 
     self::$count++; 
    } 

    public function getCount() 
    { 
     return self::$count; 
    } 

    public function __destruct() 
    { 
     self::$count--; 
    } 
} 

$obj1 = new HowMany(); 
$obj2 = new HowMany(); 

echo $obj1->getCount(); 

unset($obj2); 

echo $obj1->getCount(); 
+0

PHP 7.1.0 के रूप में बनाया गया है [कक्षा स्थिरांक में दृश्यता संशोधक हो सकते हैं] (https://secure.php.net/manual/en/language.oop5.constants.php#language.oop5। basic.class.this)। – totymedli

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