php - Force result for empty() test on an object -


उदाहरण के लिए सरल वर्ग:

  class Foo {protected $ _bar; सार्वजनिक फ़ंक्शन सेटबार ($ मान) {$ this- & gt; _bar = $ value; }}  

और यहां सवाल है:

  $ obj = new Foo (); Var_dump (खाली ($ obj)); // सच $ obj- & gt; सेटबार ('फ़ूबार'); Var_dump (खाली ($ obj)); // झूठी  

क्या यह वर्ग के व्यवहार को empty () फ़ंक्शन के साथ परीक्षण के साथ बदलना संभव है, जब वह ऑब्जेक्ट को true देता है डेटा से भरा नहीं है?

मुझे जादू फ़ंक्शन __ isset ($ name) के बारे में पता है लेकिन इसे केवल तब ही कहा जाता है जब हम विशिष्ट फ़ील्ड की तरह परीक्षण करते हैं:

 < कोड> रिक्त ($ obj- & gt; someField);  

लेकिन जब परीक्षण पूरे ऑब्जेक्ट नहीं होता है।

यह किस तरह का है संभव है। ओपोड कॉल i_zend_is_true :

  यदि (! Isset ||! I_zend_is_true (* मान)) {ZVAL_BOOL (& amp; EX_T (opline- & gt; result.var) .tmp_var, 1); } और {ZVAL_BOOL (& amp; EX_T (opline->; result.var) .tmp_var, 0); }  

ऑब्जेक्ट्स के लिए यह परिभाषा होती है (ट्रंक के रूप में):

  केस IS_OBJECT: अगर (आईएस_जे END_STD_OBJECT (* op)) {TSRMLS_FETCH (); अगर (Z_OBJ_HT_P (सेशन) - & gt; कास्ट_ऑब्जेक्ट) {zval tmp; अगर (Z_OBJ_HT_P (सेशन) - & gt; कास्ट_ऑब्जेक्ट (ऑप्, टीएमपी, आईएसबीयूएन टीएसआरएमएलएस_सीसी) == SUCCESS) {परिणाम = Z_LVAL (टीएमपी); टूटना; }} और अगर (Z_OBJ_HT_P (सेशन) - & gt; प्राप्त करें) {zval * tmp = Z_OBJ_HT_P (सेशन) - & gt; प्राप्त करें (सेशन टीएसआरएमएलएस_सीसी); अगर (Z_TYPE_P (tmp)! = IS_OBJECT) {/ * सुरक्षा के लिए - लूप से बचें * / कन्वर्ट_टो_बोलीयन (टीएमपी); परिणाम = Z_LVAL_P (टीएमपी); zval_ptr_dtor (& amp; tmp); टूटना; }}} परिणाम = 1; टूटना;  

इसलिए यदि मान में कोई डाली परिणाम false (या यदि आप ऑब्जेक्ट एक प्रॉक्सी ऑब्जेक्ट है और प्रॉक्सीकृत मूल्य false ), खाली सच वापस करेगा हालांकि, इसका लाभ उठाने के लिए, आपको एक PHP ऑब्जेक्ट को एक PHP एक्सटेंशन में लिखना होगा।


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -