0

如何使它与 PHP5.2 向后兼容?它适用于 5.3 及更高版本

错误

Fatal error: Cannot call method self::utf8_dec() or method does not exist

代码

private function utf8_decode($arr){
    array_walk_recursive($arr, 'self::utf8_dec'); // <----- error

    return $arr;
}

private function utf8_dec(&$value, $key){
    $value = utf8_decode($value);
}
4

3 回答 3

1

试试这个:

array_walk_recursive($arr, array(__CLASS__, 'utf8_dec'));

我也会这样做:

private static function utf8_dec(&$value, $key) { // now is static!
    $value = utf8_decode($value);
}

我还建议看一下如何在 PHP 中定义回调:http: //php.net/manual/en/language.types.callable.php

于 2013-01-14T10:48:07.963 回答
0

代替self,您可以直接使用类的名称。它没有那么灵活,但它应该可以工作。

static private function utf8_decode($arr){
    array_walk_recursive($arr, 'YourClass::utf8_dec');

    return $arr;
}

static private function utf8_dec(&$value, $key){
    $value = utf8_decode($value);
}

您还需要在方法前面加上static关键字。

于 2013-01-14T10:48:08.950 回答
0

它似乎不是类型(静态)的问题,而不是它被称为超出范围。如果您不使用严格模式,它应该可以在没有您说函数是静态的情况下工作。

<?php
class test {
    public function __construct($arr) {
        print_r(self::utf8_decode($arr));
        print_r($this->utf8_decode($arr));

        print_r(self::utf8_decode_v2($arr));
        print_r($this->utf8_decode_v2($arr));
    }
    private static function utf8_decode($arr){
        array_walk_recursive($arr, 'self::utf8_dec'); 
        return $arr;
    }
    private function utf8_decode_v2($arr){
        array_walk_recursive($arr, array($this, 'utf8_dec')); 
        return $arr;
    }


    private function utf8_dec(&$value, $key){
        $value = utf8_decode($value);
    }
}
$a = new test(array('apple','pinaple','nut'));
?>
于 2013-01-14T10:59:23.263 回答