मुझे हाल ही में स्ट्रिंग्स को संभालने के लिए "ढीली" बूलियन रूपांतरण फ़ंक्शन की आवश्यकता थी, जैसे आप (अन्य चीजों के बीच) के बारे में पूछ रहे हैं। मुझे कुछ अलग दृष्टिकोण मिले और उनके माध्यम से चलाने के लिए परीक्षण डेटा का एक बड़ा सेट आया । कुछ भी मेरी आवश्यकताओं के अनुकूल नहीं है इसलिए मैंने अपना लिखा:
function loosely_cast_to_boolean($value) {
if(is_array($value) || $value instanceof Countable) {
return (boolean) count($value);
} else if(is_string($value) || is_object($value) && method_exists($value, '__toString')) {
$value = (string) $value;
// see http://www.php.net/manual/en/filter.filters.validate.php#108218
// see https://bugs.php.net/bug.php?id=49510
$filtered = filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
if(!is_null($filtered)) {
return $filtered;
} else {
// "none" gets special treatment to be consistent with ini file behavior.
// see documentation in php.ini for more information, in part it says:
// "An empty string can be denoted by simply not writing anything after
// the equal sign, or by using the None keyword".
if(strtolower($value) === 'none') {
$value = '';
}
return (boolean) $value;
}
} else {
return (boolean) $value;
}
}
ध्यान दें कि उन वस्तुओं के लिए जो दोनों गणनीय और स्ट्रिंग-कास्टेबल हैं, यह सत्यता का निर्धारण करने के लिए स्ट्रिंग मान पर गिनती का पक्ष लेंगे। यही है, अगर $object instanceof Countable
यह (boolean) count($object)
मान के बिना वापस आ जाएगा(string) $object
।
आप परीक्षण डाटा मैं इस्तेमाल किया और साथ ही कई अन्य कार्यों के लिए परिणाम के लिए व्यवहार देख सकते हैं यहां । उस छोटे से iframe से परिणामों को स्किम करना कठिन है, इसलिए आप एक पूर्ण पृष्ठ में स्क्रिप्ट आउटपुट देख सकते हैं , इसके बजाय (यह URL अनिर्दिष्ट है इसलिए यह हमेशा के लिए काम नहीं कर सकता है)। यदि किसी दिन वे लिंक मर जाते हैं, तो मैंने पास्टबिन पर भी कोड डाल दिया ।
"क्या सच होना चाहिए" और क्या चाहिए के बीच की रेखा बहुत मनमानी नहीं है; मेरे द्वारा उपयोग किए गए डेटा को मेरी आवश्यकताओं और सौंदर्य संबंधी प्राथमिकताओं के आधार पर वर्गीकृत किया गया है, आपका भिन्न हो सकता है।
isBoolean("")
झूठे वापस आ जाना चाहिए।