जवाबों:
PHP 7.1 या नया (2 दिसंबर 2016 को जारी किया गया)
आप स्पष्ट रूप nullसे इस वाक्यविन्यास के साथ एक चर घोषित कर सकते हैं
function foo(?Type $t) {
}
इसका परिणाम यह होगा
$this->foo(new Type()); // ok
$this->foo(null); // ok
$this->foo(); // error
इसलिए, यदि आप एक वैकल्पिक तर्क चाहते हैं, तो आप सम्मेलन का अनुसरण कर सकते हैं, Type $t = nullजबकि यदि आपको तर्क को स्वीकार करने की आवश्यकता है nullऔर इसके प्रकार, आप उदाहरण के लिए अनुसरण कर सकते हैं।
आप यहां और पढ़ सकते हैं ।
PHP 7.0 या अधिक पुराना
आपको एक डिफ़ॉल्ट मान जोड़ना होगा
function foo(Type $t = null) {
}
इस तरह, आप इसे एक शून्य मान पास कर सकते हैं।
यह प्रकार घोषणाओं के बारे में मैनुअल में अनुभाग में प्रलेखित है :
NULLयदि पैरामीटर का डिफ़ॉल्ट मान सेट है, तो मूल्यों को स्वीकार करने के लिए घोषणा की जा सकती हैNULL।
function foo(Type $t)बहुत अच्छी बात है; Null सन्दर्भ
PHP 7.1 से शुरू होकर, अशक्त प्रकार उपलब्ध हैं, क्योंकि फ़ंक्शन रिटर्न प्रकार और पैरामीटर दोनों हैं। प्रकार ?Tमें निर्दिष्ट प्रकार के मान हो सकते हैं T, या null।
तो, आपका कार्य इस तरह दिख सकता है:
function foo(?Type $t)
{
}
जैसे ही आप PHP 7.1 के साथ काम कर सकते हैं, इस अंकन को प्राथमिकता दी जानी चाहिए function foo(Type $t = null), क्योंकि यह अभी भी कॉल करने वाले को पैरामीटर के लिए एक तर्क को स्पष्ट रूप से निर्दिष्ट करने के लिए मजबूर करता है $t।
जैसा कि पहले ही उल्लिखित अन्य उत्तर हैं, यह केवल तभी संभव है जब आप nullडिफ़ॉल्ट मान के रूप में निर्दिष्ट करते हैं ।
लेकिन सबसे साफ प्रकार-सुरक्षित वस्तु उन्मुख समाधान एक NullObject होगा :
interface FooInterface
{
function bar();
}
class Foo implements FooInterface
{
public function bar()
{
return 'i am an object';
}
}
class NullFoo implements FooInterface
{
public function bar()
{
return 'i am null (but you still can use my interface)';
}
}
उपयोग:
function bar_my_foo(FooInterface $foo)
{
if ($foo instanceof NullFoo) {
// special handling of null values may go here
}
echo $foo->bar();
}
bar_my_foo(new NullFoo);
NullFooको अमूर्त तरीकों को ओवरराइड करने के लिए मजबूर करता है , भले ही उनका कोई मतलब न हो (परिभाषा के अनुसार null)।
if (something is null)चेक से बचने के लिए होता है, क्योंकि NullObject का मतलब गैर-मौजूदा मूल्य के सभी व्यवहार को कवर करना है और किसी भी बाहरी सहयोगी को इसमें रुचि रखने की आवश्यकता नहीं है ऑब्जेक्ट नॉन-मौजूदा (शून्य) है या नहीं।