2010-07-28 14 views
10

tengo el siguiente método en una clase Singletoncómo utilizar un método de objeto como una función de devolución de llamada

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

esto funciona bien como una función ordinaria

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

cuando se utiliza dentro de una clase i' m obteniendo el siguiente error:

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

Por favor alguien podría ayudarme a solucionar esto.

Respuesta

22

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

Así que trate

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

Gracias amigo, funcionó. – Kaartz

+7

Además, el método 'encode' debe ser [public] (http://php.net/manual/en/language.oop5.visibility.php). – Dejv

+1

@Dejv En realidad, lo he probado con un ** método de clase privado ** y funciona bien. Estoy usando PHP 7.0.13. – sentenza

-4

liberar el código único de $ this-> codificar.

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

Espero que aclare el problema.

+1

'$ this-> encode' no tiene valor. No hay punteros de función reales en PHP, por lo que no es válido PHP para una devolución de llamada. Solo funcionaría si tuviera algo como '$ this-> encode = array (& $ this, 'encode');', que es solo un truco para hacer que este código específico funcione. – cHao

+0

gracias por la autorización cHao. Me ayuda mucho – Fero

+0

Muchas gracias por su ayuda Chao y Fero. – Kaartz

Cuestiones relacionadas