जवाबों:
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 का मतलब गैर-मौजूदा मूल्य के सभी व्यवहार को कवर करना है और किसी भी बाहरी सहयोगी को इसमें रुचि रखने की आवश्यकता नहीं है ऑब्जेक्ट नॉन-मौजूदा (शून्य) है या नहीं।