2009-10-21 12 views
6

यह त्रुटि मिलती है के लिए एक इंटरफेस में एक विधिमजबूत डेटा टाइपिंग बग

public function nullify(bool $force=FALSE); 

के रूप में परिभाषित के लिए "एक वर्ग प्रकार संकेत के साथ मापदंडों के लिए डिफ़ॉल्ट मूल्य केवल शून्य हो सकता है" सामान्य है?

मुझे इसे बूल, ऑब्जेक्ट नहीं, और डिफ़ॉल्ट रूप से गलत होने की आवश्यकता है।

+2

यह php7 –

उत्तर

10

php (अभी तक) में बूलियन पैरामीटर के लिए कोई प्रकार संकेत नहीं है। आप केवल कक्षा का नाम या array निर्दिष्ट कर सकते हैं। इसलिए function foo(bool $b) का अर्थ है: "पैरामीटर $ बी वर्ग 'बूल' या नल का उदाहरण होना चाहिए"।

http://docs.php.net/language.oop5.typehinting:

कार्य अब (पीएचपी 5.1 के बाद से) (समारोह प्रोटोटाइप में क्लास का नाम निर्दिष्ट करने के द्वारा) वस्तुओं या सरणियों होने के लिए मानकों को मजबूर करने के लिए सक्षम हैं।
3

PHP 5 प्रकार संकेत एक विशिष्ट वर्ग (या इसके उप-वर्गों में से एक) या एक सरणी तक ही सीमित है। आप किसी अन्य स्केलर प्रकार निर्दिष्ट नहीं कर सकते हैं।

5

जैसा कि पहले से ही कहा गया है, टाइपिंग केवल एरे और ऑब्जेक्ट के लिए काम करता है। आपका फ़ंक्शन इस तरह लिखा जा सकता है:

public function nullify($force=FALSE){ 
    $force=(bool)$force; 
    //further stuff 
} 
+1

के साथ काम करना चाहिए या अनुपयुक्त पैरामीटर के लिए "पकड़ने योग्य घातक त्रुटि" php उठाने के लिए झूठी === is_bool ($ बल) को झूठी === is_bool ($ बल) के साथ अपवाद फेंकना चाहिए। – VolkerK

1

आप एक बूलियन होने के लिए पैरामीटर को मजबूर नहीं कर सकते हैं।

language.oop5.typehinting में पाया गया:

PHP 5 टाइप संकेत बताता है। कार्य अब ऑब्जेक्ट्स [...], इंटरफेस, सरणी (PHP 5.1 के बाद) या कॉल करने योग्य (PHP 5.4 के बाद) के लिए पैरामीटर को मजबूर करने में सक्षम हैं।

[...]

प्रकार संकेत इस तरह के पूर्णांक या स्ट्रिंग के रूप में अदिश प्रकार साथ नहीं किया जा सकता है। [...]

और जैसा कि language.types.intro में पाया, पीएचपी अदिश प्रकार हैं:

 
- boolean 
- integer 
- float (floating-point number, aka double) 
- string 
0

आप की कोशिश कर सकते:

public function nullify($force){ 
    if(is_object($force)) $force = false; 
    ... 
} 

एक अस्थायी समाधान के रूप में यह विचार करें जब तक आप उन्नयन पीएचपी।

संबंधित मुद्दे