php अंतर $ संख्या और int $ संख्या=null में क्या अंतर है?




(3)

इस स्पष्टीकरण को देखते हुए

अशक्त प्रकार: मापदंडों और वापसी मूल्यों के लिए प्रकार की घोषणाओं को अब प्रश्न चिह्न के साथ टाइप नाम उपसर्ग द्वारा अशक्त के रूप में चिह्नित किया जा सकता है। यह दर्शाता है कि निर्दिष्ट प्रकार के रूप में, NULL को एक तर्क के रूप में पारित किया जा सकता है, या क्रमशः एक मूल्य के रूप में वापस किया जा सकता है।

https://www.php.net/manual/en/migration71.new-features.php

निम्नलिखित कोड:


public function test(?int $var) {

}

इसका मतलब है कि test() को $var साथ int या null कहा जा सकता है।

और निम्नलिखित कोड:


public function test(int $var = null) {

}

इसका मतलब है कि test() को $var साथ int या null रूप में भी कहा जा सकता है।

उन दो तरीकों के बीच अंतर क्या हैं? क्या इनमें से कोई भी अन्य की तुलना में अधिक उत्कृष्ट है?


यहां चर्चा की जा रही दो भाषा सुविधाओं के बीच अंतर करना महत्वपूर्ण है, अर्थात् , प्रकार की घोषणाएं और डिफ़ॉल्ट तर्क मान

पहला फ़ंक्शन केवल प्रकार की घोषणाओं का उपयोग कर रहा है, इसका मतलब है कि इनपुट तर्क को int या NULL प्रकार का होना चाहिए।

दूसरा फ़ंक्शन दोनों प्रकार की घोषणाओं और डिफ़ॉल्ट तर्क मानों का उपयोग कर रहा है, इसका मतलब है कि तर्क का प्रकार int या NULL होना चाहिए लेकिन यदि छोड़ा गया है तो वह NULL लिए डिफ़ॉल्ट होगा।

अपना पहला कार्य करें, यदि आपको केवल test() कुछ भी पारित किए बिना कहा जाता है, तो आपको मिलेगा:

PHP घातक त्रुटि: अनकहा आर्ग्युमेंट CountError: फ़ंक्शन परीक्षण के लिए बहुत कम तर्क () [...]

जो सही है क्योंकि फ़ंक्शन या तो int या NULL अपेक्षा करता NULL लेकिन न तो दूसरे के लिए मिला है, जैसा कि आपने तर्क को डिफ़ॉल्ट मान के साथ परिभाषित किया है, यह त्रुटियों के बिना चलेगा।

कोड

function test(?int $var) {
  var_dump($var);
}

function test2(int $var = null) {
  var_dump($var);
}

test(1); // fine
test(); // error
test2(1); // fine
test2(); // fine

जहां तक ​​प्रदर्शन जाता है, अंतर शायद नगण्य है, कुछ भी पर्याप्त महत्वपूर्ण नहीं है जो चिंता का कारण होगा।

लाइव उदाहरण

Repl


यदि आज भाषा डिजाइन की गई थी, तो int $var = null शायद एक त्रुटि होगी, और वास्तव में लिखा जाना चाहिए ?int $var = null । दो हिस्सों का मतलब अलग-अलग चीजें हैं:

  • ? इंगित करता है कि null उस पैरामीटर के लिए एक मान्य मूल्य है।
  • = null बताता है कि यदि पैरामीटर पास नहीं है तो null डिफ़ॉल्ट है।

हालांकि, ?type सिंटैक्स को पेश करने से पहले, भाषा में एक विशेष मामला था: यदि null पैरामीटर के लिए डिफ़ॉल्ट के रूप में दिया जाता है, तो यह उस पैरामीटर के लिए null पारित करने के लिए कानूनी है, भले ही प्रकार की घोषणा अन्यथा इसे रोक दे। ।


अंतर यह है कि आप फ़ंक्शन को कैसे कॉल कर सकते हैं:

// public function test(?int $var)
$foo->test("x");    // does not work (Argument 1 passed to Foo::test() must be of the type int or null, string given)
$foo->test(123);    // works
$foo->test(null);   // works
$foo->test();       // does not work (Too few arguments to function Foo::test(), 0 passed)

// public function test(int $var = null)
$foo->test("x");    // does not work (Argument 1 passed to Foo::test() must be of the type int or null, string given)
$foo->test(123);    // works
$foo->test(null);   // works
$foo->test();       // works

अंतर यह है कि आप फ़ंक्शन को पहले सिंटैक्स का उपयोग करके ->test() रूप में नहीं कह सकते।





php