2010-07-28 16 views
10

mam poniżej metoda singleton klasyJak stosować metodę obiektu w funkcji wywołania zwrotnego

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

to działa dobrze jak zwykła funkcja

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

podczas korzystania z wewnątrz klasy I” m otrzymujący poniższy błąd:

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

Proszę, może ktoś mi pomoże rozwiązać ten problem.

Odpowiedz

22

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

Więc spróbuj

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

Dzięki stary, zadziałało. – Kaartz

+7

Ponadto metoda 'encode' musi być [public] (http://php.net/manual/en/language.oop5.visibility.php). – Dejv

+1

@Dejv Właściwie testowałem to z ** prywatną metodą klasy ** i działa albo. Używam PHP 7.0.13. – sentenza

-4

Zwolnij pojedynczy kod z $ this-> zakodować.

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

Nadzieję, że usuwa problem.

+1

'$ this-> encode' nie ma wartości. W PHP nie ma prawdziwych wskaźników funkcji, więc nie jest to poprawne PHP dla wywołania zwrotnego. Działałoby tylko wtedy, gdybyś miał coś w rodzaju '$ this-> encode = array (& $ this, 'encode');', które jest po prostu hackem, aby ten specyficzny kod działał. – cHao

+0

dzięki za odprawę cHao. Bardzo mi pomaga – Fero

+0

Bardzo dziękuję za pomoc Chao i Fero. – Kaartz

Powiązane problemy