Как использовать метод объекта в качестве функции обратного вызова

Я имею ниже метода в singleton-классе

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

при использовании в классе я добираюсь ниже ошибки:

Предупреждение PHP: array_map (): первым аргументом, '$this-> rfc_encode', должен быть или ПУСТОЙ УКАЗАТЕЛЬ или допустимый обратный вызов

Мог кто-либо помогать мне зафиксировать это.

11
задан Gordon 28 July 2010 в 08:35
поделиться

2 ответа

Из Руководство PHP по обратным вызовам :

Метод созданного объекта передается как массив, содержащий объект с индексом 0 и имя метода с индекс 1.

Попробуйте

return array_map(array($this, 'encode'), $inp);
22
ответ дан 3 December 2019 в 06:44
поделиться

Освободите единый код из $ this-> кодировать .

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

Надеюсь, что это проясняет проблему.

-4
ответ дан 3 December 2019 в 06:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: