2010-07-28 8 views
10

Ich habe die folgenden Verfahren in einem SingletonklasseWie eine Objektmethode als Callback-Funktion verwenden

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 ''; 
    } 
} 

dies als eine gewöhnliche Funktion

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 ''; 
    } 
} 

funktioniert gut, wenn ich in einer Klasse mit‘ m erhalten die unten Fehler:

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

Bitte könnte jemand helfen mir, dies zu beheben.

Antwort

22

Von 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.

So versuchen

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

Danke Kumpel, es hat funktioniert. – Kaartz

+7

Außerdem muss die Methode 'encode' [public] sein (http://php.net/manual/en/language.oop5.visibility.php). – Dejv

+1

@Dejv Eigentlich habe ich es mit einer ** privaten Klassenmethode ** getestet und es funktioniert entweder. Ich benutze PHP 7.0.13. – sentenza

-4

den einzigen Code Release von $ this-> kodieren.

> 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 ''; 
>  } } 

Hoffe, dass das Problem löscht.

+1

'$ this-> encode' hat keinen Wert. Es gibt keine echten Funktionszeiger in PHP, daher ist dies kein gültiges PHP für einen Callback. Es würde nur funktionieren, wenn Sie etwas wie $ $ this-> encode = array (& $ this, 'encode'); 'hätten, was nur ein Hack ist, um diesen spezifischen Code zu benutzen. – cHao

+0

danke für die clearance cHao. Hilft mir viel – Fero

+0

Vielen Dank für Ihre Hilfe Chao und Fero. – Kaartz

Verwandte Themen