2015-07-21 8 views
8

मैं PHP7 के लिए नई सुविधाओं को देख रहा हूं और सोचा कि मैं अपनी प्रोजेक्ट को नई सुविधाओं के लिए तैयार करना शुरू कर सकता हूं, जैसे स्केलर टाइप संकेत।टाइपिंग संकेत और एकाधिक कन्स्ट्रक्टर

मुझे सामने आने वाली पहली समस्याओं में से एक विभिन्न वर्गों में मेरे रचनाकार थे।

public function __construct($data = null) { 
    if (is_numeric($data)) { 
     $this->controller->createById($data); 
    } 
    elseif (is_array($data)) { 
     $this->controller->createByArray($data); 
    } 
    elseif (strlen($data) > 0) { 
     $this->controller->createByUrl($data); 
    } 
} 

इस विधि होगा निश्चित रूप से सभी दिशाओं में त्रुटियों फेंक के लिए प्रकार हिंट का परिचय: मैं कुछ सामान्य contrustors कि कुछ इस तरह काम करता है है।

जहां तक ​​मुझे पता है कि PHP7 एकाधिक रचनाकारों के लिए समर्थन नहीं पेश करता है। क्या इस समस्या को हल करने के कोई तरीके हैं, या यह भाषा की सीमाओं में से एक है?

+4

उस विधि के लिए प्रकार संकेत निर्दिष्ट न करें? –

+0

@ एनबी। हाँ, मुझे पता है कि यह एक संभावना है, लेकिन ओओपी-पृष्ठभूमि से आ रहा है, मैं वास्तव में अपने पूरे कोडबेस को वास्तव में ऑब्जेक्ट उन्मुख होना चाहता हूं;) – OptimusCrime

+0

प्रोग्रामिंग और ओओपी विशेष रूप से समस्याओं को हल करने के लिए हैं। आपको प्रोग्रामिंग के माध्यम से हल करने की कोई समस्या नहीं है, आप ओसीडी से पीड़ित हैं और अब आप भाषा सीमा के लिए ओसीडी को गलत समझते हैं। अफसोस की बात है, यह भाषा सीमा नहीं है। यह सिर्फ आपके पक्ष में कुछ कांटा है क्योंकि आपके पास कुछ मूर्खतापूर्ण कन्स्ट्रक्टर है जो कुछ भी स्वीकार करता है और अब आप 3 रचनाकारों के माध्यम से संकेत टाइप करना चाहते हैं कि मूल्य क्या है। क्या वह वास्तव में "ओओपी" है? जटिल, बेवकूफ कोड जो कोई समस्या हल नहीं करता है? –

उत्तर

6

सही, यह भाषा की सीमाओं में से एक है। (और strlen() > 0 वैसे भी। एक प्रकार के माध्यम से जाँच नहीं की जा सकती है, स्ट्रिंग के लिए यही कारण है कि ऑटो डाले ... तो अपने विधि सब कुछ है, लेकिन "", अशक्त और झूठे अनुमति देता है?)

आम तौर पर, वहाँ मसौदे में RFC के विस्तार करने के लिए 7.1: https://wiki.php.net/rfc/union_types

में PHP की टाइपिंगिंग आपको int | float | array | string $data = null लिखने की अनुमति देगी।

+0

हाँ, मुझे डर था। यूनियन प्रकारों के लिए आरएफसी को जोड़ने के लिए धन्यवाद। बहुत खराब PHP कई रचनाकारों का समर्थन नहीं करता है, हालांकि यह भविष्य के संस्करणों में कुछ ऐसा हो सकता है जो अब पहले से अधिक प्रासंगिक है। वैसे भी, मेरे प्रश्न के स्पष्ट उत्तर के लिए धन्यवाद। – OptimusCrime

+1

फ़ंक्शन ओवरलोडिंग (एकाधिक कन्स्ट्रक्टर का सामान्यीकृत संस्करण) वास्तव में PHP पर नहीं आ जाएगा क्योंकि विवादों को हल करना असंभव है, खासतौर पर कमजोर टाइपिंगिंग (सख्त प्रकार नहीं) [या हमें परिष्कृत नियमों की आवश्यकता होगी जो हर किसी को भ्रमित कर देगा ... विशेष रूप से 'घोषणा (सख्त_types = 1) 'कॉलर-विशिष्ट है ... विभिन्न टाइपिंग मोड के लिए अलग-अलग व्यवहार? वाट?!?]। यही कारण है कि हम यूनियन प्रकारों के रास्ते जा रहे हैं जो आपको वास्तव में क्या करने की अनुमति देगा। – bwoebi

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