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




(2)

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

अशक्त प्रकार: मापदंडों और वापसी मूल्यों के लिए प्रकार की घोषणाओं को अब प्रश्न चिह्न के साथ टाइप नाम उपसर्ग द्वारा अशक्त के रूप में चिह्नित किया जा सकता है। यह दर्शाता है कि निर्दिष्ट प्रकार के रूप में, 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 रूप में भी कहा जा सकता है।

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


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

// 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() रूप में नहीं कह सकते।


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

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

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





php