2009-04-09 18 views
22

संभव डुप्लिकेट:
Fixing the PHP empty functionPHP: खाली() के विकल्प का क्या विकल्प है, जहां स्ट्रिंग "0" को खाली के रूप में नहीं माना जाता है?

पीएचपी में, खाली() के लिए एक महान शॉर्टकट है क्योंकि यह एक चर परिभाषित किया गया है और एक ही समय में खाली नहीं है कि क्या आप की जाँच करने की अनुमति देता है।

जब आप "0" (एक स्ट्रिंग के रूप में) खाली नहीं होना चाहते हैं तो आप क्या उपयोग करेंगे, लेकिन आप अभी भी झूठी, शून्य, 0 और "" खाली के रूप में व्यवहार करना चाहते हैं?

if (isset($myvariable) && $myvariable != "") ;// do something 
if (isset($othervar ) && $othervar != "") ;// do something 
if (isset($anothervar) && $anothervar != "") ;// do something 
// and so on, and so on 

मुझे नहीं लगता कि मैं, इस के लिए एक सहायक समारोह को परिभाषित कर सकते क्योंकि चर अपरिभाषित जा सकता है (और:

है, मैं सिर्फ अगर आप इस के लिए अपने स्वयं के शॉर्टकट है सोच रहा हूँ कि इसलिए पैरामीटर के रूप में पारित नहीं किया जा सका)।

+0

मुझे लगता है कि अब मुझे एहसास है कि इसका कोई समाधान नहीं है - कम से कम ऐसा कोई नहीं जो इस कोड को कम कर सके। – thomasrutter

+0

हम्म .. आपसे सहमत हैं – mysqllearner

उत्तर

1

इसका उत्तर यह है कि मेरे पास पहले से ही छोटा करना संभव नहीं है।

नोटिस या चेतावनियों को दबाकर ऐसा कुछ नहीं है जिसे मैं करना चाहता हूं, इसलिए मुझे मूल्य की जांच करने से पहले खाली() या जारी करने() को जांचने की आवश्यकता होगी, और आप यह जांच नहीं सकते कि कुछ खाली है या नहीं) या एक समारोह के भीतर जारी()।

3
 
if ((isset($var) && $var === "0") || !empty($var)) 
{ 

} 

इस तरह अगर-निर्माण करता है, तो चर सेट किया गया है और "0" है, या चर सेट किया गया है और न = बातिल ("0", अशक्त, गलत)

+0

यह काफी सही दिखता है; यह वास्तव में शॉर्टकट नहीं है (जारी ($ myvariable) और $ $ myvariable! = "") हालांकि यह लंबा है। जवाब के लिए धन्यवाद। – thomasrutter

21

यह आपको प्रवेश करेंगे जो करना चाहते हैं उसे करना चाहिए:

function notempty($var) { 
    return ($var==="0"||$var); 
} 

संपादित करें: मुझे लगता है कि टेबल केवल पूर्वावलोकन में काम करते हैं, वास्तविक उत्तर सबमिशन में नहीं। इसलिए अधिक जानकारी के लिए कृपया PHP type comparison tables देखें।

 
notempty("")  : false 
notempty(null)  : false 
notempty(undefined): false 
notempty(array()) : false 
notempty(false) : false 
notempty(true)  : true 
notempty(1)  : true 
notempty(0)  : false 
notempty(-1)  : true 
notempty("1")  : true 
notempty("0")  : true 
notempty("php") : true 

असल में, notempty() के रूप में ही है! खाली() को छोड़कर सभी मूल्यों के लिए "0", जिसके लिए यह रिटर्न सच


संपादित करें: यदि आप त्रुटि_ रिपोर्टिंग (E_ALL) का उपयोग कर रहे हैं, तो आप मूल्य के अनुसार कस्टम फ़ंक्शंस में एक अपरिभाषित चर पारित करने में सक्षम नहीं होंगे। और चूंकि मर्केटर बताते हैं, आपको सर्वोत्तम अभ्यासों के अनुरूप हमेशा E_ALL का उपयोग करना चाहिए। This link (टिप्पणी # 11) वह चर्चा प्रदान करता है कि आपको प्रदर्शन और रखरखाव/डिबगिंग कारणों के लिए त्रुटि दमन के किसी भी रूप का उपयोग क्यों नहीं करना चाहिए।

कस्टम फ़ंक्शन by reference पर दिए गए तर्कों के बारे में ऑरलैंडु 63 का उत्तर देखें।

+2

वह चर विफल होगा जब परिवर्तनीय अपरिभाषित है। – mercator

+0

आपका मतलब क्या है? यदि एक अपरिभाषित चर पारित किया गया है, तो फ़ंक्शन झूठा लौटाता है - जो कि खाली() रिटर्न के विपरीत है: http://us2.php.net/manual/en/types.comparisons.php वांछित व्यवहार है। – Calvin

+1

यह असफल नहीं है, लेकिन एक चेतावनी पैदा करता है। तो, हालांकि यह काम करता है, यह सही रास्ता नहीं है (टीएम)। आपको === –

0
if(isset($var) && ($var === '0' || !empty($var))) 
{ 
} 
0
function Void($var) 
{ 
    if (empty($var) === true) 
    { 
     if (($var === 0) || ($var === '0')) 
     { 
      return false; 
     } 

     return true; 
    } 

    return false; 
} 
+0

यह समस्या है कि यदि $ var अपरिभाषित है, तो यह एक तर्क के रूप में पारित होने में विफल रहता है (जारी या खाली के अलावा किसी अन्य फ़ंक्शन में, जैसे आपका शून्य फ़ंक्शन)। मुझे लगता है कि मैं जो चाहता था वह वास्तव में असंभव है, क्षमा करें। – thomasrutter

9
function isempty(&$var) { 
    return empty($var) || $var === '0'; 
} 

कुंजी & ऑपरेटर, जो reference द्वारा चर गुजरता है, इसे बनाने अगर यह मौजूद नहीं है।

+0

चतुर सोच, क्या यह अभी भी एक त्रुटि (या चेतावनी, या नोटिस) जारी नहीं करेगा अगर $ var मौजूद नहीं है? – thomasrutter

+3

असल में, यह फ़ंक्शन चुपचाप एक अपरिभाषित चर को किसी भी प्रकार की त्रुटि या नोटिस जारी किए बिना परिभाषित (शून्य के रूप में) बनने का कारण बनता है। – Brilliand

0

यदि ($ var!= शून्य)

+0

अगर $ var अपरिभाषित है तो यह त्रुटि होगी। – thomasrutter

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