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

Функция обратного вызова php в классе

по каким-то причинам наша хостинговая компания использовала PHP 5.2 и даже не предустановила mysqli и PDO.

У меня нет выбора, кроме как переписать часть моего кода, чтобы сделать его совместимым с 5.2.

Итак, вот мой вопрос:

В PHP 5.2 Анонимная функция не поддерживается, поэтому я сделал следующий тест, чтобы убедиться, что я правильно меняю код:

class foo{

    public function toString(){
        $arr = array("a", "b");
        $arr2 = array("c", "d");
        print_r(array_map('mapKeyValue', $arr, $arr2));
    }

    private function mapKeyValue($v, $k){
        return $k."='".$v."'";
    }
}

$foo = new foo();
echo $foo->toString();

но выше сказанное дало бы мне:

Warning: array_map() expects parameter 1 to be a valid callback, function 'mapKeyValue' not found or invalid function name in ....
PHP Warning: array_map() expects parameter 1 to be a valid callback, function 'mapKeyValue' not found or invalid function name in ....

Каков правильный способ:

array_map('mapKeyValue', $arr, $arr2);

внутри класса?

PS: Является ли это достаточной причиной для изменения хостинговой компании, потому что они используют PHP 5.2? (у меня контракт с 7 месяцами слева)

4b9b3361

Ответ 1

Используйте $this и массив как обратный вызов:

array_map( array( $this, 'mapKeyValue'), $arr, $arr2);

И, чтобы быть уверенным, это протестировано с помощью PHP 5.2.17 и подтверждено, что он работает.

Ответ 2

Попробуйте использовать:

print_r(array_map(array($this, "mapKeyValue") , $arr, $arr2));

Вам нужно вызвать функцию, используя $this.

Ответ 3

array_map(array($this, 'mapKeyValue'), $arr, $arr2);

Ответ 4

Убедитесь, что ваш метод обратного вызова общедоступный.

public function mapKeyValue($v, $k){
    return $k."='".$v."'";
}

print_r(array_map(array($this, "mapKeyValue") , $arr, $arr2));