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 に答える