परिचय
PHP एक क्लास में एक पहचानकर्ता को परिभाषित करने की अनुमति देता है जिसका एक कॉन्स्टेंट मान होता है, जो प्रति क्लास आधार पर अपरिवर्तित रहता है। क्लास के भीतर वेरिएबल या प्रॉपर्टी से अलग करने के लिए, कॉन्स्टेंट के नाम को $ सिंबल से प्रीफिक्स नहीं किया जाता और इसे const क्वालिफायर के साथ परिभाषित किया जाता है।
कॉन्स्टेंट की डिफ़ॉल्ट विजिबिलिटी public होती है, हालांकि परिभाषा में अन्य मॉडिफायर्स उपयोग किए जा सकते हैं। कॉन्स्टेंट का मान एक निश्चित एक्सप्रेशन होना चाहिए न कि वेरिएबल, फंक्शन कॉल या प्रॉपर्टी। कॉन्स्टेंट के मान को स्कोप रिजॉल्यूशन ऑपरेटर का उपयोग करके क्लास नाम के माध्यम से एक्सेस किया जाता है। किसी मेथड के अंदर इसे self वेरिएबल के माध्यम से संदर्भित किया जा सकता है।
सिंटैक्स
class SomeClass {
const CONSTANT = 'constant value';
}
echo SomeClass::CONSTANT;
कॉन्स्टेंट नाम केस-सेंसिटिव होते हैं। परंपरा के अनुसार, कॉन्स्टेंट का नाम अपरकेस में दिया जाता है।
उदाहरण 1: बेसिक क्लास कॉन्स्टेंट
<?php
class square {
const PI = M_PI;
var $side = 5;
function area() {
$area = $this->side ** 2 * self::PI;
return $area;
}
}
$s1 = new square();
echo "PI=" . square::PI . "\n";
echo "area=" . $s1->area();
?>
आउटपुट
PI=3.1415926535898 area=78.539816339745
उदाहरण 2: एक्सप्रेशन के रूप में क्लास कॉन्स्टेंट
इस उदाहरण में, क्लास कॉन्स्टेंट को एक एक्सप्रेशन असाइन किया गया है:
<?php
const X = 22;
const Y = 7;
class square {
const PI = X / Y;
var $side = 5;
function area() {
$area = $this->side ** 2 * self::PI;
return $area;
}
}
$s1 = new square();
echo "PI=" . square::PI . "\n";
echo "area=" . $s1->area();
?>
आउटपुट
PI=3.1428571428571 area=78.571428571429
उदाहरण 3: कॉन्स्टेंट विजिबिलिटी मॉडिफायर्स (PHP 7.1+)
<?php
class example {
const X = 10;
private const Y = 20;
}
$s1 = new example();
echo "public=" . example::X . "\n";
// echo "private=" . $s1->Y . "\n"; // त्रुटि: प्रॉपर्टी एक्सेस
// echo "private=" . example::Y . "\n"; // त्रुटि: प्राइवेट कॉन्स्टेंट एक्सेस नहीं कर सकते
?>
आउटपुट
public=10 PHP Notice: Undefined property: example::$Y PHP Fatal error: Uncaught Error: Cannot access private const example::Y
मुख्य बिंदु
- कॉन्स्टेंट्स का मान कंपाइल टाइम पर ज्ञात होना चाहिए (PHP 8.1+ में कुछ एक्सप्रेशन्स अनुमत हैं)।
- कॉन्स्टेंट्स पर $ सिंबल नहीं होता।
- क्लास के बाहर:
ClassName::CONSTANT - क्लास के अंदर:
self::CONSTANTयाstatic::CONSTANT(लेट स्टेटिक बाइंडिंग के लिए)। - PHP 7.1+ में visibility modifiers (public, protected, private) समर्थित हैं।
- इंटरफेस में भी कॉन्स्टेंट्स परिभाषित किए जा सकते हैं।