मैं इस तकनीक के बारे में कुछ प्रतिक्रिया प्राप्त करने में दिलचस्पी लेता हूं जिसे मैंने कहीं से उठाया था।सफलता/विफलता को इंगित करने के लिए एकाधिक वापसी मान।
जब मैं कोई फ़ंक्शन सफल या विफल हो सकता हूं, तो मैं इसका उपयोग करता हूं, लेकिन आप यह विफल होने के बारे में अधिक जानकारी प्राप्त करना चाहते हैं। इस काम को करने का एक मानक तरीका अपवाद हैंडलिंग के साथ होगा, लेकिन मुझे अक्सर इस तरह की चीज के लिए शीर्ष पर थोड़ा सा लगता है, साथ ही PHP4 यह पेशकश नहीं करता है।
असल में तकनीक सफलता के लिए सच लौटने शामिल है, और कुछ जो विफलता के लिए गलत पर बराबर है। यहाँ दिखाने के लिए मैं क्या मतलब है एक उदाहरण है:
define ('DUPLICATE_USERNAME', false);
define ('DATABASE_ERROR', 0);
define ('INSUFFICIENT_DETAILS', 0.0);
define ('OK', true);
function createUser($username) {
// create the user and return the appropriate constant from the above
}
इस की सुंदरता है कि आपके फोन कर कोड में, अगर आप परवाह नहीं है क्यों उपयोगकर्ता निर्माण में असफल, आप सरल और पठनीय कोड लिख सकते हैं:
if (createUser('fred')) {
// yay, it worked!
} else {
// aww, it didn't work.
}
आप विशेष रूप से कारण है कि यह काम नहीं किया (उपयोगकर्ता के लिए, प्रवेश के लिए प्रदर्शन, या जो कुछ भी करते हैं) की जांच करना चाहते हैं, तो ===
$status = createUser('fred');
if ($status) {
// yay, it worked!
} else if ($status === DUPLICATE_USERNAME) {
// tell the user about it and get them to try again.
} else {
// aww, it didn't work. log it and show a generic error message? whatever.
}
तरह से मैं इसे देख के साथ पहचान तुलना उपयोग करते हैं, इसके लाभ टी हैं टोपी यह एक सामान्य उम्मीद है कि इस तरह के एक समारोह का सफल निष्पादन सच हो जाएगा, और विफलता झूठी वापसी होगी।
नकारात्मकता यह है कि आप केवल 7 "error" return values: false, 0, 0.0, "0", null, "", and (object) null.
कर सकते हैं यदि आप पहचान जांच का उपयोग करना भूल जाते हैं तो आप अपना प्रोग्राम प्रवाह गलत कर सकते हैं। किसी और ने मुझे बताया है कि enum
जैसे स्थिरांक का उपयोग करना जहां वे सभी झूठी समतुल्य हैं "ick"
है।
तो, प्रश्न को पुन: स्थापित करने के लिए: इस तरह का अभ्यास कितना स्वीकार्य है? क्या आप एक ही चीज़ को हासिल करने के लिए एक अलग तरीके की सिफारिश करेंगे?
अच्छी युक्ति - थोड़े सभी मानदंडों को पूरा करता है, वास्तव में - जब तक यह दूसरा पैरामीटर (?) – nickf
की आपूर्ति नहीं करता है, तो PHP 4 में डिफ़ॉल्ट मान असाइन किए जाते हैं संदर्भ द्वारा पारित चर के लिए समर्थित नहीं था, इसलिए मुझे लगता है कि इसे कॉल करते समय आपको हमेशा $ त्रुटि चर की आपूर्ति करना होगा। –
बमर। एक चीज जो मैं वास्तव में उम्मीद कर रहा था वह अतिरिक्त कोड से बचने के लिए था जब मुझे विफलता के कारण की परवाह नहीं थी। शायद मैं इस सपने पर बहुत ज्यादा चिपक रहा हूं। – nickf