2016-04-26 10 views
12

तो मुझे पता है कि मैं php7 में वापसी प्रकार संकेत दे सकता हूं।PHP वापसी प्रकार संकेत, वस्तु या एक बुलियन?

function getUser($pdo, $username) : User 
{ 

} 

जहां उपयोगकर्ता वस्तु लौटाए जाने है: मैं के साथ एक वस्तु वापसी संकेत कर सकते हैं।

हालांकि, अगर उपयोगकर्ता एसक्यूएल में नहीं पाया जाता, लौटने एक उपयोगकर्ता वस्तु के स्थान पर 'false' देता है:

Uncaught TypeError: Return value of UserFind::findUser() must be an instance of User, boolean returned

लेकिन क्या एसक्यूएल नहीं उपयोगकर्ता मिल सकता है? यदि उपयोगकर्ता मौजूद नहीं है तो मैं एक बूलियन, झूठी कैसे लौटा सकता हूं? क्या मुझे इस परिदृश्य में वापसी प्रकार को इंगित करना चाहिए?

संपादित करें: मैंने दूसरे प्रश्न को देखा, 'PHP 7 में निरर्थक रिटर्न प्रकार' और जब मेरा प्रश्न लगभग समान है, तो मैं यह पूछकर अपना प्रश्न विस्तारित करना चाहता हूं कि दो प्रकारों में से एक को वापस करने का कोई तरीका होगा या नहीं । उदाहरण के लिए ऑब्जेक्ट या स्ट्रिंग वापस करें यदि ऑब्जेक्ट कोई भी नहीं है?

+5

संभावित डुप्लिकेट http://stackoverflow.com/questions/33608821/nullable-return-types-in- कहते जारी php7) –

+0

मुझे हमेशा इस अजीब तरह के प्रश्न मिलते हैं, क्योंकि मेरी पहली प्रतिक्रिया हमेशा "अपवाद का उपयोग करती है"। और फिर मुझे याद है कि अपवाद कई अन्य चीजों की तरह हैं, तथाकथित "रेडहेड स्टेपचिल्ड" PHP में। –

+0

@ IgnacioVazquez-Abrams PHP आमतौर पर आम तौर पर अपवादों के लिए एक और दृष्टिकोण नियुक्त करता है। उदाहरण के लिए पाइथन उन्हें लगभग हर चीज़ के लिए उपयोग करता है। PHP नहीं करता है। आम तौर पर सामान्य रूप से धीमी गति से चलने वाले मामले मामले में मदद नहीं करते हैं। – bwoebi

उत्तर

12

आप किस बारे में बात कर रहे हैं उसे यूनियन टाइप कहा जाता है। वहाँ considerable discussion about it in Internals

This RFC proposes the ability to define multiple possible types for a parameter or return type and calls them “union types”. A value passes the type-check for a union type if the value would pass any one of the members the union. A vertical bar (OR) is placed between each of the two or more types.

Here is an example of a parameter accepting either an array or a Traversable and no other types:

function (Array | Traversable $in) { 
    foreach ($in as $value) { 
     echo $value, PHP_EOL; 
    } 
} 

There can be more than two types in the union. As an example, it is somewhat common for a routine that interacts with a database to have one of three results:

  1. Successfully found results
  2. Successfully found no results
  3. There was an error

यह सब पीएचपी 7.1 पर लक्षित लेकिन एक वोट के लिए अभी तक नहीं है है (अकेले है जैसे कि यह पारित करेंगे देख)।

तो आपकी समस्या के बारे में क्या? मैं कहूंगा, कम से कम अभी के लिए, अपनी वापसी का संकेत न दें। बस किसी दस्तावेज़ को ब्लॉक कि यह लौट सकते हैं User या false

/** 
* @param \PDO $pdo 
* @param string $username 
* @return User|false 
*/ 
[PHP7 में Nullable प्रकार वापसी] (की
+0

कमाल, धन्यवाद! – life

+0

या आप somception_NotFound() जैसे somethink फेंक सकते हैं –

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