T_PAAMAYIM_NEKUDOTAYIM त्रुटि: कारण और समाधान

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

रहस्यमय T_PAAMAYIM_NEKUDOTAYIM त्रुटि से परेशान हैं? घबराएं नहीं!

\n\n

अगर आपने कभी PHP में कोड लिखा है और PHP Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM) जैसी त्रुटि देखी है, तो आप जानते हैं कि यह कितना भ्रमित करने वाला हो सकता है। खासकर जब आप अभी भाषा सीख रहे हों और अचानक एक हिब्रू शब्द दिख जाए। असल में, इस लंबे नाम के पीछे एक सरल चीज़ छिपी है — स्कोप रेज़ोल्यूशन ऑपरेटर (Paamayim Nekudotayim का हिब्रू में अर्थ है "डबल कोलन")।

\n\n

इस ट्यूटोरियल में हम जानेंगे कि यह त्रुटि क्यों होती है, इसे कैसे ठीक करें, और भविष्य में इससे कैसे बचें। यह लेख Stack Overflow के एक वास्तविक प्रश्न पर आधारित है जिसे हज़ारों बार देखा गया — यानी यह समस्या वाकई लोकप्रिय है।

\n\n

T_PAAMAYIM_NEKUDOTAYIM क्या है?

\n\n

PHP में एक विशेष ऑपरेटर :: (डबल कोलन) होता है। इसका उपयोग क्लास के स्टैटिक प्रॉपर्टीज़, मेथड्स और कॉन्स्टेंट्स तक पहुँचने के लिए किया जाता है। उदाहरण:

\n\n
<?php\nclass MyClass {\n    public static $value = 42;\n    const PI = 3.14;\n    \n    public static function hello() {\n        return "स्टैटिक मेथड से नमस्ते!";\n    }\n}\n\n// :: का सही उपयोग\necho MyClass::$value;  // 42 आउटपुट होगा\necho MyClass::PI;      // 3.14 आउटपुट होगा\necho MyClass::hello(); // "स्टैटिक मेथड से नमस्ते!" आउटपुट होगा\n?>\n
\n\n

जब तक आप सिंटैक्स नहीं तोड़ते, सब कुछ सरल है। T_PAAMAYIM_NEKUDOTAYIM त्रुटि तब होती है जब PHP को :: किसी अप्रत्याशित संदर्भ में मिलता है या जब इसके पहले कोई क्लास नहीं, बल्कि कुछ और होता है (जैसे वेरिएबल)।

\n\n

त्रुटि के 5 सबसे सामान्य कारण

\n\n

आइए उन विशिष्ट परिदृश्यों को समझते हैं जो इस त्रुटि का कारण बनते हैं। प्रत्येक मामले को कोड उदाहरण और समाधान के साथ समझाया गया है।

\n\n

1. ऑब्जेक्ट के साथ :: का उपयोग करना (क्लास के बजाय)

\n\n

शुरुआती लोगों की सबसे आम गलती — ऑब्जेक्ट के माध्यम से स्टैटिक मेथड को कॉल करने के लिए -> के बजाय :: का उपयोग करना।

\n\n

गलत तरीका:

\n
<?php\nclass Calculator {\n    public static function add($a, $b) {\n        return $a + $b;\n    }\n}\n\n$calc = new Calculator();\necho $calc::add(5, 3); // त्रुटि! PHP को T_PAAMAYIM_NEKUDOTAYIM की उम्मीद है\n?>\n
\n\n

सही तरीका:

\n
<?php\necho Calculator::add(5, 3); // क्लास के माध्यम से कॉल करें\n// या अगर मेथड स्टैटिक नहीं है:\n// echo $calc->add(5, 3);\n?>\n
\n\n

याद रखें: स्टैटिक मेथड और प्रॉपर्टी के लिए क्लास नाम के साथ :: का उपयोग करें, सामान्य मेथड के लिए ऑब्जेक्ट के साथ -> का उपयोग करें।

\n\n

2. क्लास गायब है या क्लास का नाम गलत है

\n\n

कभी-कभी आप :: लिखते हैं, लेकिन PHP को क्लास नहीं मिल पाती क्योंकि आपने उसे घोषित नहीं किया या नाम में गलती की है।

\n\n

त्रुटि का उदाहरण:

\n
<?php\necho SomeClass::doSomething(); // Fatal error: Class 'SomeClass' not found\n?>\n
\n\n

समाधान:

\n
    \n
  • जाँचें कि क्लास घोषित है (या require/include के माध्यम से शामिल की गई है)।
  • \n
  • सुनिश्चित करें कि क्लास का नाम बिना किसी गलती के लिखा गया है।
  • \n
  • अगर क्लास दूसरी फ़ाइल में है, तो फ़ाइल का पथ जाँचें।
  • \n
\n\n

3. वेरिएबल के साथ :: का उपयोग करना जिसमें क्लास नहीं है

\n\n

कभी-कभी आप किसी वेरिएबल के माध्यम से स्टैटिक मेथड को कॉल करने की कोशिश करते हैं, लेकिन उस वेरिएबल में क्लास का नाम (स्ट्रिंग) नहीं, बल्कि कुछ और होता है।

\n\n

समस्याग्रस्त कोड:

\n
<?php\nclass Logger {\n    public static function log($msg) {\n        echo "[LOG] $msg";\n    }\n}\n\n$className = 123; // यह संख्या है, क्लास नाम वाली स्ट्रिंग नहीं\n$className::log("टेस्ट"); // त्रुटि!\n?>\n
\n\n

समाधान: हमेशा जाँचें कि वेरिएबल में सही क्लास का नाम (स्ट्रिंग) है।

\n\n
<?php\n$className = 'Logger';                

ब्लॉग

पुस्तक अनुशंसाएँ