Подтвердить что ты не робот

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

У меня есть метод ниже в одноэлементном классе

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', должен либо NULL, либо действительный обратный вызов

Пожалуйста, помогите мне исправить это.

4b9b3361

Ответ 1

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

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

Итак, попробуйте

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

Ответ 2

Отпустите один код из $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 '';
>     } }

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