परिचय
PHP में declare स्टेटमेंट का सिंटैक्स while, for, foreach आदि जैसे अन्य फ्लो कंट्रोल संरचनाओं के समान है।
सिंटैक्स
declare (directive) {
statement1;
statement2;
...
}
ब्लॉक का व्यवहार डायरेक्टिव के प्रकार द्वारा परिभाषित होता है। declare स्टेटमेंट में तीन प्रकार के डायरेक्टिव्स प्रदान किए जा सकते हैं - ticks, encoding और strict_types डायरेक्टिव।
1. ticks डायरेक्टिव
एक टिक एक विशेष घटना का नाम है जो स्क्रिप्ट में निश्चित संख्या में स्टेटमेंट्स निष्पादित होने पर होता है। ये स्टेटमेंट्स PHP के आंतरिक हैं और मोटे तौर पर आपके स्क्रिप्ट में स्टेटमेंट्स के बराबर हैं (कंडीशनल और आर्गुमेंट एक्सप्रेशन्स को छोड़कर)। किसी भी फंक्शन को register_tick_function द्वारा टिक इवेंट के साथ जोड़ा जा सकता है। रजिस्टर्ड फंक्शन declare डायरेक्टिव में निर्दिष्ट टिक्स की संख्या के बाद निष्पादित होगा।
उदाहरण
<?php
function myfunction() {
echo "Hello World\n";
}
register_tick_function("myfunction");
declare (ticks=5) {
for ($i = 1; $i <= 10; $i++) {
echo $i . "\n";
}
}
?>
आउटपुट (कमांड लाइन से चलाने पर)
1 2 3 4 5 Hello World 6 7 8 9 10 Hello World
PHP में unregister_tick_function() भी है जो किसी फंक्शन का टिक इवेंट के साथ एसोसिएशन हटाता है।
2. strict_types डायरेक्टिव
PHP एक कमजोर टाइप वाली भाषा है, जो किसी निश्चित ऑपरेशन को करने के लिए डेटा टाइप को उपयुक्त रूप से कन्वर्ट करने का प्रयास करती है। यदि दो इंटीजर आर्गुमेंट्स वाला फंक्शन है जो उनका जोड़ लौटाता है, और इसे कॉल करते समय कोई आर्गुमेंट फ्लोट के रूप में दिया जाता है, तो PHP पार्सर ऑटोमैटिकली फ्लोट को इंटीजर में कन्वर्ट कर देगा। यदि यह जबरन कन्वर्जन (coercion) वांछित नहीं है, तो हम declare कंस्ट्रक्ट में strict_types=1 निर्दिष्ट कर सकते हैं।
उदाहरण: strict_types के बिना (डिफ़ॉल्ट)
<?php
// strict_types डिफ़ॉल्ट रूप से 0 है
function myfunction(int $x, int $y) {
return $x + $y;
}
echo "total=" . myfunction(1.99, 2.99);
?>
आउटपुट
total=3
फ्लोट पैरामीटर्स को जोड़ करने के लिए इंटीजर में जबरन कन्वर्ट किया जाता है।
उदाहरण: strict_types=1 के साथ
<?php
declare (strict_types=1);
function myfunction(int $x, int $y) {
return $x + $y;
}
echo "total=" . myfunction(1.99, 2.99);
?>
आउटपुट
Fatal error: Uncaught TypeError: Argument 1 passed to myfunction() must be of the type integer, float given
महत्वपूर्ण नोट
declare(strict_types=1)फाइल के शीर्ष पर होना चाहिए (नेमस्पेस से पहले)।- यह केवल उस फाइल को प्रभावित करता है जिसमें यह घोषित है (इंक्लूडेड फाइल्स को नहीं)।
- यह स्केलर टाइप डिक्लेरेशन्स (int, float, string, bool) पर लागू होता है।
- रिटर्न टाइप डिक्लेरेशन्स पर भी लागू होता है।
3. Encoding डायरेक्टिव
declare कंस्ट्रक्ट में Encoding डायरेक्टिव होता है जिसके साथ स्क्रिप्ट की एन्कोडिंग स्कीम निर्दिष्ट करना संभव है।
उदाहरण
<?php declare(encoding='ISO-8859-1'); echo "This Script uses ISO-8859-1 encoding scheme"; ?>
सारांश
| डायरेक्टिव | उद्देश्य | स्कोप |
|---|---|---|
| ticks=N | हर N स्टेटमेंट्स पर फंक्शन कॉल | फाइल-स्तरीय |
| strict_types=1 | सख्त टाइप चेकिंग सक्षम | फाइल-स्तरीय |
| encoding='...' | स्क्रिप्ट एन्कोडिंग निर्दिष्ट | फाइल-स्तरीय |