2010-07-28 15 views
10

मैं एक सिंगलटन वर्ग में नीचे दी गई विधिकैसे एक कॉलबैक समारोह के रूप में एक वस्तु विधि का उपयोग करने

private function encode($inp) 
{ 
    if (is_array($inp) { 
     return array_map('$this->encode', $inp); 
    } else if is_scalar($inp) { 
     return str_replace('%7E', rawurlencode($inp)); 
    } else { 
     return ''; 
    } 
} 

इस एक साधारण समारोह

function encode($inp) 
{ 
    if (is_array($inp) { 
     return array_map('encode', $inp); 
    } else if is_scalar($inp) { 
     return str_replace('%7E', rawurlencode($inp)); 
    } else { 
     return ''; 
    } 
} 

के रूप में ठीक काम करता है जब एक वर्ग i 'के अंदर का उपयोग कर मुझे नीचे त्रुटि मिल रही है:

PHP Warning: array_map(): The first argument, '$this->rfc_encode', should be either NULL or a valid callback

कृपया कोई भी इसे ठीक करने में मेरी सहायता कर सकता है।

उत्तर

22

PHP Manual on Callbacks से:

A method of an instantiated object is passed as an array containing an object at index 0 and the method name at index 1.

तो कोशिश

return array_map(array($this, 'encode'), $inp); 
+0

धन्यवाद दोस्त, यह काम किया। – Kaartz

+7

इसके अलावा, विधि 'एनकोड' होना चाहिए [सार्वजनिक] (http://php.net/manual/en/language.oop5.visibility.php)। – Dejv

+1

@ डीजेवी वास्तव में, मैंने इसे ** निजी श्रेणी विधि ** के साथ परीक्षण किया है और यह या तो काम करता है। मैं PHP 7.0.13 का उपयोग कर रहा हूँ। – sentenza

-4

से $ इस- एकल कोड रिलीज> एनकोड

> private function encode($inp) { 
>  if (is_array($inp) { 
>   return array_map($this->encode, $inp); 
>  } else if is_scalar($inp) { 
>   return str_replace('%7E', rawurlencode($inp)); 
>  } else { 
>   return ''; 
>  } } 

आशा है कि इस मुद्दे को साफ करता है।

+1

'$ यह-> एन्कोड 'का कोई मूल्य नहीं है। PHP में कोई वास्तविक फ़ंक्शन पॉइंटर्स नहीं हैं, इसलिए यह कॉलबैक के लिए मान्य PHP नहीं है। यह केवल तभी काम करेगा यदि आपके पास '$ this-> एन्कोड = सरणी (और $ यह, 'एन्कोड') जैसा कुछ था; ', जो इस विशिष्ट कोड को काम करने के लिए सिर्फ एक हैक है। – cHao

+0

निकासी सीएचओओ के लिए धन्यवाद। मुझे बहुत मदद करता है – Fero

+0

धन्यवाद आपकी मदद चाओ और फेरो के लिए बहुत कुछ। – Kaartz

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