2010-07-28 31 views
10

tôi có phương pháp dưới đây trong một lớp singletonLàm thế nào để sử dụng một phương pháp đối tượng như một hàm callback

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

này hoạt động tốt như một chức năng bình thường

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

khi sử dụng bên trong một lớp học i' m nhận được lỗi dưới đây:

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

Ai cũng có thể giúp tôi khắc phục vấn đề này.

Trả lời

22

Từ 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.

Vì vậy, cố gắng

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

Cảm ơn bạn thân, nó đã hoạt động. – Kaartz

+7

Ngoài ra, phương thức 'mã hóa' phải là [công khai] (http://php.net/manual/en/language.oop5.visibility.php). – Dejv

+1

@Dejv Trên thực tế, tôi đã thử nghiệm nó với một ** phương pháp lớp riêng ** và nó hoạt động hoặc. Tôi đang sử dụng PHP 7.0.13. – sentenza

-4

Thả mã duy nhất từ ​​$ this-> encode.

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

Mong rằng sẽ giải quyết được vấn đề.

+1

'$ this-> encode' không có giá trị. Không có con trỏ hàm thực trong PHP, vì vậy đây không phải là PHP hợp lệ để gọi lại. Nó chỉ hoạt động nếu bạn có một cái gì đó như '$ this-> encode = array (& $ this, 'encode');', mà chỉ là một hack để làm cho mã cụ thể này hoạt động. – cHao

+0

cảm ơn giải phóng mặt bằng cHao. Giúp tôi rất nhiều – Fero

+0

Cảm ơn rất nhiều sự giúp đỡ của bạn Chao và Fero. – Kaartz

Các vấn đề liên quan