self::在PHP5.2中

self::在PHP5.2中,php,php-5.2,Php,Php 5.2,如何使其与PHP5.2向后兼容?它适用于5.3及更高版本 错误 代码 专用函数utf8\u解码($arr){ 数组_walk_recursive($arr,'self::utf8_dec');//尝试以下方法: array_walk_recursive($arr, array(__CLASS__, 'utf8_dec')); 我也会这样做: private static function utf8_dec(&$value, $key) { // now is static! $

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

错误 代码
专用函数utf8\u解码($arr){
数组_walk_recursive($arr,'self::utf8_dec');//尝试以下方法:

array_walk_recursive($arr, array(__CLASS__, 'utf8_dec'));
我也会这样做:

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

我还建议您看看如何在PHP中定义回调:

您可以直接使用类的名称,而不是
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
关键字。

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

<?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'));
?>

PHP 5.2被视为EOL,不应再使用。请尝试说服您的客户至少升级到5.3或5.4
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);
}
<?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'));
?>