2016-05-13 6 views
7

मैं एक PHP 7 फ़ंक्शन को परिभाषित करना चाहता हूं जो मिश्रित प्रकार का पैरामीटर लेता है। (जो मैं चाहता हूं वह सी # में एक सामान्य प्रकार पैरामीटर के बराबर है; यदि PHP 7 में अनुकरण करने का एक बेहतर तरीका है, तो कृपया मुझे बताएं।)PHP 7: मिश्रित पैरामीटर प्रकार का उपयोग अपने कार्यों में कैसे करें?

मेरा कोड निम्नानुसार है।

<?php 
declare (strict_types = 1);  

function test (mixed $s) : mixed { 
    return $s; 
} 

// Works 
echo gettype ('hello'); 
// Does not work 
echo test ('hello'); 
?> 

जब मैं यह कोड चलाता हूं, तो मुझे निम्न मिलता है।

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of mixed, string given, called in mixed.php on line 11 and defined in mixed.php:4 
Stack trace: 
#0 mixed.php(11): test('hello') 
#1 {main} 
thrown in mixed.php on line 4 

अगर मैं कॉल बाहर टिप्पणी परीक्षण करने के लिए(), कोड ठीक चलाता है, तो जाहिरा तौर पर यह मेरे समारोह घोषणा में मिश्रित पैरामीटर प्रकार का उपयोग करने के लिए कम से कम ठीक है।

मुझे पता है कि अंतर्निहित PHP फ़ंक्शन जैसे Gettype() मिश्रित पैरामीटर ले सकते हैं, हालांकि मुझे नहीं पता कि वे आंतरिक रूप से सख्त टाइपिंग का उपयोग कर रहे हैं या नहीं।

मुझे लगता है कि "मिश्रित" का उपयोग छद्म प्रकार के रूप में PHP documentation में भी किया जाता है, इसलिए मैं एक PHP कीवर्ड के रूप में "मिश्रित" के उद्देश्य को गलत समझ सकता हूं, लेकिन जो कुछ मैं यहां देख रहा हूं वह कम से कम मुझे दर्शाता है यह एक वैध कीवर्ड है। क्या मैं बस इसे इस तरह से उपयोग कर रहा हूं जिसका उद्देश्य यह नहीं है?

अंत में, मुझे एहसास है कि मैं पैरामीटर प्रकार निर्दिष्ट नहीं करके बस यह सब बाधित कर सकता हूं, लेकिन मैं अपने सभी पैरामीटर और रिटर्न प्रकारों को निर्दिष्ट करके सुसंगत होना चाहता हूं।

धन्यवाद और अगर मैं कोई अतिरिक्त जानकारी प्रदान कर सकता हूं तो कृपया मुझे बताएं।

+2

पर उल्लेख यह भी के लिए काम करता -operator हाँ, 'mixed' कोई वास्तविक प्रकार नहीं है। और संगत होने के कारण यहां उचित अर्थशास्त्र के लिए ऑर्थोगोनल है। – mario

+2

मिश्रित एफवाईआई एक प्रकार नहीं है। (http://php.net/manual/en/language.pseudo-types.php) यह केवल एक ** छद्म प्रकार ** है: एक संकेत है कि किसी भी प्रकार को किसी विधि से पास या लौटाया जा सकता है ... या शायद एक वेरिएबल के लिए जिसे किसी भी कारण से मिश्रित रूप से मिश्रित किया गया था ... सी # के विपरीत, जो आप हासिल करने की कोशिश कर रहे हैं वह PHP में मुश्किल हो सकता है, विशेष रूप से ** सख्त_टाइप सत्य पर सेट **। हालांकि, आप सख्त टाइपिंग के बिना लगभग समान प्रभाव प्राप्त कर सकते हैं, इस मामले में आपके तरीके किसी भी प्रकार को स्वीकार कर सकते हैं जब तक आप किसी भी प्रकार के संकेत नहीं देते हैं। हालांकि सी # प्रोग्रामर के लिए जो अभी भी खराब है ** ** PHP का रस ** – Poiz

+1

आपको बहुत अधिक मारियो और पोइज़ धन्यवाद। ऐसा लगता है कि मैं एक टिप्पणी के रूप में/* मिश्रित */जोड़ने के लिए बस बस जाऊंगा। – FSharpN00b

उत्तर

7

FYI करें मिश्रित एक प्रकार नहीं है। (Refer to the Documentation)। यह केवल एक छद्म प्रकार है: एक सुझाव है कि किसी भी प्रकार के लिए पारित किया है या एक विधि से लौटाया जा सकता है ... या शायद एक चर जो शिथिल के रूप में किसी भी कारण से मिलाया लिखे गए वर्णों के लिए ...

सी # के विपरीत, जो आप प्राप्त करने का प्रयास कर रहे हैं वह PHP में मुश्किल हो सकता है विशेष रूप से सख्त_टाइप सत्य पर सेट हो सकता है।

हालांकि, आप सख्त टाइपिंग के बिना लगभग समान प्रभाव प्राप्त कर सकते हैं - जिस स्थिति में आपके तरीके किसी भी प्रकार को स्वीकार कर सकते हैं जब तक आप किसी भी प्रकार के संकेत की आपूर्ति नहीं करते हैं। हालांकि सी # प्रोग्रामर के लिए, यह बुरा है - फिर भी, जो PHP का रस है।

0
+0

स्टैक ओवरफ़्लो में आपका स्वागत है! यह एक सीमा रेखा [लिंक-केवल उत्तर] है (// meta.stackexchange.com/q/8231)। आपको यहां अधिक जानकारी शामिल करने के लिए अपने उत्तर का विस्तार करना चाहिए, और केवल संदर्भ के लिए लिंक का उपयोग करना चाहिए। – FrankerZ

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